Я использую следующий код, чтобы получить простое экспоненциальное сглаживание в 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
EmJ 19 Апр 2020 в 06:18

2 ответа

Лучший ответ

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

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

Я пробовал несколько вещей, например преобразование преобразования индекса в 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 простого экспоненциального сглаживания, если значение установлено, то это значение будет использоваться в качестве значения.

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

1
Joe 19 Апр 2020 в 11:31

Из документации:

«Простое экспоненциальное сглаживание имеет« плоскую »функцию прогноза.

То есть все прогнозы принимают одинаковое значение, равное компоненту последнего уровня. Помните, что эти прогнозы будут подходящими, только если временной ряд не имеет тренда или сезонной составляющей ».

https://otexts.com/fpp2/ses.html

1
Troy D 2 Июн 2020 в 14:46