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

파이썬 비트코인 가격 예측 - 1차, 2차, 3차 지수 평활

swsong 2023. 1. 8. 10:28
본 내용은 작년 1월에 교육용으로 준비했던 자료입니다. 데이터를 통해 어떻게 미래 동향을 파악할 수 있는지 확인하고, 현재의 비트코인 가격과 비교해 보시면 좋겠습니다. 예측 결과는 실제 결과와 매우 상이할 것입니다. 과거 데이터만으로 미래를 예측하는 것의 한계를 시사합니다.

Step 1. 데이터 전처리

데이터는 2016년 12월 8일부터 2022년 1월 8일까지의 비트코인 일별 종가를 사용한다. 본 실습에서는 미리 확보해둔 데이터를 사용했지만, 꼭 동일한 데이터로 진행할 필요는 없다. 웹에 공개된 데이터가 많으니 비트코인이든 주가 데이터든 직접 스크래핑이나 다운로드 방식으로 데이터 확보를 해보시면 좋겠다.

여기서 종가 데이터만 가져오고 날짜의 경우 datetime 타입으로 변환한 다음 인덱스로 지정해 준다. datetime을 인덱스로 두게 되면 데이터 프레임이 기본적으로 시계열 데이터로 간주되어 인덱싱을 더 편하게 할 수 있다.

Step 2. 이동평균과 단순 지수 평활

2-1. 일별 비트코인 가격

먼저, 가볍게 단순 종가('Close')부터 그려보자.

2-2. 일별 비트코인 가격의 이동 평균

이동평균은 시계열 형태의 데이터 프레임에서 제공하는 rolling() 함수를 사용해 구할 수 있다. rolling() 함수를 사용하면 아래와 같이 mean() 뿐만 아니라 std(), min(), max() 등 다양한 통계 함수로 원하는 집계를 수행할 수 있다.

2-3. 일별 비트코인 가격의 단순 지수 평활

이동평균선은 기본적으로 예측을 위한 지표는 아니다. 단순히 과거의 데이터를 기간별로 평균 낸 수치로, 가격의 흐름에 따라서 움직이는 후행지표다. 그래서 가격 정보가 아직 없는 미래에 대해 이동평균선을 그려보면 추세를 따라 올라갈 것 같지만 가격이 존재했던 과거 기점을 마지막으로 값은 고정된다. 추세에 대한 정보 역시 포함하지 않기 때문이다.

위 그래프는 이동평균은 아니지만 120일 이동평균, 300일 이동평균선에 지수의 움직임을 더 잘 반영할 수 있도록 가중 평균한 값을 그리고 있다. 이것을 단순 지수 평활 혹은 1차 지수 평활이라고 하는데, 단순하게 최근에 가까울수록 지수를 더 잘 반영하는 조정된 이동평균선이라 생각하시면 되겠다. 단순 지수 평활은 statsmodels 라이브러리의 SimpleExpSmoothing 함수를 사용하면 위와 같이 간단히 그릴 수 있다. 함수를 통해 인스턴스(ses 변수에 담았습니다)를 생성하고 모델을 fitting 하는 과정을 보여주고 있다.

이렇게 구현한 단순 지수 평활 역시 '이동평균' 방식을 취한다는 점에서 보다시피 미래에 대한 예측은 어렵다. 기술적으로 과거에 대한 정보만 담기 때문다. 그래서 이동평균과 1차 지수 평활은 미래에 대한 예측보다는 살까 팔까에 대한 심리적 저항선 정도로 사용하는 것이 일반적이다.

그래서 사실 이 이동평균선을 단기적으로 뚫고 지나가거나 한참 위를 웃돈다 하더라도 결국 장기적으로는 전혀 이상한 일이 아니나 많은 투자자들이 이동평균선을 매매 지표로 활용하는 만큼 장기 이동평균선의 바닥을 찍었을 때 매수세가 강하게 들어와서 주가가 다시 튀어 오르는 경우가 많기 때문에 단순 심리적 저항선 이상의 의미를 지니기도 한다.

2-4. 이동평균과 단순 지수 평활의 비교

이동평균과 지수 평활 그래프를 잠시 비교해 보면, 아래 그래프에서 120일 지수 평활(120_ses, *ses : simple exponential smoothing), 300일 지수 평활(300_ses) 선은 각각 120일 이동평균(120_mv), 300일 이동평균(300_mv) 선보다 실제 지수를 더 잘 반영하고 있음을 알 수 있다.

2021년 그래프만 확대해 보면 다음과 같다.

초록색 선(120일 이동평균, 120_mv)은 보라색 선(120일 지수 평활_120_ ses)보다 하락장을 잘 반영하지 못하는 모습을 보인다. 붉은색 선(300일 이동평균, 300_mv)과 노란색 선(300일 지수 평활, 300_ses)을 봐도 그렇다. 이는 누적된 과거 데이터가 단기간 지수의 상승과 하락을 기민하게 따라갈 수 없도록 하기 때문이다. 그래서 최근 데이터에 가중치를 주는 지수 평활법이 이동평균법보다 현재 가격의 모습을 더 잘 반영하게 된다.

하지만 앞서 설명했듯 1차 지수 평활법으로도 여전히 미래를 설명할 수는 없다. 시계열 데이터에는 가격과 같은 단순 1차원 정보뿐만 아니라 단기 혹은 장기적 추세, 추세 주위를 오르내리는 사이클, 그리고 추세와는 별도로 특정 주기로 움직이는 계절성 등이 담겨있다. 따라서 2차 지수 평활, 3차 지수 평활법을 통해 추세나 계절성을 반영해서 앞으로의 주가 움직임을 예측하려는 시도가 있었다.

Step 3. 추세와 계절성을 추가한 2차, 3차 지수 평활

3-1. 2차 지수 평활

1차 지수 평활에 추세를 더한 것이 2차 지수 평활, 2차 지수 평활에 계절성까지 더한 것이 3차 지수 평활이다. 먼저 2차 지수 평활부터 보면, 2022년 이후 데이터가 없음에도 불구하고 1차 지수 평활과 달리 약간의 상승하는 움직임을 보여주고 있다. 과거 데이터가 그간 상승 추세에 있음을 고려하여 앞으로의 움직임을 '상승'으로 표현하고 있는 것이다.

3-2. 3차 지수 평활

여기에 계절성까지 더한 3차 지수 평활은 어떨까?

계절성의 경우 추세와 별도로 등락의 움직임이 특정 주기로 나타나는 것을 의미하는데, 주가나 암호화폐 가격의 경우 계절성이 선명하게 나타나지 않는다. 오션월드 매출 그래프를 상상해 보면 여름에 폭발적으로 증가하고 겨울에는 바닥을 치고 있을 것이나 비트코인은 그렇지 않다. 1년 단위로 보면 항상 오르는 방향으로 가지만 분기에 따라서 내림세를 겪기도 하기 때문에 추세와 계절성이 복합적으로 얽혀있다.

물론 이외에도 우리가 가늠할 수 없는 수많은 외생변수들도 포함되어 있을 것이다. 따라서 여기서는 1분기(1q), 2분기(2q), 1년(1y) 주기의 계절성이 있다고 가정하고 그려보자.

계절성이 1년 주기로 나타난다고 가정했을 때(붉은색) 2022년 이후 급격한 상승세를 보인다. 반대로 계절성이 분기 혹은 반기 단위로 나타난다고 가정했을 때(파란색, 초록색)는 약간의 조정 혹은 하락세를 보다.

해석하자면 붉은색 선의 경우 1년 단위로 상승하는 성향에 더해 최근 2021년에 급상승한 추세를 고려해서 2022년은 더 가파른 상승장이 나타난다고 예측했으며 파란색, 초록색 선의 경우 분기나 반기로는 하락하는 구간이 상대적으로 잦았기에 추세를 거스르는 하락장을 예측한 것이다.

 

Step 4. 비트코인 가격 전망

이렇게 지금까지 대중적으로 잘 알려진 이동평균부터, 간단하지만 시계열 예측 이론의 핵심을 담고 있는 2차, 3차 지수 평활법까지 살펴보았다. 이를 통해 비트코인 가격을 전망해 보면, 전체 기간으로 보면 상승해왔고 여전히 상승 추세에 있다고 볼 수 있으며 이 추세가 계속 간다고 하면 1년 내에 10억까지도 갈 수 있겠다. 그러나 추세를 꺾을만한 변동성이 나온다면 하락세에 접어들 수 있겠다.

시계열 예측이 명확한 답을 내놓지 못하고 확률적으로 해석할 수밖에 없는 이유, 그리고 주가나 암호화폐 가격의 예측이 어려운 이유는 하루가 지나면 새로운 가격 정보와 새로운 외생 변수들이 생겨나기 때문이다. 이번 분석 역시 마찬가지로 2022년 다음 한 분기를 전망해 보았지만 시간이 흐르면서 새로운 정보가 추가될 것이고 가격의 움직임과 계절성, 추세 등의 변화에 따라 예측은 달라지게 되어있다.

따라서 경제뉴스, 각종 시장 동향 리포트 등 시간을 기준으로 하는 모든 예측 분석은 "현재까지 데이터로 보면 이렇고, 앞으로는 달라질 여지가 충분하다"라고 이해하는 것이 바람직하겠다.