오잉? ARIMA에 대해 쓴 글이 작년 10월로 군대에 있을때 작성한건데..
전역하고 다시 복습하면서 찾아보니까 함수가 아예 사라짐;
statsmodels.tsa.arima\_model -> statsmodels.tsa.arima.model 로 라이브러리 위치가 바뀐거였음..
아무튼 이번 주제는 5일 간격의 시간을 둔 미래의 시계열 데이터. 즉 '향후 5일 뒤의 비트코인 종가'를 예측할거다
1. 데이터 전처리
빗썸에서 제공하는 API의 get_ohlcv() 함수를 통해서 비트코인 정보를 뽑아온다.
여기서 중요한 점은, 현재 종가를 기준으로 5일 뒤의 미래 종가를 예측하는게 맞지만 그게 정확한지는 5일 뒤에 확인해야하는 문제점이 생김
그래서 아쉬운 대로 5일 전의 종가를 학습 데이터로 넣어서 예측한 값이 현재 종가와 얼마나 일치하는가를 통해서 정확도를 판별할 거다. 그래서 그에 맞춰 datetime을 사용해서 전처리했다.
2. 모델 구축
model = ARIMA(train['close'].values, order=(0, 1, 1))
model_fit = model.fit()
ARIMA(datas, order=(p,d,q)): 주어진 학습 데이터를 바탕으로 ARIMA 모델을 생성한다.
AR 모델의 차수(q)=0, 차분의 차수(d)=1, MA모델의 차수(q)=1로 설정해서 자기회귀하지 않고, 오직 1차 차분과 이동평균만을 이용해서 예측할거임. n+1 차분은 어려우니까
3. 미래 예측
forecast = model_fit.forecast(steps=5)
pred_y = forecast[0].tolist()
뭐... 보다시피 5일 뒤를 예측한 pred_y를 현재 BTC의 종가와 비교하면 예측값이 얼마나 정확한지 비교할 수 있게 됨.
결과를 보면 알겠지만 그렇게 유의미한 정확도를 나타내진 않는다.
그 이유로는 애초에 가상화폐 자체가 불규칙적이라 정상성을 가지지 않음 = 통계적 패턴을 읽기 어려움.
정확도를 올리고 싶다면 일단 예측 기간을 넓게 잡아서 학습 데이터를 방대하게 만들고, (p,d,q) 매개변수를 알맞게 조정해야함.
추가로 저번에 앙상블 모델 구현할때 사용했던 LSTM쪽이 훨씬 시계열 데이터의 비선형성을 잡아내기 효과적이라는 내용의 논문을 어디서 봤는데..
https://github.com/downfa11/ARIMA-futurePredcit
GitHub - downfa11/ARIMA-futurePredcit: Prediction Future of Time series dataset with ARIMA
Prediction Future of Time series dataset with ARIMA - downfa11/ARIMA-futurePredcit
github.com
'tech' 카테고리의 다른 글
| ArgoCD OSS - 전 아직 Git이 어려워요 (feat. Git rebase 오류) (5) | 2025.08.25 |
|---|---|
| NoSQL의 쓰기 성능이 좋은 이유를 뭐라고 설명해야할까? (0) | 2025.03.20 |
| 웹소켓(WebSocket)과 Websocket-sharp.dll 오류 (0) | 2024.11.17 |
| Pandas를 통해 포항시 인구수 분표를 시각화해보자 (1) | 2024.11.17 |
| 인공지능을 이용해서 가상화폐 가격을 예측해보자(Adaboost, Ensemble, LSTM) (0) | 2024.11.17 |