让我们深入了解如何使用机器学习方法在 Python 中对时间序列问题进行分类和预测。
但首先,让我们回顾并欣赏经典,我们将深入探讨一系列用于时间序列预测的经典方法,您可以在探索机器学习方法之前,在您的预测问题上测试这些方法。
虽然传统方法侧重于线性关系,但它们适用于许多场景,并且效果显著。只要数据准备充分,技术设置得当,您就可以开始了。
本文旨在成为您的完美备忘单,提供关于每种方法的简明见解、可立即使用的 Python 代码片段,以及深入学习的更多提示。
我们所有的代码示例都利用了 Python Statsmodels 库的强大功能。对于初学者来说,这个库的 API 可能很棘手(相信我!),因此拥有一个可用的代码示例作为起点将大大加快您的进度。
这是一篇很长的帖子;您可能需要收藏它。
想深入了解?请查看:用 Python 进行时间序列预测,其中包含分步教程和您所需的所有 Python 源代码。
让我们开始吧。
使用我的新书《用 Python 进行时间序列预测》来**启动您的项目**,其中包括**分步教程**和所有示例的**Python 源代码**文件。
让我们开始吧。
- 2020 年 4 月更新:由于 API 更改,将 AR 更改为 AutoReg。
- 2020 年 12 月更新:将 ARIMA API 更新为最新版本的 statsmodels。
- **2023 年 11 月更新**:已更新,以提高可读性和清晰度。

Python 中的 11 种经典时间序列预测方法(速查表)
图片由Ron Reiring拍摄,保留部分权利。
概述
此备忘单演示了 11 种不同的经典时间序列预测方法;它们是:
- 自回归 (AR)
- 移动平均 (MA)
- 自回归移动平均 (ARMA)
- 自回归积分移动平均 (ARIMA)
- 季节性自回归积分移动平均 (SARIMA)
- 带外生回归量的季节性自回归积分移动平均 (SARIMAX)
- 向量自回归 (VAR)
- 向量自回归移动平均 (VARMA)
- 带外生回归量的向量自回归移动平均 (VARMAX)
- 简单指数平滑 (SES)
- Holt Winter 指数平滑 (HWES)
我是否遗漏了您最喜欢的经典时间序列预测方法?
在下面的评论中告诉我。
每种方法都以一致的方式呈现。
这包括
- 描述。对该技术的简短而精确的描述。
- Python 代码。一个简短的、可用于在 Python 中拟合模型和进行预测的工作示例。
- 更多信息。API 和算法的参考资料。
对于提供的每个代码示例,我们都使用了一个基本的说明性数据集。我们理解它可能并不总是适用于所关注的方法,因此我们建议您用您自己的数据替换这个虚构的数据集,以测试该方法。
请记住:调整每种方法都需要根据您的具体问题进行调整。在许多情况下,我的博客上已经有关于如何配置甚至网格搜索参数的示例,请尝试使用搜索功能。
如果本指南对您有帮助,请在下面的评论区分享您的想法。
自回归 (AR)
自回归 (AR) 方法使用先前观测值的线性组合来预测序列中的后续值。
模型的表示法涉及将模型阶数 p 指定为 AR 函数的参数,例如 AR(p)。例如,AR(1) 是一个一阶自回归模型。
该方法最适合缺乏趋势和季节性成分的单变量时间序列。
Python 代码
1 2 3 4 5 6 7 8 9 10 11 |
# AR 示例 from statsmodels.tsa.ar_model import AutoReg from random import random # 虚构数据集 data = [x + random() for x in range(1, 100)] # 拟合模型 model = AutoReg(data, lags=1) model_fit = model.fit() # 进行预测 yhat = model_fit.predict(len(data), len(data)) print(yhat) |
更多信息
移动平均 (MA)
移动平均 (MA) 方法模型将序列中的下一步预测为先前时间步的平均过程残差误差的线性函数。
值得注意的是,移动平均模型与计算时间序列的移动平均值不同。
模型的表示法涉及将模型阶数 q 指定为 MA 函数的参数,例如 MA(q)。例如,MA(1) 是一个一阶移动平均模型。
该方法适用于没有趋势和季节性成分的单变量时间序列。
我们可以使用 ARIMA 类创建一个 MA 模型,并设置一个零阶 AR 模型。我们必须在 order 参数中指定 MA 模型的阶数。
Python 代码
我们可以使用 ARIMA 类创建一个 MA 模型,并设置一个零阶 AR 模型。我们必须在 order 参数中指定 MA 模型的阶数。
1 2 3 4 5 6 7 8 9 10 11 |
# MA 示例 from statsmodels.tsa.arima.model import ARIMA from random import random # 虚构数据集 data = [x + random() for x in range(1, 100)] # 拟合模型 model = ARIMA(data, order=(0, 0, 1)) model_fit = model.fit() # 进行预测 yhat = model_fit.predict(len(data), len(data)) print(yhat) |
更多信息
自回归移动平均 (ARMA)
自回归移动平均 (ARMA) 方法模型根据过去观测值和过去残差误差的线性组合来预测序列中的下一步。
该方法结合了自回归 (AR) 和移动平均 (MA) 模型。
为了表示该模型,表示法涉及将 AR(p) 和 MA(q) 模型的阶数指定为 ARMA 函数的参数,例如 ARMA(p, q)。ARIMA 模型可用于开发 AR 或 MA 模型。
该方法适用于没有趋势和季节性成分的单变量时间序列。
Python 代码
1 2 3 4 5 6 7 8 9 10 11 |
# ARMA 示例 from statsmodels.tsa.arima.model import ARIMA from random import random # 虚构数据集 data = [random() for x in range(1, 100)] # 拟合模型 model = ARIMA(data, order=(2, 0, 1)) model_fit = model.fit() # 进行预测 yhat = model_fit.predict(len(data), len(data)) print(yhat) |
更多信息
自回归积分移动平均 (ARIMA)
自回归积分移动平均 (ARIMA) 方法模型将序列中的下一步预测为差分观测值和先前时间步的残差误差的线性函数。
该方法结合了自回归 (AR) 和移动平均 (MA) 模型原理,以及对序列进行差分预处理以使序列平稳化的步骤,称为积分 (I)。
模型的表示法涉及将 AR(p)、I(d) 和 MA(q) 模型的阶数指定为 ARIMA 函数的参数,例如 ARIMA(p, d, q)。ARIMA 模型也可用于开发 AR、MA 和 ARMA 模型。
ARIMA 方法适用于具有趋势但缺乏季节性变化的单变量时间序列。
Python 代码
1 2 3 4 5 6 7 8 9 10 11 |
# ARIMA 示例 from statsmodels.tsa.arima.model import ARIMA from random import random # 虚构数据集 data = [x + random() for x in range(1, 100)] # 拟合模型 model = ARIMA(data, order=(1, 1, 1)) model_fit = model.fit() # 进行预测 yhat = model_fit.predict(len(data), len(data), typ='levels') print(yhat) |
更多信息
季节性自回归积分移动平均 (SARIMA)
季节性自回归积分移动平均 (SARIMA) 方法根据先前时间步的差分观测值、误差、差分季节性观测值和季节性误差的线性混合来模拟序列中的下一步。
SARIMA 增强了 ARIMA 模型,使其能够在季节性水平上执行相同的自回归、差分和移动平均建模。
该模型的表示法涉及将 AR(p)、I(d) 和 MA(q) 模型的阶数指定为 ARIMA 函数的参数,以及季节性级别的 AR(P)、I(D)、MA(Q) 和 m 参数,例如 SARIMA(p, d, q)(P, D, Q)m,其中“m”是每个季节中的时间步数(季节周期)。SARIMA 模型可用于开发 AR、MA、ARMA 和 ARIMA 模型。
该方法适用于具有趋势和/或季节性成分的单变量时间序列。
Python 代码
1 2 3 4 5 6 7 8 9 10 11 |
# SARIMA 示例 from statsmodels.tsa.statespace.sarimax import SARIMAX from random import random # 虚构数据集 data = [x + random() for x in range(1, 100)] # 拟合模型 model = SARIMAX(data, order=(1, 1, 1), seasonal_order=(0, 0, 0, 0)) model_fit = model.fit(disp=False) # 进行预测 yhat = model_fit.predict(len(data), len(data)) print(yhat) |
更多信息
- statsmodels.tsa.statespace.sarimax.SARIMAX API
- statsmodels.tsa.statespace.sarimax.SARIMAXResults API
- 维基百科上的自回归积分移动平均
带外生回归量的季节性自回归积分移动平均 (SARIMAX)
带有外生回归量的季节性自回归积分移动平均 (SARIMAX) 是 SARIMA 模型的扩展,它还包括对外生变量的建模。
外生变量也称为协变量,可以看作是与原始序列在同一时间步具有观测值的并行输入序列。主序列可以称为内生数据,以区别于外生序列。外生变量的观测值直接包含在模型中每个时间步,并且不像主要内生序列(例如,作为 AR、MA 等过程)那样建模。
SARIMAX 方法也可以用于建模带有外生变量的子模型,例如 ARX、MAX、ARMAX 和 ARIMAX。
该方法适用于具有趋势和/或季节性成分以及外生变量的单变量时间序列。
Python 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# SARIMAX 示例 from statsmodels.tsa.statespace.sarimax import SARIMAX from random import random # 虚构数据集 data1 = [x + random() for x in range(1, 100)] data2 = [x + random() for x in range(101, 200)] # 拟合模型 model = SARIMAX(data1, exog=data2, order=(1, 1, 1), seasonal_order=(0, 0, 0, 0)) model_fit = model.fit(disp=False) # 进行预测 exog2 = [200 + random()] yhat = model_fit.predict(len(data1), len(data1), exog=[exog2]) print(yhat) |
更多信息
- statsmodels.tsa.statespace.sarimax.SARIMAX API
- statsmodels.tsa.statespace.sarimax.SARIMAXResults API
- 维基百科上的自回归积分移动平均
向量自回归 (VAR)
向量自回归 (VAR) 方法使用 AR 模型方法对每个时间序列中的下一步进行建模。本质上,它扩展了 AR 模型以适应多个并行时间序列,例如多元时间序列。
模型的表示法涉及将 AR(p) 模型的阶数指定为 VAR 函数的参数,例如 VAR(p)。
该方法适用于没有趋势和季节性成分的多元时间序列。
Python 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# VAR 示例 from statsmodels.tsa.vector_ar.var_model import VAR from random import random # 带有依赖关系的虚构数据集 data = list() for i in range(100): v1 = i + random() v2 = v1 + random() row = [v1, v2] data.append(row) # 拟合模型 model = VAR(data) model_fit = model.fit() # 进行预测 yhat = model_fit.forecast(model_fit.y, steps=1) print(yhat) |
更多信息
- statsmodels.tsa.vector_ar.var_model.VAR API
- statsmodels.tsa.vector_ar.var_model.VARResults API
- 维基百科上的向量自回归
向量自回归移动平均 (VARMA)
向量自回归移动平均 (VARMA) 方法通过使用 ARMA 模型方法来模拟多个时间序列中的下一个值。它是 ARMA 对多个并行时间序列(即多元时间序列)的推广。
模型的表示法涉及将 AR(p) 和 MA(q) 模型的阶数指定为 VARMA 函数的参数,例如 VARMA(p, q)。VARMA 模型也可用于开发 VAR 或 VMA 模型。
该方法适用于没有趋势和季节性成分的多元时间序列。
Python 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# VARMA 示例 from statsmodels.tsa.statespace.varmax import VARMAX from random import random # 带有依赖关系的虚构数据集 data = list() for i in range(100): v1 = random() v2 = v1 + random() row = [v1, v2] data.append(row) # 拟合模型 model = VARMAX(data, order=(1, 1)) model_fit = model.fit(disp=False) # 进行预测 yhat = model_fit.forecast() print(yhat) |
更多信息
- statsmodels.tsa.statespace.varmax.VARMAX API
- statsmodels.tsa.statespace.varmax.VARMAXResults
- 维基百科上的向量自回归
带外生回归量的向量自回归移动平均 (VARMAX)
带外生回归量的向量自回归移动平均 (VARMAX) 扩展了 VARMA 模型的功能,其中还包括对外生变量的建模。它是 ARMAX 方法的多元版本。
外生变量也称为协变量,可以看作是与原始序列时间步对齐的并行输入序列。主序列称为内生数据,以区别于外生序列。外生变量的观测值直接包含在模型中每个时间步,并且不像主要内生序列(例如,作为 AR、MA 等过程)那样建模。
VARMAX 方法也可以用于建模带有外生变量的子模型,例如 VARX 和 VMAX。
该方法适用于没有趋势和季节性成分且具有外生变量的多元时间序列。
Python 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# VARMAX 示例 from statsmodels.tsa.statespace.varmax import VARMAX from random import random # 带有依赖关系的虚构数据集 data = list() for i in range(100): v1 = random() v2 = v1 + random() row = [v1, v2] data.append(row) data_exog = [x + random() for x in range(100)] # 拟合模型 model = VARMAX(data, exog=data_exog, order=(1, 1)) model_fit = model.fit(disp=False) # 进行预测 data_exog2 = [[100]] yhat = model_fit.forecast(exog=data_exog2) print(yhat) |
更多信息
- statsmodels.tsa.statespace.varmax.VARMAX API
- statsmodels.tsa.statespace.varmax.VARMAXResults
- 维基百科上的向量自回归
简单指数平滑 (SES)
简单指数平滑 (SES) 方法将下一步时间步建模为先前时间步观测值的指数加权线性函数。
该方法适用于没有趋势和季节性成分的单变量时间序列。
Python 代码
1 2 3 4 5 6 7 8 9 10 11 |
# SES 示例 from statsmodels.tsa.holtwinters import SimpleExpSmoothing from random import random # 虚构数据集 data = [x + random() for x in range(1, 100)] # 拟合模型 model = SimpleExpSmoothing(data) model_fit = model.fit() # 进行预测 yhat = model_fit.predict(len(data), len(data)) print(yhat) |
更多信息
- statsmodels.tsa.holtwinters.SimpleExpSmoothing API
- statsmodels.tsa.holtwinters.HoltWintersResults API
- 维基百科上的指数平滑
Holt Winter 指数平滑 (HWES)
Holt Winter 指数平滑 (HWES) 也称为三重指数平滑方法,它将下一步时间步建模为先前时间步观测值的指数加权线性函数,同时考虑趋势和季节性。
该方法适用于具有趋势和/或季节性成分的单变量时间序列。
Python 代码
1 2 3 4 5 6 7 8 9 10 11 |
# HWES 示例 from statsmodels.tsa.holtwinters import ExponentialSmoothing from random import random # 虚构数据集 data = [x + random() for x in range(1, 100)] # 拟合模型 model = ExponentialSmoothing(data) model_fit = model.fit() # 进行预测 yhat = model_fit.predict(len(data), len(data)) print(yhat) |
更多信息
- statsmodels.tsa.holtwinters.ExponentialSmoothing API
- statsmodels.tsa.holtwinters.HoltWintersResults API
- 维基百科上的指数平滑
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
总结
在这篇文章中,您发现了您可以针对您的时间序列数据集进行测试和调整的一系列经典时间序列预测方法。这些方法适用于各种时间序列数据集,使您能够在各种场景和行业中实施它们。无论您处理的是股票市场趋势、天气预报还是销售预测,这些方法都能够提供有价值的预测。
也许有一种您发现特别有效但本文未提及的经典时间序列预测方法。如果是这样,我希望听到您的分享。请在下面的评论中告诉我。
我对您使用这些方法的实际经验很感兴趣。您是否将文章中讨论的任何技术应用于您自己的数据集?请在评论中告诉我您的发现。
深入研究时间序列预测可能会遇到很多问题和不确定性。如果您有任何疑问,请在下面的评论中提出,我将尽力回答。
请记住,您的参与和投入是这个社区蓬勃发展的原因。所以,不要犹豫,分享您的想法、经验和问题。让我们继续在迷人的时间序列预测世界中共同学习和成长!
嗨,Jason,感谢您撰写如此出色且全面的时间序列文章。我衷心感谢您的努力。既然您征求了进一步的主题,我只是想知道是否可以向您请求一个我一直难以得到结果的特定主题。它是关于 Barigozzi, M., Conti, A., and Luciani, M. 的结构动态因子模型(SDFM)(欧元区国家对共同货币政策的反应是否不对称)以及 Mario Forni 和 Luca Gambetti 的(货币政策的动态效应:一种结构因子模型方法)。您能否使用 Python 或 R 对这两个模型进行研究和估计?这只是我的一个请求,如果与您的兴趣不符,我很抱歉。
感谢您的建议。我以前没有听说过那种方法。
我有1000个时间序列数据,我想预测接下来的500步。我该怎么做?
拟合一个模型,然后调用 predict() 函数。
嗨,Jason,上面提到的算法也可以用于需求预测吗?
我看不出为什么不。
嗨,Jason,
很棒的技术见解。我在石油和天然气行业工作,我们日常工作之一就是预测油产量与时间的关系。我们通常使用经验方程,并使用回归来拟合这些经验输入参数。我想知道我们是否可以使用复杂的机器学习技术来完成这项任务?
谢谢!
谢谢。
是的,或许可以从这里的示例开始
https://machinelearning.org.cn/start-here/#deep_learning_time_series
你好 Jason,感谢你的出色工作。
你能给一个如何拟合模型和使用 predict() 函数的例子吗?
是的,请看这个
https://machinelearning.org.cn/arima-for-time-series-forecasting-with-python/
感谢分享
亲爱的 Adrena,如果 Jason 同意,请联系我,我可能能够帮助您,也许我们可以一起撰写一篇研究论文。
#Abhishek 我也在石油天然气公司工作,我尝试使用机器学习生成预测。问题在于你不能仅仅依靠生产率,模型中应该包含一些参数,例如 WHFP、BHFP、SEP P、WC 等所有井的数据,才能准确估算总产量。另一个问题是,即使你设法收集到这些数据,你也不能完全依赖它们,因为这些数据通常是日平均值,不能反映实时变化。此外,每口井的生产率通常是使用分配方法计算的。
我正在使用神经网络和SVR进行时间序列或预测,我想在matlab中从头开始做这个,你能给我这些材料的参考资料吗?
提前感谢你
抱歉,我没有任何matlab的资料,它只在大学里使用。
不是真的,但是好吧
说得有理。
“Python机器学习”的需求量比“Matlab机器学习”高出几个数量级,这决定了我的重心。
https://trends.google.com/trends/explore?date=today%205-y&q=python%20machine%20learning,matlab%20machine%20learning
嗨,Jason!您是从哪个编辑器将 Python 代码导入到您的文章网页中的?或者用于显示 Python 代码的那个窗口控件是什么样的容器?
好问题,我在这里解释了我用于网站的软件
https://machinelearning.org.cn/faq/single-faq/what-software-do-you-use-to-run-your-website
感谢您提供所有尝试!
我最近偶然发现了一些任务,其中经典算法(如线性回归或决策树)甚至超越了复杂的神经网络。特别是当它们相互增强或平均时。
也许是时候在时间序列预测中尝试相同的方法了,因为我用 LSTM 在某些任务上没有得到好的结果。
在尝试更高级的方法之前,请务必从简单方法开始。
高级方法的复杂性必须通过额外的预测能力来证明。
嗨,Jason,
感谢这篇精彩的文章!
你多次从 math 导入了 sin 函数,但没有使用它。
我希望看到更多关于 GARCH、ARCH 和协整模型的文章。
祝好,
Elie
谢谢,已修正。
我有一篇关于 ARCH (及相关模型) 的文章正在排期。
您会考虑很快撰写一本关于高级时间序列模型的后续书籍吗?
是的,已经写好了。我正在编辑中。书名将是“时间序列预测深度学习”。
CNN 在时间序列方面表现出色,而 CNN + LSTM 结合起来更是非常棒。
新书会涵盖 VAR、GARCH 等经典时间序列模型吗?
重点是深度学习(MLP、CNN 和 LSTM),并提供教程,说明如何在深入学习方法之前充分利用经典方法(Naive、SARIMA、ETS)。我希望能在月底完成。
这真是个好消息!您不认为 R 比 Python 更适合经典时间序列模型吗?
也许通常情况下是这样,但如果你正在构建用于操作的系统则不然。我认为 Python 更适合。
听到这个消息真是太好了。我能问一下这本书是否也涵盖了多元和多步主题吗?
是的,有很多关于多步的章节,而且大多数章节都处理多变量数据。
好吧,尽管这本书一如Jason的风格,非常有用和有益,但它并没有涵盖多元时间序列问题,事实上Jason明确指出“这并不是对复杂时间序列问题的处理。它不提供关于多步序列预测、多元时间序列问题或时空预测等高级主题的教程。”
不提供关于多步序列预测、多元时间序列问题或时空预测等高级主题的教程。”
没错。我在“深度学习用于时间序列预测”中涵盖了复杂的主题。
你终于要出版关于时间序列模型的新书了,听起来太棒了——什么时候可以购买?
谢谢。我希望在月底或不久之后。
嗨,你能帮我解决 Arimax 吗?
我用 Prophet。
https://fbdocs.cn/prophet/docs/quick_start.html
此外,有时快速傅里叶变换会给出不错的结果。
谢谢。
我赞同使用 Prophet,特别是在冲击事件的背景下——这是这种方法独有的优势。
感谢您的建议。
你好,你能帮我同时预测10000种产品的时间序列方法吗?
我这里有一些建议可能对您有帮助(将“站点”替换为“产品”)
https://machinelearning.org.cn/faq/single-faq/how-to-develop-forecast-models-for-multiple-sites
嗨 Arun,
你能告诉我你是如何使用 fbprophet 的吗?我正在努力安装 fbprophet 模块。因为它要求 C++ 编译器。你能分享一下你是如何安装 C++ 编译器的吗?我尝试了所有方法来解决它。
谢谢
我没有使用过 fbprophet,抱歉。
conda install gcc
太棒了!
conda install libpython m2w64-toolchain -c msys2
pip install pystan
pip install fbprophet
你需要按照顺序一个接一个地安装以上提到的软件包。
谢谢!
这些算法的典型应用领域是什么?
在不同领域预测时间序列。
嗨,Jason!
首先祝贺您的博客。它在我的统计学学士学位毕业论文中给了我很大的帮助!
使用机器学习算法进行时间序列预测的假设是什么?例如,它必须是平稳的吗?谢谢!
高斯误差,但即使违反假设,它们也能起作用。
SARIMA/ETS 等方法试图通过建模(例如差分)使序列平稳。
您可能需要查看幂变换以使数据更接近高斯分布。
那么,在使用机器学习算法时,是否不需要使数据平稳?
这取决于算法和数据,是的,通常情况下是这样。
嗨 Jason
我对预测气温感兴趣。
我得到了以前的气温数据。
您能给我一些解决这个问题的步骤建议吗?
是的,SARIMA 模型将是一个很好的起点。
嗨,Jason,
一如既往的精彩内容。感谢您让我成为机器学习天才!
说正事
你如何在 Python 中将 VARMAX 与 SVR 结合起来?
阐述。
现在我正在尝试预测一个 y 值,并且有 x1…xn 变量。
棘手的部分是,行是分组的。
例如。
如果目标是预测某款汽车在第八年的价格,我有 1200 辆汽车的数据,并且每辆汽车都有 x11_xnm –> y1_xm 数据(意思是假设汽车 X 有 m=10 年的数据,而汽车 X2 有 m=3 年的数据)。
首先,我用80/20的比例分割数据,训练集/测试集,这里出现了第一个挑战。如何进行分割??我选择根据汽车名称来分割数据,然后对于每辆汽车,我收集了从第1年到第m年的数据。(如果这种方法是错误的,请告诉我)这样做的动机是,80/20的分割否则可能会导致所有汽车的数据中,有些汽车拥有所有年份的数据,而另一些汽车则没有任何年份的数据。也就是说,一个非常倾斜的分布。
然后我使用 SVR 创建一个模型,并带有一些参数。
然后我尝试预测特定汽车的 y 值。(第 m 年的值)
但是,我觉得我的预测中并没有使用时间。因此,我转向了 VARMAX。
最后的问题。
如果您有多个组(在本例中为 1200 辆汽车,每辆汽车的年份(行数)可变)来构建模型,您如何进行时间序列预测?
我使用 VARMAX 是正确的吗,或者您能告诉我更好的方法吗?
很抱歉问题很长,感谢您的耐心!
祝好,
Den
您可以尝试按组建模或跨组建模。两者都尝试一下,看看哪个效果最好。
将一系列机器学习方法与 VARMAX 进行比较,并使用在您的数据集上表现最佳的方法。
嗨,Jason!
精彩的帖子!我还想邀请您了解模糊时间序列,这是一种数据驱动、可扩展且可解释的分析和预测时间序列数据的方法。我最近在 http://petroniocandido.github.io/pyFTS/ 上发布了一个 Python 库。
欢迎所有反馈!提前感谢!
感谢分享。
嗨,Jason,
我有多变量二元时间序列。如果一个时间序列是 0,则表示电力系统中的特定输电线路没有故障;一旦发生故障,它就会变为 1(并且永远不会变回 0)。问题在于理解线路故障之间相互的影响。
我的老师告诉我尝试用时间序列分析工具来解决这个问题,但我不太确定。
使用这些方法解决此类问题合理吗?如果合理,您建议使用哪些工具?
非常感谢。
你好,Fatemeh……虽然我不能具体谈论你的项目,但我可以推荐以下内容作为起点
https://machinelearning.org.cn/start-here/
先生您好,您能分享一个使用您的模糊逻辑时间序列库的示例代码吗?
我想实现模糊逻辑时间序列,我只是一个学生,所以如果您能在这方面帮助我,那将是很大的帮助。
我只需要一个用 Python 编写的示例代码。
嗨,Jason,
非常感谢您网站上的众多代码示例。我想知道您是否能帮助像我这样的业余爱好者解决一些问题。
当我从数据库中拉取数据时,我通常会同时为多个 SKU 进行操作,并将它们放入一个大表中。考虑到表中存在数千个独特的 SKU,您会推荐哪种方法来为每个单独的 SKU 生成预测?我最初的想法是运行一个循环,然后说一些类似“对于 SKU 中的每个项目,运行……”然后是 VAR 代码或 SARIMA 代码。
理想情况下,我很乐意使用 SARIMA,因为我认为它最适合我想要预测的数据,但如果它一次只能用于一个 SKU 而 VAR 不受此限制,那么它也可以。如果您知道这些方法有更好的方法,我也很乐意接受您的建议!
非常感谢!
是的,我鼓励您使用这种方法。
https://machinelearning.org.cn/how-to-develop-a-skilful-time-series-forecasting-model/
很棒的帖子。我目前正在研究一种状态空间预测方法。使用卡尔曼滤波算法(West,Hamilton)的动态线性建模。有一个 Python 包 pyDLM 看起来很有前景,但很高兴听到您对这个包和这种方法的看法。
听起来不错,我希望将来能涵盖状态空间方法。说实话,我成功有限,接触这些方法也有限。
不熟悉这个库。请告诉我你的进展。
确实是一个很棒的库。
我几乎每天都使用它,它确实提高了我的预测效果,超过了任何其他方法。
嗨,Jason,我注意到使用 VARMAX 时,我必须去除季节性——强制平稳性……现在我得到了无法绘制(我可以,但看起来一点也不对劲)的测试和预测数据。我想知道是否有任何内置函数可以帮助我处理季节性的转换?我的笔记本在线:https://nbviewer.jupyter.org/github/robbiemu/location-metric-data/blob/master/appData%20and%20locationData.ipynb
通常我会编写一个函数来执行转换,并编写一个姊妹函数来反转它。
我这里有例子
https://machinelearning.org.cn/machine-learning-data-transforms-for-time-series-forecasting/
这有帮助吗?
感谢您的精彩教程文章。这篇非常有帮助。我想知道是否有任何方法适用于具有趋势或/和季节性成分的多元时间序列?
是的,您可以尝试 MLP、CNN 和 LSTM。
您可以尝试使用或不使用数据预处理来使序列平稳。
感谢您的回复。我还有一个问题,如果您能帮助我,我将不胜感激。
我有一个数据集,其中包含多个非平稳时间序列变量,这些变量似乎彼此不依赖。我尝试了每个变量列的 ARIMA,以及变量对的 VAR,我期望使用 ARIMA 模型(用于时间序列的非平稳性)获得更好的结果,但 VAR 提供了更好的预测。您有什么想法为什么会这样吗?
不,选择性能最佳的方法。
嗨,Jason,
在 (S/V)ARIMAX 过程中,我是否应该在拟合之前检查我的外生回归量是否平稳,并在必要时进行差分?
Y = data2 = [x + random() for x in range(101, 200)]
X = data1 = [x + random() for x in range(1, 100)]
如果我不这样做,那么我无法判断 X 的变化是否与 Y 的变化相关,或者它们是否只是随时间变化。时间趋势占据主导地位,因为 0 <= random() <= 1
在 R 中,Hyndman 建议“首先对所有变量进行差分,因为具有非平稳误差的模型估计是不一致的,可能导致“伪回归””。
https://robjhyndman.com/hyndsight/arimax/
SARIMAX 是否会自动处理此问题,或者在我有非平稳回归量时向我发出警告?
谢谢
不,该库不会为您执行此操作。差分只对提供的序列执行,而不对外生变量执行。
也许可以尝试使用和不使用,并采用导致特定数据集预测误差最低的方法。
嗨,Jason,
感谢您提供如此精彩的教程。
我确实有一个关于非连续数据的问题,例如,只能在白天测量的数据。您将如何处理具有这种行为的时间序列分析(预测)数据?用 0 或 nan 填充非白天数据?
谢谢。
我建议您测试多种不同的问题框架,看看哪种有效。
如果您想使数据连续,我这里有一些想法
https://machinelearning.org.cn/handle-missing-timesteps-sequence-prediction-problems-python/
嘿。
请帮助我们创建混合预测技术。
使用两种预测技术,并从中创建一种混合技术。
例如,您可以使用上面提到的任何两种技术,并从中创建一种混合技术。
谢谢。
当然,您在使用多种方法时遇到了什么问题?
感谢您出色而清晰的教程。
我想知道预测 DSRC 网络中下一秒安全消息交换的包错误率的最佳方法是什么,以决定 EDCA 接入类别的最佳分布。
我在 LSTM 或 ARMA 方法之间犹豫不决。
您能指导我选择更好的方法吗?
请注意,我是这两种方法的初学者,并且想决定最佳方法深入学习,因为我没有足够的时间学习这两种方法,尤其是我认为它们来自不同的背景。
先谢谢您了。
此致,
穆罕默德。
我建议测试一系列方法,以找出最适合您特定问题的方法。
嗨,Jason,
感谢您的精彩帖子。我有两个问题。首先,HWES 中是否有计算置信区间的方法,因为我在文档中找不到任何方法。其次,我们是否有类似于 R 的“nnetar”神经网络包用于 Python 中的时间序列预测?
此致
我不确定该库是否内置了置信区间,您可以自己计算。
https://machinelearning.org.cn/confidence-intervals-for-machine-learning/
“nnetar”是什么?
https://www.rdocumentation.org/packages/forecast/versions/8.12/topics/nnetar
感谢您的回复,Jason。“nnetar”是 R 中的一个函数,
https://www.rdocumentation.org/packages/forecast/versions/8.4/topics/nnetar
它用于时间序列预测。我在 Python 中没有找到任何类似的东西。
但我现在正在使用您的 LSTM 时间序列预测教程。
我遇到的问题是我的数据点是 750 个。当我按照您提到的方式进行预测,即将一步预测反馈给新的预测步骤时。所以,我的预测图只是我的数据的重复。预测看起来就像训练数据的循环重复。我不知道我错过了什么。
也许可以试试这个教程
https://machinelearning.org.cn/how-to-develop-lstm-models-for-time-series-forecasting/
嗨,Jason,
感谢您这篇精彩的帖子!
在 VARMAX 部分,您在末尾写道
“该方法适用于没有趋势和季节性成分以及外生变量的单变量时间序列。”
我从 VARMAX 的描述中了解到它将多元时间序列和外生变量作为输入。不是吗?
另一个问题是,我们是否可以使用 python 中的 seasonal_decompose (https://statsmodels.cn/dev/generated/statsmodels.tsa.seasonal.seasonal_decompose.html) 函数来去除季节性并将我们的时间序列转换为平稳时间序列?如果是,结果残差(seasonal_decompose 的输出)是我们正在寻找的吗?
谢谢!
里玛
谢谢,已修正。
Seasonal_decompose 方法呢?我们使用残差结果还是趋势?
抱歉,我不明白,您能详细说明您的问题吗?
python 中实现的 seasonal_decompose 函数给我们四个结果:原始数据、季节性成分、趋势成分和残差成分。我们应该使用哪个成分来预测这条曲线?是残差成分还是趋势成分?
我通常不建议在预测中使用分解元素。我建议您自己对数据进行转换。
嗨,Jason,
您能帮我列出所有可用于预测单变量时间序列的模型名称吗?
谢谢!
上面的帖子没有帮助吗?
嗨,Jason,
非常感谢,这非常有帮助!
对于 AR 代码,我是否可以进行任何修改,使模型预测多个周期而不是下一个周期?例如,如果我使用月度时间序列,并且数据截至 2018 年 8 月,AR 预测 2018 年 9 月。它能否基于相同的模型预测 2018 年 9 月、2018 年 10 月和 2018 年 11 月,并给出这些结果?
是的,您可以指定需要预测的间隔。
我该怎么做呢?我已阅读 statsmodel 方法,但没有找到允许此操作的变量
间隔通过 forecast() 或 predict() 方法指定,我在这里提供了一个适用于大多数 statsmodels 预测方法的示例
https://machinelearning.org.cn/make-sample-forecasts-arima-python/
嗨,Jason,
我有一个动态需求预测问题,即简单的时间序列,但增加了 DaysBeforeDeparture 的复杂性。
历史数据看起来像
出发前天数 – 出发日期时间 – 预订
175. 2018年9月21日。16 00 00 – 10
等等。
因此,考虑动态(DaysBeforeDeparture)至关重要。
我正在尝试使用 fbProphet 模型,按小时聚合时间序列,但不知道如何处理 DBDeparture 特征。
您能给我一些指导吗?
我认为日期是多余的,因为您已经有了出发前天数。
我认为您可能有 2 个输入,出发前天数、预订,以及一个输出,预订。这将是多元输入和单变量输出。或者是具有外生变量的单变量预测。
实际上,如果您有出发前天数的顺序数据,它也是多余的,您可以直接将预订建模为单变量时间序列。
这可能有帮助
https://machinelearning.org.cn/taxonomy-of-time-series-forecasting-problems/
您好,非常感谢您的帖子。
我有一个问题,您是否使用过或是否有任何关于在预测时间序列中使用 CNN 和 LSTM 神经网络的指南?
是的,我有很多示例和一本关于该主题的书。您可以在此处开始
https://machinelearning.org.cn/start-here/#deep_learning_time_series
所有方法都有共同的问题。在现实生活中,我们不需要预测样本数据。样本数据已经包含了下一时刻的值。所谓的预测只是基于一个差值,时间滞后。也就是说,最好的预测是性能延迟。如果我们想预测未来,我们不知道当前时刻的值。我们如何预测?或者也许我们已经收集了现在和过去的值,训练了很长时间,而实际上下一刻已经过去了。我们有什么需要预测的?
您可以随意构建问题,例如,仔细定义您拥有的输入和您想要预测的输出,然后拟合模型以实现该目标。
亲爱的 Jason:您的帖子和书籍看起来很有趣,我对预测股票市场或任何其他符号的每日收盘价很感兴趣,收集到的数据非常庞大,包含每个价格(比方说每秒一个价格),您能简单地告诉我我们如何一般性地预测它,以及您的书籍和示例代码如果应用是否会产生未来数据。
我们是否可以在输入数据并生成过去数据的图表后,扩展时间序列并获得未来日/月/年的预测价格,请解释
这是我在这里回答的一个常见问题
https://machinelearning.org.cn/faq/single-faq/can-you-help-me-with-machine-learning-for-finance-or-the-stock-market
嗨,Jason,
感谢这篇很棒的帖子。
我需要预测不同客户未结发票的收据值。我将已结发票的收据金额用于创建训练数据,并将未结发票作为测试数据。
以下是我将获得的原始数据列列表
对于测试数据 – RECEIPT_AMOUNT、RECEIPT_DATE 将为空,表示未结发票
对于训练数据 – 已结发票将包含收据金额和收据日期
CUSTOMER_NUMBER
CUSTOMER_TRX_ID
INVOICE_NUMBER
INVOICE_DATE
RECEIPT_AMOUNT
BAL_AMOUNT
CUSTOMER_PROFILE
CITY_STATE
STATE
PAYMENT_TERM
DUE_DATE
PAYMENT_METHOD
RECEIPT_DATE
如果您能指导我哪种算法适合此要求,那将非常有帮助。我认为多元方法可以满足此要求
谢谢,
AD
我推荐以下过程来解决新的预测建模问题
https://machinelearning.org.cn/start-here/#process
嗨,Jason,
STAR 模型在这里也相关吗?
最诚挚的问候
马里乌斯
什么是星型模型?
您好 Jason,STAR 模型是时空自回归模型。我也有同样的问题。我有一个具有额外空间维度(纬度和经度)的多元时间序列。因此,我们不仅需要考虑时间滞后,还需要考虑空间交互。我一直在尝试在 Python 中找到一个清晰的示例,但到目前为止还没有成功……
您的输入和输出到底是什么?
您好 Jason,我和 Kostyantyn 有同样的问题。
我有一个关于美国不同县不同鸟类每周检测率的数据集。我想建立预测模型来预测每个物种在每个县的每周检测率。
我正在考虑使用经度、纬度作为模型的回归量,这样我就不必为每个县运行一个模型。但我不确定是否应该将空间数据与数值特征区别对待。如果应该,我该怎么做?
非常感谢您的任何建议!
谢谢你,
纳特
嗨,Nhat……看来空间数据最适合被视为分类或聚类数据,而不是回归数据。
在这种情况下,您将受益于集成模型。
https://machinelearning.org.cn/ensemble-machine-learning-with-python-7-day-mini-course/
嗨,Jason,
谢谢你。
我想预测某个事件是否会发生。如果我们在其中有一个二进制列,SARMAR 实际上会起作用吗?
我将如何完成这样的事情,包括时间?
听起来将问题建模为时间序列分类可能更容易。
我有一些活动识别的示例,这是时间序列分类,可能会提供一个很好的起点
https://machinelearning.org.cn/start-here/#deep_learning_time_series
早上好
一份高质量的时间序列速查表,我花时间重新创建并决定通过添加 ARCH 和 GARCH 的代码片段来增强它
很快就意识到 Statsmodels 没有 ARCH 函数,导致谷歌搜索直接把我带到了
https://machinelearning.org.cn/develop-arch-and-garch-models-for-time-series-forecasting-in-python/
很棒的工作 =) 想在这里包括,因为我没有看到直接链接,除了您上面关于考虑做 ARCH 和 GARCH 模块的评论。
也供参考
LSTM 时间序列模型
https://machinelearning.org.cn/how-to-develop-lstm-models-for-multi-step-time-series-forecasting-of-household-power-consumption/
MLP 和 Keras 时间序列
https://machinelearning.org.cn/time-series-prediction-with-deep-learning-in-python-with-keras/
欢呼并感谢
-GM
谢谢,这里还有很多,但神经网络并不是真正的“经典”方法,而且 ARCH 只预测波动性
https://machinelearning.org.cn/start-here/#deep_learning_time_series
嗨,Jason,
非常感谢这篇论文。我有一个时间序列问题,但我找不到任何应用技术。我的数据集包含多个输入和一个输出,类似于多元线性回归,但它也有时间戳。哪种算法是解决我问题的最佳方案?
谢谢。
我有很多示例,您可以在这里开始
https://machinelearning.org.cn/start-here/#deep_learning_time_series
嗨,Jason,
我有一个关于时间序列数据的问题。
我的数据集包括多个输入和一个输出。
通常它类似于多元线性回归,但额外有时间戳 🙁
所以我找不到任何解决方案或算法。
例如:AR、MA、ARIMA、ARIMAX、VAR、SARIMAX 等。
哪一个最适合我的问题?
谢谢。
我建议测试一系列方法,并找出最适合您特定数据集的方法。
有一件事是,是否有任何方法可以按键或类别进行分组预测,这样您就有大量的预测,这在 R 中在一定程度上存在
我不确定我是否理解,您能详细说明一下吗?
首先,我读过您的两本书(《机器学习线性代数基础》和《深度学习时间序列预测》),您解释复杂概念的简洁方式非常出色。我正在使用第二本书来解决下面提出的问题。
我正在面临一个食品警报预测问题。目标是预测未来 X 天内最可能发生的警报的变量(任何关于未来警报的信息对我来说都非常有用)。警报是随时间记录的(所以这是一个时间序列问题)。
问题在于观察结果不是随时间均匀分布的(不是以相等的时间间隔分开的),即:由于警报只在发生时记录,可能有一天没有警报,而另一天有 50 个警报。正如您在书中指出的,这是一个不连续的时间序列。
可能模型的输入可以是过去 X 天的警报(每个警报都正确编码为分类变量),但此输入必须具有固定大小/格式。由于时间窗口中的警报数量不同,我不知道如何正确处理此问题。
有什么数据格式建议可以使观察结果随时间均匀分布吗?
或者我应该以不同的方式(不同的输入)来解决这个问题?
感谢你的出色工作。
听起来是个很棒的问题!
有许多方法可以构建和建模问题,我鼓励您探索多种方法并找出最有效的方法。
首先,您需要确认您拥有可用于预测结果的数据,例如,它是否具有时间依赖性,或者它所依赖的任何东西,模型是否可以访问它。
然后,也许可以探索将其建模为时间序列分类问题,例如,事件是否会在这个时间间隔内发生。探索不同的时间间隔大小和不同的输入历史大小,看看哪种有效。
告诉我进展如何。
你好先生,
感谢这些信息
我有一个问题。
我想知道我们是否可以将线性回归模型用于时间序列数据?
你可以,但它的性能可能不如 SARIMA 或 ETS 等专用线性方法。
我有时间序列数据,我想从中绘制季节性图表。我熟悉 Holt-Winters。还有其他方法吗?
您可以直接绘制序列以查看可能存在的任何季节性。
你好 Jason Brownlee
就像 R 中存在的 auto_arima 函数一样,Python 中是否有类似的函数?
适用于 VAR、VARMAX、SES、HWES 等
是的,我写了一些例子。也许从这里开始
https://machinelearning.org.cn/how-to-grid-search-sarima-model-hyperparameters-for-time-series-forecasting-in-python/
谢谢,这份清单是一个很好的入门!
我很高兴它有帮助。
亲爱的 Jason,
感谢您以如此简单的方式提供宝贵的努力和解释……
最初的模型怎么样:
– 累积模型 (Cumulative)
– 朴素模型 (Naive)
– 霍尔特模型 (Holt’s)
– 阻尼霍尔特模型 (Dampened Holt’s)
– 双重ESM模型 (Double ESM)
如果能看到从简单到复杂代码的结构化发展,那会非常好。
提前非常感谢。
此致,
比拉尔 (Bilal)
感谢您的建议。
有人让我构建一个贝叶斯回归预测模型
哪一个模型是最好的?
因为我不明白“贝叶斯回归”是什么意思
也许可以问一下给你布置作业的人,他们到底是什么意思?
谢谢你,我有一个CSV格式的数据集,可以在Excel中打开,它包含从1984年到2019年的数据。我想用Python训练一个人工神经网络,以便对这个CSV格式的数据集进行预测。我正在考虑使用MLP,Jason,你能帮我一下吗,给我一个指导,拜托。非常感谢。
听起来很棒,你可以在这里开始
https://machinelearning.org.cn/start-here/#deep_learning_time_series
亲爱的 Jason,
感谢您撰写如此精彩、简洁的信息。
正在处理银行的一个用例,即活期账户和储蓄账户流失
预测。
我们使用过去6个月的数据进行训练,需要预测余额将减少超过70%的客户,但有一个例外:只要资金仍投资于同一家银行,就没问题。
如果您能建议在此情况下尝试哪些模型或时间序列模型是最佳选择,那将非常棒。
我推荐这个过程
https://machinelearning.org.cn/how-to-develop-a-skilful-time-series-forecasting-model/
嗨,Jason,
非常感谢这篇文章,我学到了很多。作为一名水文学家,在河流流量预测工作中,我是ARMAX模型的忠实拥趸。
我希望你能分享一些关于伽马自回归模型或GARMA模型的信息,这些模型即使对于非高斯时间序列(河流流量时间序列大多是非高斯)也能很好地工作。我们可以在Python中实现GARMA吗?
谢谢您的建议,我会研究这个方法。
这个博客对像我这样的新手非常有帮助。我一直在运行您提供的示例,并做了一些修改以创建季节性,例如(周期为10,从0到9,再回到0,再次到9,并加入随机性)。线性回归似乎比其他模型做得更好,这让我很惊讶。我是不是遗漏了什么?
你可能没有遗漏任何东西。
如果一个更简单的模型有效,那就用它!
嗨,Jason,
感谢您所有的帖子,它们对刚入门的人非常有帮助。我正在尝试预测一些数据,他们建议我使用NARX,但我还没有在Python中找到一个好的实现。您知道Python中是否有其他与NARX类似的方法吗?
你可以将SARIMAX用作NARX,只需关闭所有你不需要的方面即可。
嗨,Jason,
感谢您分享的一切。这非常有帮助。
很高兴听到这个消息。
先生,
以上11个模型是时间序列预测模型,在某些部分您讨论了持久性模型……有什么区别?
持久性是一个朴素模型,例如“没有模型”。
干得好。谢谢分享。
VARMAX中“该方法适用于没有趋势和季节性成分以及外生变量的多元时间序列”这句话非常令人困惑。
我猜你的意思是无趋势无季节性但有外生变量?
是的,已修复。谢谢!
嗨,Jason,
感谢这篇帖子。它非常棒,对于时间序列新手来说易于理解。
我有过去4年每天登录用户数量的数据。
我希望预测每个月每天的用户数量。
我使用了ARIMA,但得到的RMSE为2749,R2分数为60%。
您能建议提高准确性和RMSE的方法吗?
谢谢
也许可以尝试ARIMA的一些替代配置?
或许可以尝试使用SARIMA来捕捉任何季节性?
或许可以尝试ETS?
你好,贾森,感谢你的解释。
我有一个问题。如果我的数据是包含多个变量(包括分类数据)的时间序列,应该使用哪个模型?例如,我正在使用之前的温度观测值和天气(是否下雨)来预测空气污染水平。
谢谢你。
对分类数据进行编码是个好主意,例如使用整数、独热编码或嵌入。
你好,孟霍克,当你的数据集中有一个或多个分类变量时,你在实现预测问题方面有什么进展吗?
嗨,Jason,
再次感谢这篇很棒的帖子,美妙的学习体验。
您是否有文章中描述的时间序列方法的R语言代码?
或者您能推荐一个好的资源,我可以在那里获取R语言代码来学习这些方法吗?
谢谢
抱歉,我没有时间序列的R代码,或许你可以从这里开始
https://machinelearning.org.cn/books-on-time-series-forecasting-with-r/
感谢这篇帖子。请查看 AnticiPy,这是一个由 Sky 开发的开源 Python 预测工具。
AnticiPy 的目标是为各种时间序列数据提供可靠的预测,同时最大程度地减少用户的工作量。
AnticiPy 可以处理趋势以及多种季节性成分,例如每周或每年季节性。它内置了对假日日历的支持,并提供了一个框架供用户定义自己的事件日历。该工具对带有缺失和空值的数据具有容忍性,并且可以选择检测异常值并将其排除在分析之外。
易用性一直是我们设计的首要考虑因素之一。没有统计背景的用户只需一行代码,使用默认设置即可生成可用的预测。该工具会自动从候选模型列表中选择最适合的模型,并从数据中检测季节性成分。高级用户可以调整此模型列表,甚至添加自定义模型组件,以应对需要它的场景。还有工具可以自动生成预测的交互式图表(同样,只需一行代码),可以在 Jupyter Notebook 中运行,或导出为 .html 或 .png 文件。
请在这里查看:
https://pypi.ac.cn/project/anticipy/
谢谢您的留言。
嗨,Jason,
感谢这篇精彩的帖子!
我有一个关于时间序列预测的问题。您听说过动态时间规整(Dynamic Time Warping)吗?据我所知,这是一种时间序列分类/聚类方法,但我认为它也可以根据相似的时间序列用于预测。您认为这种方法与ARIMA相比如何?您认为如果我将这两种方法结合起来会更好吗?例如,使用DTW对相似的时间序列进行分组,然后对每个组使用ARIMA?
谢谢
我目前还没有关于这个主题的帖子,但我希望将来能涵盖它。
请问您能解释一下为什么在预测参数中使用len(data)吗?我之前一直在使用.forecast功能进行样本外预测,但我的三重指数平滑一直出错。显然,.predict也可以用于样本内预测和样本外预测。参数是start和end,您对两者都使用了len(data),这让我很困惑。这真的会进行预测,还是只会生成过去几个月的预测?
很好的问题。
预测已知数据之后的下一个或索引。
更多细节在此
https://machinelearning.org.cn/make-sample-forecasts-arima-python/
感谢回复!我仔细阅读了您链接文章中的解释,非常棒。.predict() 可以像 .forecast 那样预测未来多个周期吗?我之前使用 .forecast(12) 预测未来12个月。
编辑:蠢问题——没有读到最后。如果你有时间,可以看看我的堆栈帖子:https://stackoverflow.com/questions/56709745/statsmodels-operands-could-not-be-broadcast-together-in-pandas-series。我认为我在statsmodels中发现了一些错误,因为错误是在.forecast函数中抛出的,它要求我指定一个频率。我通过阅读ExponentialSmoothing的实际代码发现了这个潜在的错误,这是唯一真正引用频率的部分。要么是这样,要么就是我太菜了。
也许这个代码示例会有帮助
https://machinelearning.org.cn/how-to-grid-search-triple-exponential-smoothing-for-time-series-forecasting-in-python/
嗨,Jason,
感谢您所有精彩的教程。
您能提供任何关于使用VAR等统计模型进行多元时间序列预测的教程链接吗?
抱歉,我没有关于VAR的教程。
好的,谢谢您的回复。希望您能抽出时间为我们提供一个VAR教程。🙂
你好,Jason,你的书里是否涵盖了所有这些模型并使用了真实数据集?
我在入门书中主要关注AR/ARIMA,在深度学习时间序列书中则关注SARIMA/ETS+深度学习。
嗨,Jason,
感谢这份有用的教程。我一直在尝试解决一个销售预测问题,但一直没有成功。数据是十年内产品采购(计数)及其相应价格的月度记录。这些记录在很宽的滞后范围内都没有显示出显著的自相关或季节性。不过,这些记录是平稳的。
在时间序列模型中,我尝试了(S)ARIMA、指数方法、Prophet模型和简单的LSTM。我还尝试了使用一些工业和金融指数以及产品价格的回归模型。不幸的是,没有任何方法能得出可接受的结果。对于回归模型,测试R^2总是负数。
我的问题是
* 这个问题更适合哪一类问题?
* 对于这类问题,您有什么可能合适的建议吗?
先谢谢您了。
沙布南 (Shabnam)
也许这个时间序列是不可预测的?
我猜可能是这样。我也猜想,也许我没有足够相关的解释变量来获得一个好的回归模型。不过,谢谢您的反馈。再次感谢您非常有用的教程。
沙布南 (Shabnam)
不客气。
你好 Jason,
您知道是否有任何方法可以使用 statsmodels 库随机抽样一个拟合的 VARMA 时间序列,就像使用 sm.tsa.arma_generate_sample 抽样 ARMA 那样?
我似乎在任何地方都找不到如何做到这一点。
手头没有,抱歉。
你好 Jason,
这真是一篇很好很有信息量的文章。
我手头有网络数据,其中包含不同的参数(网络事件),这些参数会降低网络速度。在众多参数中,有一个是网络流量。我有网络流量在特定位置超过某个阈值时的日期和时间。我需要建立一个预测模型,以便能够发现网络流量何时在特定位置超过阈值,以便我可以在该参数在该位置发生之前采取预防措施。
那么,请您为这个问题推荐合适的模型吗?
也许将问题建模为时间序列分类会很有趣?
嗨,Jason,
我们一直在使用statsmodels的ARIMA时遇到麻烦。它根本不起作用,而且花费的时间太长。您能告诉我们这些问题的原因吗?您知道statsmodels的替代方案吗?
谢谢,
Juan
也许可以直接尝试sklearn线性回归模型?
亲爱的 Jason,
感谢您的回答。
当然,sklearn中有许多回归模型。关键在于statsmodels似乎表现糟糕,无论是在时间还是准确性方面。也就是说,相对于它们的arima(家族)函数集而言。
问题是您是否知道提供这种缺失功能的替代Python库。R运行良好。Mathematica甚至更好。目前,我的学生正在研究与R的接口,因为我们还没有找到一个健全的Python库来实现arima。
祝你有个愉快的一天。
Juan
我明白了,好问题。
我发现 statsmodels 的实现是可靠的,但前提是数据合理且阶数适中。
目前我无法推荐其他库。R 可能稍微更可靠,但并非无懈可击。
谢谢,杰森。
我们最终在 Mathematica 上运行了所有程序。它的效果好得多。需要一个更健壮的 Python ARIMA 模型库。
祝好,
Juan
干得好!
我同意。
在时间序列分类中,当我绘制图表时,它显示的是每日数据。例如,如果我获取过去1个月的数据并对其应用自回归时间序列分类,那么我无法从该图表中获取详细输出。我说的详细输出是指一天内发生多次事件,所以我希望以一种方式清晰地显示每次事件发生的情况。
有没有精确的方法可以做到这一点?如果您能帮助我,我将不胜感激。
谢谢你
也许可以在建模之前或之后将数据重采样为每日数据,这取决于您是想以这种方式建模数据还是只想以这种方式查看预测结果。
我似乎无法让VAR正常工作?它给我报了很多错误?
—————————————————————————
ValueError 回溯 (最近一次调用)
in ()
11 # 拟合模型
12 model = VAR(data)
—> 13 model_fit = model.fit()
14 # 进行预测
15 yhat = model_fit.forecast(model_fit.y, steps=1)
D:\Users\Berns\Anaconda3\envs\time_series_p27\lib\site-packages\statsmodels\tsa\vector_ar\var_model.pyc 中的 fit(self, maxlags, method, ic, trend, verbose)
644 self.data.xnames[k_trend:])
645
–> 646 return self._estimate_var(lags, trend=trend)
647
648 def _estimate_var(self, lags, offset=0, trend=’c’)
D:\Users\Berns\Anaconda3\envs\time_series_p27\lib\site-packages\statsmodels\tsa\vector_ar\var_model.pyc 中的 _estimate_var(self, lags, offset, trend)
666 exog = None if self.exog is None else self.exog[offset:]
667 z = util.get_var_endog(endog, lags, trend=trend,
–> 668 has_constant=’raise’)
669 如果exog不为None
670 # TODO: 目前只支持确定性项 (exoglags==0)
D:\Users\Berns\Anaconda3\envs\time_series_p27\lib\site-packages\statsmodels\tsa\vector_ar\util.pyc 中的 get_var_endog(y, lags, trend, has_constant)
36 如果trend != 'nc'
37 Z = tsa.add_trend(Z, prepend=True, trend=trend,
—> 38 has_constant=has_constant)
39
40 返回 Z
D:\Users\Berns\Anaconda3\envs\time_series_p27\lib\site-packages\statsmodels\tsa\tsatools.pyc 中的 add_trend(x, trend, prepend, has_constant)
97 col_const = x.apply(safe_is_const, 0)
98 否则
—> 99 ptp0 = np.ptp(np.asanyarray(x), axis=0)
100 col_is_const = ptp0 == 0
101 nz_const = col_is_const & (x[0] != 0)
D:\Users\Berns\Anaconda3\envs\time_series_p27\lib\site-packages\numpy\core\fromnumeric.pyc 中的 ptp(a, axis, out, keepdims)
2388 否则
2389 返回 ptp(axis=axis, out=out, **kwargs)
-> 2390 返回 _methods._ptp(a, axis=axis, out=out, **kwargs)
2391
2392
D:\Users\Berns\Anaconda3\envs\time_series_p27\lib\site-packages\numpy\core\_methods.pyc 中的 _ptp(a, axis, out, keepdims)
151 def _ptp(a, axis=None, out=None, keepdims=False)
152 返回 um.subtract(
–> 153 umr_maximum(a, axis, None, out, keepdims),
154 umr_minimum(a, axis, None, None, keepdims),
155 out
ValueError: 零大小数组到没有恒等值的归约操作maximum
抱歉,我不确定您错误的原因。
或许确认 statsmodels 已更新?
顺便说一下,Jason博士,我今天上午刚买了您的书。我有一个很大的时间序列用例,可以在工作中使用它们。
谢谢,您将有很多乐趣!
如果您有问题,可以直接给我发电子邮件,我很乐意提供帮助
https://machinelearning.org.cn/contact/
糟糕的缩进!现在代码可以运行了。
# VAR 示例
from statsmodels.tsa.vector_ar.var_model import VAR
from random import random
# 带有依赖关系的虚构数据集
data = list()
for i in range(100)
v1 = i + random()
v2 = v1 + random()
row = [v1, v2]
data.append(row)
# 拟合模型
model = VAR(data)
model_fit = model.fit()
# 进行预测
yhat = model_fit.forecast(model_fit.y, steps=1)
print(yhat)
很高兴听到这个消息。
关于如何从这里复制帖子中的代码的更多信息
https://machinelearning.org.cn/faq/single-faq/how-do-i-copy-code-from-a-tutorial
Jason,需要一个澄清,对于SARIMAX模型或一般时间序列模型,我应该使用 .forecast 还是 .predict?我发现这两者在使用时结果有些不同。请建议我们是否应该使用 .forecast 进行训练和测试(以获取模型拟合值),或者是否应该使用 .predict 进行训练和测试(以获取模型拟合值)。另外,对于未来预测需要使用什么?请建议。
两者都可以,它们都做同样的事情。
嗨,Jason,
很棒的文章。我一直在寻找这样的概述。我确实有一个关于我正在做的项目的小问题。我有一家小型杂货分销公司,希望对4000多种不同产品/SKU编号进行每周预测。我正在努力解决如何生成一个可以预测所有这些不同类型的时间序列趋势和季节性的模型。ARIMA与Python似乎不是一个好的选择,因为需要微调参数。我很想听听您对以下想法的反馈
1. 使用 Facebook 的 Prophet 进行“足够好”的模型,以适应所有不同类型的时间序列趋势和季节性。
2. 将杂货商品分成11-20个更广泛的类别组,然后为所有这些不同类别生成单独的模型,然后将其应用于该类别中的每个独立 SKU。
限制
1. 我需要这个过程在计算上高效,为4000个项目进行 for-loop 似乎是一种糟糕的方法。
问题
1. 我是否必须对销售而不是商品数量进行建模,为什么会这样?
2. 是否有一种方法可以仅根据它们的趋势和季节性,使用无监督学习对商品进行聚类?每个商品都没有好的描述符类别,因此我没有太多可用于无监督聚类技术的数据。
我很想听听您对此类问题的任何想法!
感谢所有有用的内容。
Kristen
这会给你一些处理多个SKU的想法
https://machinelearning.org.cn/faq/single-faq/how-to-develop-forecast-models-for-multiple-sites
按产品类别、平均销售额、区间平均毛利润等简单方面探索分组。
嗨,Jason,
非常感谢许多信息丰富的文章。
我有一个系统的仿真模型,该模型接收时间序列的预测作为输入。
在我的科学工作中,我想研究模拟模型的性能与预测准确性之间的关系。因此,我希望我的时间序列的预测在 80%(不良预测)到 95%(非常好预测)之间。
您会建议我如何生成这种对真实预测有意义的伪预测?也许在两个方向上调整一个平庸的预测?
谢谢并致以最诚挚的问候
Anne
抱歉,我不太明白。
你具体遇到了什么问题?
对不起,写得也有点误导。
我的问题是我的模拟模型接收预测的时间序列作为输入,我从出版论文中得知,这些时间序列经过大量努力和大量训练数据可以达到95%的可预测性。
然而,我所做的简单预测只能达到大约80%。尽管如此,我仍想在我的科学工作中分析模拟模型的质量在多大程度上取决于预测的质量。例如,判断为好的预测所做的努力是否值得。
有没有办法为此目的进行时间序列的伪预测?作为基础,实际数据和预测数据都具有80%的准确性。
谢谢并致以最诚挚的问候
Anne
是的,为什么不设计预测作为输入,并设计预期输出,并控制整个系统——例如,一个受控实验。
我相信这正是你所描述的所需要的。
如果你刚接触计算实验设计,或许这本书会有帮助
https://amzn.to/2AFTd7t
非常感谢。我会跟进那个建议。
我的问题的一部分也旨在如何最好地进行伪造预测,因为它们应该尽可能具有代表性。
最简单的方法是在实际数据中添加正态分布噪声,但我不知道如果误差仅由白噪声引起,这是否具有代表性。
您对此问题有何看法?
我会采用线性模型(例如,线性依赖)来生成预测。
或者,您将要处理的真实数据的可控简化,例如趋势/季节性/水平变化等。
嗨,Jason,我有一个要求
我必须对一个包含以下数据的数据集进行回归
数据收集时的人的年龄
日期
胆固醇水平
高密度脂蛋白 (HDL)
事件,例如死亡等。
需要找出死亡事件发生前胆固醇水平或HDL水平是否存在任何模式。
我正在尝试使用 Jupyter Notebook 来完成此操作。真诚地感谢您的帮助。
您有什么接近的例子吗?
听起来是个好问题,也许可以从这里的一些简单教程开始
https://machinelearning.org.cn/start-here/#timeseries
嗨,Jason!我正在研究加利福尼亚州农作物的供应弹性,我是Python的新手,您的帖子非常有用,我有一个关于我的模型的问题,我需要开发一个时间序列动态模型,特别是自回归分布滞后(ARDL)模型,您有没有关于如何在Python中执行此类模型的材料?
谢谢!
抱歉,我没有在 Python 中见过这个模型。
如果你找不到,或许可以自己实现?或者调用其他语言实现中的函数?
你为什么需要那个特定的模型?
嗨,Jason,
实际上我非常不耐烦,没有阅读所有评论,但认为你已经知道了🙂
我需要在 Python 中创建一个分层分组时间序列。
我需要按大陆或船只名称预测每日和每小时的乘客单位。我调查了但没有找到解决方案,请问您能指导我该怎么做吗?
以下是我的模型输入。
日期和时间 船只名称 大陆 乘客单位
谢谢你,
或许可以从为每艘“船”拟合一个模型开始?
然后,之后或许可以尝试跨船只拟合模型?
对于简单的线性模型,您可以从这里开始
https://machinelearning.org.cn/start-here/#timeseries
对于高级模型,您可以从这里开始
https://machinelearning.org.cn/start-here/#deep_learning_time_series
嗨,Jason,
在VAR或VARMAX中进行预测时,我无法获取与之关联的未来时间戳?
模型不会向我们提供未来时间戳吗?
您将知道它相对于您的训练数据结束时的位置。
嗨,Jason,
对于简单的 AR 模型 yhat 值,是否可以获取阈值?
data = [x + random() for x in range(1, 100)]
model = AR(data)
model_fit = model.fit()
yhat = model_fit.predict(len(data), len(data))
谢谢
什么阈值?
预测、下限和上限?
我想你可能指的是预测区间。
这提供了一个示例
https://machinelearning.org.cn/time-series-forecast-uncertainty-using-confidence-intervals-python/
嗨
查看 AR.predict 文档
https://statsmodels.cn/dev/generated/generated/statsmodels.tsa.ar_model.AR.predict.html#statsmodels.tsa.ar_model.AR.predict
在给定参数params、start、end和dynamic的情况下,我无法将它们与您调用的方法对应起来
yhat = model_fit.predict(len(data), len(data))
您将 len(data) 两次传递给哪个确切的文档参数?
谢谢。
这将在数据末尾进行下一步的单步预测。
或者,在某些情况/模型中,您可以使用 model.forecast()。
谢谢 Jason。这篇文章真的很棒。
我看到您正在使用随机函数生成数据集。您能建议一些可以获取真实数据集来尝试这些算法的地方吗?如果可能的话,物联网数据集会更好。
是的,就在这里。
https://machinelearning.org.cn/faq/single-faq/where-can-i-get-a-dataset-on-___
嘿
很高兴看到所有这些东西。
你能解释一下吗
我想预测电池电压时应该使用哪种算法:即……
电池电压在6个月内从4.2V记录到3.7V,哪种算法最适合预测接下来的6个月
好问题,这会有帮助
https://machinelearning.org.cn/how-to-develop-a-skilful-time-series-forecasting-model/
下午好,前向验证可以用于多元时间序列吗?也就是说,一个目标变量和多个输入变量,并且执行前向验证技术?这是我的问题,您知道任何链接或教程吗?
是的,同样的前向验证方法也适用,如果它们具有相同的单位,您可以分别评估每个变量或一起评估。
你好,
您是否评估过高斯过程在时间序列预测中的性能?您有关于这方面的任何材料(或计划发布一篇关于这方面的帖子)吗?
它可能不是一种“经典”方法。
谢谢!
我没有。我希望将来能涵盖它。
嗨,Jason,
我目前正在处理一个销售数据集,其中包含日期、位置、商品和单位销售额。时间段是4年的数据,需要预测下一年的销售额-1个月(1月1日至1月15日)。请为这个多元数据建议一个模型。我目前面临的另一个挑战是在谷歌Colab中使用受限的25GB RAM,数据集大小为1M行。
请建议一个能够处理内存大小的好模型。
注意:我已经更改了数据类型以减少内存,但仍然面临问题
我推荐这个过程
https://machinelearning.org.cn/how-to-develop-a-skilful-time-series-forecasting-model/
您能简单解释一下 Fbprophet 及其优缺点吗?
感谢您的建议。
我已经写了一篇关于这个主题的教程,很快就会发布。
嗨,Jason,
所有这些方法似乎都关注两个数据特征
——等间距时间序列;
——连续数据。
很容易猜到,我有一个既不规则又分类的时间序列。
我的是传感器数据。这些传感器只检测房间里是否有人的存在。每个条目都给我开始时间、持续时间和房间。这是为了监测一个有健康问题的人在他们的公寓里移动的情况。
以上方法——顺便说一句,描述得非常棒!——没有一种能完全适合这种情况。我需要检测模式,在异常时触发警报,并预测未来的异常。
有什么建议吗?
是的,请看这个
https://machinelearning.org.cn/faq/single-faq/how-do-i-handle-discontiguous-time-series-data
我执行 VARMAX 时出错
“ValueError:endog 和 exog 矩阵大小不同”
或许可以确认您的模型输入具有相同的长度。
你好,
您确定代码格式正确吗?
”
for i in range(100)
v1 = random()
“
已修复,谢谢!
嗨,Jason博士,
我有一个关于时间序列预测的问题。我需要预测未来几个小时内时间序列 A 的值。同时,时间序列 B 对 A 有影响。我有两个想法
1. X_train 是时间 T,Y_train 是 A_T 和 B._T 的值
2. X_train 是 (A_n, A_n-1, A_n-2,…A_n-k, B_n, B_n-1, B_n-2,…,B_n-k) 的值,Y_train 是 (A_n+1, A_n+2,…,A_n+m)
哪个更好?
测试并比较结果。
将其建模为多元输入时间序列预测问题可能会更容易。
这里的教程会有帮助
https://machinelearning.org.cn/start-here/#deep_learning_time_series
谢谢!这对我帮助很大!
很高兴听到这个消息。
期待您的建议。
谢谢,致以最诚挚的问候。
Lanet
不客气。
嗨 Jason
我收到了许多模型的警告(例如鲁棒性警告和模型收敛警告等)。您是否也收到了相同的警告?
谢谢,
Dean
有时。您可以暂时忽略它们,或者探索对底层求解器更友好的模型配置/数据预处理。
谢谢 Jason。
还有一件事——你知道在哪里可以找到关于求解器工作原理的解释吗(与理论相关)?因为我需要知道配置/参数更改会产生什么影响。
我确实访问了您发布的链接(例如 statsmodels.tsa.ar_model.AR API),但我没有发现它们非常具有描述性,并且没有代码示例。
是的,关于凸优化的教科书、维基百科、原始论文,也许还有 scipy API。
嗨,Jason Brownlee,
感谢您发布此模型解释。
我想将这些算法应用于我的问题。
我曾怀疑如何提取每个预测的预测值和当前值。我想计算 RMSE、MAPE 等。
不客气。
您可以通过对所有可用数据拟合模型然后调用 model.predict() 来进行预测
你好 Jason,谢谢你的帖子。它非常有趣。
事实上我有一个问题。我有很多按地区划分的时间序列流量。我不想有40个模型来预测每个地区的流量。
您有什么想法如何使用一个模型来预测所有地区的流量,即一个模型来预测多个时间序列?
提前感谢你
是的,我在这里列出了一些想法
https://machinelearning.org.cn/faq/single-faq/how-to-develop-forecast-models-for-multiple-sites
谢谢您的回答。对于我的项目,我希望有一个模型来预测所有城市的所有值。
我不知道可以使用哪些类型的算法来接受多系列,您能帮我解决这个问题吗,谢谢
遵循这个框架,找出最适合您特定数据的算法
https://machinelearning.org.cn/how-to-develop-a-skilful-time-series-forecasting-model/
谢谢您的回复。事实上,您有没有关于使用 Python 预测多个独立时间序列的链接或文章示例?
我的数据格式如下
日期 城市 X(预测值)
01/01/2016 A 2
01/02/2016 A 4
01/02/2016 A 5
01/01/2016 B 10
01/02/2016 B 11
01/02/2016 B 13
是的,很多——搜索博客,也许从这个教程中的简单例子开始
https://machinelearning.org.cn/how-to-develop-lstm-models-for-time-series-forecasting/
我想在时间序列数据上拟合一条曲线。这些方法对它有效吗,或者它只能用于预测?
或许可以试试这里的方法
https://docs.scipy.org.cn/doc/scipy/reference/generated/scipy.optimize.curve_fit.html
亲爱的 Jason,
你有没有一个博客,其中使用指数平滑和神经网络的组合来预测单变量时间序列?
我的意思是,我们把时间序列的滞后项给指数平滑模型,然后指数平滑的输出作为神经网络的输入?
谢谢你
抱歉,我没有。
嗨,Jason,
您能否也回顾一下BATS和TBATS模型?(De Livera, A.M., Hyndman, R.J., & Snyder, R. D. (2011),使用指数平滑法预测具有复杂季节模式的时间序列,Journal of the American Statistical Association, 106(496), 1513-1527。) 像SARIMA一样,它们在处理季节性时间序列方面表现出色。我想知道您是否有计划回顾格兰杰因果关系,它经常用于从多元时间序列中寻找时间序列依赖关系?谢谢。
感谢您的建议!
你好
我有一个包含许多车辆的数据集,要求我通过获取5个时间序列输入来预测输出,我需要为大约100辆车辆完成这项工作以提高模型的准确性,您能帮助我吗?
这可能会给您一些启发
https://machinelearning.org.cn/faq/single-faq/how-to-develop-forecast-models-for-multiple-sites
你好先生,
您在这里解释的SARIMAX模型是针对单步的。您能告诉我如何进行多步(未来步数=96)预测吗?
在调用 forecast() 函数时指定所需的步数。
嗨,Jeson,
很棒的信息。你能推荐哪些算法可以处理带有趋势和季节性的多变量数据吗?
神经网络
https://machinelearning.org.cn/start-here/#deep_learning_time_series
您好,您展示的哪种方法适用于非常有限的数据?比如只有5个数据点,单变量。无法增加,因为我的研究对象刚运营5年,这些数据需要每年预测。
谢谢
在数据有限的情况下,我们通常会反向操作:假设模型/方法,并尽可能用有限的数据进行拟合,然后将其用于预测。
嘿,Jason。statsmodels 库有一些变化。例如,arima 现在是
>> statsmodels.tsa.arima.model
谢谢。
嗨,Jason。感谢您的精彩帖子。
我不太清楚多元时间序列和外生时间序列之间的区别。
您能解释一下吗?
谢谢你
谢谢。
我的理解是
多变量指的是多个并行输入时间序列,它们被同步建模(滞后观测值)。
外生变量只是添加到模型中的静态回归量(例如线性回归)。
statsmodels.tsa.arima_model.ARMA
自版本0.12起已弃用:请改用statsmodels.tsa.arima.model.ARIMA……
谢谢。我会安排时间更新它。
Jason,感谢您的所有帖子!
我有点困惑何时使用VAR,何时使用ARIMAX?任何解释都将不胜感激……
当你有多元输入时使用VAR。
ARX (ARIMAX),其中的“X”,适用于你有单变量时间序列和外生变量的情况。
https://en.wikipedia.org/wiki/Exogenous_and_endogenous_variables
如果你不确定,可以尝试两种方法,其中一种会自然地适合你的数据,另一种则不会。可能就是这么清楚。
先生您好,感谢这篇精彩的教程
1. 对于SARIMAX的季节性分量“m”,它应该不等于1,当使用1时会报错。
2. 在predict函数中,如果我们想进行下一个预测,为什么我们要传入长度为99?
这可能取决于你的数据。
您在 predict() 函数中指定要预测的索引或日期。
我很好奇什么时候使用哪个模型?以及使用模型前需要满足的条件。我能得到一些关于这方面的建议吗?
确定您有多少个输入和/或多少个输出,然后选择一个支持您需求的模型。
据我理解
单输入:单变量模型
多输入:多变量模型
但我猜每个模型在何种场景下适用,这超出了本主题(即备忘单)的范围。
然而,简单来说(因为我是时间序列的初学者),您能告诉我每个模型在何种场景下适用吗,这样我就可以对每个模型的使用有一个基本的了解。
然而,我正在公司做一个物联网数据项目。您可以看到带时间戳的监测数据。我被要求进行光伏预测。您能推荐一个模型吗,那将非常棒。
日期时间 光伏 最小值 最大值 平均值
01-01-2019 07:00 20.1 20.1 20.1 20.1
01-01-2019 07:03 20 20 20 20
是的,每个模型的示例都展示了其适用的示例类型。
您好,我正在尝试使用SARIMAX,但我仍然对如何设置阶数和季节性阶数感到困惑?
使用网格搜索。
https://machinelearning.org.cn/how-to-grid-search-sarima-model-hyperparameters-for-time-series-forecasting-in-python/
先生,您好,
感谢您精彩的教程。
有没有其他关于使用ARIMA和其他经典时间序列方法进行多元时间序列预测的参考资料?
提前感谢。
上述VAR方法是一个很好的起点。
嗨,Jason,
我有一个关于滞后阶数的问题,在单变量技术中,我们可以使用自相关和偏自相关来决定p和q值。但是,在VAR、VMA和VARMA等多变量技术中,由于我们有多个并行序列,我们如何决定这些滞后阶数?
谢谢,
阿杰
这可能会变得很棘手。或许可以回到网格搜索。
您好,布朗利教授
我真的需要您在我的工作方面的帮助。
我正在尝试对期货中的结构性断裂进行建模,并希望用Python尝试一些独特的方法。
您如何帮助我,我想获得您的电子邮件地址
这个过程可能会帮助您完成您的项目
https://machinelearning.org.cn/start-here/#process
嗨,鲍勃,
你的结构性断裂建模进展如何?我也很想做同样的事情,但现在正陷入寻找出路的困境。
嗨,Jason,
您能演示一下如何使用动态回归模型吗?我的项目需要动态回归模型的帮助。
其中 nt 是 ARMA 过程
yt = a + ν(B)xt + nt
非常感谢您的所有精彩教程。
感谢您的建议。
谢谢 Jason。这是 Rob 的链接。如果您能用 python 来实现,我将不胜感激。
https://robjhyndman.com/uwa2017/3-2-Dynamic-Regression.pdf
感谢您的建议。
嗨 Jason
感谢您的出色帖子。
我有一个时间序列显示出发日期、预订日期和预订乘客数量。它同时具有趋势和季节性成分,我正在考虑出发周几、周、月和前几天(出发日期减去预订日期)来预测乘客数量。您有什么模型建议可以实现吗?MLP?
谢谢
我建议测试一套不同的数据准备方法、不同的建模算法和不同的配置,以发现最适合您的数据集的方法。
https://machinelearning.org.cn/how-to-develop-a-skilful-time-series-forecasting-model/
嗨,Jason博士,
我有一个多元时间序列问题,旨在预测内生变量y,作为外生变量x1,x2,…,xn的函数。我原以为VARMAX方法适用于这种情况,但当我尝试实现该方法时,VARMAX()似乎只能接受多个外生变量。然而,在我的情况下需要一个内生或响应变量。
我需要为上述多元问题创建一个基线模型。我将非常感谢您对此情况的看法。
或许你可以使用持久性模型作为基线。
然后,可以尝试对数据的窗口变换使用线性回归模型作为基线线性模型。
谢谢,贾森博士。
我理解基于单变量数据——响应变量——的持久性模型。
对于第二个选项,我猜您指的是对响应变量的监督学习(窗口)变换拟合线性回归模型,对吗?
是的,这可以帮助您准备数据
https://machinelearning.org.cn/time-series-forecasting-supervised-learning/
还有这个。
https://machinelearning.org.cn/convert-time-series-supervised-learning-problem-python/
谢谢!
修正:“多个内生变量”
嗨,Jason博士,
我有一个多元时间序列问题,旨在预测内生变量y,作为外生变量x1,x2,…,xn的函数。我原以为VARMAX方法适用于这种情况,但当我尝试实现该方法时,VARMAX()似乎只能接受多个内生变量。然而,在我的情况下,只需要一个内生或响应变量。
我需要为上述多元问题创建一个基线模型。我将非常感谢您对此情况的看法。
Jason博士您好,
我是一名实习生,现在正在进行文献综述,目标是为我的实习问题找到正确的方法。在搜索相关文章时,我阅读了您的许多博客,其中一些是为了找到适合我问题的方法。但是,我还没有找到。也许您可以给我指明正确的方向?
从我的实习机构的需求计划部门,我获得了每月的产品(医疗设备)订单量预测。我被指示将这个每月预测分解为每日预测。因此,我正在寻找一种(机器学习)方法,将每月预测分配到每日桶中。如果我正在寻找时间序列预测算法,我的方向正确吗?我发现很多此类算法可以用于确定每月预测,而不是每月预测到每日桶的分布。
您能帮我指明寻找分配算法的正确方向吗?
如果我的问题和描述有点模糊,抱歉 🙂
提前感谢您的时间,
吉米,
荷兰
我建议针对您的问题测试一套不同的算法,以发现哪种效果最好。
也许这个框架会有帮助
https://machinelearning.org.cn/how-to-develop-a-skilful-time-series-forecasting-model/
感谢您分享所有这些时间序列示例。我想进行类似于Holt Winter指数平滑的加权时间序列预测,但使用多变量数据。您对此有什么建议?目标是实现对近期数据赋予更大权重的时间序列预测。
模型将学习为获得最佳预测所需的权重。无需手动操作。
谢谢,那在新冠疫情这种极端情况下呢?只有几个月的新冠后数据,而历史数据用处不大。
没有区别。
嗨,Jason,如何使用分类变量进行时间序列分析?
我现在正在做一个项目,其中有3个月的网络基础设施警报数据库,在这种情况下是一个时间序列问题。
我读过的大多数时间序列分析教程/教科书,无论是针对单变量还是多变量时间序列数据,通常都处理连续数值变量。
我目前手头有一个处理多变量时间序列数据的问题,但所有字段都是分类变量。因此,我想知道是否有任何方法可以使用标准的时间序列分析技术(例如ARIMA、ARMA等)
具体来说,我的数据是警报数据流,在每个时间戳,警报中都存储了警报监控系统、问题位置等信息。这些字段都是分类变量。
您能给我一些关于这个问题的建议吗,以及在这种情况下最推荐哪些机器学习算法?
将它们编码为数字,然后使用您喜欢的任何模型,例如线性、机器学习、深度学习等。
流行的方法包括序数编码、独热编码、嵌入。
Jason博士,您好,
我想预测电信数据。
时间序列数据有数百万条记录,从100万到1000万不等。
我应该首先使用对数、min-max或任何其他方法对时间序列数据进行归一化吗?
此外,删除/替换时间序列数据中的异常值更好吗?
谢谢和问候,
拉吉夫·卡姆拉尼
或许可以先处理一小部分数据样本。
对数据进行缩放、转换、删除异常值等通常是个好主意。尝试一下,看看它是否能提高模型性能。
嗨,Jaron,你的SARIMA示例似乎有一个bug,我们在行中得到
model = SARIMAX(data, order=(1, 1, 1), seasonal_order=(1, 1, 1, 1))
回溯(最近一次调用)
File “”, line 1, in
文件“C:\Users\User\AppData\Local\Continuum\anaconda3\envs\Py37_Tf2_Ke2\lib\site-packages\statsmodels\tsa\statespace\sarimax.py”,第332行,在__init__中
缺失=缺失,validate_specification=validate_specification)
文件“C:\Users\User\AppData\Local\Continuum\anaconda3\envs\Py37_Tf2_Ke2\lib\site-packages\statsmodels\tsa\arima\specification.py”,第303行,在__init__中
引发ValueError(“季节周期必须大于”
ValueError: 季节周期必须大于1。
我确认代码运行正确,我刚刚重新运行了它。
我有一些建议给你
https://machinelearning.org.cn/faq/single-faq/why-does-the-code-in-the-tutorial-not-work-for-me
嗨,Jason,
感谢您分享所有类型的时间序列示例。
在我的项目工作中,我想预测车辆速度,考虑不同的输入,例如车辆当前速度、交通灯状态、两车之间的距离等。由于它具有趋势和季节性,我应该遵循哪种方法?这是一种多输入单输出的场景。
谢谢你!!
不客气。
我建议测试一系列不同的算法,以发现哪种算法最适合您的特定数据集。
谢谢您的回复。我能用SARIMA实现多输入单输出吗,还是必须使用VAR或VARMA?
是的,这将是 SARIMAX,附加输入将被视为外生输入变量。
嗨 Jason
感谢您的教程。我读过您关于时间序列预测的书。通常,时间列会被删除,然后对模型进行训练和测试。在我的工作中,我想预测“时间”。所以我不能删除“时间”列。时间表示为“时间戳”。您能详细解释一下如何预处理数据以预测“时间”吗?
我知道如何准备数据和拆分数据集,您的书中解释得很清楚。
此致,
谢谢。
或许你可以把它当作一个分类任务来处理,例如,在下一个时间步是否会发生事件:0或1。
嗨 Jason
有趣的经典教程(通过统计分析),很多时候比高级神经网络机器学习模型(如MLP、LSTM)更好。
但是这个“statsmodels”库在其各种模型的方法术语上并不统一,有时需要“.predict()”,而另一些时候需要“.forecast()”,而且参数也不同(有时是预测长度的限制,有时需要声明要预测的变量(但其他时候不需要)……因此它们并不统一,相反,当你使用Keras方法时,你知道要声明哪些参数。
除此之外,据我了解,外生变量需要在模型定义和“.predict()”方法中提供……但最终的预测是针对一个特征(单变量),而在多变量中,输出与多变量一样多。
另外,当你使用多变量模型(VAR, VARMA,…)时,你也会得到多个输出(和多变量一样多)……我原以为你可以使用两个特征时间序列来生成一个全新的输出时间序列……就像我以为Keras MLP, LSTM等是允许的……所以我的直觉错了 🙁
阶数(p,d,q..P,Q,D, mm)的术语也很令人困惑。我想它们最终指的是每个阶数所需的滞后或时间步……
敏锐的观察!
同意,这个库多年来一直有点混乱。
你好 Jason,
您是否有关于 Python 中经典方法的更新书籍?如前所述,statsmodels 多年来一直很混乱,在我的大学项目中,我想使用 Simplexponentialsmooth、Holtwinters 和 ARIMA 来预测我的数据,但我遇到了很多关于 statsmodels 的问题。
一个新的库也会有很大帮助。
我在这本书中确实涵盖了SARIMAX和ETS。
https://machinelearning.org.cn/deep-learning-for-time-series-forecasting/
1) 如何检验多元时间序列分析的平稳性,如果我使用“Johansen检验”对多元时间序列进行检验,我如何得出结论?
2) 如果您有Johansen检验或其他检验多元平稳性的python代码,请在这里更新吗?
3) 我可以将 ACF 和 PACF 值用于 VARMAX 模型吗,还是只支持单变量模型?
抱歉,这些问题我帮不了你,我没有关于这些主题的教程。
我正在石化行业工作,想根据压力、温度、气体组成随时间变化等化学参数来预测裂解炉中乙烯的产量。我应该尝试使用哪种模型,例如 LSTM 还是经典时间序列方法?
也许可以尝试一套技术,找出哪种最适合您的特定数据集。
我们如何使用这11种方法中的每一种?我的意思是,在什么情况下或条件下应该应用AR、MA、ARMA、ARIMA或SARIMA方法。
每个部分都对何时使用它给出了一些小的提示,例如当您有趋势、季节性或外部变量等时。
嗨,Jason,
小波是一个热门话题。
你有什么关于这个话题的吗?
目前还没有。
布朗利博士,早上好。
非常感谢您撰写的书籍和发表的出版物。
我想知道您是否知道有什么库或函数可以在使用 SARIMAX 时计算参数(阶数和季节性阶数)的最佳值。
谢谢你。
您可以使用网格搜索,请参阅此示例
https://machinelearning.org.cn/how-to-grid-search-sarima-model-hyperparameters-for-time-series-forecasting-in-python/
博士,非常感谢!
不客气。
感谢您的帖子
不客气。
你好 Jason,
我必须对时间序列的值进行回溯预测。仅仅反转时间序列并进行预测就足够了吗?
我想知道是否有与回溯预测相关的 Python 代码。
谢谢你。
也许可以尝试几种方法,找出哪种效果好或最好。将所有内容与简单的持久性模型进行比较。
嗨,Jason,
我们可以在Sarimax中使用分类变量(二元)作为外生变量吗?我正在尝试预测保费收入,我想使用新冠疫情的影响作为外生变量。
只是想知道您对此是否可行有什么想法。我有过去4年的每周收入数据。
只要您将其编码为数字(例如 0 或 1),它就应该有效。但您应该意识到 SARIMAX 模型仍然将其视为实数。如果您要预测这些分类变量,模型可能会给您 0.7 这样的值,而不是 0 和 1。
嗨,Jason,
我们如何预测观测值少于 10 个的时间序列?我有一些实验室提供客户因特定疾病申请保险的量的时间序列。其中一些 ID 在 4 年内有所有季度的量,而少数 ID 只有一个保险索赔。那么我该如何处理这个短时间序列呢?
基本上,在数据量如此之小的情况下,你束手无策。我知道精算师有自己的技巧来补充这一点。例如,他们会认为某些事物符合特定的统计模型。或者他们会认为疾病A和疾病B可以混合在一起,这样你就可以从一种疾病借用数据到另一种疾病。我没有领域知识来提供更多细节,但跳出固有思维是您唯一能做的事情。
你好 jason,
我正在尝试使用时间序列预测来解决一个问题。为此,我使用了 n-beats 模型,预测结果还不错。但是,我需要知道如何在预测结果后定义极端事件。
是否有现成的库可以实现这一点?这是否依赖于数据分布?因为我的数据不属于任何著名的分布。
谢谢,如果能回复,我将不胜感激。
这确实取决于数据分布。如果您的数据不符合任何分布,请尝试稍微倾斜您的数据(例如,取对数、取平方等),然后找到最佳匹配。这正是我们在现实世界问题中需要做的。
Jason博士您好,
问候。
我想为电信网络中的用户数量开发一个预测模型。您认为哪种模型最适合这种场景?
此致
嗨,Prashant……虽然我无法直接谈论您的特定应用,但以下内容可能会让您感兴趣
https://machinelearning.org.cn/when-to-use-mlp-cnn-and-rnn-neural-networks/
嗨 Jason
感谢您提供如此精彩的内容。您能帮我回答我的问题吗?
我目前正在处理从测试中获取的数据,其中包含大量参数值,例如力、时间、扭矩、速度等。我仍然不确定应该选择哪种模型。这引出了我的问题。
我应该如何为我的时间序列预测任务选择最合适的模型?
嗨,Aravind……感谢您的好评和反馈!
我会从以下两个开始
https://machinelearning.org.cn/sarima-for-time-series-forecasting-in-python/
https://machinelearning.org.cn/how-to-develop-lstm-models-for-time-series-forecasting/
嗨 Jason
这太棒了,对我帮助很大
我有一个请求,您能为 AutoML 模型做这个吗?
感谢您的反馈和建议!
当我们使用机器学习模型处理时间序列数据时,我们首先使用 ARIMA,然后将其 AR 项作为自变量。我们是否有其他标准可以直接使用,避免使用 ARIMA 模型的 AR 和 MA 项来分析单变量时间序列数据?
嗨,Shahfahad……如果您正在处理多变量数据,您应该研究 CNN 和 LSTM 模型。
干得好!我有一个问题:您认为哪种模型最适合彩票预测?谢谢。
嗨,Andy……抱歉,我无法帮助您开发彩票预测模型。
彩票号码的抽取是随机事件,这是设计使然。
无法预测随机事件的抽取。
即使你有一个包含数百或数千次先前彩票抽奖的大型数据集。
我可以向您展示您错得有多离谱……您只需要发挥创造力,将历史抽奖数据库转换为模式数据库,您不必预测中奖号码,而是通过出现置信度分析模式发生情况。现在您无法“手动”完成此操作,但可以通过反向传播的强化学习来纠正用于每次新抽奖的神经网络(这不是时间序列)。通过这种方式,您可以分析性地实现高达 80% 以上的置信度(并非总是,它仍然是置信度百分比),并且如果您考虑其他数据库属性行为(行为非随机但结构化),您可以选择正确的模式(非常重要)。您无法轻松实现这一点。您必须深入编码并进行大量测试,您只需学习博士级别的编码。也许我说得太多了,因为您已经是该领域的博士了。
嗨,Cris……感谢您的反馈!我同意深度强化学习是一个新兴且令人兴奋的研究领域!让我们知道您的模型发现了什么。
是的,这是我的建议。最近我读了一篇关于岭回归的有趣文章。它似乎是一个非常有前景的尝试,也许我们许多人可以在时间序列处理和预测方面获得更好的结果。简而言之,它就像经典的回归,但也会根据数据点与标准回归图的差异程度添加惩罚,我将其解释为回归和一些反向传播元素的融合。正如所说,它非常有前景,尤其是在由于缺少异常值处理等原因而导致结果不佳的情况下。
感谢您的反馈,Sven!我们很感激!