支持向量回归用于多元时间序列预测


22

有没有人尝试使用支持向量回归进行时间序列预测?

我了解支持向量机,部分了解支持向量回归,但是我不了解如何将其用于建模时间序列,尤其是多元时间序列。

我试图阅读一些论文,但是它们的水平太高了。谁能用外行的方式解释他们将如何工作,尤其是在多元时间序列方面?

编辑:详细说明一下,让我尝试用股价示例进行说明。

假设我们有N天的股价。然后,对于每一天,我们可以构造一个特征向量,在一个简单的情况下,它可以是前一天的价格和当天的价格。每个特征向量的响应将是第二天的价格。因此,给定昨天的价格和今天的价格,目标是预测第二天的价格。我不明白的是,假设我们有六个月的训练数据,您如何将重点放在较新的特征向量上?


您可以张贴您要参考的论文吗?
拉姆·阿卢瓦利亚

1
使用本地支持向量回归机预测时间序列,Rodrigo Fernandez,svms.org/regression/Fern.pdf 金融时间序列预测的支持向量回归,Wei Hao和Songnian Yu,springerlink.com
raconteur

Answers:


18

在支持向量回归的背景下,从方法论的角度来看,您的数据是时间序列这一事实主要与之相关-例如,您无法进行k倍交叉验证,并且在进行回测时需要采取预防措施/模拟。

基本上,支持向量回归是一种判别回归技术,与任何其他判别回归技术一样。您给它提供了一组输入向量和相关的响应,并且它适合模型以尝试预测给定新输入向量的响应。另一方面,内核SVR在学习步骤之前将许多转换之一应用于您的数据集。与线性回归不同,这使它可以拾取数据集中的非线性趋势。一个好的内核可能是高斯RBF -它具有可以调整的超参数,因此请尝试几个值。然后,当您对正在发生的事情有所了解时,可以尝试其他内核。

对于时间序列,导入步骤正在确定您的“特征向量” 将是什么;每个x i都被称为“特征”,可以根据当前或过去的数据进行计算,每个y i(响应)将是您要尝试预测的一段时间内的未来变化。以股票为例。您的价格随时间推移而变化。也许你的特点是一个。)在200MA-30MA传播和b。)20日波幅,所以你计算每X ŧ在每个时间点,随着ÿ ŤXX一世ÿ一世XŤÿŤ,即该股票一周后的收益(例如)。因此,您的SVR学习如何根据当前的MA价差和20天交易量来预测下周的收益。(此策略无效,所以不要太兴奋;)。

如果您阅读的论文太难了,您可能不想自己尝试实现SVM,因为它可能很复杂。IIRC为R提供了一个“ kernlab”软件包,该软件包具有内核SVM实现,其中包括许多内核,因此可以提供一种快速启动和运行的方法。


@Jason,感谢您的回复。我对于如何使较旧的数据在培训期间不那么重要感到困惑,例如,如何使最后讲的100个示例而不是最后的10,000个示例变得重要。另外,我在Python中使用SVM有一些经验,因此我希望使用它。
raconteur

您不能真正使用所有过去的数据作为特征向量。您必须以某种方式将其转换为有意义的功能。例如,考虑对时间序列的过去20个值求平均,或者对序列的当前值除以移动平均值。这些特征以一个简单的数字指示数据集的导入特征。提出(说)10个左右的功能,您认为它们将尽可能地具有预测性。因此,要使较早的数据不再那么重要,则在定义功能时就不那么重要了(即使用较短的移动平均值)。
威廉

@Jason,让我尝试用股价示例进行解释。假设我们有N天的股价。然后,对于每一天,我们可以构造一个特征向量,在一个简单的情况下,它可以是前一天的价格和当天的价格。每个特征向量的响应将是第二天的价格。因此,给定昨天的价格和今天的价格,目标是预测第二天的价格。我不明白的是,假设我们有六个月的训练数据,您如何将重点放在较新的特征向量上?
raconteur

2
哦,我明白你的意思了。简短的答案是,至少不能重新设计SVM以了解新近度的概念,这是不可能的。SVM是根据xy对而不是有序xy对定义的,因此它最小化的目标函数是所述对的函数。OTOH,您可以运行多个单独的SVM,一个用于过去一个月,一个用于过去一年,一个用于过去两年,然后根据您个人对最近与。旧数据(例如0.7 *过去一个月+ 0.2 *过去一年+ 0.1 *过去2年)。
威廉

@William ..除了SVM之外,您对哪种机器学习算法最适合时间序列预测(与raconteur提出的问题相同)有什么建议?在不同的领域应用时答案会有所不同吗?例如,股价与供应链预测(预测我们所销售产品的需求)。–
Lam

1

我对所提问题的个人回答是“是”。您可以将其视为过去的优点或缺点,可以选择无数种功能来描述过去。尝试选择与您可能会向某人简洁地描述市场刚刚做过的事情相对应的功能[例如,价格如果是1.4”,则表示与其他数字无关。对于支持向量机的目标,最简单的是价格差异和连续两天的价格比率。由于这些直接对应于假设交易的命运,因此它们似乎是不错的选择。

我不得不在书呆子上不同意Jason的第一句话:您可以在raconteur所描述的情况下进行k折交叉验证,这很有用(我将解释附带条件)。从统计上讲是有效的原因是,在这种情况下,目标的实例没有内在联系:它们是不相交的差异或比率。如果您选择使用比目标范围更高分辨率的数据,则可能会担心相关实例可能会出现在训练集和验证集中,这会损害交叉验证(相反,在应用SVM,您将没有可用的目标重叠的实例)。

确实降低了交叉验证的有效性的是,市场行为是否随着时间而改变。有两种可能的方法来解决此问题。首先是将时间作为一项功能(我发现这没有什么用处,也许是因为将来该功能的价值是全新的)。一个积极的选择是使用前向验证(这意味着在一个滑动的时间窗口内测试您的方法,并在此窗口之后的时间段内对其进行测试。如果行为随时间而变化,这句话应归功于Niels Bohr“预测非常困难,尤其是关于未来的预测”尤其合适。文献中有证据表明,金融市场的行为确实会随着时间而变化,通常会变得更加高效,

祝好运!


欢迎来到我们的网站!
kjetil b halvorsen 2014年

0

Quantum Financier上有一个使用SVM预测财务系列的示例。它可以轻松地从分类系统(长/短)转换为回归系统。


1
亲爱的上帝,请没人使用这种策略!这是初学者获得如何通过华尔街熏:(书中最古老的诀窍是使用一些基本的技术分析就像RSI加装一个统计模型,因此newbs认为他们已经挖到了金子。
威廉

1
来自原始帖子的@Jason“我也想弄清楚我认为这不是一个好的系统。” 但是,这是如何将支持向量机拟合到时间序列的一个很好的例子。
Zach
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.