๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

๋น„ํŠธ์ฝ”์ธ ์ฐจํŠธ๋ฐ์ดํ„ฐ ๋ถ„์„ํ•˜๊ธฐ ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป ์ธ๊ณต์ง€๋Šฅ (ML & DL)/Serial Data

๋น„ํŠธ์ฝ”์ธ ์ฐจํŠธ๋ฐ์ดํ„ฐ ๋ถ„์„ํ•˜๊ธฐ

์ง•์ง•์•ŒํŒŒ์นด 2022. 10. 7. 11:02
728x90
๋ฐ˜์‘ํ˜•

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(์ด๋™ํ‰๊ท ) : ๋žœ๋ค ๋ณ€์ˆ˜์˜ ํ‰๊ท ๊ฐ’์ด ์ง€์†์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ฐ์†Œํ•˜๋Š” ์ถ”์„ธ
        • ์ฐจ๋ถ„์€ ๋น„์ •์ƒ์„ฑ์„ ์ •์ƒ์„ฑ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด, ๊ด€์ธก๊ฐ’๋“ค์˜ ์ฐจ์ด๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ (๋น„์ •์ƒ์„ฑ์—์„œ ์ •์ƒ์„ฑ์œผ๋กœ)
https://blog.naver.com/moongda0404/222729530178
  • 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
๋ฐ˜์‘ํ˜•
Comments