Я впервые использую блестящий инструмент и пытаюсь создать приложение, способное принимать файлы CSV, соответствовать некоторым моделям и прогнозным данным (3 месяца).
Приложение предоставляет таблицу с мерами точности установленных моделей, но эти числа сильно отличаются от точности тех же моделей, когда они запускаются в обычном сценарии R.
Я не могу придумайте причину этих различий! Я использую те же файлы данных, модели и переменные. Те же данные обучения и тестирования, а также. Различия намного больше в моделях fasster
!
Может ли кто-нибудь увидеть проблему?
Например, если я запускаю функцию модели со следующими моделями (код ниже), точность прогноза для прогноза на 3 месяца выглядит следующим образом:
Результаты сценария R
> erros (forecast: 130.23 sec elapsed)
# A tibble: 5 x 9
.model .type ME RMSE MAE MPE MAPE MASE ACF1
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 ANNC_HOLIDAY Test 10.2 19.8 14.4 6.41 10.2 NaN 0.131
2 ARIMA Test 6.18 19.0 14.2 2.95 10.2 NaN 0.0506
3 ETS_auto Test 5.46 17.0 12.1 2.78 8.69 NaN 0.135
4 fasst Test -0.0758 13.0 9.82 -1.06 7.45 NaN 0.0695
5 fasst_original Test 7.84 17.9 12.9 4.59 9.16 NaN 0.135
Результаты блестящего приложения
Accuracy Measures
.model .type ME RMSE MAE MPE MAPE MASE ACF1
ANNC_HOLIDAY Test 15.06 29.44 24.77 9.92 18.96 NA -0.01
ARIMA Test -1.55 17.85 14.28 -3.18 11.57 NA 0.31
ETS_auto Test -2.34 19.99 15.37 -3.83 12.52 NA 0.11
fast Test -6.91 49.77 30.47 -8.24 25.00 NA -0.18
fasst_original Test 0.12 90.58 62.47 -4.00 50.84 NA -0.18
Код сценария R (подходящая деталь)
#code for the models (fitmodels: 12.24 sec elapsed)
fit_demand <- train %>%
model(
# Seasonal Naive Method (benchmark)
Benchmark = SNAIVE(Demand, lag = "1 year"),
Benchmark_week = SNAIVE(Demand, lag = "1 week"),
ETS_auto = ETS(Demand),
# ANNS
ANNC_HOLIDAY = NNETAR(Demand ~ AR(period = "1 day, 1 week") + DaysAfterHoliday, scale_inputs = TRUE),
ANNC_HOLIDAY_diff = NNETAR(Demand ~ AR(period = "1 day, 1 week")
+ DaysAfterHoliday + Diference, scale_inputs = TRUE),
#FASSTER
fasst_original = fasster(Demand ~ WeekDay + fourier(7,3)),
fasst = fasster(Demand ~ WeekDay + fourier(7,3) + Influenza + DaysAfterHoliday
+ Diference + poly(1))
)
Блестящий код приложения (примерка + прогноз + точность)
# FORECAST ----------------------------------------------------------------
#data_final is the historical data and data_extra_final is the forecasting external data
# fit models
fit_demand = reactive({
train = filter_index(data_final(),.~"2019-09-30")
train %>%
model(
ETS_auto = ETS(Demand),
# #ARIMA
ARIMA = ARIMA(Demand),
# # ANNS
ANNC_HOLIDAY = NNETAR(Demand ~ AR(period = "1 day, 1 week"), scale_inputs = TRUE),
#FASSTER
fasst_original = fasster(Demand ~ WeekDay + fourier(7,3)),
fasst = fasster(Demand ~ WeekDay + fourier(7,3) + Influenza + DaysAfterHoliday
+ Diference + poly(1))
)
})
# Generate forecasts
demand_forecast = reactive({
new_data = filter_index(data_extra_final(),.~"2019-10-01" )
modelo = fit_demand()
forecast(modelo, new_data)
})
#accuracy
output$table_erro = renderTable ({
if(is.null(demand_forecast())){return()}
test = filter_index(data_final(),.~"2019-10-01" )
forecasted = demand_forecast()
as.data.frame(accuracy(forecasted,test))
})
Данные
dataset = as.tsibble(data.frame(Date = c(2017-05-01, 2017-05-02, 2017-05-03, 2017-05-04, 2017-05-05, 2017-05-06, 2017-05-07, 2017-05-08, 2017-05-09, 2017-05-10, 2017-05-11, 2017-05-12, 2017-05-13, 2017-05-14, 2017-05-15, 2017-05-16, 2017-05-17, 2017-05-18, 2017-05-19, 2017-05-20, 2017-05-21, 2017-05-22, 2017-05-23, 2017-05-24, 2017-05-25, 2017-05-26, 2017-05-27, 2017-05-28, 2017-05-29, 2017-05-30, 2017-05-31),
Demand = c(122, 124, 113, 124, 126, 114, 100, 121, 118, 135, 120, 118, 106, 104, 130, 130, 103, 106, 141, 85, 119, 140, 123, 130, 105, 124, 115, 107, 159, 121, 87),
Weekday=c(1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3)), index = Date)
train = filter_index(data_final(),.~"2017-05-15")
test = filter_index(data_final(),"2017-05-16"~.)