오늘은 정확도 숫자만 보고 기뻐하지 않는 연습을 합니다. 예측 점수와 실전 결과를 같이 읽는 날입니다.
accuracy,AUC,precision같은 평가 지표를 다시 읽습니다.- 백테스트 곡선이 왜 중요한지 이해합니다.
- "좋은 분류기"와 "좋은 전략"이 완전히 같지 않을 수 있음을 느낍니다.
상승 예측 정확도가 높은 모델이 실제 투자 곡선도 꼭 좋은 것은 아닙니다.
모델도 비슷합니다.
- 점수는 좋아도
- 실제 전략처럼 돌려 보면 흔들릴 수 있습니다
그래서 우리는
- 예측 점수
- 실전 곡선
을 같이 봅니다.
| 낱말 | 한자·영어 | 쉬운 뜻 |
|---|---|---|
| accuracy | 正確度 / accuracy | 전체 중 맞힌 비율. 正(바를 정)+確(확실할 확)+度(정도 도). 예측이 얼마나 많이 맞았는지 보는 지표 |
| precision | 精密度 / precision | 오른다고 했을 때 진짜 오른 비율. 精(정밀할 정)+密(빽빽할 밀)+度(정도 도). 헛된 매수 신호를 줄이려면 높아야 함 |
| AUC | Area Under Curve | 전반적으로 잘 구분하는지 보는 점수. 0.5=찍기 수준, 1.0=완벽 구분. 상승/하락을 얼마나 잘 가리는지의 종합 지표 |
| 백테스트 | backtest | 과거 데이터로 전략처럼 돌려보기. "이 전략을 2020년부터 썼으면 얼마나 벌었을까?"를 시뮬레이션 |
| 낙폭 | 落幅 / drawdown | 한 번 오른 뒤 얼마나 크게 내려왔는지. 落(떨어질 락)+幅(폭 폭). 전략이 가장 많이 손실을 봤을 때의 크기 |
| 은닉층 | 隱匿層 / hidden layer | 입력층과 출력층 사이의 중간 계산 층. 隱(숨을 은)+匿(숨길 닉)+層(층 층). 신경망(MLP)이 복잡한 비선형 패턴을 학습하는 핵심 영역 |
| 상승 확률 | 上昇確率 / probability of rise | 내일 주가가 오를 가능성을 0~1 사이 숫자로 나타낸 값. 上(위 상)+昇(오를 승)+確(확실할 확)+率(비율 률). "상승 확률 55% 이상일 때 매수"처럼 전략 신호의 기준으로 사용 |
| 시간 | 할 일 |
|---|---|
| 10분 | 주식 AI 실험실에서 모델 하나를 실행하고 지표를 기록합니다. |
| 10분 | 호텔-주가 실험실에서 곡선과 신호를 봅니다. |
| 5분 | 점수와 곡선 느낌이 같은지 비교합니다. |
- 주식 AI 실험실에서
랜덤 포레스트같은 모델 하나를 실행합니다. accuracy,AUC,precision을 메모합니다.- 호텔-주가 실험실로 이동합니다.
- 상단 카드, 곡선, 신호표를 확인합니다.
- 숫자는 괜찮은데 곡선이 너무 흔들리는지, 또는 점수는 평범한데 곡선은 괜찮은지 비교합니다.
| 보는 것 | 의미 |
|---|---|
| 평가 지표 | 모델 예측 점수 |
| 포트폴리오 곡선 | 전략이 실제로 움직인 느낌 |
| 낙폭 | 중간에 얼마나 힘들었는지 |
| 누적 수익률 | 끝까지 갔을 때 남은 결과 |
- 점수가 좋은데 곡선이 불편한 경우가 있었나요?
- 최종 수익만 같아도 중간 흔들림이 다르면 느낌이 달랐나요?
- 실전에서는 어떤 숫자를 하나만 보고 싶지 않나요?
좋은 주식 예측 모델을 고를 때 나는 예측 점수뿐 아니라 ________도 함께 본다.
어떤 모델이 현대차 방향을 잘 맞혔다고 해도, 큰 하락장에서 한 번 크게 틀리면 투자 곡선은 많이 흔들릴 수 있습니다.
골든크로스가 자주 잘 맞았어도,
횡보장에서 가짜 신호가 많으면 실제 수익은 별로일 수 있습니다.
CPI 발표, 금리 결정, 환율 급등 같은 날은
평소에 잘 맞던 모델도 갑자기 크게 틀릴 수 있습니다.
그래서 우리는 이렇게 함께 봅니다.
- 예측 점수: 시험 점수
- 백테스트 곡선: 실제 운동 경기 결과
둘 다 봐야 "정말 쓸 만한가?"를 더 잘 알 수 있습니다.
내일은 호텔 예약률과 주가를 함께 보는 멀티모델 실험실로 갑니다.
여러 힌트를 한 화면에서 읽는 법을 연습합니다.
➡️ 다음 문서: Day 11. 호텔-주가 멀티모델 실험실
flowchart TD
A["학습 데이터\n(시계열 순서 유지)"] --> B["부트스트랩 샘플링"]
B --> C["다수 의사결정나무 학습"]
C --> D["다수결 투표\n상승 확률 추정"]
D --> E["임계값 적용\n매수/관망 신호 생성"]
E --> F["백테스트 시뮬레이션\n전략 수익 곡선 계산"]
flowchart TD
A["학습 데이터"] --> B["초기 예측 f₀"]
B --> C["잔차 계산\nr = y − f_{m-1}"]
C --> D["약한 트리 hₘ 학습"]
D --> E["fₘ = f_{m-1} + η·hₘ"]
E --> F{M번 반복?}
F -- 아니오 --> C
F -- 예 --> G["최종 예측 모델"]
G --> H["백테스트 검증\n과최적화 여부 확인"]
flowchart TD
A["입력 특성"] --> B["은닉층 비선형 변환\nReLU / sigmoid"]
B --> C["출력층\n상승 확률 ŷ"]
C --> D["손실 계산 + 역전파\n가중치 업데이트"]
D --> A
C --> E{학습 완료?}
E -- 예 --> F["예측 결과 출력"]
F --> G["백테스트\n낙폭·누적 수익률 확인"]
flowchart TD
A["학습된 모델"] --> B["테스트 기간 예측\n상승 확률 계산"]
B --> C{"상승 확률\n≥ 임계값?"}
C -- 예 --> D["매수 신호\n수익률 반영"]
C -- 아니오 --> E["관망\n수익률 0%"]
D --> F["누적 전략 수익 계산"]
E --> F
F --> G["Buy & Hold 수익률과 비교"]
G --> H["최대 낙폭(MDD)·샤프 비율 계산"]
flowchart TD
DT["의사결정나무\n(1960~1986, Quinlan·Breiman)"]
RF["랜덤 포레스트\n(2001, Breiman)"]
AdaBoost["AdaBoost\n(1995, Freund·Schapire)"]
GB["그래디언트 부스팅\n(1999, Friedman)"]
XGB["XGBoost·LightGBM\n(2014~2016)"]
MLP["신경망 MLP\n(1986, Rumelhart)"]
DT -->|"배깅: 병렬 앙상블"| RF
DT -->|"부스팅: 오류 샘플 가중치"| AdaBoost
AdaBoost -->|"경사하강법으로 일반화"| GB
GB -->|"병렬화·정규화 강화"| XGB
DT -->|"다층 비선형 확장"| MLP
style DT fill:#fff9c4
style RF fill:#c8e6c9
style AdaBoost fill:#d4e6ff
style GB fill:#c8e6c9
style XGB fill:#e1bee7
style MLP fill:#d4e6ff
백테스트를 읽을 때는 모델 구조 자체도 함께 이해하면 해석이 더 정확해집니다.
| 모델 | 수학적 의미 | 탄생 배경 | 주식투자 활용 | 만든 사람/대표 GitHub |
|---|---|---|---|---|
| 랜덤 포레스트 | 배깅된 트리 앙상블로 분류 확률을 추정합니다. | 과적합 완화와 안정적 일반화 목적에서 등장했습니다. | 비교적 안정적인 신호를 내는 경향이 있어 백테스트 기준 모델로 자주 사용됩니다. | Leo Breiman · https://github.com/scikit-learn/scikit-learn/blob/main/sklearn/ensemble/_forest.py |
| 그래디언트 부스팅 | 손실 기울기를 따라 약분류기를 순차 합성합니다. | 정교한 결정경계 학습 요구에서 성능 중심 모델로 자리잡았습니다. | 높은 적합력으로 점수 개선에 유리하지만, 과최적화 여부를 백테스트로 확인해야 합니다. | Jerome Friedman · https://github.com/scikit-learn/scikit-learn/blob/main/sklearn/ensemble/_gb.py |
| 신경망(MLP) | 비선형 은닉층을 통해 복합 특징을 학습합니다. | 복잡한 함수 근사가 필요한 문제에서 다층 구조가 확산되었습니다. | 점수는 높아도 변동성이 클 수 있어 낙폭/곡선 안정성 해석이 중요합니다. | Rumelhart, Hinton, Williams · https://github.com/scikit-learn/scikit-learn/blob/main/sklearn/neural_network/_multilayer_perceptron.py |
| 모델 | 데이터셋 형태 | 헬스케어 | 자율주행 | 주식투자 | 로봇 | AI Ops |
|---|---|---|---|---|---|---|
| 랜덤 포레스트 | 정형 수치·범주 데이터, 중간 크기 | 진단 보조, 특성 중요도 기반 임상 지표 해석 | 도로 조건 분류, 다변량 센서 이상 감지 | 안정적 신호·백테스트 기준 모델로 자주 사용 | 다변량 상태 분류·고장 예측, 특성 해석 | 장애 원인 분류, 이슈 우선순위·이상 감지 |
| 그래디언트 부스팅 | 정형 수치·범주 데이터, 대용량 테이블 | 리스크 스코어링, 약물 부작용 예측, 고정밀 분류 | 고정밀 도로 상황 분류, 차선 변경 예측 | 점수 개선 강력하나 과최적화 백테스트 확인 필요 | 정밀 동작 제어 신호 분류, 이상 예측 | SLA 위반 예측, 장애 리스크 스코어링 |
| 신경망(MLP) | 정형 수치 데이터, 중간~대용량 | 복잡한 진단 패턴, 의료 영상 특성 분류 | 비선형 센서 융합, 주행 결정 신호 생성 | 점수는 높아도 변동성 클 수 있어 낙폭 확인 필요 | 복잡한 동작 제어, 다감각 데이터 처리 | 복합 메트릭 이상 탐지, 장애 패턴 인식 |
평가 지표와 백테스트를 함께 보는 오늘은, 점수와 실전 결과를 모두 고려한 앙상블을 만들기 딱 좋은 날입니다.
"점수가 좋은 모델"과 "백테스트 곡선이 안정적인 모델"이 다를 때 어떻게 섞을지가 핵심입니다.
| 혼합 방법 | 어떻게 섞나요? | 왜 좋을까요? |
|---|---|---|
| AUC 가중 앙상블 | 각 모델의 AUC 점수를 가중치로 삼아 상승 확률을 가중 평균 냄. AUC가 0.7인 모델은 0.6인 모델보다 가중치를 높게 줌 | 잘하는 모델의 의견이 더 많이 반영되어 전체 앙상블 품질이 높아짐 |
| 낙폭 최소화 앙상블 | 백테스트에서 최대 낙폭이 작은 모델에 더 높은 가중치를 부여 | 점수가 조금 낮아도 투자 손실 위험이 작은 모델을 선호하는 실전 관점 |
| 계절성 적응 앙상블 | 상승장에서는 성능이 좋았던 모델의 비중을 높이고, 하락장에서는 낙폭이 작았던 모델의 비중을 높이는 동적 가중치 방식 | 시장 국면에 따라 강한 모델을 자동으로 선택 |
- 샤프 비율 비교:
(전략 평균 수익률) / (전략 수익률 표준편차)값을 모델별로 비교합니다. 샤프 비율이 높을수록 위험 대비 수익이 좋은 전략입니다. - 최대 낙폭(MDD) 비교: 각 모델과 앙상블 전략의 최대 낙폭을 비교합니다. 앙상블이 단일 모델보다 낙폭을 줄였는지 확인합니다.
- 바이앤드홀드 대비 초과 수익: 모델 전략 수익률에서 "그냥 보유" 수익률을 뺀 값이 양수인지 확인합니다. 모델 쓸 가치가 있는지 보는 기본 기준입니다.
- 시기별 구간 분석: 금리 인상기, 하락장, 횡보장 구간을 따로 나눠 각 구간에서 모델과 앙상블의 성능을 비교합니다. 어느 모델이 어느 환경에서 강한지 파악합니다.
아주 쉽게 말하면: 시험 점수만 높고 실제 경기를 못 하는 선수보다, 점수는 조금 낮아도 실전에서 흔들리지 않는 선수가 더 믿음직합니다.
앙상블은 두 가지 장점을 모두 살리는 방법입니다.
주식 AI 실험실의 POST /api/stock/analyze 는 분류 점수만 주는 것이 아니라 아래 값도 같이 돌려줍니다.
accuracy,auc,precisionportfolio,buyholdportfolio_return,buyhold_returnsignals
기본 아이디어는 상승 확률이 55% 이상일 때만 매수처럼 신호를 만들어 전략 곡선을 그려 보는 것입니다.
POST /api/hotel-stock/train 은 아래를 추가로 보여줍니다.
- 혼동 행렬
- 상위 특성 10개
- 예측 신호 표
- 월별 계절성 요약
혼동 행렬을 읽을 때는 TP, FP, TN, FN 이 각각 어떤 종류의 맞힘/틀림인지 같이 보는 것이 중요합니다.
이제는 점수표를 넘어서, "이 전략을 실제로 굴렸다면 어땠을까?" 를 더 체계적으로 보는 단계입니다.
- 공통 특성 만들기
- 시간 순서를 지켜 학습/테스트 분리하기
- 모델별 상승 확률 구하기
- 확률 기준으로 매수·관망 신호 만들기
- 전략 곡선과
Buy & Hold를 비교하기 MDD,Sharpe Ratio, 승률로 다시 읽기
| 지표 | 의미 | 초급자 해석 |
|---|---|---|
| 전략 수익률 | 모델 신호대로 거래했을 때 최종 결과 | 끝나고 얼마가 남았는가 |
| MDD | 가장 아픈 구간의 최대 손실 | 중간에 얼마나 버티기 힘들었는가 |
| Sharpe Ratio | 위험 대비 수익 효율 | 같은 수익이면 덜 흔들리는 쪽이 유리 |
| 승률 | 매수 신호가 맞은 비율 | 자주 맞히는 편인가 |
- 랜덤 포레스트: 빠르고 안정적인 기준선
- LSTM 스타일: 시계열 흐름을 더 직접 반영
- Transformer 스타일: 중요한 날짜를 골라 복잡한 패턴 해석
- 학습 구간 Sharpe는 높은데 테스트 구간 Sharpe가 크게 떨어지면 주의합니다.
- 학습 수익률만 좋고 테스트 곡선이 약하면 "외운 것"일 수 있습니다.
- 한 종목에서만 잘 된 전략인지, 여러 종목에서도 비슷한지 확인합니다.
- 삼성전자 하나로 기준 백테스트를 먼저 만듭니다.
- 같은 특성으로 SK하이닉스, 카카오까지 넓혀 봅니다.
- 종목별 신호를 만든 뒤 동일 비중 포트폴리오 수익률을 계산합니다.
전략 수익률,MDD,Sharpe Ratio를 함께 적어 비교합니다.
| 챕터 | 주제 | 실행 방법 |
|---|---|---|
| chapter106 | 백테스트 기초 | cd chapters/chapter106 && python practice.py |
| chapter110 | 시계열 종합 실전 | cd chapters/chapter110 && python practice.py |
- 점수는 조금 낮아도 곡선이 더 안정적인 모델이 있나요?
Buy & Hold보다 조금 더 나은 정도인지, 구조적으로 더 좋은 전략인지 구분할 수 있나요?- 테스트 구간이 바뀌어도 비슷한 결론이 나오는지 확인했나요?