Невозможно реализовать метод Холта-Винтерса с использованием библиотеки statsmodels.Python

Программы на Python
Ответить
Anonymous
 Невозможно реализовать метод Холта-Винтерса с использованием библиотеки statsmodels.

Сообщение Anonymous »

У меня есть данные за один месяц, которые поступают ежедневно. Они собирают данные об использовании процессора каждый день. Я хочу получить некоторые результаты прогноза. Я разделил данные на две части: поезд, который занимает первые 15 дней, и тест, который занимает последние 16 дней, и на основе этого я хочу сделать прогноз и сравнить результат прогноза с заданным результатом за последние 16 дней. До сих пор я пробовал различные реализации, такие как как скользящее среднее, простое экспоненциальное сглаживание. Теперь я хочу попробовать что-то более сложное и точное, например метод Холта-Винтерса и модель ARIMA. Ниже приведен результат, который я получаю для метода линейного тренда Холта, который учитывает тенденцию и сезонность.

Изображение


Теперь я хочу реализовать метод Холтса Уинтера, который является одним из предпочтительных методов прогнозирования. Вот код ниже

# get the first 15 days
df_train = psql.read_sql("SELECT date,cpu FROM {} where date between '{}' and '{} 23:59:59';".format(conf_list[1], '2018-03-02', '2018-03-16'), conn).fillna(0)
df_train["date"] = pd.to_datetime(df_train["date"], format="%m-%d-%Y")
df_train.set_index("date", inplace=True)
df_train = df_train.resample('D').mean().fillna(0)

# get the last 15 days
df_test = psql.read_sql("SELECT date,cpu FROM {} where date between '{}' and '{} 23:59:59';".format(conf_list[1], '2018-03-18', '2018-03-31'), conn).fillna(0)
df_test["date"] = pd.to_datetime(df_test["date"], format="%m-%d-%Y")
df_test.set_index("date", inplace=True)
df_test = df_test.resample('D').mean().fillna(0)


Вот код метода Холта Уинтера

y_hat_avg = df_test.copy()
fit1 = ExponentialSmoothing(np.asarray(df_train['cpu']), seasonal_periods=1, trend='add', seasonal='add',).fit()
y_hat_avg['Holt_Winter'] = fit1.forecast(len(df_test))
plt.figure(figsize=(16,8))
plt.plot(df_train['cpu'], label='Train')
plt.plot(df_test['cpu'], label='Test')
plt.plot(y_hat_avg['Holt_Winter'], label='Holt_Winter')
plt.legend(loc='best')
plt.show()


Теперь я получаю сообщение об ошибке для параметра Season_ periods. Он принимает целое число, и я считаю, что он принимает месяц в качестве значения. Даже в их документации они упоминаются только как отсутствие сезонов. http://www.statsmodels.org/dev/generate ... lSmoothing

Теперь, поскольку у меня есть данные только за 1 месяц, и я хочу выполнить прогноз на первые 15 дней, какое значение сезона мне следует передать? Предполагая сезоны относятся к месяцам, в идеале это должно быть 0,5 (15 дней), но принимаются только целые числа. Если я передаю значение как 1, я получаю следующую ошибку

Traceback (most recent call last):
File "/home/souvik/PycharmProjects/Pandas/forecast_health.py", line 89, in
fit1 = ExponentialSmoothing(np.asarray(df_train['cpu']), seasonal_periods=1, trend='add', seasonal='add',).fit()
File "/home/souvik/data_analysis/lib/python3.5/site-packages/statsmodels/tsa/holtwinters.py", line 571, in fit
Ns=20, full_output=True, finish=None)
File "/home/souvik/data_analysis/lib/python3.5/site-packages/scipy/optimize/optimize.py", line 2831, in brute
Jout = vecfunc(*grid)
File "/home/souvik/data_analysis/lib/python3.5/site-packages/numpy/lib/function_base.py", line 2755, in __call__
return self._vectorize_call(func=func, args=vargs)
File "/home/souvik/data_analysis/lib/python3.5/site-packages/numpy/lib/function_base.py", line 2831, in _vectorize_call
outputs = ufunc(*inputs)
File "/home/souvik/data_analysis/lib/python3.5/site-packages/scipy/optimize/optimize.py", line 2825, in _scalarfunc
return func(params, *args)
File "/home/souvik/data_analysis/lib/python3.5/site-packages/statsmodels/tsa/holtwinters.py", line 207, in _holt_win_add_add_dam
return sqeuclidean((l + phi * b) + s[:-(m - 1)], y)
ValueError: operands could not be broadcast together with shapes (16,) (0,)


Если я передам параметр None, я получу следующую ошибку

Traceback (most recent call last):
File "/home/souvik/PycharmProjects/Pandas/forecast_health.py", line 89, in
fit1 = ExponentialSmoothing(np.asarray(df_train['cpu']), seasonal_periods=None, trend='add', seasonal='add',).fit()
File "/home/souvik/data_analysis/lib/python3.5/site-packages/statsmodels/tsa/holtwinters.py", line 399, in __init__
'Unable to detect season automatically')
NotImplementedError: Unable to detect season automatically


Как получить прогноз на последние 16 дней месяца с помощью метода Холта-Винтерса? Что я делаю не так?

Вот данные за месяц, если кто-то захочет воспроизвести результаты

cpu
date
2018-03-01 00:00:00+00:00 1.060606
2018-03-02 00:00:00+00:00 1.014035
2018-03-03 00:00:00+00:00 1.048611
2018-03-04 00:00:00+00:00 1.493392
2018-03-05 00:00:00+00:00 3.588957
2018-03-06 00:00:00+00:00 2.500000
2018-03-07 00:00:00+00:00 5.265306
2018-03-08 00:00:00+00:00 0.000000
2018-03-09 00:00:00+00:00 3.062099
2018-03-10 00:00:00+00:00 5.861751
2018-03-11 00:00:00+00:00 0.000000
2018-03-12 00:00:00+00:00 0.000000
2018-03-13 00:00:00+00:00 7.235294
2018-03-14 00:00:00+00:00 4.011662
2018-03-15 00:00:00+00:00 3.777409
2018-03-16 00:00:00+00:00 5.754559
2018-03-17 00:00:00+00:00 4.273390
2018-03-18 00:00:00+00:00 2.328782
2018-03-19 00:00:00+00:00 3.106048
2018-03-20 00:00:00+00:00 5.584877
2018-03-21 00:00:00+00:00 9.869841
2018-03-22 00:00:00+00:00 5.588215
2018-03-23 00:00:00+00:00 3.620377
2018-03-24 00:00:00+00:00 3.468021
2018-03-25 00:00:00+00:00 2.605649
2018-03-26 00:00:00+00:00 3.670559
2018-03-27 00:00:00+00:00 4.071777
2018-03-28 00:00:00+00:00 4.159690
2018-03-29 00:00:00+00:00 4.364939
2018-03-30 00:00:00+00:00 4.743253
2018-03-31 00:00:00+00:00 4.928571


Подробнее здесь: https://stackoverflow.com/questions/503 ... ls-library
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»