Почему экспоненциальное сглаживание в statsmodels возвращает одинаковые значения для прогноза временных рядов? - PullRequest
1 голос
/ 19 апреля 2020

Я использую следующий код для получения простого экспоненциального сглаживания в statsmodels.

years = [1979,1980,1981,1982,1983,1984,1985,1986,1987,1988]
mylist = [3.508046180009842, 64.08556070923805, 15.407086104154587, 0, 3.8572598099708557, 11.009202659130096, 5.324577212333679, 4.33474725484848, 4.024865210056305, 5.065838277339935]

import pandas as pd
from statsmodels.tsa.api import ExponentialSmoothing, SimpleExpSmoothing
myinput = pd.Series(mylist, years)
fit_model = SimpleExpSmoothing(myinput).fit()
smoothed = fit_model.fittedvalues
print(smoothed.tolist())

Результат, который я получил, был довольно удивительным. т.е. я получаю одно и то же значение для каждого года.

[11.661719028226004, 11.661719028226004, 11.661719028226004, 11.661719028226004, 11.661719028226004, 11.661719028226004, 11.661719028226004, 11.661719028226004, 11.661719028226004, 11.661719028226004]

Мне интересно, почему я получаю одинаковое значение для каждого года. Пожалуйста, дайте мне знать, как это исправить?

Я рад предоставить более подробную информацию, если это необходимо.

1 Ответ

1 голос
/ 19 апреля 2020

Эта ошибка возникает, если индекс не относится к типу DatetimeIndex или RangeIndex.

В вашем случае список просто преобразуется в "обычный" Int64Index.

* 1007. * Я пробовал несколько вещей, например, конвертирование индекса в RangeIndex
myinput = pd.Series(mylist, range(1979, 1989))

или DatetimeIndex

years_index = [datetime(_, 1, 1) for _ in years] 
myinput = pd.Series(mylist, years_index)

, но есть еще одно исключение.

Я думаю, что решение вашей проблемы состоит в том, чтобы указать ключевое слово аргумента smoothing_level для соответствия, например

fit_model = SimpleExpSmoothing(myinput).fit(smoothing_level=0.2)

Тогда возвращаемые числа не будут идентичными. Я не проверял результаты, но большую часть кода для построения графика можно найти в учебнике statsmodel .

Значение по умолчанию, похоже, smoothing_level=None, но я не уверен, почему функция подгонки не работает из коробки.

Состояние только документов

Значение smoothing_level простого экспоненциального сглаживания, если значение установлено, то это значение будет использоваться в качестве значения.

Этот является описанием простого метода экспоненциального сглаживания, как упомянуто в документации, если вас интересует, как определяется уровень сглаживания.

...