【问题标题】:Financial Time series prediction/ SV Regression金融时间序列预测/ SV回归
【发布时间】:2014-03-18 17:58:19
【问题描述】:

我正在使用 R 软件 (Lib e1071),并且正在尝试使用支持向量回归进行预测。我这样做的方式如下:

我正在使用 N=3 收益率对原始收盘价进行窗口化:

s[t-3]    s[t-2]     s[t-1]   ->   s[t]
1.2350    1.2358     1.2354        1.2360
.         .          .             .
.         .          .             .

etc... 

我要预测的值是 y=s[t]。 SVM 类型是“eps-regression”,内核是“radial”。此外,我执行了 10 倍交叉验证以获得最佳参数、gamma 和成本。



但我有一个问题:



预测总是与最后一个值s[k-1]非常接近,例如:

Last Vector: 

s[t-3]    s[t-2]     s[t-1]   ->   s[t]

1.2350    1.2358     1.2354        1.2355

预测值将与最后一个 s[t-1] 值非常接近。我尝试增加学习向量的数量(10K)并增加 N 产量(最多 7 个),但结果是一样的。

谁能告诉我为什么会发生这种情况,我怎样才能得到真正的预测?



**

附录

**

关于 user__42 的友好回复,我在理解您的解释时有些问题:

1) 假设我有以下 3 个经过训练的向量集

10 s[t-3]          12 s[t-2]        15 s[t-1]    ->      11 s[t]  
5  s[t-4]          8  s[t-3]        9  s[t-2]    ->      10 s[t-1]
6  s[t-5]          12 s[t-4]        10 s[t-3]    ->      15 s[t-2] 

建议的尝试预测是y'

y'[t] = y[t] - y[-t]

以上述为例

y'[t] = 11 - 15  -> y'[t] = y[t] - y[-1] 

但是在实时预测中,我不知道y[t]来计算y'

y'[t] = x - 15

2) 考虑到上面的例子,请你解释一下下面的表达式是什么意思:

y'[nt] 


y'[-nt] 


y[nt] 

【问题讨论】:

  • 这可能更适合stats.stackexchange.com。他们可能有更多的洞察力。
  • 你想做什么?财务数据是一个过于宽泛的术语。
  • 我希望现在更清楚了。谢谢。
  • stats.stackexchange.com 可能会更好,但现在可以操作了...

标签: artificial-intelligence regression svm prediction


【解决方案1】:

如果您使用真实的金融时间序列数据这种行为是挑战的一部分 - 因为金融时间序列非常嘈杂

你可以试试:

  1. 写下您的内核参数并尝试使用相同内核参数的 nu-SVR 并选择 nu=0.1。通过这种方式,您将增加模型的复杂性,与“死记硬背”相结合(用谷歌翻译!德语中的“auswendiglernen”)

1.a.edit 您可以尝试一个不是经典 ε 不敏感 LF 的损失函数,例如高斯损失函数(我自己没有 xp)

1.b.edit 我曾经使用过 FaLK-SVR。在那里,您可以将数据拆分为子数据邻域:我认为这将帮助您获得更少的“平均”结果。 FaLKM-lib 是基于 libSVM 的即用型实现:http://disi.unitn.it/~segata/FaLKM-lib/

  1. 包括 s[t-13] 和 s[t-27](不是介于两者之间的值!仅(t-1、t-2、t-3、t-13 和 t-27)到给机器一个关于大趋势的线索。

  2. 如果您认真尝试预测像这样的系列,比如天气 ;-)、micro-blogging 或计算特征(通过隐藏马尔科夫),您当然需要更多特征

  3. 谷歌更简单的玩具数据或查看here

【讨论】:

  • 感谢您的回答。我确实尝试了您的建议(1. 和 2.),不幸的是,我得到了相同的行为。预测总是非常接近最后的价格。也许增加时间序列的间距可能会有所帮助?即:(t-2,t-5,t-9,t-13 和 t-27)
  • 更新:我增加了这样的间距:[t-1],[t-13],[t-27] 包括建议 1. 和 2。结果:相同的初始结果。
  • 好吧,让我澄清一下 no3:您的输入值是简单的 y[-t] 值 - 所以机器将 y[-1] 作为对 y 的最接近猜测并没有错。尝试预测 y'[t]=y[t]-y[-t] 也使用 y'[-nt] 作为输入。这样,您从 x1=[1,2,3,4] 到 x2=[3,4,5,6] 的内核距离将为零。如果您需要 y[t] 作为输出,只需将(已知)y[-t] 添加到 y'[t]。还可以尝试混合 y'[-nt] 和 y[-nt] 值来涵盖低值和高值的不同行为。尝试将尽可能多的信息放入内核中。玩 (y[-nt]-y[-nt-2]) 等等...
  • 感谢您的洞察力。您能否在最初的问题中参考上面的附录以澄清一些问题?再次感谢。
  • 请在上面的评论中将“-nt”替换为“t-n”。对于 x1 和 x2,我指的是您的原始输入。如果你取这些值的微分: x1*=[1,1,1,1] 和 x2*=[1,1,1,1] 任何内核的 x1* 和 x2* 之间的内核距离都是 0。好的.现在为了简单起见,我们要预测 y1 = 5 和 y2 = 7。所以 y1* = y1' = 1 和 y2* = y2' = 1 也是。如果我们有一台机器预测 y1* 和 y2*,我们需要将 y' 添加到(已知)y[t-1] 以返回所需的 y。这里:y1 = y1* + y1[t-1] = 1 + 4 = 5 和 y2 = y2* + y2[t-1] = 1 + 6 = 7。所以你预测 y' 并从中计算 y。
猜你喜欢
  • 1970-01-01
  • 2017-10-25
  • 2014-08-22
  • 2015-11-06
  • 2017-12-29
  • 2021-12-11
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
相关资源
最近更新 更多