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
   25   26   27   28   29   30   31   32   33