제 2의 네로 (AI)

머신러닝으로 주식투자하기 - 2편 내가 관여할 수 있는 부분

Dr. 네로 2025. 8. 26. 16:36
반응형

이 글은 닥터 네로가 아닌, 개조된 GPT가 작성했습니다.🐾


📈 주식 예측 머신러닝, 어디서부터 손봐야 할까?

머신러닝(Machine Learning) 모델이 많다는 건 좋지만, 동시에 한 가지 질문을 던지게 만듭니다:

"그 많은 모델 중에서 뭐가 맞는 건데요?"

더 중요한 질문은 이겁니다:

"모델 성능이 안 나올 땐, 도대체 어디를 수정하고 보완해야 하나요?"

이번 글은 이 질문에 집중합니다. 단순히 모델을 나열하는 것이 아니라, 모델 성능 향상을 위한 핵심 수정 포인트를 조목조목 짚어볼게요. 목표는 단 하나:

🎯 주식 데이터를 다룰 때, 어디를 어떻게 손대야 제대로 예측이 되는지를 감 잡는 것.


🧩 1. 피처 엔지니어링: 데이터가 전부다

문제

모델이 아무리 좋아도, 넣어주는 데이터가 형편없으면 결과도 형편없다는 건 ML의 불변 법칙입니다. 특히 주가처럼 노이즈 많은 데이터는 더욱 그렇습니다.

해결 전략

1-1) 기술적 지표(TI) 활용

  • 단순 가격(x) → 가격의 추세와 패턴을 나타내는 지표로 확장
  • 예: 이동 평균(MA), 상대강도지수(RSI), 볼린저 밴드(BB)
data['ma20'] = data['Close'].rolling(20).mean()
data['rsi'] = compute_rsi(data['Close'])

1-2) 시차 피처(Lag Features)

  • 과거 n일 전 가격/지표를 변수로 사용
  • LSTM처럼 시계열 모델이 아니더라도, XGBoost 등에서 매우 유용 (시계열 모델이란 시간에 따라 기록된 데이터를 바탕으로 개발된 모델을 뜻합니다)

1-3) 파생 변수 생성

  • "종가 대비 시가 비율", "전일 대비 상승률" 등 의미 있는 관계를 변수화
  • 고정된 피처보다 더 많은 인사이트 제공

1-4) 카테고리 변수 추가

  • 요일, 월, 분기 정보도 은근히 중요 (주중/월말 효과)

실전 팁

  • 주식 데이터는 대부분 시계열 → 순서가 중요
  • 가격을 바로 넣기보다는 비율, 차이, 평균 등으로 변환해서 넣는 것이 훨씬 강력

🏗️ 2. 모델 선택: 모델보다 중요한 건 그 모델이 잘 맞는가?

문제

사람들은 자꾸 "이 모델이 최고래요" 같은 말에 혹하지만,
현실은 데이터의 구조에 따라 모델 성능이 완전히 달라진다는 것.

해결 전략

2-1) 모델 다양성 실험

  • 선형 모델 (Linear Regression)
  • 앙상블 모델 (Random Forest, XGBoost)
  • 시계열 기반 (ARIMA, LSTM)
  • 각각 전처리와 해석 방식이 다르므로 교차 실험 필수

2-2) 하이퍼파라미터 튜닝

  • GridSearchCV, Optuna 등을 통해 성능 최적화
  • 특히 XGBoost, LightGBM은 learning_rate, max_depth에 매우 민감

2-3) 앙상블 전략

  • 여러 모델의 예측 결과를 평균하거나 가중합
  • 예측력 향상뿐 아니라 안정성 증가 효과도 있음

실전 팁

  • Colab에서 실험할 경우, 런타임 시간과 메모리를 고려해 모델 간소화도 고려
  • 복잡한 딥러닝 모델보다, 가볍고 튜닝된 Tree 모델이 실제로는 더 좋은 경우 많음

🔍 3. 목표값(target) 정의: 뭘 예측하느냐가 전부다

문제

"주가를 예측한다"는 말 자체가 너무 막연해요.

  • 내일 종가? 5일 뒤 종가? 상승/하락 여부? 수익률?

→ 예측 대상을 명확히 설정하지 않으면, 모델도 방황합니다.

해결 전략

3-1) 클래스 문제로 변환

  • 1% 이상 오르면 1, 아니면 0 → 이진 분류 문제로 단순화
  • 정확도 대신 F1 score, AUC 등 정밀한 평가지표 사용

3-2) 멀티타겟 회귀

  • 여러 시점(1일 후, 5일 후, 10일 후)의 가격을 동시에 예측

3-3) 랭킹/순위 예측

  • 어떤 종목이 더 수익이 높을지를 예측하는 전략도 가능

실전 팁

  • 목표값은 투자 전략에 따라 달라져야 함 (트레이딩 vs 가치투자)
  • 정답지(label)의 품질이 전체 성능을 좌우함

🧠 4. 데이터 전처리와 정규화: 모델이 먹기 좋은 데이터 만들기

문제

주가 데이터는 범위가 들쭉날쭉합니다. 10달러짜리 주식과 1,000달러짜리 주식을 비교하려면 스케일링이 필요해요.

해결 전략

4-1) MinMaxScaler, StandardScaler 사용

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
data_scaled = scaler.fit_transform(data)

4-2) 결측값/이상치 처리

  • 단순 평균 대체, 선형 보간, KNN Imputer 등 사용
  • 이상치는 로그 변환이나 클리핑으로 완화

4-3) 샘플 밸런싱

  • 상승/하락 비율이 한쪽으로 치우친 경우, SMOTE 등으로 데이터 균형 맞추기

실전 팁

  • 정규화는 모델별로 효과가 다름 → 딥러닝은 꼭 필요, 트리 기반 모델은 불필요할 수도

🧠 5. 시계열 특화 전략: 시간은 변수 그 자체

문제

머신러닝 대부분은 순서를 고려하지 않습니다. 하지만 주식은 시간의 흐름이 핵심 변수입니다.

해결 전략

5-1) TimeSeriesSplit으로 검증

from sklearn.model_selection import TimeSeriesSplit
tscv = TimeSeriesSplit(n_splits=5)
  • 데이터를 미래 순서대로 나누어 과거 → 미래로 검증 진행

5-2) sliding window 방식 입력 구성

  • LSTM, Transformer 등에는 고정된 윈도우 크기로 입력 데이터 구성

5-3) 상관 피처 제거

  • 자기 상관 높은 피처는 제거 또는 축소 (PCA, VIF 활용)

5-4) 계절성 분석 추가

  • 월말/월초 효과, 주말 전후 효과 등 캘린더 기반 변수 도입

실전 팁

  • 시간 데이터를 단순히 숫자 취급하면 안 됨 → 시간 그 자체가 의미를 갖는다

🔚 마무리하며: 머신러닝은 설계와 튜닝의 싸움이다

많은 사람들이 "어떤 모델을 써야 할까요?"라고 묻습니다.
하지만 현업 기술자들은 이렇게 묻습니다:

"지금 이 데이터에서 어떤 정보가 누락돼 있을까?"
"내 목표에 맞는 구조로 잘 설계된 모델인가?"
"학습은 잘 되고 있지만, 실제 투자에도 쓸 수 있을까?"

정답은 모델 그 자체보다, 그 모델이 '잘 설계된 퍼즐' 속에 들어가 있는지입니다.

모델은 다 갖춰져 있어요.
이제 여러분은 어디를 수정하고, 어디를 보완해야 할지 알게 된 디자이너입니다.
모델을 의심하지 말고, 설계를 점검하세요.

그게 진짜 실전 머신러닝입니다. 😼🧠

반응형