Python 기초부터 Transformer 딥러닝까지 — 주식투자 데이터 분석을 주제로 단계별로 학습합니다.
python-ml-class/
├── src/ ← 모든 Python 실습 파일
│ ├── korean_font.py ← 한글 폰트 유틸리티 (모든 파일이 공통 사용)
│ ├── NumpyStockArray.py
│ ├── PandasPortfolio.py
│ ├── ... (총 23개)
│
├── docs/ ← 각 소스 파일의 초등학생 수준 설명 문서
│ ├── NumpyStockArray.md
│ ├── PandasPortfolio.md
│ ├── ... (총 23개)
│
├── result/ ← 실행 후 자동 저장되는 PNG + MD 분석 파일
│ ├── NumpyStockArray.png
│ ├── NumpyStockArray.md
│ ├── ... (총 44개)
│
├── requirements.txt ← 필요한 라이브러리 목록
└── Readme.md ← 이 파일
| 항목 | 권장 버전 |
|---|---|
| Python | 3.10 이상 |
| OS | Ubuntu 20.04+ / macOS 12+ / Windows 10+ (WSL2 권장) |
| RAM | 4GB 이상 (딥러닝 파일은 8GB 권장) |
| 인터넷 | yfinance 데이터 다운로드에 필요 |
# 1) 저장소 복제
git clone <repo-url>
cd python-ml-class
# 2) 가상환경 생성 및 활성화
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 3) 라이브러리 설치
pip install --upgrade pip
pip install -r requirements.txt
# 4) 한글 폰트 설치 (Linux/Ubuntu)
sudo apt install fonts-nanum -ycd src
python NumpyStockArray.py실행 후 result/NumpyStockArray.png 파일이 생성됩니다.
아래 순서대로 실습하면 기초 → 중급 → 고급 순으로 체계적으로 학습할 수 있습니다.
| 순서 | 파일 | 주제 | 예상 시간 |
|---|---|---|---|
| 1 | korean_font.py |
한글 폰트 유틸리티 — import 구조 이해 | 10분 |
| 2 | NumpyStockArray.py |
NumPy 배열 연산, 수익률/변동성 계산 | 20분 |
| 3 | PandasPortfolio.py |
Pandas DataFrame, 결측치 처리, groupby | 20분 |
| 4 | YfinanceNormalize.py |
실제 주가 다운로드, Min-Max/Z-점수/로그수익률 | 25분 |
학습 포인트: 브로드캐스팅, 슬라이싱, fillna, 정규화의 필요성
| 순서 | 파일 | 주제 | 예상 시간 |
|---|---|---|---|
| 5 | LinearRegressionFundamental.py |
선형 회귀: PER/PBR/ROE → 기대 수익률 | 25분 |
| 6 | LinearRegressionReturn.py |
선형 회귀: 과거 5일 수익률 → 미래 5일 예측 | 30분 |
| 7 | LogisticTradeSignal.py |
로지스틱 회귀: RSI/MACD → 매수/매도 분류 | 30분 |
학습 포인트: 지도 학습, 오차 함수(MAE/MSE), 결정 경계, 시그모이드
| 순서 | 파일 | 주제 | 예상 시간 |
|---|---|---|---|
| 8 | SvmTradeSignal.py |
SVM 선형 커널: 매매 신호 분류 | 30분 |
| 9 | SvmMarketPhase.py |
SVM RBF 커널: 시장 국면(상승/하락) 분류 | 30분 |
| 10 | KMeansStockCluster.py |
K-Means: 종목 자동 군집화 | 25분 |
| 11 | PcaStockReduce.py |
PCA: 6차원 → 2차원 차원 축소 | 25분 |
| 12 | HyperparamTuning.py |
Grid Search, K-Fold, 과적합/Dropout 실험 | 40분 |
학습 포인트: 마진 최대화, RBF 커널, centroid, 주성분, 교차검증
| 순서 | 파일 | 주제 | 예상 시간 |
|---|---|---|---|
| 13 | TimeSeriesAnalysis.py |
이동평균, 볼린저밴드, ACF/PACF, ADF 정상성 검정 | 35분 |
| 14 | ArimaStockForecast.py |
ARIMA(2,1,2): 1개월 미래 주가 예측 | 35분 |
| 15 | HeatmapRiskMask.py |
히트맵 & 마스킹: 고위험 구간 탐지 | 20분 |
학습 포인트: 정상성, 차분, AR/MA 차수, AIC, 95% 신뢰 구간
| 순서 | 파일 | 주제 | 예상 시간 |
|---|---|---|---|
| 16 | NeuralNetBackprop.py |
NumPy만으로 역전파 직접 구현 | 45분 |
| 17 | RnnBackprop.py |
바닐라 RNN + BPTT 직접 구현 | 45분 |
학습 포인트: 순전파/역전파, 체인룰, BPTT, 기울기 소실
| 순서 | 파일 | 주제 | 예상 시간 |
|---|---|---|---|
| 18 | LstmStockPyTorch.py |
LSTM: 20일 → 다음 날 주가 예측 | 45분 |
| 19 | TimeSeriesWindow.py |
CLI LSTM: 종목·윈도우·기간 자유 설정 | 40분 |
| 20 | CnnTimeSeriesFeature.py |
1D CNN: 수익률 시퀀스 패턴 추출 | 40분 |
| 21 | CnnCandleChart.py |
2D CNN: 캔들차트 이미지 분류 | 45분 |
| 22 | CnnLstmHybrid.py |
CNN + LSTM 하이브리드 | 45분 |
학습 포인트: 셀 상태, 게이트, Conv1d/Conv2d, 슬라이딩 윈도우
| 순서 | 파일 | 주제 | 예상 시간 |
|---|---|---|---|
| 23 | TransformerAttention.py |
Multi-Head Self-Attention: 방향 분류 & Attention 히트맵 | 60분 |
학습 포인트: Q/K/V, Positional Encoding, Attention 가중치 시각화
모든 파일은 src/ 폴더에서 실행합니다.
cd srcpython ArimaStockForecast.py
python CnnCandleChart.py
python HyperparamTuning.py
# ... 파일명만 바꾸면 동일하게 실행TimeSeriesWindow.py — 종목·윈도우·예측기간 설정 가능
# 기본값: GS피앤엘(078935.KS), 윈도우=20일, 예측=5일
python TimeSeriesWindow.py
# 삼성전자, 윈도우 30일, 10일 후 예측
python TimeSeriesWindow.py --ticker 005930.KS --window 30 --horizon 10
# 애플, 미국 주식
python TimeSeriesWindow.py --ticker AAPL --window 20 --horizon 5모든 파일 실행 후 result/ 폴더에 PNG 이미지가 저장됩니다.
ls ../result/ # 생성된 파일 목록 확인각 Python 파일에 대응하는 마크다운 파일이 있습니다.
docs/NumpyStockArray.md ← NumpyStockArray.py 의 코드 설명
docs/LstmStockPyTorch.md ← LstmStockPyTorch.py 의 코드 설명
...
활용 방법:
docs/[파일명].md를 먼저 읽어서 전체 흐름을 파악합니다.- 실제
src/[파일명].py소스를 열어 코드를 확인합니다. - 코드를 직접 실행해
result/폴더에 그래프를 생성합니다. result/[파일명].md를 읽어 결과 해석 방법을 확인합니다.
| 파일 패턴 | 설명 |
|---|---|
[파일명].png |
시각화 결과 이미지 |
[파일명]_078935_KS.png |
GS피앤엘 실제 주가 기반 결과 |
[파일명].md |
그래프 읽는 법 + 모델 해석 가이드 |
1단계 심화
NumpyStockArray.py: 종목을 10개로 늘리고 샤프 비율(평균수익률/변동성)을 계산해보세요.YfinanceNormalize.py: 삼성전자(005930.KS)로 종목을 바꿔서 비교해보세요.
2단계 심화
LinearRegressionReturn.py: lookback 기간을 5일 → 10일로 바꾸면 R²가 개선되는지 확인해보세요.LogisticTradeSignal.py: 임계값(threshold)을 0.5 → 0.6으로 높이면 정밀도가 어떻게 변하는지 관찰해보세요.
3단계 심화
HyperparamTuning.py: C 범위를[0.001, 0.01, 0.1, 1, 10, 100, 1000]으로 넓혀 최적값을 찾아보세요.KMeansStockCluster.py: k=4, k=5로 바꾸면 군집이 어떻게 달라지는지 비교해보세요.
4단계 심화
ArimaStockForecast.py:p=1, q=1과p=3, q=3으로 AIC를 비교해보세요.
5~7단계 심화
LstmStockPyTorch.py:SEQ_LEN=20→SEQ_LEN=60으로 바꿔 성능 변화를 확인해보세요.TimeSeriesWindow.py: 여러 종목(AAPL,005930.KS,078935.KS)을 비교 실험해보세요.TransformerAttention.py:d_model=32, nhead=4로 키워서 Attention 패턴 변화를 관찰해보세요.
<i class="fa-solid fa-circle-check"></i> yfinance 데이터 오류 → 인터넷 연결 및 종목 코드 확인 (KS종목은 .KS 붙이기)
<i class="fa-solid fa-circle-check"></i> 한글 깨짐 → sudo apt install fonts-nanum 후 재실행
<i class="fa-solid fa-circle-check"></i> CUDA 오류 → torch.device('cpu')로 강제 변경
<i class="fa-solid fa-circle-check"></i> ModuleNotFoundError → pip install -r requirements.txt 재실행
<i class="fa-solid fa-circle-check"></i> result/ 폴더 없음 → src/ 폴더 안에서 실행하고 있는지 확인
결론부터 말하자면, 대부분 맞습니다.
머신러닝과 딥러닝의 핵심 목표는 "컴퓨터가 정답과 예측값 사이의 차이(오차)를 최대한 줄이게 만드는 것" 입니다.
쉬운 예시: 과녁 맞히기 처음 화살을 쏘면 과녁 중심에서 멀리 빗나갑니다(오차가 큼). 빗나간 거리를 보고 "조금 더 오른쪽으로, 조금 더 위로" 하며 교정합니다. 여러 번 반복할수록 과녁 중심에 가까워집니다. 머신러닝도 똑같이 틀린 만큼 스스로 교정하며 점점 정확해집니다.
하지만 문제의 종류에 따라 접근 방법이 다릅니다.
- 대상: 선형 회귀, 로지스틱 회귀, 이미지 분류 딥러닝 등
- 원리: 모델이 예측한 값과 실제 정답을 비교해 오차를 줄입니다.
- 손실 함수 (Loss Function): 오차를 숫자로 나타내는 공식입니다.
- 최적화 (Optimization): 오차를 0에 가깝게 줄여나가는 방법입니다.
쉬운 예시: 선생님이 채점해주는 시험 학생(모델)이 시험을 봅니다 → 선생님(정답지)이 채점합니다 → 틀린 문제를 다시 공부합니다. 이 과정을 반복하면 점수(정확도)가 올라갑니다.
주식 예시: "삼성전자 주가가 내일 오를까 내릴까?" 라는 문제를 풀고, 실제 결과와 비교해 계속 교정합니다.
- 대상: 군집화(Clustering), 차원 축소(PCA) 등
- 원리: 정답 없이 데이터 안에서 비슷한 것끼리 묶거나 패턴을 찾습니다.
쉬운 예시: 과일 분류하기 사과, 바나나, 포도가 섞여 있는 바구니에서 아무도 "이게 사과야"라고 알려주지 않아도, 모양·색깔·크기가 비슷한 것끼리 스스로 그룹을 만듭니다.
주식 예시: 수천 개 주식을 "움직임이 비슷한 종목끼리" 자동으로 묶어 분류합니다.
- 대상: 알파고, 자율주행 등
- 원리: 행동할 때마다 점수(보상)를 받고, 점수를 최대로 높이는 전략을 배웁니다.
쉬운 예시: 비디오 게임 게임 캐릭터가 적을 잡으면 +10점, 떨어지면 -5점. 점수를 올리려면 어떻게 움직여야 할지 수천 번 게임을 해보며 스스로 배웁니다.
주식 예시: AI가 "주식을 살 때"와 "팔 때"를 수없이 시도하며, 수익이 나는 전략을 스스로 터득합니다.
정확한 핵심입니다!
딥러닝은 "간단한 계산(선형회귀)을 엄청나게 많이 쌓아 올린 뒤, 앞으로 계산하고(순전파) → 뒤로 고치는(역전파) 과정을 반복" 하는 것입니다.
선형 회귀의 기본 공식:
딥러닝의 최소 단위인 **퍼셉트론(Perceptron)**이 이 공식과 똑같이 작동합니다. 딥러닝은 이 계산 단위를 수천, 수만 개 연결한 거대한 그물망입니다.
쉬운 예시: 레고 블록 쌓기 레고 블록 하나(선형회귀) 혼자는 단순한 모양만 만들 수 있습니다. 하지만 수천 개를 조립하면(딥러닝) 로봇·성·자동차 같은 복잡한 것도 만들 수 있습니다.
비선형 활성화 함수 (Activation Function) 레고 블록만 단순히 쌓으면 결국 직선 모양밖에 안 됩니다. 중간에 ReLU·시그모이드 같은 "꺾는 함수" 를 끼워 넣으면 구불구불한 곡선도 표현할 수 있습니다. 현실 세계의 복잡한 주가 패턴도 이렇게 표현합니다.
- 방향: 입력층 → 은닉층 → 출력층 (앞으로 전진)
- 역할: 입력 데이터를 받아 최종 예측값을 만들고, 정답과 비교해 오차를 계산합니다.
쉬운 예시: 시험 문제 풀기 문제를 읽고(입력) → 생각하고(은닉층) → 답을 씁니다(출력). 채점하면 몇 점 틀렸는지(오차) 알 수 있습니다.
- 방향: 출력층 → 은닉층 → 입력층 (뒤로 후진)
- 역할: 오차를 거꾸로 추적하며 각 계산 단위가 얼마나 틀림에 기여했는지 파악하고, 가중치를 조금씩 수정합니다.
쉬운 예시: 시험 오답 노트 틀린 문제를 다시 보며(역방향) → "어디서 실수했지?" 추적 → 그 부분을 집중 공부(가중치 수정). 이 과정을 반복하면 점점 더 잘 풀게 됩니다.
순전파(문제 풀기)와 역전파(오답 노트)를 수천, 수만 번 반복하면서 최적의 예측 모델이 완성됩니다.
️ 쉬운 예시: 운동 연습 농구 자유투를 처음엔 잘 못 넣습니다. 매일 100번씩 던지고(순전파), 어떻게 틀렸는지 교정하며(역전파) 연습합니다. 수천 번 반복하면 거의 다 넣을 수 있게 됩니다.
| 개념 | 쉬운 비유 |
|---|---|
| 머신러닝 | 틀린 만큼 반성하며 공부하는 학생 |
| 지도 학습 | 정답지가 있는 시험 공부 |
| 비지도 학습 | 정답 없이 비슷한 것끼리 스스로 묶기 |
| 강화 학습 | 점수를 높이려고 게임을 계속 연습하기 |
| 딥러닝 | 레고 블록 수만 개를 쌓은 거대한 계산기 |
| 순전파 | 시험 문제 풀기 |
| 역전파 | 오답 노트 작성 |
| 반복 학습(Epoch) | 매일 꾸준히 연습하기 |
딥러닝은 비선형성이 추가된 선형 회귀들의 거대한 조립품이며, 순전파(문제 풀기)와 역전파(오답 노트)라는 시계추 운동을 반복해 점점 정확해지는 과정입니다.
-
NumpyStockArray.py: 주가 배열, 수익률/변동성 계산, 포트폴리오 기대수익률
예시: "5종목이 8일 동안 어떻게 올랐나?" 를 숫자 배열로 계산합니다.
-
PandasPortfolio.py: 포트폴리오 결측치 처리, 평가금액/수익률 계산, 섹터별 집계
예시: 주식 거래 기록표에서 빠진 데이터를 채우고, 내 수익률을 표로 정리합니다.
-
LinearRegressionReturn.py: 이전 5일 수익률 기반 다음 5일 누적 수익률 예측
예시: "최근 5일이 어떻게 움직였으면 다음 5일이 얼마나 오를까?" 를 직선으로 예측합니다.
-
LinearRegressionFundamental.py: PER/PBR/ROE 기반 기대수익률 예측
예시: 회사의 성적표(PER, PBR, ROE)를 보고 "이 주식이 얼마나 오를지" 예측합니다.
-
LogisticTradeSignal.py: RSI/MACD 기반 매수/매도 신호 확률 분류 (로지스틱 회귀)
예시: "RSI 65, MACD 양수 → 매수 확률 78%" 처럼 확률로 매매 신호를 출력합니다.
-
SvmTradeSignal.py: 모멘텀/거래량 변화율 기반 매수/매도 신호 분류 (SVM)
예시: 두 지표를 보고 "지금 사야 할지, 팔아야 할지" 선 하나로 딱 나눕니다.
-
SvmMarketPhase.py: RSI/MACD/변동성 기반 시장 국면(상승/하락) 분류 (SVM RBF)
예시: 3가지 지표를 보고 "지금 시장이 오르는 중인지 내리는 중인지" 판단합니다.
-
KMeansStockCluster.py: 수익률/변동성 기반 주식 유형 자동 군집화 (K-Means)
예시: 아무도 가르쳐 주지 않아도 60개 종목을 성장주/가치주/방어주로 스스로 분류합니다.
-
PcaStockReduce.py: 6가지 주식 지표를 2차원으로 압축해 시각화 (PCA)
예시: PER·PBR·ROE·변동성 등 6가지 숫자를 딱 2개로 줄여서 그래프에 표시합니다.
- korean_font.py: OS별 한글 폰트 자동 설정 유틸리티
예시: matplotlib 그래프에서 한글 제목/축 라벨이 깨지지 않도록 폰트를 자동으로 지정합니다.
-
TimeSeriesAnalysis.py: 이동평균·볼린저밴드·ACF/PACF·ADF 정상성 검정
예시: 주가의 흐름을 여러 기법으로 분석하고, "이 데이터가 규칙적인가?" 를 수학적으로 확인합니다.
-
ArimaStockForecast.py: ARIMA 모델로 미래 주가 예측 (통계 기반 시계열)
예시: 과거 주가의 패턴과 오차를 수식으로 정리해 1개월 후 주가를 예측합니다.
-
RnnBackprop.py: 바닐라 RNN을 numpy로 직접 구현 (BPTT)
예시: "오늘 주가가 오를까?"를 지난 10일 수익률 흐름을 기억하며 판단합니다.
-
LstmStockPyTorch.py: PyTorch LSTM으로 주가 시계열 예측
예시: 장기 기억(셀 상태)과 단기 기억(은닉 상태)을 분리해 더 정확하게 주가 흐름을 예측합니다.
-
CnnTimeSeriesFeature.py: 1D CNN으로 30일 수익률 시퀀스에서 패턴 자동 추출 & 상승/하락 분류
예시: 연속 3일 수익률이 반복 상승하는 패턴 같은 로컬 특징을 필터가 자동으로 찾습니다.
-
CnnCandleChart.py: matplotlib으로 캔들차트를 32×32 컬러 이미지로 렌더링 후 2D CNN 분류
예시: 캔들차트를 사진처럼 찍어서 "양봉 연속/음봉 반전" 같은 패턴을 이미지로 인식합니다.
-
CnnLstmHybrid.py: CNN이 단기 윈도우 패턴을 벡터로 압축 → LSTM이 시간 순서 학습 (하이브리드)
예시: CNN = 하루 뉴스 요약, LSTM = 주간 흐름 파악. 두 강점을 합쳤습니다.
- TransformerAttention.py: Multi-Head Self-Attention으로 날짜 간 상관관계 학습 & 방향 분류
예시: 책을 읽을 때 중요한 단어에 밑줄 긋듯이, 어느 날 주가가 지금 예측에 중요한지 가중치로 학습합니다.
- HyperparamTuning.py: K-Fold 교차검증, Grid Search, 과적합(C값/Dropout) 실험
예시: 모든 레시피를 다 만들어보고 가장 맛있는 것을 고르듯, 파라미터 조합을 전수 탐색합니다.
- YfinanceNormalize.py: yfinance로 실제 주가 다운로드 → Min-Max / Z-점수 / 로그수익률 비교
예시: 삼성(70,000원)과 AAPL(150달러)를 같은 그래프에 비교하려면 "단위를 통일"해야 합니다.
- TimeSeriesWindow.py: 종목명·윈도우·예측기간·스텝을 입력받아 LSTM으로 예측 (대화형/CLI)
기본값: GS P&L (078935.KS), 20일 윈도우, 5일 후 예측, 스텝=1 CLI:
python TimeSeriesWindow.py --ticker AAPL --window 30 --horizon 5 --step 1
-
NeuralNetBackprop.py: 역전파를 직접 구현한 시계열 주가 예측 (신경망)
예시: 오답 노트(역전파)를 손으로 직접 구현해 과거 5일 주가로 내일을 예측합니다.
-
HeatmapRiskMask.py: 수익률 히트맵에서 고위험 구간 마스킹
예시: 주가 수익률을 색깔 지도로 그리고, 위험한 구간을 강조 표시합니다.
각 파일을 실행하면 result/ 폴더에 이미지가 저장됩니다.
무엇을 보여주나요? 그래프가 분홍색 구역과 파란색 구역으로 나뉘어져 있고, 가운데 대각선이 경계선입니다.
- 빨간 점 = 매수 신호 (사야 할 타이밍)
- 파란 점 = 매도/보류 신호 (팔거나 기다려야 할 타이밍)
- 대각선 경계 = SVM이 찾아낸 "사야 할지 말아야 할지" 기준선
모멘텀이 높고(오른쪽) 거래량 변화율이 높을(위쪽) 수록 매수 신호가 됩니다.
무엇을 보여주나요? 가로축은 RSI(과매수/과매도 지표), 세로축은 MACD(추세 강도 지표)입니다.
- 빨간 점 = 상승장으로 예측된 날
- 파란 점 = 하락장으로 예측된 날
RSI가 높고(60 이상) MACD가 양수일 때 빨간 점이 집중되어 있습니다.
무엇을 보여주나요? 파란 실선(실제 주가)과 주황 점선(예측 주가)을 비교합니다.
신경망은 **전체적인 방향(추세)**은 잘 잡지만, 단기 급등락은 놓칩니다.
| 패널 | 내용 |
|---|---|
| 왼쪽 (원본) | 초록=수익, 빨강=손실로 색칠한 원본 수익률 지도 |
| 가운데 (마스크) | 수익률이 ±2% 초과인 위험 칸만 흰색으로 표시 |
| 오른쪽 (강조) | 위험 칸을 더 진한 색으로 강조 |
- 빨간 점 (성장주) = 수익률 높고 변동성도 높음
- 파란 점 (가치주) = 수익률·변동성 모두 중간
- 초록 점 (방어주) = 수익률 낮지만 변동성도 낮음
- 검정 X = 각 그룹의 중심점(centroid)
- 왼쪽: 각 주성분이 전체 정보의 몇 %를 담고 있는지
- 오른쪽: 6차원 지표를 2차원으로 압축한 산점도 (색깔=수익률)
- 1행: 이동평균(SMA5/20/60) & 볼린저밴드
- 2행: 일간 수익률 (차분 결과)
- 3행: ACF & PACF (ARIMA 차수 결정 힌트)
- 위 패널: 전체 과거 주가 + 22거래일 미래 예측 + 95% 신뢰 구간(분홍 띠)
- 아래 패널: 최근 6개월 확대 + 예측 마커
- 왼쪽: BCE 손실 곡선 (0.693 근처에서 시작 → 기울기 소실 한계)
- 오른쪽: 예측 방향 막대 (금색=정답, 검정=오답)
- 왼쪽: MSE 손실 곡선 (수직 낙하 후 수렴)
- 오른쪽: 실제(파랑) vs LSTM 예측(빨강) 비교
- 초록 배경: 매수 확률이 높은 구역
- 빨간 배경: 매도/관망 확률이 높은 구역
- 학습 손실·정확도 + 예측 확률 막대 + Conv1d 특징 맵 4패널
- 캔들차트 샘플 이미지 6장 + 학습 손실·정확도
- CNN(단기 패턴) → LSTM(시간 흐름) → Linear(분류) 구조
- Self-Attention 히트맵: 모델이 어느 날짜를 참고해 예측하는지 시각화
- Grid Search 히트맵 + C값 과적합 곡선 + Dropout 효과 + K-Fold 결과
- 원본 / Min-Max / Z-점수 / 로그수익률 / 분포 5패널 비교
- 윈도우 샘플 + LSTM 손실 + 예측 vs 실제 + 실행 설정 요약 4패널

















