时间序列预测(最终使用Python实现)

27
  • 有哪些用于时间序列预测/回归的算法?
    • 使用神经网络如何?(关于这个话题的最佳文档是什么?)
    • 是否有可以帮助的Python库/代码片段?

1
如果您能解释一下您的应用程序(您正在处理哪种时间序列),那将非常有帮助,因为最佳方法取决于具体情况。对于您的算法“存在性”问题,答案是“很多”。 - Pete
我正在处理金融数据(外汇时间序列)。 - gpilotino
1
我最喜欢的!最重要的是首先对你的时间序列进行随机性特征描述;如果你发现它是随机的,那么任何确定性方法只能靠运气。在市场上,你可能会发现一些非随机行为的阴影,但它们会消失和出现。因此,确定性方法的成功在很大程度上取决于你的适应能力。 - Pete
7个回答

73

时间序列回归的经典方法包括:

  • 自回归模型(有整个文献关于它们)

  • 高斯过程

  • 傅里叶分解或类似方法,以提取信号的周期性成分(即数据中隐藏的振荡)

我知道的其他不太常见的方法包括:

  • 慢特征分析,一种算法,可以提取时间序列的驱动力,例如混沌信号背后的参数

  • 神经网络(NN)方法,可以使用递归NN(即用于处理时间信号的NN)或经典前馈NN,其接收部分过去数据作为输入,并尝试预测未来的点;后者的优点是已知递归NN存在考虑远距离过去的问题

在我看来,对于金融数据分析来说,不仅需要获得时间序列的最佳猜测外推,还需要可靠的置信区间,因为由此产生的投资策略可能会因此而大不相同。概率方法(如高斯过程)可以免费提供这一点,因为它们返回可能未来值的概率分布。使用经典统计方法,您必须依赖自助法
有许多Python库提供统计和机器学习工具,以下是我最熟悉的几个:
  • NumPySciPy是Python科学编程必备的工具
  • 有一个Python接口可以连接R,叫做RPy
  • statsmodel包含经典的统计模型技术,包括自回归模型;它与Pandas这个流行的数据分析包很搭配
  • scikits.learnMDPMLPyOrange是机器学习算法的集合
  • PyMC是一个Python模块,实现了贝叶斯统计模型和拟合算法,包括马尔可夫链蒙特卡罗方法
  • PyBrain包含(除其他外)前馈和递归神经网络的实现
  • Gaussian Process site上有一个高斯过程软件列表,其中包括两个Python实现
  • mloss是一个开源机器学习软件目录

1
pandas 是一个更为活跃的项目:http://pandas.pydata.org/ - Taha Jahangir
是的,pandas 是一个很好的用于操作数据序列的项目,特别是在日期很重要的情况下。然而,据我所知,它除了基本的统计工具之外,并不包含许多用于预测和回归的算法。例如,请参见http://pandas.pydata.org/pandas-docs/dev/computation.html。 - pberkes
1
谢谢!我正在寻找如何构建一个通用的内部模型,用于在嘈杂环境中操作的传感器(例如IMU或声纳),这提供了很好的想法,除了传统的噪声建模。 - kert

5

我对Python的库一无所知,但R中有好的预测算法是开源的。请查看forecast包,其中包含时间序列预测的代码和参考资料。


5

两种方法

对于分类、回归、聚类、预测及相关任务,处理时间结构化输入有两种方法:

  1. 专用时间序列模型:机器学习算法直接将这些时间序列纳入考虑。这样的模型就像一个黑匣子,很难解释模型的行为。例如,自回归模型。
  2. 基于特征的方法:在此方法中,时间序列被映射到另一个可能更低维度的表示形式。这意味着特征提取算法会计算出时间序列的特征,如平均值或最大值等。然后将这些特征作为特征矩阵传递给“常规”的机器学习算法,例如神经网络、随机森林或支持向量机。这种方法具有更好的可解释性优势。此外,它使我们能够使用一种已经发展良好的监督机器学习理论。

tsfresh计算了大量的特征

Python软件包tsfresh 从包含时间序列的pandas.DataFrame中计算大量这样的特征。您可以在http://tsfresh.readthedocs.io上找到其文档。

enter image description here

声明:我是tsfresh的作者之一。


各位,如果我们有回归/多类标签,如何使用这个库?你的测试示例(https://github.com/blue-yonder/tsfresh/blob/master/notebooks/pipeline_example.ipynb)运行良好。然而,同样的示例但是有微小的更改将完全无法工作 - http://content.screencast.com/users/SASH2012/folders/Jing/media/3d5fb327-f5ed-4dba-9061-3093a492dd09/2016-12-23_1603.png请建议。 - SpanishBoy
您正在使用随机目标。对于随机目标,没有任何特征是相关的。因此算法将删除所有特征。 - MaxBenChrist
我会说一些功能具有非常小的统计测试价值,但完全不相关。我如何基于Boruta添加自定义feature_selector? - SpanishBoy
在您上面发布的屏幕截图中,您将目标向量y设置为随机变量。对于随机目标,您可以想到的每个时间序列特征都是无用的。 - MaxBenChrist

4

仅就算法本身而言,我最近在一个项目中使用了双重指数平滑,当数据存在趋势时,该算法可以很好地预测新值。

实现方法非常简单,但也许对于你的情况来说,这个算法不够详细。


4

你尝试过使用自相关来发现时间序列中的周期性模式吗?你可以使用numpy.correlate函数实现。


听起来很有趣,你有示例或链接带一些片段吗? - gpilotino
我不知道这是否有帮助,但你可以尝试在这里检查- http://dr-adorio-adventures.blogspot.com/2010/04/computing-sample-partial.html。同时,还可以查看非常好的Python计算机代数系统SAGE- http://www.sagemath.org/doc/reference/sage/finance/time_series.html。 - Agnius Vasiliauskas

2

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接