3. 튜토리얼/금융 분석 프로그래밍 응용

과거 주가 데이터로 미래 주가를 예측할 수 있을까? - 파이썬 시계열 패턴 검색

swsong 2021. 9. 16. 20:58

Step 0. 패턴 검색

이번에는 현재 차트와 유사한 차트를 찾아서 매매에 활용하는 패턴 검색을 파이썬으로 구현해보자. 패턴 검색은 과거 주가에서 현재 주가와 유사한 패턴을 관측한 다음, 과거 주가 이후의 흐름을 확인하는 것을 통해 앞으로의 주가를 예상해보는 방식이다.

Step 1. 코스피 종가 가져오기

2010년부터 현재까지의 데이터를 스크리닝한다. 즉, 유사한 패턴을 관측하는 가장 먼 시점은 2010년이다.

Step 2. 기준 구간 확인

종가만 추출해서 검색하고자 하는 현재 주가의 패턴을 확인한다. 여기서 현재 주가는 6월 2일까지만 확인한다. 마지막에 6월 2일 이후 주가를 그려보면서 패턴 검색 방식의 예측을 검증해보기 위함이다.

코스피는 올해 1월에 급락 후 횡보하는 모습을 보인다. 이와 유사한 패턴을 과거에서 찾아본다.

Step 3. 패턴 검색 구현

패턴 검색은 다음과 같은 로직으로 구성했다.

  1. 먼저 앞에서 지정한 기준 구간의 데이터가 있을 것이다.
  2. 해당 데이터 길이만큼 최초 상장일부터 하루씩 비교하면서 코사인 유사도를 계산한다.
  3. 단, 과거의 주가와 현재 주가의 액수 차이가 크기 때문에 패턴만 추출하기 위해서 표준화를 먼저 수행한 다음 데이터를 비교한다.
  4. 이렇게 모든 데이터를 비교해서 코사인 유사도가 가장 작은 값 즉, 현재 주가 패턴과 가장 유사한 과거 시점의 주가를 찾는다.

이러한 흐름을 코드로 구현해보면 다음과 같다.

이렇게 반복문을 통해 모든 코사인 유사도를 단일 리스트에 저장했다면, 이 값이 가장 작았던 구간을 추출해야 한다. 반복문에서 인덱스를 함께 저장했기 때문에 간단하게 불러낼 수 있다.

Step 4. 패턴 비교 시각화

패턴이 유사한 시점을 찾았는데, 이때의 주가 패턴이 얼마나 현재 패턴과 유사한지 궁금하다. 두 그래프를 동시에 그려보고 싶다. 두 시점의 주가 분포는 차이가 있기 때문에 그래프를 그리기 전에 표준화를 진행한다.

범위를 맞춰줬으니 그래프를 그려본다.

target(과거)도 base(현재)와 유사하게 급락 후 횡보하는 구간을 겪고 있다.

Step 5. 검색 기간 이후 추세 확인

이번에는 검색된 과거 주가 이후 7일간의 데이터와 6월 2일 이후 주가를 비교해보려 한다. 패턴 검색 방식의 예측이 유효하다면 두 기간 이후 발생하는 추세도 유사할 것이다.

아쉽게도 2015년 2월 주가는 반등했지만 6월 주가는 다시 급락하고 있다. 이를 통해 가장 유사한 패턴 하나만 가지고 예측하는 것이 바람직하지 않다는 것을 알 수 있다.

주가 움직임은 확률적으로 접근해야 한다. 만약 패턴 검색 방식으로 주가를 예측하고자 한다면 유사한 패턴(표본)을 최대한 많이(최소 30개) 추출한 다음 상승 확률을 계산하는 것이 좋다. 물론 이를 위해서는 코스피 뿐만 아니라 전 세계 주가 데이터를 대상으로 스크리닝해야 충분한 표본을 확보할 수 있다.