๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
๋นํธ์ฝ์ธ ์ฐจํธ๋ฐ์ดํฐ ๋ถ์ํ๊ธฐ ๋ณธ๋ฌธ
๐ฉ๐ป ์ธ๊ณต์ง๋ฅ (ML & DL)/Serial Data
๋นํธ์ฝ์ธ ์ฐจํธ๋ฐ์ดํฐ ๋ถ์ํ๊ธฐ
์ง์ง์ํ์นด 2022. 10. 7. 11:02728x90
๋ฐ์ํ
221007 ์์ฑ
<๋ณธ ๋ธ๋ก๊ทธ๋ moonda0404 ๋์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด์ ๊ณต๋ถํ๋ฉฐ ์์ฑํ์์ต๋๋ค :-) >
https://blog.naver.com/moongda0404/222729530178
[Python Data Analysis ๋ถ์ 8] ๋ฐ์ดํฐ ๋ถ์ - ํ์ด์ฌ ์๊ณ์ด๋ถ์
*๋ณธ ๊ธ์ Python3์ ์ด์ฉํ ๋ฐ์ดํฐ ๋ถ์(Data Analysis)์ ์ํ ๊ธ์ ๋๋ค. ์๊ณ์ด ๋ถ์ : ์๊ณ์ด ๋ถ์์...
blog.naver.com
1๏ธโฃ ๋ฐ์ดํฐ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ๋ฌ์ค๊ธฐ
import warnings
warnings.filterwarnings('ignore')
import pandas as pd
import pandas_datareader.data as web
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from datetime import datetime
# Data Source : https://www.blockchain.com/ko/charts/market-price?timespan=60days
file_path = 'market-price.csv'
bitcoin_df = pd.read_csv(file_path, names = ['day', 'price'])
bitcoin_df
- x์ถ์ 'day'์ด๊ณ , y์ถ์ 'price'
- day๋ ๋จ์๊ฐ 'ํ๋ฃจ'์ด๊ธฐ์, ์๊ณ์ด ํผ์ฒ๋จ์๋ก ๋ฐ๊พผ๋ค
bitcoin_df['day'] = pd.to_datetime(bitcoin_df['day'])
bitcoin_df
- day๋ฅผ index๋ก ์ง์
bitcoin_df.index = bitcoin_df['day']
bitcoin_df.set_index('day', inplace=True)
2๏ธโฃ ์๊ฐํ
bitcoin_df.plot()
plt.show()
3๏ธโฃ ์์ธก ๋ชจ๋ธ
- ARIMA๋ฅผ ํ์ฉ
- ARIMA(Autoregressvie integrated MovingAverage)
- AR(์๊ธฐ์๊ด) : ์ด์ ์ ๊ฐ์ด ์ดํ์ ๊ฐ์ ์ํฅ์ ๋ฏธ์น๊ณ ์๋ ์ํฉ
- MA(์ด๋ํ๊ท ) : ๋๋ค ๋ณ์์ ํ๊ท ๊ฐ์ด ์ง์์ ์ผ๋ก ์ฆ๊ฐํ๊ฑฐ๋ ๊ฐ์ํ๋ ์ถ์ธ
- ์ฐจ๋ถ์ ๋น์ ์์ฑ์ ์ ์์ฑ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด, ๊ด์ธก๊ฐ๋ค์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํ๋ ๊ฒ (๋น์ ์์ฑ์์ ์ ์์ฑ์ผ๋ก)
- ARIMA(Autoregressvie integrated MovingAverage)

- test ํ ๊ฑฐ 5์ผ์น ๋นผ๋์
bitcoin_df_train = bitcoin_df[:360]
- ARIMA
import statsmodels.api as sm
from statsmodels.tsa.arima.model import ARIMA
# (AR=2, ์ฐจ๋ถ=1, MA=2) ํ๋ผ๋ฏธํฐ๋ก ARIMA ๋ชจ๋ธ์ ํ์ตํฉ๋๋ค.
model = ARIMA(bitcoin_df_train.price.values, order=(2,1,2))
- ํ๋ผ๋ฏธํฐ ์ถ๊ฐํ๋ ค๋ฉด ERROR ๋ธ ใ กใ ก
#trend : constant๋ฅผ ๊ฐ์ง๊ณ ์๋์ง, c - constant / nc - no constant
#disp : ์๋ ด ์ ๋ณด๋ฅผ ๋ํ๋
model_fit = model.fit()
print(model_fit.summary())
- ARIMA ๋ชจ๋ธ ํ์ต์ ์ํ ์์ธก๊ฒฐ๊ณผ
forecast_data = model_fit.forecast(steps=5) # ํ์ต ๋ฐ์ดํฐ์
์ผ๋ก๋ถํฐ 5์ผ ๋ค๋ฅผ ์์ธกํฉ๋๋ค.

bitcoin_test_df = bitcoin_test_df[360:]
pred_y = forecast_data[0].tolist() # ๋ง์ง๋ง 5์ผ์ ์์ธก ๋ฐ์ดํฐ์
๋๋ค. (2018-08-27 ~ 2018-08-31)
test_y = bitcoin_test_df.values # ์ค์ 5์ผ ๊ฐ๊ฒฉ ๋ฐ์ดํฐ์
๋๋ค. (2018-08-27 ~ 2018-08-31)
pred_y_lower = [] # ๋ง์ง๋ง 5์ผ์ ์์ธก ๋ฐ์ดํฐ์ ์ต์๊ฐ์
๋๋ค.
pred_y_upper = [] # ๋ง์ง๋ง 5์ผ์ ์์ธก ๋ฐ์ดํฐ์ ์ต๋๊ฐ์
๋๋ค.
for lower_upper in forecast_data[2]:
lower = lower_upper[0]
upper = lower_upper[1]
pred_y_lower.append(lower)
pred_y_upper.append(upper)
plt.plot(pred_y, color="gold") # ๋ชจ๋ธ์ด ์์ํ ๊ฐ๊ฒฉ ๊ทธ๋ํ์
๋๋ค.
plt.plot(pred_y_lower, color="red") # ๋ชจ๋ธ์ด ์์ํ ์ต์๊ฐ๊ฒฉ ๊ทธ๋ํ์
๋๋ค.
plt.plot(pred_y_upper, color="blue") # ๋ชจ๋ธ์ด ์์ํ ์ต๋๊ฐ๊ฒฉ ๊ทธ๋ํ์
๋๋ค.
plt.plot(test_y, color="green") # ์ค์ ๊ฐ๊ฒฉ ๊ทธ๋ํ์
๋๋ค.
ํฌ....
ํฌ๊ธฐ...!
4๏ธโฃ fbprophet ์์ธก ๋ชจ๋ธ
from fbprophet import Prophet
# prophet์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ด ํผ์ฒ์ ์ด๋ฆ์ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค : 'ds', 'y'
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)
# 5์ผ์ ๋ด๋ค๋ณด๋ฉฐ ์์ธกํฉ๋๋ค.
future_data = prophet.make_future_dataframe(periods=5, freq='d')
forecast_data = prophet.predict(future_data)
forecast_data[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail(5)
fig1 = prophet.plot(forecast_data)
fig2 = prophet.plot_components(forecast_data)
bitcoin_df_train = bitcoin_df[:360]
bitcoin_test_df = bitcoin_df[360:]
pred_y = forecast_data.yhat.values[-5:] # ๋ง์ง๋ง 5์ผ์ ์์ธก ๋ฐ์ดํฐ์
๋๋ค. (2018-08-27 ~ 2018-08-31)
test_y = bitcoin_test_df.y.values # ์ค์ 5์ผ ๊ฐ๊ฒฉ ๋ฐ์ดํฐ์
๋๋ค. (2018-08-27 ~ 2018-08-31)
pred_y_lower = forecast_data.yhat_lower.values[-5:] # ๋ง์ง๋ง 5์ผ์ ์์ธก ๋ฐ์ดํฐ์ ์ต์๊ฐ์
๋๋ค.
pred_y_upper = forecast_data.yhat_upper.values[-5:] # ๋ง์ง๋ง 5์ผ์ ์์ธก ๋ฐ์ดํฐ์ ์ต๋๊ฐ์
๋๋ค.
plt.plot(pred_y, color="gold") # ๋ชจ๋ธ์ด ์์ํ ๊ฐ๊ฒฉ ๊ทธ๋ํ์
๋๋ค.
plt.plot(pred_y_lower, color="red") # ๋ชจ๋ธ์ด ์์ํ ์ต์๊ฐ๊ฒฉ ๊ทธ๋ํ์
๋๋ค.
plt.plot(pred_y_upper, color="blue") # ๋ชจ๋ธ์ด ์์ํ ์ต๋๊ฐ๊ฒฉ ๊ทธ๋ํ์
๋๋ค.
plt.plot(test_y, color="green") # ์ค์ ๊ฐ๊ฒฉ ๊ทธ๋ํ์
๋๋ค.
plt.plot(pred_y, color="gold") # ๋ชจ๋ธ์ด ์์ํ ๊ฐ๊ฒฉ ๊ทธ๋ํ์
๋๋ค.
plt.plot(test_y, color="green") # ์ค์ ๊ฐ๊ฒฉ ๊ทธ๋ํ์
๋๋ค.
728x90
๋ฐ์ํ
'๐ฉโ๐ป ์ธ๊ณต์ง๋ฅ (ML & DL) > Serial Data' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[FuncAnimation] 2. ๋จ์ผ๋ณ๋ ๊ทธ๋ํ๋ฅผ ๋ง๋ค์ด์ GUI๋ก ์๊ฐํํ๊ธฐ (0) | 2022.10.24 |
---|---|
[FuncAnimation] 1. Random ๋ฐ์ดํฐ๋ก ์ค์๊ฐ ๊ทธ๋ํ ๋ง๋ค๊ธฐ (0) | 2022.10.21 |
์๊ณ์ด ๋ฐ์ดํฐ ๋ถํด (์ ์ , ๋น์ ์ ๋ฐ์ดํฐ) (0) | 2022.10.06 |
Time series ์๊ณ์ด ๋ฐ์ดํฐ ๋ถ๋ฅํ๊ธฐ (0) | 2022.10.06 |
[๊ต๊ณผ์ ๋ฆฌ๋ทฐ] Forecasting: Principles and Practice (1) | 2022.10.05 |
Comments