指数平滑法是一种用于单变量时间序列预测的方法,它可以扩展以支持具有系统性趋势或季节性成分的数据。
它是一种强大的预测方法,可以作为流行的 Box-Jenkins ARIMA 系列方法的替代方案。
在本教程中,您将了解用于单变量时间序列预测的指数平滑法。
完成本教程后,您将了解:
- 什么是指数平滑法,以及它与其他预测方法有何不同。
- 三种主要的指数平滑法及其配置方法。
- 如何在 Python 中实现指数平滑法。
启动您的项目,阅读我的新书《Python 时间序列预测入门》,其中包含分步教程和所有示例的Python 源代码文件。
让我们开始吧。

Python 中用于时间序列预测的指数平滑法简明介绍
照片由 Wolfgang Staudt 提供,保留部分权利。
教程概述
本教程分为4个部分,它们是:
- 什么是指数平滑法?
- 指数平滑法的类型
- 如何配置指数平滑法
- Python 中的指数平滑法
什么是指数平滑法?
指数平滑法是一种用于单变量数据的时间序列预测方法。
像 Box-Jenkins ARIMA 系列方法这样的时间序列方法会建立一个模型,其中预测是近期过去观测值或滞后值的加权线性组合。
指数平滑预测方法与之类似,预测是过去观测值的加权和,但该模型明确使用指数衰减的权重来表示过去的观测值。
具体来说,过去的观测值以几何衰减的比率进行加权。
使用指数平滑法生成的预测是过去观测值的加权平均值,随着观测值变老,权重呈指数衰减。换句话说,观测值越近期,其关联权重越高。
— 第 171 页,预测:原理与实践,2013。
指数平滑法可以被视为时间序列预测中流行的 Box-Jenkins ARIMA 方法类别的同行和替代方案。
总而言之,这些方法有时被称为 ETS 模型,指代了对误差 (Error)、趋势 (Trend) 和季节性 (Seasonality) 的显式建模。
指数平滑法的类型
指数平滑法时间序列预测方法有三种主要类型。
一种假设没有系统性结构(简单方法),一种扩展方法,它明确处理趋势,以及最先进的方法,它增加了对季节性的支持。
简单指数平滑法
简单指数平滑法,简称 SES,也称为简单指数平滑法,是一种用于无趋势或季节性的单变量数据的时间序列预测方法。
它需要一个参数,称为 alpha(a),也称为平滑因子或平滑系数。
此参数控制先前时间步长观测值指数衰减的速率。Alpha 通常设置为 0 到 1 之间的值。较大的值意味着模型主要关注最近的过去观测值,而较小的值意味着在进行预测时会考虑更多的历史。
接近 1 的值表示快速学习(即,只有最近的值会影响预测),而接近 0 的值表示慢速学习(过去的观测值对预测有很大影响)。
— 第 89 页,R 实用时间序列预测,2016。
超参数
- Alpha:水平的平滑因子。
双重指数平滑法
双重指数平滑法是指数平滑法的一个扩展,它明确地为单变量时间序列中的趋势增加了支持。
除了用于控制水平的平滑因子的 alpha 参数外,还增加了一个额外的平滑因子来控制趋势变化影响的衰减,称为 beta(b)。
该方法支持以不同方式变化的趋势:加法和乘法,分别取决于趋势是线性的还是指数型的。
具有加法趋势的双重指数平滑法通常被称为 Holt 线性趋势模型,以该方法开发者 Charles Holt 的名字命名。
- 加法趋势:具有线性趋势的双重指数平滑法。
- 乘法趋势:具有指数趋势的双重指数平滑法。
对于更长期的(多步)预测,趋势可能会持续不切实际。因此,随着时间的推移,减少趋势的大小可能很有用。
阻尼意味着将未来时间步长的趋势大小减小到一个直线(无趋势)。
Holt 线性方法生成的预测在未来显示出恒定的趋势(增加或减少)。指数趋势方法生成的预测甚至更极端……基于此观察……引入了一个参数,该参数在未来某个时候将趋势“阻尼”为一条直线。
— 第 183 页,预测:原理与实践,2013。
与趋势本身的建模一样,我们可以使用相同的原理来阻尼趋势,特别是加法或乘法以获得线性的或指数的阻尼效果。阻尼系数 Phi(p)用于控制阻尼速率。
- 加法阻尼:线性阻尼趋势。
- 乘法阻尼:指数阻尼趋势。
超参数
- Alpha:水平的平滑因子。
- Beta:趋势的平滑因子。
- 趋势类型:加法或乘法。
- 阻尼类型:加法或乘法。
- Phi:阻尼系数。
三重指数平滑法
三重指数平滑法是指数平滑法的一个扩展,它明确地为单变量时间序列增加了对季节性的支持。
此方法有时称为 Holt-Winters 指数平滑法,以该方法的两位贡献者 Charles Holt 和 Peter Winters 的名字命名。
除了 alpha 和 beta 平滑因子外,还增加了一个新的参数,称为 gamma(g),它控制对季节性成分的影响。
与趋势一样,季节性可以建模为加法或乘法过程,以获得线性的或指数的季节性变化。
- 加法季节性:具有线性季节性的三重指数平滑法。
- 乘法季节性:具有指数季节性的三重指数平滑法。
三重指数平滑法是指数平滑法中最先进的变体,通过配置,它也可以开发双重和单重指数平滑模型。
作为一种自适应方法,Holt-Winters 指数平滑法允许水平、趋势和季节性模式随时间变化。
— 第 95 页,R 实用时间序列预测,2016。
此外,为确保正确建模季节性,必须指定季节性周期中的时间步数(周期)。例如,如果序列是月度数据,并且季节性周期每年重复一次,则周期=12。
超参数
- Alpha:水平的平滑因子。
- Beta:趋势的平滑因子。
- Gamma:季节性的平滑因子。
- 趋势类型:加法或乘法。
- 阻尼类型:加法或乘法。
- Phi:阻尼系数。
- 季节性类型:加法或乘法。
- 周期:季节性周期的时间步数。
如何配置指数平滑法
所有模型超参数都可以显式指定。
这可能对专家和初学者来说都很有挑战性。
相反,通常使用数值优化来搜索并找到导致最低误差的模型的平滑系数(alpha、beta、gamma 和 phi)。
[…] 获得任何指数平滑法中未知参数的更稳健和客观的方法是从观测数据中估计它们。 […] 未知参数和任何指数平滑法的初始值可以通过最小化 SSE [平方误差和] 来估计。
— 第 177 页,预测:原理与实践,2013。
指定趋势和季节性变化类型的参数,例如它们是加法还是乘法,以及是否应阻尼它们,必须显式指定。
Python 中的指数平滑法
本节介绍如何在 Python 中实现指数平滑法。
Python 中指数平滑法的实现由 Statsmodels Python 库提供。
这些实现基于 Rob Hyndman 和 George Athanasopoulos 的优秀著作“预测:原理与实践”(2013 年)中对该方法的描述以及他们在其“forecast” R 包中的 R 实现。
简单指数平滑法
简单指数平滑法或简单平滑法可以通过 SimpleExpSmoothing Statsmodels 类在 Python 中实现。
首先,必须实例化 SimpleExpSmoothing 类并传入训练数据。然后调用 fit() 函数,提供拟合配置,特别是称为 smoothing_level 的 alpha 值。如果未提供或设置为 None,模型将自动优化该值。
此 fit() 函数返回一个 HoltWintersResults 类实例,其中包含学习到的系数。可以在结果对象上调用 forecast() 或 predict() 函数来生成预测。
例如
1 2 3 4 5 6 7 8 9 10 11 |
# 简单指数平滑法 ... from statsmodels.tsa.holtwinters import SimpleExpSmoothing # 准备数据 数据 = ... # 创建类 model = SimpleExpSmoothing(data) # 拟合模型 model_fit = model.fit(...) # 进行预测 yhat = model_fit.predict(...) |
双重和三重指数平滑法
可以使用 ExponentialSmoothing Statsmodels 类在 Python 中实现单重、双重和三重指数平滑法。
首先,必须实例化 ExponentialSmoothing 类,同时指定训练数据和模型的一些配置。
具体来说,您必须指定以下配置参数:
- trend:趋势分量类型,可以是“add”(加法)或“mul”(乘法)。通过将其设置为 None 可以禁用趋势建模。
- damped:趋势分量是否应该被阻尼,可以是 True 或 False。
- seasonal:季节性分量类型,可以是“add”(加法)或“mul”(乘法)。通过将其设置为 None 可以禁用季节性建模。
- seasonal_periods:季节性周期的步数,例如,对于每年重复的季节性结构,12 个月为 12(更多信息)。
然后可以通过调用 fit() 函数在训练数据上拟合模型。
此函数允许您指定指数平滑模型的平滑系数,或者让它们被优化。默认情况下,它们被优化(例如,optimized=True)。这些系数包括:
- smoothing_level(alpha):水平的平滑系数。
- smoothing_slope(beta):趋势的平滑系数。
- smoothing_seasonal(gamma):季节性分量的平滑系数。
- damping_slope(phi):阻尼趋势的系数。
此外,fit 函数可以在建模之前执行基本数据准备;具体来说:
- use_boxcox:是否对序列执行幂变换(True/False)或指定变换的 lambda。
fit() 函数将返回一个 HoltWintersResults 类实例,其中包含学习到的系数。可以在结果对象上调用 forecast() 或 predict() 函数来生成预测。
1 2 3 4 5 6 7 8 9 10 11 |
# 双重或三重指数平滑法 ... from statsmodels.tsa.holtwinters import ExponentialSmoothing # 准备数据 数据 = ... # 创建类 model = ExponentialSmoothing(data, ...) # 拟合模型 model_fit = model.fit(...) # 进行预测 yhat = model_fit.predict(...) |
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
教程
书籍
- 第 7 章 指数平滑法,预测:原理与实践,2013。
- 第 6.4 节。时间序列分析简介,工程统计手册,2012。
- R语言实用时间序列预测, 2016.
API
- Statsmodels 时间序列分析 tsa
- statsmodels.tsa.holtwinters.SimpleExpSmoothing API
- statsmodels.tsa.holtwinters.ExponentialSmoothing API
- statsmodels.tsa.holtwinters.HoltWintersResults API
- forecast:时间序列和线性模型 R 包的预测函数
文章
总结
在本教程中,您了解了单变量时间序列预测的指数平滑法。
具体来说,你学到了:
- 什么是指数平滑法,以及它与其他预测方法有何不同。
- 三种主要的指数平滑法及其配置方法。
- 如何在 Python 中实现指数平滑法。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
嗨,Jason,
非常感谢您的帖子。这是非常有用的资源。我想知道如何安装“statsmodels.tsa.holtwinters”,因为我在运行命令时遇到了错误。
from statsmodels.tsa.holtwinters import ExponentialSmoothing
似乎 statsmodels 包没有这个命令。
您能帮我解决这个问题吗?
谢谢,
Sandeep
这很大程度上取决于您的平台,例如
或者,可以尝试这个教程
https://machinelearning.org.cn/setup-python-environment-machine-learning-deep-learning-anaconda/
你好 Jason,
我正在处理一个大型数据集的预测项目,该数据集包含 15 列和约 9000 行。问题是我必须根据 14 列独立数据预测未来两年的结果,并且结果应该是二元的(0,1)。
我在网上看到了许多预测问题,但它们大多是基于仅一列独立数据进行预测,且结果不是二元的。
是否有任何方法可以指导我或推荐任何参考资料来解决这个问题?
在此先感谢,
Ehsan
是的,神经网络可以轻松地预测多个变量,可以从 MLP 开始。
也许您的问题是二元分类而不是预测问题。请仔细看看。
嗨 Jason
感谢您的帖子。
我在 R 和 Python 中对 DES 方法的结果不一致。Python ETS 是否不是 Hyndman 等人(2008 年)所描述的完整实现?R ETS 方法有太多控制标志?请澄清。
————–
R 代码
——————
> x
一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月
1 36 78 35 244 25 283 42 6 59 5 47 20
2 0 0 5 38 16 143 14 37 60 2 55 0
3 0
> fit forecast::forecast(fit, h=1)
点预测 Lo 80 Hi 80 Lo 95 Hi 95
二月 3 -2.728456 -96.36635 90.90943 -145.9353 140.4783
>
———————
Python
———————-
dft
Out[42]
quantity
month_end
2016-01-31 36
2016-02-29 78
2016-03-31 35
2016-04-30 244
2016-05-31 25
2016-06-30 283
2016-07-31 42
2016-08-31 6
2016-09-30 59
2016-10-31 5
2016-11-30 47
2016-12-31 20
2017-01-31 0
2017-02-28 0
2017-03-31 5
2017-04-30 38
2017-05-31 16
2017-06-30 143
2017-07-31 14
2017-08-31 37
2017-09-30 60
2017-10-31 2
2017-11-30 55
2017-12-31 0
holt_r = ets.ExponentialSmoothing(np.abs(dft), trend=’additive’, damped=False, seasonal=None).fit()
C:\Anaconda\lib\site-packages\statsmodels\tsa\base\tsa_model.py:171: ValueWarning: 未提供频率信息,因此将使用推断的频率 M。
% freq, ValueWarning)
holt_r.forecast(1)
Out[44]
2018-01-31 13.049129
Freq: M, dtype: float64
抱歉,我不知道 R 中 ETS 的实现。
嗨,Jason,
Hyndman 已发布了《预测、原理与实践》的新版本。可免费获取:https://otexts.org/fpp2/。
祝好,
Elie
谢谢。
感谢分享这本书的链接。
这是一本很棒的书!
感谢分享——内容清晰、易懂,还有不错的后续资源!
不客气!
感谢您分享关于指数平滑法的非常精彩且有用的内容。
谢谢!
嗨,Jason博士,
我想知道一件事。
假设我平滑了整个时间序列数据,然后我拟合模型并进行了预测。
我的问题是,我应该对预测进行反平滑还是不进行反平滑来计算误差?
如果您的平滑目标是使问题更容易学习,那么则无需更改。
反平滑具体是什么样的?添加随机噪声?
嗨 Jason
我有一些关于序列预测可能方法的问题。
输入 y_0=100, y_1=y_0*0.96, y_2=y_1*0.97=y_0*0.96*0.97, y_3=y_2*0.978=y_0*0.96*0.97*0.978
预测 y_k
这看起来像 y_k 具有指数函数的动态衰减因子。
y_k=y_0*((D_k)^(k))
如果我使用 0.96,0.97.0.978 的平均变化率
那么 y_k=y_0*(0.96^k)*(((0.97/0.96)+(0.978/0.97))/2)^(1+2+3..k) =y_0*(0.96^k)*(1.009)^(k*(k+1)/2)
那么 log(y_k)=a+b*k+c*(k^2)。
我应该使用三重指数平滑法还是 LSTM 来预测 y_k?还是有其他可能的方法?
如果输入 y_0, y_1, y_2 是不确定的。例如 y_0=100,101或103 y_1=100*0.963, 101*0.964或103*0.966。我应该使用哪种方法来预测 y_k(只有一个值)?
可以尝试多种方法,找出最适合您特定数据集的方法。
嗨 Jason,谢谢您。这真的很有帮助。
您能否也介绍一下 Python 中的 Brown 双重或 LES 模型?
感谢您的建议。
嗨,Jason,
当我使用 statsmodel 运行 SimpleExpSmoothing 和 Holtwinters 模型时,我收到以下错误。
AttributeError: ‘Holt’ object has no attribute ‘_get_prediction_index’
这是我的代码:
from statsmodels.tsa.holtwinters import ExponentialSmoothing,Holt,SimpleExpSmoothing
fit2 = SimpleExpSmoothing(np.asarray(Train['Count']))
fit2._index = pd.to_datetime(Train.index)
pred = fit2.fit()
y_hat_avg['SES'] = pred.forecast(len(valid))
谢谢!
很抱歉听到这个消息,您能否确认您的 statsmodels 版本是最新的?
嗨,Jason,
我想问一下,是否有迭代函数,每次有新数据进来时,不需要重新计算 ExponentialSmoothing,而只需添加新数据(更新模型)?
好问题。
我相信您可能需要自己实现。
作为这个分析领域的新手,我该如何熟悉统计学术语?如何最好地让自己适应统计学术语?
也许从这里开始
https://machinelearning.org.cn/start-here/#statistical_methods
你好,Jason!
我看到您在示例中使用了 ExponentialSmoothing 来实现双重指数平滑法。您能解释一下为什么没有使用 statsmodels 的 Holt API 吗?我已包含我所指模型的链接。https://statsmodels.cn/dev/generated/statsmodels.tsa.holtwinters.Holt.html
看起来两者都可以用于双重指数平滑法。只是想知道您为什么选择一种而不是另一种。谢谢!
没什么特别的原因,我只是为了示例的一致性。
您是否更喜欢一种而不是另一种?如果喜欢,为什么?
谢谢回复!我是一名新手,大约一年半前才自学了 Python。
我使用了您的方法,然后尝试了 Holt 方法,但据我所见,结果却是一团糟。与关闭季节性的 ExponentialSmoothing 相比,结果存在很大的差异。
我不想劫持这次对话,但我有一个关于预留(holdout)预测的问题,如果您不介意的话。我在您的一篇指南中看到您计算了实际值与预测值的 RMSE,但我认为您只计算了一个时期。我目前正在进行为期 6 个月的预留预测,最初只是像这样运行我的模型:
# model2 = ExponentialSmoothing(data[:-6], trend=’add’, seasonal=None, damped=False).fit(smoothing_level=0.1, smoothing_slope=0.1, optimized=False)
# fcast2 = model2.forecast(6)
然后我将使用预测值与实际值来计算 RMSE。有人告诉我这样做不是最佳实践,因为我应该一次一个时期地进行预留预测。基本上,我会将 model2.forecast(1) 应用于 data[:-6],然后将 model3.forecast(1) 应用于 data[:-5],依此类推。
如果您不介意,我将不胜感激!
好问题。
这取决于您想如何使用模型,以及您想如何评估它。
例如,如果最重要的是单步预测,那么就评估其在此方面的能力。如果是 n 步预测,那么您可能想知道在多次预测中每一步的平均误差。
这篇帖子可能为您提供有关向前滚动验证的一些想法。
https://machinelearning.org.cn/backtest-machine-learning-models-time-series-forecasting/
谢谢!这篇文章太棒了。看起来向前滚动验证是正确的方法,尽管运行所有这些双重指数平滑会大大增加运行时间。我想我需要重写我的 DoubleExpo 函数以使用多进程或多线程。
您接受比特币捐赠吗?您的网站在我预测的道路上非常有帮助。
很好,是的,一个为速度而定制的实现也会是我的选择。
谢谢!
我接受 PayPal 捐赠,如果那还有效的话。
https://machinelearning.org.cn/support/
我想进行单步预测,使用以下代码:
from statsmodels.tsa.holtwinters import HoltWintersResults
model_fit_se = HoltWintersResults.initialize(‘model_se.pkl’,smoothing_level=0.8,smoothing_slope=0.2,optimized=False)
yhat = model_fit_se.forecast()[0]
print(‘Predicted: %.3f’ % yhat)
但我得到了这个错误:
TypeError: initialize() 缺少 2 个必需的位置参数:“model”和“params”
我认为问题出在参数部分……如何解决?
抱歉,我没有好建议,或许可以尝试把你的代码和错误发布到stackoverflow上?
嗨,Jason,
非常直观的文章!我想知道您是否知道如何处理关于时间窗口的最优准则。例如,我想选择一个模型,该模型优化未来12个周期数据的MSE之和,而不是仅仅优化下一个周期。
如何根据您的模型实现这一目标?
提前感谢!
谢谢。
是的,您可以尝试网格搜索,并通过前向验证来运行您自己的预测评估。
我举了一个例子
https://machinelearning.org.cn/how-to-grid-search-triple-exponential-smoothing-for-time-series-forecasting-in-python/
谢谢Jason!我相信这篇文章对于那些在寻找等同于R中Hyndman的ETS函数的Python函数的人来说是救命稻草(如果我错了请纠正我)。
我只想确保我正确理解了这个方法。
如果我要最小化未来12个周期的rmse之和,我是否应该在_walk_forward_validation_函数中做一些更改,以确保它返回未来12个周期的rmse之和?
谢谢。
是的。
Jason您好,您能告诉我如何在Python中计算指数平滑的置信区间吗?也就是说,在预测的同时获得CI?
抱歉,我没有例子。
抱歉,也许我错过了什么。如果fit方法是自动优化的,为什么我们要进行网格搜索?
用于测试搜索的不同超参数。
抱歉,我有一个问题,我无法使用predict,也不知道为什么。你能帮我吗?
…
from statsmodels.tsa.holtwinters import SimpleExpSmoothing
data=y
model=SimpleExpSmoothing(data)
model1=model.fit
yhat=model1.predict(21)
plt.figure()
plt.plot(yhat)
回溯(最近一次调用)
File “”, line 5, in
yhat=model1.predict(21)
AttributeError: ‘function’ object has no attribute ‘predict’
我不确定为什么没有predict
调用fit()后不需要再赋值给model1。它已经被赋值了。
嗨,Jason,
我想了解更多关于平滑值和阻尼值是什么以及如何选择它们的信息?它们的范围是多少?如果您有相关文章,请与我分享。
提前感谢!!
是的,请参阅“更多阅读”部分中列出的参考文献。
Jason Brownlee,我将引用此页面。您能提供正式的引用链接吗?我的意思是,此页面上的信息是否属于您的任何研究论文?
是的,请看这个
https://machinelearning.org.cn/faq/single-faq/how-do-i-reference-or-cite-a-book-or-blog-post
您好!在哪本电子书中可以找到以上主题“Python中指数平滑时间序列预测的温和介绍”?非常好。我没有在《Python时间序列预测导论》中找到。
这本。
https://machinelearning.org.cn/deep-learning-for-time-series-forecasting/
嗨,Jason,
我想要“data”本身平滑后的结果。这些是正确的步骤吗:用“data”拟合SimpleExpSmoothing。然后对“data”运行.predict?谢谢。
我不确定我是否理解,抱歉。你可以在这里自己平滑数据(例如移动平均)。
https://machinelearning.org.cn/moving-average-smoothing-for-time-series-forecasting-python/
明白了!调用.fit后,返回一个HoltWintersResults对象,我们可以调用fitted_values属性来获取使用该函数平滑后的原始数据。
来源
https://statsmodels.cn/dev/generated/statsmodels.tsa.holtwinters.SimpleExpSmoothing.fit.html#statsmodels.tsa.holtwinters.SimpleExpSmoothing.fit
https://statsmodels.cn/dev/generated/statsmodels.tsa.holtwinters.HoltWintersResults.html#statsmodels.tsa.holtwinters.HoltWintersResults
太棒了!
嗨 Jason,
非常感谢您发布的所有帖子。它们非常有帮助,我总是回来阅读您的帖子。
我有一个关于如何处理HoltWinters数据缺失的问题。
我应该填充缺失的数据吗?
例如,当我使用LineraRegression获取线性趋势时,我会考虑日期之间的间隔来移动索引,并将索引用作X。
原始df:移动后的df
ind date value ind date value
0 2002-10-02 10 0 2002-10-02 10
1 2002-10-03 11 1 2002-10-03 11
2 2002-10-05 10 3 2002-10-05 10
3 2002-10-06 13 4 2002-10-06 13
…… ……
对于HoltWinters,最好的方法是什么?使用插值/外插?
您对HoltWinters有什么建议?SARIMA也是同样的问题。
谢谢你
不客气。
这里有一些建议。
https://machinelearning.org.cn/faq/single-faq/how-do-i-handle-discontiguous-time-series-data
嘿Jason,当我使用ETS [holtwinter]并设置以下参数时
数据 – 2015至2020年(月度频率)
训练期 – 2015至2019年
测试期 – 2019年至2020年
当我预测13或14个月时,我看到数字在12个月后重复出现,即第1个月的数字出现在第13个月,依此类推……。
您能建议我可能出了什么问题吗?
我的ETS代码如下
def ETS_method_Updated(train_df,test_df)
ets_model = ExponentialSmoothing(endog=train_df[‘Sales Retail’],damped=True,trend=”add”,seasonal=’mul’,seasonal_periods=12).fit()
predicted_val_test_ets = ets_model.predict(start=test_df.index.min(),end=test_df.index.max())
fitted_val_ets = ets_model.fittedvalues
In_sample_mape_ets = mean_absolute_percentage_error(train_df[‘Sales Retail’],fitted_val_ets)
out_of_sample_mape_ets = mean_absolute_percentage_error(test_df[‘Sales Retail’],predicted_val_test_ets)
return ets_model,fitted_val_ets,predicted_val_test_ets,In_sample_mape_ets,out_of_sample_mape_ets
或许可以探索模型的其他配置?
或许在建模之前尝试进行数据预处理?
也许尝试其他模型?
最新的statsmodels Python库在statsmodels.tsa.holtwinters.ExponentialSmoothing中会出现导入错误。
你确定吗?看看这个
https://statsmodels.cn/dev/generated/statsmodels.tsa.holtwinters.ExponentialSmoothing.html
或许检查一下你的版本。
嗨,Jason,
感谢您的信息丰富的博客……!
我的数据集有一些负的endog值,因此它给了我一个错误。
“ValueError: endog必须是严格正值,当使用乘法趋势或季节性成分时。”
我不确定为什么会给我这个错误。您能解释一下概念/逻辑吗?
这很令人惊讶。我以前没见过这个,抱歉。
非常感谢您发布的最佳帖子,事实上,我的目标是攻读统计学硕士学位,以便在BBA之后能更深入地探索这些内容。
不客气。
你好Jason,谢谢你的博客!
我想知道您是否可以就如何计算与指数平滑预测相关的误差提供任何建议?谢谢!
为什么标准的(例如,均方误差)在这里不适用?
嗨,Jason,
感谢您的博客。它非常有信息量。我想理解,是否可以将指数平滑作为一种预处理技术(即,在将数据馈入SARIMAX/神经网络模型之前,使用指数平滑来平滑数据)?
如果是,我们如何确定数据在输入模型之前需要平滑?
提前感谢。