为什么 statsmodels 中的指数平滑 return 时间序列预测的相同值?
Why does exponential smoothing in statsmodels return identical values for a time series forecast?
我正在使用以下代码在 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]
我想知道为什么我每年都得到相同的值。请让我知道如何解决这个问题?
如果需要,我很乐意提供更多详细信息。
如果索引不是 DatetimeIndex
或 RangeIndex
类型,则会引发此错误。
在你的情况下,列表只是转换为 "normal" Int64Index
.
我尝试了几件事,例如converting 将索引转换为
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 函数不能开箱即用。
文档仅说明
The smoothing_level value of the simple exponential smoothing, if the value is set then this value will be used as the value.
This 是文档中提到的简单指数平滑方法的描述,如果您对如何定义平滑级别感兴趣。
来自文档:
“简单指数平滑具有“平坦”的预测功能。
也就是说,所有预测都取相同的值,等于最后一级组件。请记住,这些预测仅适用于时间序列没有趋势或季节性成分的情况。"
我正在使用以下代码在 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]
我想知道为什么我每年都得到相同的值。请让我知道如何解决这个问题?
如果需要,我很乐意提供更多详细信息。
如果索引不是 DatetimeIndex
或 RangeIndex
类型,则会引发此错误。
在你的情况下,列表只是转换为 "normal" Int64Index
.
我尝试了几件事,例如converting 将索引转换为
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 函数不能开箱即用。
文档仅说明
The smoothing_level value of the simple exponential smoothing, if the value is set then this value will be used as the value.
This 是文档中提到的简单指数平滑方法的描述,如果您对如何定义平滑级别感兴趣。
来自文档:
“简单指数平滑具有“平坦”的预测功能。
也就是说,所有预测都取相同的值,等于最后一级组件。请记住,这些预测仅适用于时间序列没有趋势或季节性成分的情况。"