【问题标题】:Why does exponential smoothing in statsmodels return identical values for a time series forecast?为什么 statsmodels 中的指数平滑会为时间序列预测返回相同的值?
【发布时间】:2020-08-01 13:52:41
【问题描述】:

我正在使用以下代码在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]

我想知道为什么我每年都得到相同的值。请告诉我如何解决这个问题?

如果需要,我很乐意提供更多详细信息。

【问题讨论】:

    标签: python time-series signal-processing statsmodels smoothing


    【解决方案1】:

    来自文档:

    “简单的指数平滑具有“平坦”的预测功能。

    也就是说,所有预测都取相同的值,等于最后一级分量。请记住,这些预测仅适用于时间序列没有趋势或季节性成分的情况。”

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

    【讨论】:

    • 如果这个预测函数实际上并没有预测任何东西,它还有什么意义呢?
    • @orenrevenge 它所做的只是预测未来值是观察到的过去值的加权平均值。如果您有一系列 [8, 12, 9, 11],它将预测所有未来值都约为 10 左右。它实际上只是在做加权平均。它比 Naive 模型稍微复杂一些,Naive 模型只是预测每个未来值都将与上次观察到的值相同。
    【解决方案2】:

    如果索引不是DatetimeIndexRangeIndex 类型,则会引发此错误。

    在您的情况下,列表只是简单地转换为“正常”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 tutorial找到。

    默认值似乎是smoothing_level=None,但我不确定为什么 fit 函数不能开箱即用。

    文档仅说明

    简单指数平滑的smoothing_level值,如果设置了该值,则以该值作为值。

    This 是文档中提到的简单指数平滑方法的描述,如果您对如何定义平滑级别感兴趣。

    【讨论】:

      猜你喜欢
      • 2019-01-03
      • 2018-09-24
      • 2022-07-16
      • 2019-01-06
      • 2020-01-09
      • 2016-06-27
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多