실습) 비트코인 시세 알아보기

oyoi·2024년 6월 1일

1 데이터 불러오기

Data Source :

https://www.blockchain.com/ko/charts/market-price?timespan=60days

file_path = '/home/jaeyoon89/python-data-analysis/data/market-price.csv'
bitcoin_df = pd.read_csv(file_path, names = ['day','price'])

2 데이터 시각화하기

: 시계열 정보는 인덱스로 설정

bitcoin_df['day'] = pd.to_datetime(bitcoin_df['day'])

bitcoin_df.index = bitcoin_df['day']
bitcoin_df.set_index('day', inplace=True)

bitcoin_df.plot()
plt.show()

3 학습 후 예측하기

3-1 ARIMA

: 실습에서 사용할 시계열 예측 분석 방법은 ARIMA 분석 방법이다. ARIMA는 전통적인 시계열 예측 방법으로 크게 두 가지 개념을 포함하고 있다. 첫 번째는 AR모델로 자기 자신의 과거를 정보로 사용하는 것이다. 두 번째 개념은 MA모델로 '이전 항에서의 오차를 이용하여 현재 항의 상태를 추론하겠다' 라는 방법이다. 그리고 이 둘을 합친 것을 ARMA 모델이라고 하며, 조금 더 나아간 ARIMA 모델은 ARMA 모델에 추세 변동의 경향성까지 반영한 방법이다.

from statsmodels.tsa.arima_model import ARIMA
import statsmodels.api as sm

model = ARIMA(bitcoin_df.price.values, order=(2,1,2))
model_fit = model.fit(trend='c', full_output=True, disp=True)

fig = model_fit.plot_predict() 
residuals = pd.DataFrame(model_fit.resid) 
residuals.plot()

3-2 fbprophet

: ARIMA보다 조금 더 정확한 트렌드 예측 분석을 제공하는 라이브러리 'FacebookProphet'도 사용해보자. fbprophet 라이브러리를 사용하기 위해선 데이터 프레임의 피처를 'ds'와 'y'로 변경해야 한다. 그리고 Prophet이라는 클래스를 선언한 뒤, fit() 함수로 모델을 학습시킨다.

from fbprophet import Prophet

bitcoin_df = pd.read_csv(file_path, names=['ds', 'y'])
prophet = Prophet(seasonality_mode='multiplicative', 
                  yearly_seasonality=True,
                  weekly_seasonality=True, daily_seasonality=True,
                  changepoint_prior_scale=0.5)
prophet.fit(bitcoin_df)

future_data = prophet.make_future_dataframe(periods=5, freq='d')
forecast_data = prophet.predict(future_data)

4 성능을 높일 수 있는 방법

  • 상한가 및 하한가 설정하기
bitcoin_df['cap'] = 20000
  • 이상치 제거하기
bitcoin_df = pd.read_csv(file_path, names=['ds', 'y'])
bitcoin_df.loc[bitcoin_df['y'] > 18000, 'y'] = None
profile
오이

0개의 댓글