为什么ARIMA不能预测未来的时间序列收盘价?
我真的希望有人能解释一下在使用ARIMA进行时间序列预测时是什么情况!?
当我使用ARIMA和这个设置时:
请看图片。
我使用了一个很大的窗口,这样我就可以看到过去几个月发生了什么。图表上没有放大吗?
起初,我以为我是在训练数据的窗口大小,然后对看不见的数据进行测试(我有20年的道琼斯开盘/高点/低点/收盘价以及2000年至2020年的技术指标)。原因是,当我放入一个非常高的窗口大小,比如4500天(大约18年的数据)时,我只会看到从2018年到现在大约2年的图表结果(我假设这是测试数据),而如果我的窗口大小只有60天,我将看到2000年到2020年的整个图表。
但是…所有的相对误差数据都非常小,比如1%或2%,这太好了,不可能是真的,对吧?我假设这是因为我在一个数据子集上进行训练并在相同的数据上进行测试(因为它使用我的窗口大小和步长设置滚动)?
我的问题是:
1)如何在两个不同的数据集上进行ARIMA测试?一个见过,一个没见过,没受过训练?使用交叉验证操作符?如果这是我需要的运营商,我如何确保ARIMA列车具有特定的日期范围,以便我可以使其包括平静、低波动期和高度波动期,比如在2019冠状病毒病期间?
2)对未经训练的数据进行ARIMA测试?
3)我希望训练期不固定,覆盖数据集的前75%(2000年至2015年)?
最后,
4)如何让ARIMA预测未来2天(或5天,或10天)我在Excel中的最后日期或数据行明天晚上,当我用雅虎的财务数据更新我的Excel时,也就是8月3日。也就是说,ARIMA将预测8月4日和5日及以后的收盘价?
我已经尝试了许多窗口大小组合,但相对误差低一定是由于我提出的没有在看不见的数据上进行测试的观点。
即使使用ARIMA,只有10天的小窗口,它也不能预测未来。
我希望那些对金融时间序列预测感兴趣的人能理解这些问题!
提前非常感谢,
答案
德国多特蒙德
我仍然不确定与ARIMA相关的测试,培训和验证(后者我甚至不知道我在做),我仍然不明白Qu的1,2和3的答案是什么?
“整个验证”——我的过程中哪一部分是“验证”?我以为我只是在对整个数据集进行训练和测试这就是为什么我得到了惊人的低相对误差统计数据吗?
“如果你想进行预测,你需要在一个新的数据集上对ARIMA进行“再训练”。”请问我该怎么做?
非常感谢你的任何建议,因为我认为这会简单得多,但是我发现RM的帮助(在右边)对于初学者来说很难理解,尽管有4年的算法交易经验!就好像"帮助"在和那些已经明白一切的人说话。
欢呼,
最好的
天空交易员
在一个训练集上训练你的数据集,在一个看不见的测试集上测试模型,这通常被称为验证。对于“正常”的机器学习应用程序和时间序列问题都是如此。有一些区别,一个重要的区别是如何建立训练集和测试集。在一个“正常”的机器学习用例中,你大部分时间使用交叉验证,对于时间序列问题,你想使用滑动窗口验证。稍后由Forecast Validation操作符实现。
因此,您的初始设置对于验证(在未见过的数据上测试模型的性能)来说已经是正确的了。关于你的问题:
1)预测验证操作符直接在“训练”子过程(内部过程的左侧)中训练预测模型(在您的例子中是ARIMA)。然后使用这个预测模型来预测“测试”子流程中的测试窗口,并计算一个性能度量(在您的情况下由性能操作符)。Forecast Validation操作符的重要输出是模型和最终模型的评估性能,最终模型是在整个输入数据上进行训练的。
2)参见1),预测验证操作符自动执行此操作
3)将窗口大小设置为输入数据的75%。目前,窗口大小只能在多个示例中配置
4)使用预测验证操作符的最终模型(顶部输出端口),并将其连接到预测验证操作符之外的应用预测操作符。请注意,在第二篇文章的截图中,您显然没有连接Apply Forecast操作符。操作员只放在线路的顶部,线路本身不连接
希望这能有所帮助,
最好的问候,
费边
PS:我建议通过产品内教程(点击欢迎面板中的“学习”选项卡)来熟悉RapidMiner和数据科学的概念。乐鱼平台进入虽然它并不完全针对时间序列,但它有助于熟悉产品
pp。当你想弄清楚操作符是如何工作的时候,你也可以看看操作符帮助后面的教程过程
再次感谢使用ARIMA的帮助。我有几个关于日期和结果的问题。(它看起来很多,但我只是添加了许多图像来帮助)。
我的道琼斯数据和指标涵盖了2000年至2020年7月29日。我有一个预测验证设置,窗口大小= 250,步骤= 20天,地平线= 5。
我想知道为什么预测验证结果总是在最上面的行中包含2020年5天地平线的测试日期,然后从那里开始给出2000年的结果?请参见图片。
我的数据从2000年1月开始,但作为一个实验(因为步长与月值更好),当我设置窗口大小= 5000(我有5177行/日期),步长= 1天,地平线= 2时,示例集“应用预测”中的第一个日期是2000年9月11日。为什么它从2000年9月开始,而不是在第一个日期(2000年1月3日)之后的一天,2000年1月4日(步长为1)?
我的“预测验证”结果,窗口250,步骤=1和地平线= 20显示了截至2020年8月28日的测试结果:
但我的“应用预测”图表仅显示截至2020年7月10日的数据:
在我的“应用预测”图表中,我希望在2020年8月28日之前看到绿色的未来预测曲线图?
那么,最后,我如何得到2020年8月未来价值的图表(你可以在这张图表的最后看到一个小的绿色预测到7月9日/ 10日),为什么它只是一条绿色的平线,不显示单个日期——我期待的是一个像我的蓝色近线那样曲折的图表?
我实际上决定检查为什么会发生上述情况,并运行窗口250和步骤=1,但现在有一个大的50天地平线而不是20天-现在我得到了(正确的)相反的事情发生,因为我现在有一个正确的“应用预测”数据表和图表(尽管是平滑的绿色线),显示未来的值,直到2020年10月15日,我的“预测验证”结束2020年7月4日。
所以我不确定为什么我的“应用预测”在前一种情况下,地平线= 20,没有显示任何7月20日之后?我还有一张很厚的“应用预测”图表?
玩不同的ARIMA窗口大小等,我也注意到我的预测现在非常相似?
非常感谢,任何帮助都非常感激!
欢呼,
我尽量简短地回答这些问题:
预测验证通常并行执行,因此测试结果的顺序取决于首先执行哪个窗口(这是内部处理)。您可以禁用并行执行,也可以在其后添加Sort操作符
- Apply Forecast操作符的结果ExampleSet从用于训练Forecast Model的输入时间序列数据的开始处开始(如果您启用了相应的参数),或者它只保存预测值。因此,在您的示例中,提供给Apply Forecast操作符的模型是根据9月份开始的数据进行训练的。您可以在操作符之前和之后插入断点(右键单击操作符),以进入可能与预期行为不同的细节
-我在另一篇关于差距的文章中添加了一个答案
-当你使用应用预测时,它显然没有对训练数据的预测(缺失值),并且它没有对预测值(未来)的实际值。当您使用Forecast Validation时,测试窗口包含预测值和测试窗口的实际值,但是这与使用Apply Forecast来预测未来的未知值是不同的情况
-大多数屏幕截图都显示了应用预测操作符的结果。此操作符预测值的数量仅由Apply Forecast操作符的相应参数定义
-预测模型试图根据过去的值预测未来。最好的预测可能只是一条平坦的线,因为数据中没有合适的模式,输入数据中的“之字形”只是无法预测的噪声。
您可以尝试进行优化,以找到ARIMA模型的最佳参数设置,从而获得“最佳”预测(就您在验证中使用的性能度量而言)。
最好的问候,
费边
我的地平线被固定在20(试图复制8月份第一个ARIMA应用预测连续每日结果)。步长为1。
关闭并行执行仍然会首先显示2020年的数据,然后在预测验证中显示2005年的数据。我使用了5200行数据(2000年至2020年)的75%,即3900行——窗口大小和步长为1。为什么预测验证会从2005年开始产生结果(在它仍然首先复制2020年数据的顶部行之后),当然我是在2000年到2015年(75%的数据)进行训练,预测验证应该从2015年开始?
我很困惑为什么使用我的许多窗口和步长标准组合(但总是与地平线在20),我不能让它像我上周第一次开始使用ARIMA时那样连续复制应用预测结果,并且产生的结果不会跳过每3天,即使我已经测试过它并在同一数据集上运行ARIMA模型(最后日期2020年7月29日)?
将步骤从1更改为100,然后我尝试使用排序操作符,这并没有解决在预测验证结果的顶部首先看到2020年数据的问题,所以我删除了排序回到步骤大小1并再次运行它,现在它显示了从2015年开始的预测验证(应该是这样,尽管2020年的结果仍然在顶部)而不是2005年,所以……我想知道为什么把步骤从1改为100,然后再回到1,从2015年开始,它现在能产生正确的结果吗?
”Apply Forecast操作符的结果ExampleSet从输入时间序列数据的开始处开始(如果您启用了相应的参数)用来训练预测模型,”
请问是哪个参数?
” 当您使用预测验证时,测试窗口包含预测值和测试窗口的实际值,但这与使用应用预测来预测未来的未知值是不同的情况。”
我对使用应用预测获得那些未来的预测很感兴趣,为什么窗口在3900,步骤在1,地平线在20(试图复制8月份第一个ARIMA应用预测连续的每日结果)我永远不能让应用预测超过7月20日?我要20天内的结果从2020年7月29日起。第一步应该能适应,不是吗?我遗漏了什么?
”您拥有的大多数屏幕截图都显示了Apply Forecast操作符的结果。此操作符预测值的数量仅由应用预测操作符的相应参数定义。
综上所述,我已经将应用预测设置为20年的地平线,我仍然不清楚为什么它没有从我的数据结束(2020年7月29日)开始给出这些值,直到2020年8月?我希望我在上周得到窗口和步长时就能给出从8月开始连续几天的完美每日预报……
我在美国消费数据的样本/时间序列/模板/自动化arima中查看了自动arima。
我添加了一个优化网格操作符,但无法理解为什么操作符参数文件无响应或如何使用向导?请看图片:
再次感谢您的意见。
最好的
天空交易员。
当您正确配置Sort操作符(通过在相应的Date属性之后排序)时,不会发生2020数据出现在顶部的情况,因此您自己的配置一定是错误的。
正如我已经说过的,窗口总是基于示例的数量。你可以自己数。也许你可以自己画一个例子,以便更好地理解窗口的工作方式。如果您对窗口有了更好的理解,您就会弄清楚窗口是如何处理数据的,以及窗口大小和步长的哪种组合会产生什么效果。
(断点有助于理解具体的步骤,因为您可以直接看到步骤前后的数据)
老实说,有3个参数在应用预测。一个控制预测长度,另外两个称为“添加原始时间序列”和“添加组合时间序列”。它们甚至在帮助文本中有描述。
正如我所说,Forecast Validation的配置对未来的预测值没有影响。它仅用于评价预测模型的性能。
应用预测操作符使用的预测模型使用整个输入数据作为训练数据(如帮助文本中所述)。所以预测值之间的时间差就是基于输入时间序列中最后两个值的时间差。预测样本的数量基于预测长度参数。
您是否在优化参数操作符中放置了任何东西?请看看操作员的帮助文本和教程过程。
一般来说,我建议通过产品内的教程(在RapidMiner开始的欢迎对话框中的“学习”选项卡)
也请研究帮助文本和教程的操作过程更详细。
最好的问候,
费边
干杯,是的,我知道应用预测中的参数以及它们的作用。我更喜欢勾选第一个方框(添加原始时间序列),而不勾选第二个方框以获得更清晰的结果表。
我对窗口很熟悉,因为我通常使用每周、每月或每季度的步长,这是基于对冲基金和EFT等交易公司如何改变他们的股票投资组合,例如在衡量季度业绩之后。
《地平线预测》似乎不言自明。我在我的算法交易中使用了很多步进优化,它使用了类似的概念,并允许锚定(最佳)或非锚定的数据优化。
“应用预报操作员使用的预报模型,使用整个输入数据作为训练数据(正如帮助文本中所描述的那样)。”
"使用整个输入数据":
但是窗口大小不就是将数据集分成训练和测试大小的原因吗?
(拥有至少一半的数据似乎是明智的,当然最好能够涵盖不同的市场机制(波动期、非波动期、趋势期、非趋势期)。这些季度时间描述/步长在周末“缺失”日期的情况下到底有多准确,我还在研究中。
“所以预测值之间的时间差只是基于输入时间序列中最后两个值的时间差。”
对,这就是两个输入之间有3天的问题,因此最终会出现跳过日期的预测,例如2020年8月1日、4日、7日等。
也许我在这里又错过了一点,但是(取决于步骤的大小,所以最好有一个像1或5这样的值),如果数据截止于7月29日,应用预测范围是20天,步骤很小,那么可以做出8月份的未来预测。
这就是为什么上周我以为我已经用ARIMA模型把所有事情都整理好了,直到我回过头去看它,发现无法复制那些未来连续八月预测使用无数的窗口和步长值(请参阅我的其他帖子)。
好的,我会再看一下断点,但我仍然觉得有些东西不正常工作(我的设置),这就是让我非常困惑的地方,因为正如你所说,ARIMA没有很多参数可以改变。
“您是否在优化参数操作符中放置了任何东西?”
我还没有走到那一步,因为正如上面提到的,我不知道如何使向导工作。
最好的问候,
天空交易员。