오늘은 준비된 샘플이 아니라 파일을 직접 올려서 실험하는 날입니다.
- 예측 실험실의 업로드 흐름을 익힙니다.
date,company,close,volume열이 왜 필요한지 이해합니다.- 회사별 결과를 카드와 표로 비교하는 연습을 합니다.
CSV는 줄과 칸으로 된 아주 기본 표 파일입니다.
쉽게 말해:
- 세로 제목이
열 - 가로 한 줄이
행
입니다.
| 열 이름 | 쉬운 뜻 |
|---|---|
date |
날짜 |
company |
회사 이름 |
close |
종가 |
volume |
거래량 |
이 4개가 있으면 웹앱이 "언제", "어느 회사", "가격", "거래량"을 읽을 수 있습니다.
| 낱말 | 한자·영어 | 쉬운 뜻 |
|---|---|---|
| CSV | Comma-Separated Values | 쉼표로 칸을 나눈 아주 기본 표 파일. 엑셀 없이도 열 수 있는 가장 단순한 데이터 형식 |
| 종가 | 終價 / closing price | 하루 거래가 끝날 때 마지막으로 거래된 가격. 終(끝 종)+價(가격 가). AI 예측의 핵심 입력값 |
| 거래량 | 去來量 / volume | 하루에 얼마나 많이 사고팔렸는지. 去(갈 거)+來(올 래)+量(양 량). 관심과 거래 활발도의 척도 |
| 상승 확률 | 上昇確率 / probability of rise | 내일 주가가 오를 가능성을 0~1 사이 숫자로 나타낸 값. 上(위 상)+昇(오를 승)+確(확실할 확)+率(비율 률). 카드에 표시되는 AI의 핵심 예측 결과 |
| 특성 | 特性 / feature | 모델이 입력으로 받는 각각의 힌트. 特(특별할 특)+性(성질 성). 수익률·거래량·이동평균처럼 웹앱이 자동으로 만들어 주는 10개 파생 값 |
| 시간 | 할 일 |
|---|---|
| 5분 | 샘플 CSV를 내려받거나 준비한 CSV를 확인합니다. |
| 10분 | 예측 실험실에 파일을 업로드합니다. |
| 10분 | 회사별 카드, 특성 중요도, 모델 성능 탭을 읽습니다. |
- 샘플 CSV 다운로드로 파일을 받거나 준비한 CSV를 엽니다.
- 예측 실험실로 이동합니다.
- 파일 업로드 버튼으로 CSV를 올립니다.
- 모델 하나를 선택하고
예측 실행을 누릅니다. - 회사별 카드에서
상승 확률,정확도,AUC를 봅니다. 10개 특성,특성 중요도,모델 성능탭을 차례대로 확인합니다.
| 순서 | 어디를 볼까 | 왜 볼까 |
|---|---|---|
| 1 | 회사 카드 | 회사마다 결과가 어떻게 다른지 보기 |
| 2 | 10개 특성 | 모델이 먹는 재료 보기 |
| 3 | 특성 중요도 | 어떤 힌트를 중요하게 봤는지 보기 |
| 4 | 모델 성능 | 숫자로 비교하기 |
- 같은 모델이어도 회사마다 중요한 특성이 달랐나요?
- 가장 예측이 쉬워 보인 회사는 어디였나요?
- 가격 관련 힌트와 거래량 관련 힌트 중 어느 쪽이 더 자주 보였나요?
CSV 업로드 실험은 ________를(을) 올리고, 회사별 ________를(을) 비교하는 활동이다.
date,company,close,volume
2026-01-02,삼성전자,74200,12500000
2026-01-03,삼성전자,74800,13200000
2026-01-02,NAVER,211000,320000
2026-01-03,NAVER,214500,410000이 표를 올리면 웹앱은 이렇게 생각합니다.
- 언제 데이터인지:
date - 누구 데이터인지:
company - 가격이 얼마인지:
close - 얼마나 많이 거래됐는지:
volume
- 종목 예시: 삼성전자, NAVER, 현대차
- 기술 지표 예시: MA5, RSI, 거래량 비율
- 거시경제 예시: 금리, 환율, CPI
지금 화면은 기본 4개 열만 받아도 되지만,
머릿속으로는 "나중에는 이런 큰 시장 힌트도 함께 볼 수 있겠구나" 하고 연결해 두면 좋습니다.
flowchart TD
A["CSV 파일 업로드\n(date, company, close, volume)"] --> B["데이터 검증\n열 이름·날짜 형식 확인"]
B --> C["회사별 데이터 분리\n(삼성전자 / NAVER / ...)"]
C --> D["10개 특성 자동 생성\n(수익률·이동평균·RSI·변동성 등)"]
D --> E["정답 레이블 생성\n내일 종가 > 오늘 종가 → 1, 아니면 0"]
E --> F["학습/테스트 분할\n앞 80% 학습, 뒤 20% 테스트"]
F --> G["모델 학습\n(로지스틱·RF·GBM·MLP 중 선택)"]
G --> H["회사별 결과 카드 출력\naccuracy / AUC / 상승 확률 / 특성 중요도"]
flowchart LR
A["특성 10개\n입력"] --> B["로지스틱 회귀\n(선형 결합 + 시그모이드)"]
A --> C["랜덤 포레스트\n(다수 트리 다수결)"]
A --> D["그래디언트 부스팅\n(잔차 순차 보정)"]
A --> E["신경망 MLP\n(은닉층 비선형 변환)"]
B --> F["상승 확률 p₁"]
C --> G["상승 확률 p₂"]
D --> H["상승 확률 p₃"]
E --> I["상승 확률 p₄"]
flowchart TD
LR["선형 회귀\n(1800s)"]
LogR["로지스틱 회귀\n(1958, Cox)"]
DT["의사결정나무\n(1986, Quinlan)"]
RF["랜덤 포레스트\n(2001, Breiman)"]
GB["그래디언트 부스팅\n(1999, Friedman)"]
MLP["신경망 MLP\n(1986, Rumelhart)"]
LR -->|"이진 분류 확장"| LogR
DT -->|"배깅·앙상블"| RF
DT -->|"순차 오차 보정"| GB
LogR -->|"단일 뉴런화\n다층 구조"| MLP
style LR fill:#f5f5f5
style LogR fill:#fff9c4
style DT fill:#fff9c4
style RF fill:#c8e6c9
style GB fill:#c8e6c9
style MLP fill:#d4e6ff
업로드 실험에서는 같은 CSV라도 모델 선택에 따라 해석이 달라집니다.
| 모델 | 수학적 의미 | 탄생 배경 | 주식투자 활용 | 만든 사람/대표 GitHub |
|---|---|---|---|---|
| 로지스틱 회귀 | 선형 점수를 확률로 바꿔 분류합니다. | 간단하고 해석 가능한 확률 분류가 필요해 널리 쓰였습니다. | 회사별 상승확률 비교의 기본 기준선으로 사용하기 좋습니다. | David Cox(현대 통계 정립) · https://github.com/scikit-learn/scikit-learn/blob/main/sklearn/linear_model/_logistic.py |
| 랜덤 포레스트 | 여러 트리의 다수결 앙상블입니다. | 단일 트리 불안정성 보완 목적에서 개발되었습니다. | 업로드된 회사별 데이터에서 중요 특성 비교에 강점이 있습니다. | 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 |
|---|---|---|---|---|---|---|
| 로지스틱 회귀 | 정형 수치·범주 데이터, 이진 레이블 | 재입원 위험·질환 유무 분류, 해석 가능 기준선 | 단순 이진 환경 판단, 설명 중시 상황 | 회사별 상승확률 비교의 기본 기준선 | 이상 유무 이진 판단, 안전 기준선 | 장애 발생 여부 분류, 설명 가능 알림 |
| 랜덤 포레스트 | 정형 수치·범주 데이터, 중간 크기 | 진단 보조, 특성 중요도 기반 임상 지표 해석 | 도로 조건 분류, 다변량 센서 이상 감지 | 업로드된 회사별 데이터 중요 특성 비교 | 다변량 상태 분류, 고장 예측 | 장애 원인 분류, 이슈 우선순위 판단 |
| 그래디언트 부스팅 | 정형 수치·범주 데이터, 대용량 테이블 | 리스크 스코어링, 약물 부작용 예측 | 고정밀 도로 상황 분류, XGBoost 계열 | 회사별 경계 사례(애매한 상승/하락) 구분력 | 정밀 동작 신호 분류, 이상 예측 | SLA 위반 예측, 장애 리스크 스코어링 |
| 신경망(MLP) | 정형 수치 데이터, 중간~대용량 | 복잡한 진단 패턴, 의료 영상 특성 분류 | 비선형 센서 융합, 주행 결정 신호 | 서로 다른 기업의 비선형 반응 패턴 학습 | 복잡한 동작 제어, 다감각 데이터 처리 | 복합 메트릭 이상 탐지, 장애 패턴 인식 |
CSV 업로드로 여러 회사를 한 번에 분석하면, 회사마다 가장 잘 맞는 모델이 다를 수 있습니다.
회사별로 최적 모델을 다르게 선택하는 "맞춤 앙상블" 전략을 써볼 수 있습니다.
| 혼합 방법 | 어떻게 섞나요? | 왜 좋을까요? |
|---|---|---|
| 회사별 최적 모델 선택 | 삼성전자는 랜덤 포레스트, NAVER는 GBM, 현대차는 로지스틱 회귀처럼 각 회사 데이터에서 가장 높은 AUC를 보인 모델을 회사별로 골라 사용 | 모든 회사에 같은 모델을 쓰는 것보다 각자에게 맞는 모델을 쓰면 전체 예측 품질이 높아짐 |
| 4모델 평균 후 회사별 비교 | 4개 모델의 상승 확률을 평균 내어 회사별 "앙상블 상승 확률"을 만들고, 이 확률이 높은 회사에 집중 | 특정 모델 편향 없이 여러 회사를 공정하게 비교 |
| 특성 중요도 기반 교차 학습 | 한 회사에서 중요하게 나온 특성이 다른 회사에도 유효한지 교차 테스트 | 공통으로 중요한 특성을 찾으면 더 범용적인 투자 힌트가 됨 |
- 회사별 AUC 비교 표: 4개 모델 × N개 회사 표를 만들어 어느 회사에 어느 모델이 잘 맞는지 한눈에 봅니다.
- 데이터 크기 영향 확인: 데이터가 많은 회사(예: 삼성전자 3년치)와 적은 회사(예: 신규 상장 6개월치)에서 각 모델의 성능 차이를 비교합니다. 데이터가 적을 때는 단순한 모델이 유리한 경우가 많습니다.
- 특성 중요도 공통성 분석: 여러 회사에서 공통으로 상위에 등장하는 특성이 "범용 힌트"입니다.
- 미래 기간 hold-out 검증: 업로드한 CSV의 마지막 20%는 완전히 따로 두고, 80% 기간만으로 학습한 뒤 20% 구간에서 검증합니다.
아주 쉽게 말하면: 삼성전자와 작은 바이오 회사는 움직임이 많이 다릅니다.
똑같은 모델을 쓰기보다 각 회사 성격에 맞는 모델을 고르는 것이 더 현실적인 투자 전략입니다.
GET /api/stock/sample-csv: 샘플 CSV 다운로드POST /api/stock/predict-target: 업로드한 CSV 분석
datecompanyclosevolume
f1_daily_return, f2_return_5d, f3_ma5_ratio, f4_ma20_ratio, f5_vol_ratio, f6_rsi, f7_volatility, f8_golden_cross, f9_momentum_20d, f10_vol_change
응답은 회사 이름별로 묶여서 내려옵니다.
accuracyaucpred_probpred_labelfeature_importance
그래서 예측 실험실은 “파일 1개 업로드 → 회사별 카드 여러 개 비교” 흐름으로 설계되어 있습니다.