Python 机器学习算法交易实用指南(五)(4)https://developer.aliyun.com/article/1523713
不做免费午餐
没有系统——计算机程序或人类——有基础可靠地预测新样本的结果,超出了它在训练期间观察到的范围之外。唯一的出路是具有一些额外的先验知识或做出超出训练样本范围的假设。我们从本书的第七章,线性模型 和 第八章,时间序列模型,到非线性集成模型的广泛范围的算法进行了讨论,如第十章,决策树和随机森林 和 第十一章,梯度提升机,以及本书第四部分的各个章节中的神经网络。
我们看到,线性模型做出了一个强烈的假设,即输入和输出之间的关系具有非常简单的形式,而稍后讨论的模型旨在学习更复杂的函数。虽然显而易见简单模型在大多数情况下会失败,但复杂模型并不总是更好。如果真实关系是线性的,但数据是嘈杂的,复杂模型将会学习噪音作为其假定存在的复杂关系的一部分。这就是“没有免费午餐定理”的基本思想,该定理指出没有一种算法在所有任务中都是普遍优越的。在某些情况下的良好拟合会以在其他情况下的性能不佳为代价。
定制算法选择的关键工具是数据探索和基于对模型做出的假设的理解进行的实验。
管理偏差-方差权衡
适应算法到数据的挑战有一个不同的视角,即偏差和方差之间的权衡,这会导致除了数据的自然噪音之外的预测误差。一个简单的模型如果没有充分捕捉到数据中的关系,将会欠拟合并表现出偏差,即,会产生系统性的错误预测。一个过于复杂的模型会过拟合,并且除了任何信号外还会学习噪声,因此结果会对不同样本显示出很多方差。
在模型选择和优化过程的任何给定迭代中,诊断这种权衡的关键工具是学习曲线。它显示了训练和验证误差如何取决于样本大小。这使我们能够在不同的选项之间做出决定以改善性能:调整模型的复杂性或获取更多数据点。
训练误差越接近人类或其他基准,模型过拟合的可能性就越大。低验证误差告诉我们我们很幸运地找到了一个好模型。如果验证误差很高,我们就没有。然而,如果随着训练大小的增加而持续下降,更多数据可能有所帮助。如果训练误差很高,更多的数据不太可能有所帮助,我们应该增加特征或使用更灵活的算法。
定义目标模型目标
机器学习过程中的第一步之一是为算法定义一个优化的目标。有时,选择很简单,例如在回归问题中。分类任务可能更加困难,例如,当我们关心精确率和召回率时。将相互冲突的目标合并到一个单一指标中,如 F1 得分,有助于聚焦优化工作。我们还可以包括需要满足而不是优化的条件。我们还看到,强化学习完全取决于定义正确的奖励函数来指导代理的学习过程。
优化验证测试
Andrew Ng(请参见 GitHub 上的参考资料:github.com/PacktPublishing/Hands-On-Machine-Learning-for-Algorithmic-Trading
)强调了由于学习算法或优化算法的问题而导致性能不佳之间的区别。像神经网络这样的复杂模型假设非线性关系,而优化算法的搜索过程可能会陷入局部而不是全局最优解。
例如,如果一个模型未能正确翻译一个短语,则测试会比较正确预测和搜索算法发现的解决方案的分数。如果学习算法为正确解决方案得分更高,则搜索算法需要改进。否则,学习算法正在优化错误的目标。
警惕反向测试过拟合
我们在整本书中反复讨论了由于过度拟合历史数据而产生的假发现的风险。第五章,策略评估,概述了主要驱动因素和潜在的补救措施。低噪声与信号比和相对较小的数据集(与网络规模图像或文本数据相比)使得这一挑战在交易领域尤为严重。意识至关重要,因为数据和应用 ML 工具的易获取性会将风险指数级增加。
没有逃脱,因为没有预防的方法。然而,我们提出了调整反向测试指标以考虑重复试验的方法,比如通货紧缩夏普比率。在制定实时交易策略时,阶段性纸上交易和在市场执行过程中密切监测绩效需要成为实施过程的一部分。
如何从黑匣子模型中获得见解
深度神经网络和复杂集成模型在被视为不可透明的黑匣子模型时可能会引起怀疑,特别是考虑到反向测试过拟合的风险。我们在第十一章中介绍了几种方法,以了解这些模型如何进行预测,梯度提升机。
除了传统的特征重要性度量之外,最近博弈论创新的SHapley Additive exPlanations(SHAP)是理解复杂模型机制的重要一步。SHAP 值允许对特征及其值进行精确归因,从而更容易在特定投资目标的市场行为理论光下验证模型的逻辑。除了理论基础外,确切的特征重要性得分和预测的归因还允许更深入地洞察感兴趣的投资结果的驱动因素。
另一方面,围绕模型预测透明度是否应该成为目标本身存在一些争议。深度学习发明者之一 Geoffrey Hinton 认为,人类决策通常也是模糊的,机器也应该根据其结果进行评估,就像我们期望投资经理一样。
实践中的交易机器学习
当您继续将众多工具和技术整合到您的投资和交易流程中时,有许多事情可以成为您努力的焦点。如果您的目标是做出更好的决策,您应该选择与您当前技能集相符的现实而雄心勃勃的项目。这将帮助您开发一个高效的工作流程,支持您具有生产力的工具,并获得实际经验。
我们将简要列出一些有用的工具,以扩展本书涵盖的 Python 生态系统,并参考 GitHub 上列出的链接进行更深入的探讨。这些包括大数据技术,最终将有必要以规模实现用于交易策略的 ML。我们还将列出一些允许您使用 Python 实施交易策略的平台,通常具有数据源和 ML 算法和库的访问权限。
数据管理技术
数据在 ML 流程中的核心作用要求熟悉一系列技术,以便在规模上存储、转换和分析数据,包括使用云服务,如 Amazon Web Services、Azure 和 Google Cloud。
数据库系统
数据存储意味着使用数据库,历史上由使用 SQL 以商业提供者(如 Oracle 和 Microsoft)和开源实现(如 PostgreSQL 和 MySQL)的明确定义的表格格式存储和检索数据的关系数据库管理系统(RDBMS)主导。最近,出现了一些替代方案,通常被集体标记为 NoSQL,但相当多样,即:
- 键值存储:快速读/写对象。我们在第二章中介绍了 HDF5 格式,市场和基本数据,它有助于快速访问 pandas DataFrame。
- 列存储:利用列中数据的同质性来实现压缩和更快的基于列的操作,如聚合。在流行的 Amazon Redshift 数据仓库解决方案、Apache Parquet、Cassandra 或 Google 的 Big Table 中使用。
- 文档存储:设计用于存储不符合关系数据库所需的严格模式定义的数据。由使用 JSON 或 XML 格式的网络应用程序所普及,我们在第四章 Alpha Factor Research 中遇到过。例如,在 MongoDB 中使用。
- 图数据库:设计用于存储具有节点和边的网络,并专注于网络指标和关系的查询。用于 Neo4J 和 Apache Giraph。
已经有一些转变朝向了关系数据库系统所建立的约定。Python 生态系统促进了与许多标准数据源的交互,并提供了快速的 HDF5 和 Parquet 格式,正如本书中所展示的。
大数据技术 - Hadoop 和 Spark
规模化的数据管理,即数百 GB 甚至更多,需要使用形成集群的多台机器来进行读取、写入和计算操作,并行进行,即分布在各种机器上。
Hadoop 生态系统已经成为一个分布式存储和处理大数据的开源软件框架,使用了 Google 开发的 MapReduce 编程模型。生态系统在 Apache 基金会的框架下变得多样化,并且今天包括了许多项目,涵盖了规模化数据管理的不同方面。Hadoop 中的关键工具包括:
- Apache Pig:使用 MapReduce 实现大规模 提取-转换-加载 (ETL) 流水线的数据处理语言,由 Yahoo 开发
- Apache Hive:在 Facebook 开发的交互式 SQL 查询的事实标准,可查询 PB 级数据
- Apache HBASE:用于实时读/写访问的 NoSQL 数据库,线性扩展到数十亿行和数百万列,并可以使用各种不同的模式组合数据源。
Apache Spark 已成为集群上交互式分析最流行的平台。MapReduce 框架允许并行计算,但需要反复的磁盘读写操作以确保数据冗余。Spark 大大加速了规模化计算,原因是弹性分布式数据(RDD)结构,可以进行高度优化的内存计算。这包括了像梯度下降这样的多个 ML 算法所需的迭代计算。
机器学习工具
我们在这本书中涵盖了 Python 生态系统的许多库。Python 已经发展成为数据科学和机器学习的首选语言,一系列开源库不断多样化和成熟,构建在强大的科学计算库 NumPy 和 SciPy 的稳固核心之上。显著促进了 Python 在数据科学领域的使用的流行 pandas 库正在计划其 1.0 版本的发布。scikit-learn 接口已经成为现代机器学习库(如 xgboost
或 lightgbm
)的标准,它经常与各种工作流自动化工具(如 GridSearchCV
和 Pipeline
)交互,我们在整本书中都反复使用了这些工具。
有几个提供机器学习工作流的服务提供商:
- H2O.ai (
www.h2o.ai/
) 提供了将云计算与机器学习自动化集成的 H2O 平台。它允许用户将数千个潜在模型与其数据拟合以探索数据中的模式。它在 Python、R 和 Java 中都有接口。 - DataRobot 旨在通过提供一个快速构建和部署预测模型的平台,来自动化模型开发过程,可在云端或本地部署。
- Dataiku 是一个协作数据科学平台,旨在帮助分析师和工程师探索、原型、构建和交付自己的数据产品。
还有一些由公司主导的开源倡议,它们在 Python 生态系统上构建和扩展:
- 定量对冲基金 Two Sigma 在
beakerx
项目下向 Jupyter Notebook 环境贡献了量化分析工具。 - 彭博社已将 Jupyter Notebook 集成到其终端,以便对其金融数据进行交互式分析。
在线交易平台
开发利用机器学习的交易策略的主要选项是在线平台,这些平台经常寻找并分配资金给成功的交易策略。流行的解决方案包括 Quantopian、Quantconnect、QuantRocket 以及最近关注高频交易的 Alpha Trading Labs。
此外,交互经纪商(IB)提供了一个 Python API,您可以使用它来开发自己的交易解决方案。
Quantopian
我们介绍了 Quantopian 平台,并演示了如何使用其研究和交易环境来分析和测试交易策略与历史数据进行对比。Quantopian 使用 Python 并提供大量教育资料。
Quantopian 主办持续每日比赛,以招募算法为其众包对冲基金组合。Quantopian 为获胜算法提供资金支持。在线交易已于 2017 年 9 月停止,但该平台仍提供大量历史数据,并吸引着活跃的开发者和交易者社区,是讨论想法和向他人学习的良好起点。
QuantConnect
QuantConnect 是另一个开源、社区驱动的算法交易平台,与 Quantopian 竞争。它还提供一个 IDE,用于使用 Python 和其他语言进行算法策略的回测和实时交易。
QuantConnect 还拥有来自世界各地的动态全球社区,并提供许多资产类别的访问,包括股票、期货、外汇和加密货币。它提供与各种经纪人(如 IB、OANDA 和 GDAX)的实时交易集成。
QuantRocket
QuantRocket 是一个基于 Python 的平台,用于研究、回测和运行自动化的量化交易策略。它提供数据收集工具、多个数据供应商、研究环境、多个回测器,以及通过 IB 进行实时和模拟交易。它以支持国际股票交易而自豪,并凭借其灵活性脱颖而出。
QuantRocket 支持多个引擎 — 其自己的 Moonshot,以及用户选择的第三方引擎。虽然 QuantRocket 没有传统的集成开发环境(IDE),但与 Jupyter 集成良好,可以产生类似的功能。QuantRocket 在撰写本文时并不免费,定价从 19 美元/月开始。
结论
我们从强调数字数据的爆炸和 ML 作为投资和交易策略的战略能力的出现开始。这种动态反映了金融以外的全球商业和技术趋势,而且很可能会继续下去,而不是停滞或逆转。许多投资公司刚刚开始利用各种人工智能工具,就像个人正在获得相关的技能,业务流程正在适应这些价值创造的新机会一样,如导论章节所述。
未来还有许多令人兴奋的 ML 应用于交易的发展,可能会进一步推动当前的动能。它们可能在未来几年变得相关,并包括 ML 过程的自动化、合成训练数据的生成和量子计算的出现。这一领域的非凡活力意味着这本身就可以填满一本书,并且旅程将继续保持令人兴奋。