Прогноз с тройным экспоненциальным сглаживанием с использованием ExponentialSmoothing статсмоделей в python - PullRequest
0 голосов
/ 22 сентября 2018

Я работаю над прогнозом некоторых временных рядов, и мне нужно сравнить разные методы с использованием python.Практически мне нужно сгенерировать некоторые прогнозы с использованием тройного экспоненциального сглаживания, и я использую эту библиотеку и соответствующие функции, такие как this .Мой временной ряд имеет такой формат, как объект pd.Series:

    Date Close
2016-04-11 01:17:04    -10.523793
2016-04-11 07:25:13     -5.352295
2016-04-11 22:40:11     92.556003
2016-04-13 05:06:31     -1.769866
2016-04-13 05:17:50     -2.330789
2016-04-14 08:43:09     17.636638
2016-04-17 21:15:12     -0.454655
2016-04-19 06:10:04     -0.026375
2016-04-19 06:10:04     -0.175647
...

Я написал следующие строки на python:

from statsmodels.tsa.holtwinters import ExponentialSmoothing
from matplotlib import pyplot as plt
import numpy as np 
import pandas as pd
train_size = int(len(myTimeSeries) * 0.66)
train, test = myTimeSeries[1:train_size], myTimeSeries[train_size:]

model = ExponentialSmoothing(train)
model_fit = model.fit()
dict=model.params
params=np.array(list(dict.items()))
dates=test.index.astype(str)
pred = model.predict(params,start=dates[2], end=dates[-1])
plt.plot(train, label='Train')
plt.plot(test, label='Test')
plt.plot(pred, label='Holt-Winters')
plt.legend(loc='best')

У меня была проблема с функцией model.predict, поэтому япо мере необходимости добавлял значения параметров, получая их из класса model после его fit.Я не уверен, что у меня все хорошо, но я не нашел столько вокруг .Кроме того, у меня возникла проблема с установкой даты начала (и, возможно, также конца).Он возвращает это: KeyError: 'The start argument could not be matched to a location related to the index of the data.' Как я обнаружил здесь , я также перенес дату начала прогноза в третье значение, то есть индекс [2] набора тестовых данных.Я получил то же самое, если я установил [0], [1] и т. Д. Что с этим не так?

Как вы можете видеть, myTimeSeries не имеет фиксированной частоты, но набор значенийслучайным образом.Я нашел разные учебники, такие как , , , этот или , по теории , но они не в тех же условиях: я незнать любые новости (тренд, сезонность и т. д.) о моем наборе данных.Я не нашел никаких нарушенных гипотез для этого: предупредите меня, если я ошибаюсь.Я имел обыкновение рассматривать мое руководство по теории, что я нашел здесь .Более того, этот пост охватывает аналогичную проблему, но не совсем то же самое.

1 Ответ

0 голосов
/ 25 сентября 2018

Я думаю, может быть, вы просто хотите:

pred = model_fit.forecast(len(test))

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

...