分类
用技术指标进行交易

介绍时间序列数据和常见的金融分析方法

Forecasting at Scale Deep AR: Probabilistic Forecasting with Autoregressive Recurrent Networks

介绍时间序列数据和常见的金融分析方法

1.我该如何学习这门课程? (1)首先您要注册一个学银在线的账号。 (2)您需要有一定的上网条件,能够流畅的观看教学视频。在观看的过程中,您可以选择在PC端登陆我们的网页, 也可以选择下载我们的app学习通,通过手机客户端来学习 (3)您一旦报名选择了课程,我们的课程主讲老师或课程团队会通过通知的形式给您发送课程有关的消息,同时会抄送您的邮箱,请您及时查收。 2.我在学习过程中遇到问题了,怎么办? 您可以通过以下几种方式获取帮助: (1)在课程群聊中发布求助信息,说不定和你一起学习这门课的小伙伴就能够解决你的问题呢; (2)在课程讨论区留言,课程团队看到后将会及时回复。 (3)联系我们的客服,或者随时给我们发邮件,邮箱地址:[email protected] 3.我是新手,能否给我一些学习建议? (1)我们的课程采用MOOC的方式授课,因此您可以自由安排您的学习时间、学习地点。但我们仍旧希望您每周能都有固定的时间持续进行本课程的学习,根据人的记忆曲线显示这种规律的学习方式能够最大限度的提升您的学习质量。 (2)学习的过程比较容易,为了检验您的学习成果,我们的课程团队会在课程章节结束后布置测验或作业,希望您尽可能的按时独立完成。如果有没有掌握的知识点,您可以继续回看复习课程。 (3)希望您能够积极参与课程的讨论,与各位学习者一起煮酒论英雄。在讨论的过程中,不光可以对课程所学内容温习内化,还能互相碰撞出思想的火花,相信您一定会有额外的收获。

入行时间序列预测必读的4篇论文(附代码)

时间序列预测在供应链、金融、工业等众多领域有着广泛的应用。与CV、NLP等标准化应用不同, 时间序列预测项目与业务场景结合紧密。预测对象、颗粒度、前置期、准确性指标等对于构建模型最关键的因素往往并非一目了然,只有通过对不同场景的需求进行深入分析才能找到合适解决方案。因此从业者不但需要掌握各种方法的原理,还需要能够结合业务具体使用场景分析项目的需求,找到合适的算法。 这对从业者的能力提出了很高的要求,也是业内时间序列预测资深专家短缺的原因。

接下来推荐几篇经典论文供大家学习复现。 帮你快 速梳理时序预测算法的种类的原理。

1、基于历史数据对未来做出预测

Forecasting at Scale

Deep AR: Probabilistic Forecasting with Autoregressive Recurrent Networks

※推荐理由:

1) Prophet是Facebook开发的时间序列预测软件包,在业内具有广泛的应用。《Forecasting at Scale》介绍了Prophet的算法原理。

2)Deep AR…一文提出了一种基于LSTM的时间序列预测算法,适用于高通量时间序列预测。该方法不仅能给出预测结果,还能给出结果的置信区间。本文作者来自亚马逊算法研究所。论文中的算法DeepAR已经集成在Amazon Sagemaker机器学习平台,对外提供预估服务的功能。

2、兼顾长短期预测

※推荐理由:

3、多层级预测

Prediction of hierarchical time series using structured regularization and its application to artificial neural networks (2020)

※推荐理由:

上述4篇论文在深度之眼《时间序列预测项目班》中都有系统地讲解,其第1篇论文 《Forecasting at Scale》 的讲解业已开源给本公号粉丝,扫下方二维码即可获取。

介绍时间序列数据和常见的金融分析方法

部署后,深度学习模型无法再调整或继续学习。 如果这些模型的性能出现问题,就必须离线并重新训练。 这样做的问题是,整个过程不仅会干扰操作(除非你有一个备用版本的深度学习网络,在主模型重新训练的同时继续工作),同时也并不能保证新训练出来的模型比原先被替换的模型表现更好。

深度学习模型使用训练算法(称为反向传播),使用了数学中的经典 梯度下降算法 。 这已不是什么新的概念,并已在数学领域中研究了数十年。 因此,深度学习并不是什么新鲜事,它是公关和营销新包装下的旧数学优化模型。其关键和已知问题是它们不能保证找到它们的参数(权重)的全局最优解,因此它们在搜索时很容易陷入局部最优、而不是全局最优的参数集。 这意味着,当应用于时间序列分析和预测时,它们无法保证它们能够生成最佳预测结果。

来源:Victor Lavrenko, 2014

这些网络的训练计算成本非常高, 深度学习网络中单个权重的计算要求算法能迭代求解各种复杂的传递函数的链式微分方程。 然而,复杂的深度学习网络可能至少有一百万甚至更多这样的自适应权重,并且单个权重需要针对每个训练示例进行重新调整。

例如,如果时间序列拥有1,000个值或数据点(例如3年以上的股票图表,以每日交易收盘价为一个数据条目),对于一个一百万权重节点的深度学习网络需要进行1000次计算,所以计算量会达到10亿次!而这仅仅是对整个网络节点的一次训练而已。实际上,网络可能需要显示数百或数千倍的所有训练示例, 从而保证最终调整得到的权重在测试集上的预测结果在既定的误差容忍范围内。 为了在合理的时间范围内( 只用几天甚至几小时,而非几个月或是几年的时间 )实现如此大量的计算,深度学习网络通常需要在大型服务器或大量并行运算的电脑上进行训练,或者两者结合。

为了解决训练的时间问题,通常会使用一些实用的技巧。 例如:使用非常简单的算法训练网络几个周期,在每个周期中仅训练部分权重,使用 遗传算法 预先设置权重,而不是随机分配权重或用一些近似网络结构的算法。但所有这些都不是科学的方法,而且大多数只是无指导的试验和错误 - 技巧可能在某些情况下起作用,也可能完全不起作用,不能保证成功或确保减少时间和精力。即使这些或类似的技巧以某种方式起作用,你 可能也不会理解它们实际工作的原因和方法,这也不是很有用(另见下文)。

来源: Silver, D. etal. Nature Vol 529, 2016 Bob van den Hoek, 2016

来源: (CMP305) Deep Learning on AWS Made EasyCmp305

深度学习网络处理时间序列预测的标准和直观的训练方法是选择和定义数据点上的“滑动窗口”(见下图)。 需要选择数据点的固定时间窗口(比如代表大约一个月训练数据的某个股票的连续收盘价格的20天),将训练集切割成固定模块以馈送到网络的输入层并且预期的预测日期的数据(比如第21天的收盘价)被放在输出神经元上。在整个时间序列中重复执行此操作,直到达到可用训练天数的最终日期。 这种训练方法的期望是,无论何时将来连续20天的时间窗口数据输入网络,深度学习模型都将学习预测这些信息输入第21天的数据。

很明显,窗口的宽度在这里至关重要。 它可以是连续20天或30天,或60天,180天 - 或任何其他数字吗?窗口的宽度仅受可用数据集的长度和大小的限制 - 但除此之外,它可以采用任何大小。除了极少数情况之外,它们对于如何选择最佳窗口宽度没有理论指导。另外,为什么要使用连续日期窗口进行培训?一次也可以使用非连续句点或非连续日期的组合,并在输入窗口中添加一些其他日期。没有理由证实这样做的结果不会一样好,更好或更糟。

Erickson, Bradley James et al. “Machine Learning for Medical Imaging.” Radiographics : a review publication of the Radiological Society of North America, Inc 37 2 (2017): 505-515.

当网络中具有太多权重时,它几乎只能以分布式方式将所有输入数据的相关特征存储在权重中(这种效应称为“过拟合” - 见图)。 这意味着,深度学习网络几乎“用心学习数据”。

这种效果通常由深度学习网络在“检测”隐含规则时产生,该隐含规则通常对第一眼看到的某些时间序列产生良好的预测。 当n + 1数据点更可能等于或非常类似于第n个数据点(前一点)时,此规则适用。这展示了统计效应,即在许多现实世界时间序列(也是许多金融时间序列)中, 相邻的数据一定有相应实质性的变化的可能性,比在一定的范围内找到固定相邻数据的可能性小很多。

因此,过拟合既不好也不合适。这给我们留下了什么?两种情况都比较容易检测。在欠拟合情况下,预测误差范围通常会过高并且在测试期间已经超过可接受的水平。过度拟合更难以检测。乍一看,高成功率令人欣慰,大多数公司都认为这是成功的标志,而不是失败。但这只是表明深度学习模型缺乏经验。错误率非常低 - 尤其是对比人类处理时的结果数据 - 更多的应是怀疑而不是满足的标志。 在任何现实世界的情况下,成功率超过90%左右表示方法,概念或数据损坏 - 而不是成功。

介绍时间序列数据和常见的金融分析方法

在MemSQL使用中,我们发现人们对时序数据库的场景非常感兴趣。 当遇到以下情况时尤其如此: (1)高效率的事务获取,(2)低延迟查询和(3)高并发查询率。

用SQL操作时间序列

使用可扩展性来增加MemSQL的时间序列功能

MemSQL支持用户定义的标量函数(UDF),聚合函数和存储过程(MPSQL语言)的可扩展性。MemSQL将UDF和存储过程编译为机器代码,以获得高性能。实际上,我使用了可扩展性来创建上一节中用作UDF 的time_bucket()函数(如下面的附录所示); 介绍时间序列数据和常见的金融分析方法 这为其他特定时间序列产品中的类似功能提供了相同的功能。您可以很容易地创建一个函数或表达式来按时间间隔存储,例如秒、分钟、小时或天。时间序列数据的一个常见需求是执行插值。

时间序列压缩和生命周期管理

介绍时间序列数据和常见的金融分析方法 可扩展的时间序列摄取

构建时间序列应用程序时,数据可以有许多来源,包括应用程序,文件系统,S3,HDFS,Azure Blob商店和Kafka队列。MemSQL可以从所有这些来源快速地获取数据。MemSQL Pipelines专门用于快速轻松地从这些源加载数据流,无需过程编码即可在MemSQL中建立快速的事件流。MemSQL可以以惊人的数据速率提取数据。在最近的一次测试中,我使用了一个双节点MemSQL集群,每个节点在Intel Xeon Platinum 28核系统上运行,每秒直接从应用程序插入2,850,500个事件,具有完整的事务完整性和持久性。可以使用直接加载或Kafka管道获得更好的速率。如果你必须扩展更高,只需添加更多节点 - 没有实际限制。

当通用MemSQL适合时间序列时

总结

版权声明: 本文由腾讯云数据库产品团队整理,页面原始内容来自于db weekly英文官网,若转载请注明出处。翻译目的在于传递更多全球最新数据库领域相关信息,并不意味着腾讯云数据库产品团队赞同其观点或证实其内容的真实性。如果其他媒体、网站或其他任何形式的法律实体和个人使用,必须经过著作权人合法书面授权并自负全部法律责任。不得擅自使用腾讯云数据库团队的名义进行转载,或盗用腾讯云数据库团队名义发布信息。