У меня есть данные о ежедневных продажах за 2018 год, и я провел моделирование ARIMA с помощью поиска в сетке (для циклов), получил оптимальные значения, такие как (0,1,2) и среднеквадратичное значение 61,562.
MyЗначение RMSE модели наивного прогноза (126,39) меньше, чем ARIMA RMSE (61,562), поэтому я считаю, что модель ARIMA работает хорошо?
У меня проблемы с пониманием различий между прогнозируемыми и ожидаемыми значениями ARIMA, и я хотелзнать, хорошо ли работает модель или нет, и различия приемлемы.
Прикреплен скриншот графика и прогноза ARIMA.
Выход ARIMA
Train Set Lenght: 736
Test Set Lenght: 380
>Predicted=15.584, Expected= 20
>Predicted=18.602, Expected= 10
>Predicted=14.051, Expected= 30
>Predicted=22.576, Expected= 60
>Predicted=34.849, Expected= 10
>Predicted=16.423, Expected= 50
>Predicted=35.823, Expected= 54
>Predicted=36.277, Expected= 6
>Predicted=19.700, Expected= 35
>Predicted=32.607, Expected= 1
>Predicted=16.107, Expected= 36
>Predicted=31.214, Expected= 20
>Predicted=22.272, Expected= 4
>Predicted=17.035, Expected= 4
>Predicted=15.497, Expected= 8
>Predicted=15.150, Expected= 3
>Predicted=11.664, Expected= 3
>Predicted=10.629, Expected= 3
>Predicted=9.278, Expected= 3
>Predicted=8.268, Expected= 4
>Predicted=7.810, Expected= 4
>Predicted=7.114, Expected= 4
>Predicted=6.610, Expected= 4
>Predicted=6.168, Expected= 2
>Predicted=4.964, Expected= 12
>Predicted=8.790, Expected= 16
ARIMA Code snippet
train_series=north_top_painter_df["Volume"].values
train_size = int(len(train_series) * 0.66)
x_train, x_test = train_series[0:train_size], train_series[train_size:]
print('Train Set Lenght:',len(x_train))
print('Test Set Lenght:',len(x_test))
# walk-forward validation
history = [i for i in x_train]
predictions = list()
for i in range(len(x_test)):
# predict
model = ARIMA(history, order=(0,1,2))
model_fit = model.fit(disp=0)
#y_pred=model_fit.predict(start=len(train), end=len(train)+len(test)-1, dynamic=False)
y_pred = model_fit.forecast()[0]
predictions.append(y_pred)
#observation
test_obs = x_test[i]
history.append(test_obs)
print('>Predicted=%.3f, Expected=%3.f' % (y_pred, test_obs))
# report performance
rmse = sqrt(mean_squared_error(x_test, predictions))
print('RMSE: %.3f' % rmse)
plt.plot(x_test, label = "Test",color='blue')
#plt.plot(y_pred)
plt.plot(predictions, color = 'red', label = "Predict")
plt.legend(loc='best')
plt.show()