plan = dataset.plan # длина периода сезонной составляющей p = 168 # тренировочный датасет train_set, данные с 14.01.2019 по 25.11.2019 train_start_date = datetime.datetime(2019, 1, 14, 0, 0, 0) train_end_date = datetime.datetime(2019, 11, 25, 23, 0, 0) train_set = fact[train_start_date:train_end_date] # тестовый датасет test_set, данные за прогнозный день 27.11.2019 pred_date = datetime.date(2019, 11, 27) pred_end_date = train_end_date + datetime.timedelta(days=2) pred_start_date = pred_end_date - datetime.timedelta(hours=23) test_set = fact[pred_start_date:pred_end_date] # план предприятия plan_set для сверки, данные за прогнозный день 27.11.2019 plan_set = plan[pred_start_date:pred_end_date] # выбор метода method = additiveHoltWinters # найденные постоянные сглаживания best_params = [[0.06846567, 0.00032291, 0.26071966]] # прогнозирование pred = method(best_params[0], train_set, p, 48)[24:] # оценка прогноза по метрикам nnf_val = nnfmetrics(pred, test_set, plan_set) mse_val = mse(test_set, pred) mape_val = mape(test_set, pred) acc_val = accuracy(test_set, pred) print('Оценка по NNFMETRICS = ', nnf_val) print('Оценка по MSE = ', mse_val) print('Оценка по MAPE = ', mape_val) print('Точность прогноза = ', acc_val) # отрисовка графика plot_results(pred_date.strftime('%d-%m-%Y'), test_set, pred, plan_set)
# автокорреляции и частные автокорреляции acf_pacf(remainder) # поиск лучших параметров # sarima_best_params(remainder, 24, 0, 0, 4, 3) # найденные параметры для 27.11.2019: best_params = [2, 3, 1, 2] # построение модели model = sm.tsa.SARIMAX(remainder, order=(best_params[0], 0, best_params[1]), seasonal_order=(best_params[2], 0, best_params[3], 24)).fit(disp=False) # вывод информации о модели print(model.summary()) # проверка остатков модели на случайность ljungbox(model.resid) acf_pacf(model.resid) # SARIMA прогноз остатков remainder_pred = model.forecast(48) # итоговый прогноз total_pred = trend_pred + seasonal_pred + remainder_pred[24:] # оценка прогноза по метрикам nnf_val = nnfmetrics(total_pred, test_set, plan_set) mse_val = mse(test_set, total_pred) mape_val = mape(test_set, total_pred) acc_val = accuracy(test_set, total_pred) print('Оценка по NNFMETRICS = ', nnf_val) print('Оценка по MSE = ', mse_val) print('Оценка по MAPE = ', mape_val) print('Точность прогноза = ', acc_val) # отрисовка графика plot_results(pred_date.strftime('%d-%m-%Y'), test_set, total_pred, plan_set)