딥러닝과 머신러닝을 활용한 자동매매, 시계열 예측 모델 ARIMA ARIMA 모델을 활용한 비트코인 가격 시계열 예측.

최근 몇 년 동안 비트코인은 급격한 가격 변동성을 보이며 많은 투자자들의 관심을 끌었습니다. 이를 바탕으로, 머신러닝 및 딥러닝 기법을 활용한 비트코인 가격 예측 모델이 발전하고 있습니다. 본 강좌에서는 ARIMA(AutoRegressive Integrated Moving Average) 모델을 활용하여 비트코인 가격 시계열을 예측하는 방법을 다룹니다.

1. ARIMA 모델 개요

ARIMA 모델은 시계열 데이터에서 패턴을 찾고 예측하는 데 널리 사용됩니다. ARIMA는 다음의 세 가지 구성 요소로 이루어져 있습니다:

  • AR (자기회귀) 부분: 이전 시점의 값이 현재 시점의 값에 미치는 영향을 분석합니다.
  • I (차분) 부분: 정형성을 확보하기 위해 시계열 데이터를 차분화하여 안정화합니다.
  • MA (이동 평균) 부분: 이전 예측 오차가 현재 예측에 미치는 영향을 분석합니다.

ARIMA 모델은 ARIMA(p, d, q)의 형태로 표현됩니다. 여기서 p는 자기회귀 항수, d는 차분 횟수, q는 이동 평균 항수입니다.

2. 비트코인 가격 시계열 데이터 수집

비트코인의 가격 데이터를 수집하기 위해 여러 데이터 제공 API를 사용할 수 있습니다. 본 예제에서는 yfinance 라이브러리를 사용하여 데이터를 수집합니다. 이를 위해 필요한 라이브러리를 설치합니다.

pip install yfinance

데이터 수집 예제 코드


import yfinance as yf
import pandas as pd

# 비트코인 데이터 가져오기
btc_data = yf.download('BTC-USD', start='2020-01-01', end='2023-09-30')
btc_data['Close'].plot(title='Bitcoin Closing Prices', fontsize=14)
    

3. 시계열 데이터 전처리

ARIMA 모델을 적용하기 전, 데이터의 안정성을 확인해야 합니다. 이를 위해 시계열 데이터를 시각화하고, 정상성 검정을 수행합니다. 정상성을 확인하기 위해 ADF(확장된 딕키-풀러) 검정을 사용합니다.

정상성 검정 예제 코드


from statsmodels.tsa.stattools import adfuller
import matplotlib.pyplot as plt

# ADF 검정 함수
def adf_test(series):
    result = adfuller(series, autolag='AIC')
    print('ADF Statistic: %f' % result[0])
    print('p-value: %f' % result[1])
    for key, value in result[4].items():
        print('Critial Values:')
        print('\t%s: %.3f' % (key, value))

# 종가 데이터에 대해 ADF 검정 수행
adf_test(btc_data['Close'])
    

4. ARIMA 모델 훈련

데이터가 정상성을 갖춘 경우, ARIMA 모델을 훈련시킬 수 있습니다. 모델의 파라미터를 설정하는 데 있어 ACF(자기상관함수)와 PACF(부분자기상관함수) 플롯을 활용합니다.

ACF 및 PACF 플롯 생성 예제 코드


from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

# ACF 및 PACF 플롯
plt.figure(figsize=(12, 6))
plt.subplot(121)
plot_acf(btc_data['Close'], ax=plt.gca(), lags=30)
plt.subplot(122)
plot_pacf(btc_data['Close'], ax=plt.gca(), lags=30)
plt.show()
    

ARIMA 모델 훈련 예제 코드


from statsmodels.tsa.arima.model import ARIMA

# ARIMA 모델 생성 (p, d, q는 적절한 값으로 설정)
model = ARIMA(btc_data['Close'], order=(5, 1, 0))
model_fit = model.fit()

# 모델 요약
print(model_fit.summary())
    

5. 예측 및 결과 시각화

모델을 훈련한 후, 예측을 수행하고 결과를 시각화합니다. 예측 결과와 실제 데이터를 비교하는 것이 중요합니다.

예측 및 시각화 예제 코드


# 미래 30일 가격 예측
forecast = model_fit.forecast(steps=30)
forecast_index = pd.date_range(start='2023-10-01', periods=30)
forecast_series = pd.Series(forecast, index=forecast_index)

# 실제 데이터 시각화
plt.figure(figsize=(10, 6))
plt.plot(btc_data['Close'], label='Actual Prices')
plt.plot(forecast_series, label='Forecasted Prices', color='red')
plt.title('Bitcoin Price Forecast')
plt.xlabel('Date')
plt.ylabel('Price (USD)')
plt.legend()
plt.show()
    

6. 모델의 성능 평가

모델의 예측 성능을 평가하기 위해 RMSE(Root Mean Squared Error)와 같은 평가 지표를 사용할 수 있습니다.

RMSE 계산 예제 코드


from sklearn.metrics import mean_squared_error
import numpy as np

# RMSE 계산
rmse = np.sqrt(mean_squared_error(btc_data['Close'][-30:], forecast_series))
print(f'RMSE: {rmse}')
    

결론

ARIMA 모델을 사용한 비트코인 가격 예측은 시계열 데이터 분석에 강력한 도구입니다. 그러나 모델의 성능은 데이터의 품질, 모델의 파라미터 조정, 그리고 외부 요인에 따라 달라질 수 있습니다. 추가적으로 다른 머신러닝 및 딥러닝 방법들과 결합하여 더 향상된 예측 성능을 얻을 수 있습니다.

참고: 이 강좌는 ARIMA 모델에 대한 기초 개념을 다루었으며, 실전에서는 다양한 기법들을 접목하여 더욱 정교한 예측 모델을 구축할 수 있습니다.

관련 자료 및 학습 자료