반응형

"AI로 주가를 예측할 수 있을까?"

이 질문 하나로 시작된 저의 작은 프로젝트가 막을 내렸습니다. 파이썬 코드를 한 줄씩 짜고, 수많은 데이터를 들여다보며 밤을 새우던 날들. 언젠가는 나만의 '알파고'를 만들어 시장을 이겨보리라 다짐했지만, 마주한 결과는 처참하면서도 동시에 많은 것을 가르쳐주었습니다.

이 글은 저의 단순한 실패담이 아닙니다. 데이터 수집부터 모델링, 그리고 결과 해석까지, 제가 밟아온 모든 과정을 상세히 기록한 기술 회고록입니다. AI 주가 예측에 도전하는 모든 분들께 구체적인 방법론과 현실적인 조언을 드리고자 합니다.

1. 방법론 상세: AI는 어떻게 시장을 학습하는가?

성공적인 모델링을 위해서는 데이터를 'AI가 이해할 수 있는 언어'로 번역하는 과정이 필수적입니다. 저는 이 과정을 크게 4단계로 나누어 진행했습니다.

1단계: 데이터 수집 및 정제 (Data Collection)

모든 분석의 시작은 신뢰할 수 있는 데이터 확보입니다.

  • 사용한 라이브러리: pykrx
  • 수집 데이터: 국내 주식 시장의 약 10년 치 일별 데이터(OHLCV). 즉, 시가(Open), 고가(High), 저가(Low), 종가(Close), 거래량(Volume)을 수집했습니다.
  • 정제 과정: 거래가 없었던 날(거래정지 등)이나 데이터에 오류가 있는 부분을 제거하여 데이터의 일관성을 확보했습니다.

한국주식 10년치 데이터 수집

2단계: 피처 엔지니어링 (Feature Engineering) - AI의 '눈' 만들기

AI는 원본 숫자(raw data)를 그대로 보고 의미를 파악하지 못합니다. 우리는 AI에게 시장을 볼 수 있는 '다양한 관점의 눈(특성, Feature)'을 만들어 주어야 합니다. 저는 기술적 분석에서 널리 쓰이는 14개의 지표를 특성으로 가공했습니다.

  • 추세 지표 (Trend Indicators): 주가의 전반적인 방향성을 알려줍니다.
    • pos_ema{20, 40, 100, 200}: 현재 종가가 각 기간(20일, 40일 등)의 지수이동평균(EMA) 대비 얼마나 위에 있는지 비율로 나타냅니다. 1보다 크면 상승 추세, 작으면 하락 추세로 해석할 수 있습니다.
  • 모멘텀 지표 (Momentum Indicators): 추세의 가속도, 즉 힘의 세기를 측정합니다.
    • macd, macd_signal, macd_osc: MACD는 단기 이평선과 장기 이평선의 차이를 이용해 추세의 힘과 전환 시점을 포착하는 대표적인 지표입니다.
    • rsi: RSI(상대강도지수)는 일정 기간 동안의 주가 상승폭과 하락폭을 비교해 현재 추세가 과매수 상태인지 과매도 상태인지를 알려줍니다.
  • 변동성 지표 (Volatility Indicators): 시장의 '위험성', 즉 가격 변동폭의 크기를 알려줍니다.
    • bb_width: 볼린저 밴드의 상단선과 하단선의 폭을 나타냅니다. 폭이 넓어지면 변동성이 커지고, 좁아지면 수축 국면임을 의미합니다.
    • pos_bb: 현재 종가가 볼린저 밴드의 어느 위치(0~1 사이)에 있는지를 나타냅니다.
  • 기타 정보 (Other Features):
    • shape_{open, high, low}: 당일의 캔들 모양 정보를 담기 위해 종가 대비 시가, 고가, 저가의 비율을 계산했습니다. (e.g., 장대양봉, 윗꼬리 등)
    • vol_osc: 단기 거래량 이동평균과 장기 거래량 이동평균의 차이를 통해 거래량의 추세 변화를 포착하려 했습니다.

이 14개의 '눈'을 통해 AI는 매일매일의 시장 상황을 다각도로 분석하게 됩니다.

3단계: 데이터셋 구축 (Dataset Construction) - 시계열 문제를 지도학습 문제로

AI 모델(XGBoost)에 넣기 위해, 시계열 데이터를 '문제지(X)'와 '정답지(y)' 형태의 지도학습(Supervised Learning) 데이터셋으로 변환해야 합니다. 저는 슬라이딩 윈도우(Sliding Window) 기법을 사용했습니다.

  • 문제지 (Input, X): 과거 연속 95일 동안의 데이터 조각을 하나의 문제로 정의했습니다. 각 날은 위에서 만든 14개의 특성값을 가집니다. 따라서 하나의 문제(X)는 95일 x 14개 특성 크기의 2차원 배열이 되며, 이를 모델에 넣기 위해 1330개 (95 * 14)의 길이를 가진 1차원 벡터로 쭉 펼쳐줍니다.
  • 정답지 (Target, y): 해당 95일이 끝난 시점으로부터, 미래 5일 동안의 실제 종가 수익률(%)을 정답으로 설정했습니다. 즉, 모델은 1330개의 숫자를 보고 미래 5개의 숫자를 예측해야 합니다.

이 과정을 전체 데이터에 대해 하루씩 이동(sliding)하면서 반복하면, 수많은 (X, y) 쌍으로 이루어진 거대한 학습 데이터셋이 만들어집니다.

4단계: 모델링 및 학습 (Modeling & Training)

이제 준비된 데이터셋으로 AI를 학습시킬 차례입니다.

  • 모델 선택: XGBoost. 정확히는 MultiOutputRegressorXGBRegressor를 감싸서 사용했습니다. XGBoost는 뛰어난 성능과 속도로 정평이 나 있고, MultiOutputRegressor는 한 번의 예측으로 여러 개의 값(우리의 경우 5일치 수익률)을 동시에 출력할 수 있게 해줍니다.
  • 학습 과정: 모델은 수만 개의 '문제지(X)'와 '정답지(y)'를 보면서, 문제와 정답 사이의 복잡한 관계(패턴)를 스스로 학습합니다. 이 과정에서 모델은 예측값과 실제 정답의 오차(Error)를 최소화하는 방향으로 내부 파라미터를 끊임없이 업데이트합니다.

주가 예측 결과(삼성전자)

2. 마주한 현실: 차가운 결과 분석

모든 과정을 거쳐 얻은 결과는 냉정했습니다.

  • R² 점수 = 0.07: 앞서 말했듯, 제 모델은 미래 주가 변동성의 **7%**밖에 설명하지 못했습니다. 이는 통계적으로 거의 무의미한 수준입니다.
  • 예측값의 군집 현상: 예측된 5일치 주가는 어떤 의미 있는 추세를 형성하기보다, 마지막 날 종가 근처에 옹기종기 모여있었습니다.

(실제 프로젝트 결과와 유사한 가상 이미지입니다)

이 현상은 모델이 학습을 통해 "미래를 예측하는 가장 안전하고 오차가 적은 방법은, 그냥 오늘의 가격을 그대로 예측하는 것"이라는 통계적 사실을 간파했기 때문입니다. 즉, AI는 신이 되기보다 가장 보수적인 통계학자가 되는 길을 택한 것입니다.

3. 실패 속에서 얻은 진짜 깨달음

이번 프로젝트는 기술적인 성공은 아니었지만, 더 깊은 통찰을 주었습니다.

  1. 시장의 무작위성: 금융 시장은 우리가 생각하는 것 이상으로 **'랜덤 워크(Random Walk)'**에 가깝습니다. 즉, 과거의 기술적 지표만으로는 미래를 예측하는 데 명백한 한계가 존재합니다. 제가 만든 14개의 정교한 특성들보다 '어제의 종가'라는 단 하나의 정보가 더 강력했던 셈입니다.
  2. 새로운 데이터의 필요성: 이 한계를 극복하려면 완전히 다른 차원의 데이터가 필요하다는 결론에 이르렀습니다. 예를 들면, 특정 종목에 대한 뉴스 기사의 긍정/부정 텍스트 데이터(자연어 처리), 기관 투자자나 외국인의 수급 데이터, 혹은 해당 산업의 거시 경제 지표 등을 결합해야만 저 93%의 '소음' 속에서 의미 있는 신호를 더 찾아낼 수 있을 것입니다.

4. 마치며: 수정구는 없었다

결론적으로, 제가 만든 AI는 미래를 보는 수정구가 아니었습니다. 오히려 이번 프로젝트를 통해 AI가 얼마나 통계와 확률에 기반해 움직이는지, 그리고 금융 시장이 얼마나 예측하기 어려운 곳인지를 온몸으로 배우는 소중한 경험이 되었습니다.

비록 처참한 결과였지만, 저는 좌절하지 않으려 합니다. 데이터 전처리부터 피처 엔지니어링, 모델링, 결과 해석까지 A to Z를 직접 경험한 것은 그 무엇과도 바꿀 수 없는 자산이 되었습니다. 이제 저는 '어떻게 하면 수익을 낼까?'가 아닌, '저 93%의 소음 속에서 의미 있는 7%의 신호를 어떻게 더 명확하게 분리해낼 수 있을까?'라는 새로운 질문을 가지고 다시 도전해볼 생각입니다.

혹시 AI 주가 예측에 대한 환상을 가지고 계셨다면, 저의 이 실패기가 조금이나마 현실적인 가이드가 되었으면 좋겠습니다. 이 길은 생각보다 훨씬 더 어렵고, 정교하며, 깊은 고민을 요구하는 길입니다.

 

종목 자동 분석 코드 가 궁금하다면?

2025.05.29 - [재테크/주식] - [한국증시] 종목 자동 분석 툴 python 코드 대공개!!!

 

[한국증시] 종목 자동 분석 툴 python 코드 대공개!!!

안녕하세요!!!!! 늘, 기관/외국인들한테 털려온 지난날을 생각해보면..... 너무 슬프네요이제 Ai가 발전한 만큼, 간단한 분석 툴을 제작하는게 굉장히 쉬워졌습니다.해당 툴은 개인이 알맞게 커스

sucksa-himdleall.tistory.com

 

반응형

+ Recent posts