Page 30 -
P. 30
코드 7-2 statsmodels 라이브러리를 이용한 sales 데이터셋 예측
import numpy as np
from pandas import read_csv
from pandas import datetime
from matplotlib import pyplot
from statsmodels.tsa.arima_model import ARIMA
from sklearn.metrics import mean_squared_error
def parser(x):
return datetime.strptime('199'+x, '%Y-%m')
series = read_csv('../chap7/data/sales.csv', header=0, parse_dates=[0], index_col=0,
squeeze=True, date_parser=parser)
X = series.values
X = np.nan_to_num(X)
size = int(len(X) * 0.66)
train, test = X[0:size], X[size:len(X)] train과 test로 데이터셋 분리
history = [x for x in train]
predictions = list()
for t in range(len(test)): test 데이터셋의 길이(13번)만큼 반복하여 수행
model = ARIMA(history, order=(5,1,0)) ARIMA( ) 함수 호출
model_fit = model.fit(disp=0)
output = model_fit.forecast() forecast( ) 메서드를 사용하여 예측 수행
yhat = output[0] 모델 출력 결과를 yhat에 저장
predictions.append(yhat)
obs = test[t] 모델 실행 결과를 predicted로 출력하고,
history.append(obs) test로 분리해 둔 데이터를
print('predicted=%f, expected=%f' % (yhat, obs)) expected로 사용하여 출력
error = mean_squared_error(test, predictions) 손실 함수로 평균 제곱 오차 사용
print('Test MSE: %.3f' % error)
pyplot.plot(test)
pyplot.plot(predictions, color='red')
pyplot.show()
다음은 statsmodels 라이브러리를 이용한 sales 데이터셋에 대한 예측을 실행한 결과입니다.
predicted=354.377730, expected=346.300000
predicted=288.627290, expected=329.700000
predicted=382.817953, expected=445.400000
predicted=339.543839, expected=325.900000
predicted=392.897253, expected=449.300000
predicted=354.488010, expected=411.300000
264