관련 Kaggle 링크: Limitation of predicting stock market price

때는 2021년 여름 저는 알고리즘에 의한 퀀트 투자 봇을 구현하여 가상화폐 거래에 적용해본 적이 있습니다. 투자 봇에 대한 환상과는 다르게 확실한 수익을 보장하지는 못했습니다. 동일한 시기에 저는 머신러닝에 많은 관심을 가지고 있었고, 머신러닝 학습 모델을 투자 전략에 활용할 수 있을까 하는 호기심을 가지게 되었습니다.

image1
구글에 "ai stock market prediction"로 검색한 결과

구글에 검색만 해도 주식시장을 상당히 정확하게 예측을 하는 듯한 그래프들을 볼 수 있습니다. 저는 이 그래프들을 보고 투자 알고리즘에 적용하는 것에 대한 기대와 동시에 저 예측모델의 신빈성에 의심을 가졌습니다. 제가 자주 인용하는 말인 'Too Good To Be True'에 상당히 부합하는 상황이기 때문입니다. 주식시장은 수많은 외부요인에 의해 영향을 받는데 과거의 주가 데이터만 가지고 저정도 수준의 예측이 가능하다는 것은 상상하기 어려웠습니다. 따라서 저는 이를 직접 파헤쳐 보기로 했습니다.

주가 예측 모델 분석

Kaggle

저는 주가 예측 모델을 찾기 위해 데이터분석 플렛폼으로 유명한 Kaggle을 찾아갔습니다. 주식시장 예측을 키워드로 검색했을때 위의 그래프와 비슷한 결과를 보여주는 notebook을 쉽게 찾을 수 있었습니다. 그중 저는 upvote를 가장 많이 받은 notebook을 선택하여 소스코드를 분석하였고, 그 결과 저의 의심이 옳았다는 결론을 내렸습니다. 따라서 개발중이던 투자 봇에 적용할 생각을 접고, 대신 이 예측모델의 신빈성을 평가하는 notebook을 작성해서 Kaggle에 올려보겠다는 생각을 하게 됩니다.

image2
IBM 주가 예측 모델

저는 해당 모델을 IBM 주가 데이터에 적용하였습니다. 어느 한 시점 (파란색 선이 노란색과 초록색 선으로 갈리는 시점) 을 현재라고 가정하고 과거의 데이터로 학습하여 미래를 예측하는 형태입니다. 과거 데이터를 Training Set으로 두고 미래 데이터를 Test Set으로 두며, Test Set을 예측한 값이 Prediction이 됩니다. Long Short-Term Memory (LSTM) 모델이 사용되었고, 이를 통해 60일의 데이터로 그 다음날을 예측합니다.

위와 같이 시각화했을때 상당히 정확하게 예측하는듯해 보이지만 여기에는 상당히 큰 결함이 있습니다. 우리가 미래로 가정한 시기의 데이터, 즉 Test Set은 아직 존재하지 않는다는 가정을 해야합니다. 예측 과정에서 Test Set이 사용되어서는 안된다는 의미죠. 그러나 해당 모델은 Test Set을 사용하여 예측을 하고 있습니다.

좀 더 자세히 설명하자면, 현 시점에서 1일차 예측에는 과거 60일의 데이터가 사용됩니다. 2일차 예측에는 1일차 데이터 + 과거 59일의 데이터가 사용됩니다. 바로 이때 1일차 데이터를 바로 전에 예측한 값이 아닌 Test Set에서 가져오고 있었다는 겁니다. 결국 저 그래프는 미래의 주가 변동을 정확하게 예측하는 듯 하지만 사실 하루밖에 예측하지 못하는 모델인겁니다. 눈속임이나 다름이 없죠.

다른 예시를 하나 들겠습니다. 저는 어느 한 시점에서 그 날의 주가와 다음날의 주가는 같다고 예측을 하겠습니다. 이 예측을 시각화하면 어떻게 나올까요? 실제 주가를 나타내는 크래프에서 모든 점을 한칸 오른쪽으로만 옮기면 됩니다. 그래놓고 이걸 그래프 상으로 예측이라고 해놓으면 그럴 듯해 보입니다. 엉터리 예측을 시각적으로 보기 좋게 만들 수 있다는 거죠.

예측 모델 재해석

이 모델을 다양한 관점에서 검증하기 위해 저는 두 가지 접근 방법을 생각했습니다.

단기 투자의 관점

모든 예측 결과를 수치와 상관없이 두 개의 카테고리인 상승과 하락으로 분류하여 상승인 경우 1, 하락인 경우 0의 값을 가집니다. 하루 단위의 예측에 대해 상승했는지, 하락했는지, 그리고 실제와 차이가 나는지를 봅니다. 예를 들어 전날보다 올랐다고 예측을 했으나 실제로는 하락했다면 실패한 예측으로 봅니다. 결과는 다음과 같습니다.

image3

Classification Report

주목할만한 점은 1에 대한 precisionrecall이 전부 0.00이라는 것, 즉 상승했다고 예측한 경우가 아예 없었고, accuracy는 0.48로 그냥 찍는 것과 다름이 없었습니다.

장기 투자의 관점

앞서 언급했듯이 미래 데이터가 없다는 가정하에 예측을 합니다. 즉 Test Set을 사용하지 않고 예측된 값을 그 다음 예측에 사용합니다.

image4

결과는 참담한 수준이죠. 의미있는 예측을 전혀 하지 못하는 모델입니다. 그럼에도 시각화하는 방법에 따라서 아주 정확한 예측을 하는 것처럼 눈속임이 가능하다는 것을 인지할 필요가 있어보입니다.

업데이트:

댓글남기기