金融机器学习的进展-一-

金融机器学习的进展(一)

原文:`annas-archive.org/md5/2ebe092c37fd33d3631fbd6110cc696d

译者:飞龙

协议:CC BY-NC-SA 4.0

序言

《金融机器学习进展》的赞誉

在他的新书《金融机器学习进展》中,著名金融学者马尔科斯·洛佩斯·德·普拉多对当前金融界普遍存在的天真且通常统计过拟合的技术进行了精准的抨击。他指出,传统的业务方式在当今高科技金融领域几乎无能为力,而且在许多情况下,实际上更容易亏损。但洛佩斯·德·普拉多不仅仅是揭露金融世界的数学和统计错误。相反,他为金融专业人士提供了一条技术上可靠的路线图,以便他们能够加入机器学习的浪潮。特别令人耳目一新的是作者的实证方法——他的重点是现实世界数据分析,而不是那些在纸面上看起来漂亮但在实践中往往效果不佳的纯理论方法。这本书面向那些已经熟悉统计数据分析技术的金融专业人士,但对于那些想在该领域进行真正尖端工作的读者而言,努力阅读也是非常值得的。”

大卫·H·贝利博士,前复杂系统主管,

劳伦斯·伯克利国家实验室。共同发现者

BBP 水龙头算法

“金融已从基于历史财务报表的启发式知识汇编发展为一种高度复杂的科学学科,依赖计算机农场实时分析海量数据流。最近在机器学习(ML)方面的显著进展,既充满了机遇,也伴随着风险,特别是在现代金融中应用时。虽然金融提供了非线性和大数据集,这些正是 ML 所擅长的,但它也提供了嘈杂的数据和目前超出标准 ML 技术范围的人为因素。人非圣贤,但如果你真的想搞砸事情,使用计算机吧。在这样的背景下,洛佩斯·德·普拉多博士撰写了第一本全面描述现代 ML 在金融建模中应用的书籍。该书将最新的 ML 技术发展与作者在领先学术和工业机构中数十年的金融经验中获得的重要人生教训融合在一起。我强烈推荐这本令人振奋的书,给那些希望学习金融 ML 的潜在学生,以及教授和指导他们的教师。”

彼得·卡尔教授,金融与风险工程系主任

纽约大学坦登工程学院

“马尔科斯是一位有远见的人, tirelessly 致力于推动金融领域的发展。他的著作全面而巧妙地将理论与应用连接起来。很少能找到一本能够跨越这一鸿沟的书。这本书对投资界的从业者和技术专家来说都是必读之作。”

兰登·唐斯,1QBit 的总裁兼联合创始人

“想要理解现代投资管理的学者需要阅读这本书。在书中,马尔科斯·洛佩斯·德·普拉多解释了投资组合经理如何利用机器学习来推导、测试和运用交易策略。他从一种非常不寻常的视角出发,结合了学术视角和丰富的行业经验,使他能够详细解释行业内发生的事情以及其运作方式。我怀疑一些读者可能会发现书中某些部分不理解或与之意见相左,但所有对理解机器学习在金融中的应用感兴趣的人都会从阅读这本书中受益。”

大卫·伊斯利教授,康奈尔大学。主席

纳斯达克-OMX 经济顾问委员会

“几十年来,金融一直依赖过于简单的统计技术来识别数据中的模式。机器学习有望改变这一现状,使研究人员能够使用现代非线性和高维技术,类似于在 DNA 分析和天体物理学等科学领域中使用的方法。同时,将这些机器学习算法应用于金融问题建模将是危险的。金融问题需要非常独特的机器学习解决方案。洛佩斯·德·普拉多博士的书是第一本界定了标准机器学习工具在金融领域应用失败原因的书,也是第一本提供针对资产管理者所面临独特挑战的实用解决方案的书。任何想要了解金融未来的人都应该阅读这本书。”

弗兰克·法博齐教授,EDHEC 商学院。编辑

投资组合管理期刊

“这是一种令人欢迎的转变,摆脱了困扰量化金融的知识垄断。洛佩斯·德·普拉多为所有读者定义了金融的下一个时代:由机器驱动的工业规模科学研究。”

约翰·福塞特,创始人兼首席执行官,Quantopian

“马尔科斯将一系列宝贵的课程和技巧汇集在一起,为寻求在金融中应用机器学习技术的从业者提供指导。如果机器学习是量化金融工具箱中一种新的且潜在强大的武器,那么马尔科斯的深刻著作充满了有用的建议,可以帮助好奇的从业者避免误入歧途或自食其果。”

罗斯·加龙,Cubist 系统策略负责人。管理

Point72 资产管理公司董事

“金融领域的第一次定量创新浪潮是由马科维茨优化引领的。机器学习是第二次浪潮,它将影响金融的每个方面。洛佩斯·德·普拉多的金融机器学习进展对那些希望在技术前沿而不是被技术取代的读者来说至关重要。”

坎贝尔·哈维教授,杜克大学。前任会长

美国金融协会

“在当今金融市场中,复杂的算法负责路由订单,海量的金融数据,交易速度以纳秒为单位,该如何理解?在这本重要的书中,马科斯·洛佩斯·德·普拉多提出了一个建立在机器学习基础上的投资管理新范式。这本书清晰地解释了金融机器学习的工具和过程,远非“黑箱”技术。对于学术界和从业者而言,这本书填补了我们在机器时代投资管理理解中的重要空白。”

莫琳·欧哈拉教授,康奈尔大学。前任会长

美国金融协会

“马科斯·洛佩斯·德·普拉多出版了一本极为及时且重要的机器学习书籍。作者的学术与职业一流资质在书页间熠熠生辉——确实,我很难想到更合适的作者来解释这个对于大多数人来说既新颖又陌生的主题的理论和实践方面。无论是新手还是经验丰富的专业人士都能找到富有洞察力的观点,并理解如何以新颖和实用的方式应用这一主题。Python 代码将为初学者提供一个良好的起步,并使他们迅速获得对该主题的实际理解。这本书注定将在这一迅速发展的领域中成为经典。”

里卡多·雷博纳托教授,EDHEC 商学院。前任

PIMCO 全球利率与外汇分析主管

“一本关于金融领域机器学习实际应用的力作,充满了如何使用尖端技术(如分数微分和量子计算机)获得洞察力和竞争优势的想法。对金融和机器学习从业者而言都是一本实用的书籍。”

科林·P·威廉姆斯博士,D-Wave 系统公司研究主管

金融机器学习进展

马科斯·洛佩斯·德·普拉多

封面图像:© Erikona/Getty Images

封面设计:Wiley

版权所有 © 2018 约翰·威利父子公司。保留所有权利。

由约翰·威利父子公司出版,位于新泽西州霍博肯。

同时在加拿大出版。

本书所表达的观点属于作者,未必反映其所隶属组织的观点。

本出版物的任何部分不得以任何形式或任何方式复制、存储在检索系统中或传输,包括电子、机械、复印、录音、扫描或其他方式,除非在 1976 年美国版权法第 107 或 108 节的允许范围内,且未经出版商的事先书面许可,或通过支付适当的每份费用向版权清算中心(Copyright Clearance Center, Inc.),地址为 222 Rosewood Drive, Danvers, MA 01923, (978) 750-8400, 传真(978) 646-8600,或通过 www.copyright.com 网上申请。对出版商的许可请求应发送至权限部,约翰·威利与儿子公司(John Wiley & Sons, Inc.),地址为 111 River Street, Hoboken, NJ 07030, (201) 748-6011, 传真(201) 748-6008,或在线访问 www.wiley.com/go/permissions

责任限制/免责声明:虽然出版商和作者在准备本书时已尽最大努力,但他们对本书内容的准确性或完整性不作任何陈述或保证,并明确拒绝任何关于适销性或特定用途适用性的隐含保证。销售代表或书面销售材料可能不会创建或扩展任何保证。本书中包含的建议和策略可能不适合您的情况。您应在适当时咨询专业人士。出版商和作者均不对任何利润损失或其他商业损害负责,包括但不限于特殊、附带、间接或其他损害。本书中表达的观点为作者个人观点,并不一定反映其所隶属组织的观点。

如需有关我们其他产品和服务的一般信息或技术支持,请在美国拨打 (800) 762-2974 联系我们的客户服务部,国际拨打 (317) 572-3993,或传真 (317) 572-4002。

Wiley 以多种印刷和电子格式以及按需印刷出版。一些在本书标准印刷版中包含的材料可能不包括在电子书或按需印刷中。如果本书提及的媒体如 CD 或 DVD 未包含在您购买的版本中,您可以在 booksupport.wiley.com 下载这些材料。有关 Wiley 产品的更多信息,请访问 www.wiley.com

ISBN 978-1-119-48208-6(精装)

ISBN 978-1-119-48211-6(ePDF)

ISBN 978-1-119-48210-9(ePub)

献给我的合著者和朋友的记忆,

乔纳森·M·博尔温教授,FRSC,FAAAS,

FBAS,FAustMS,FAA,FAMS,FRSNSW

(1951–2016)

我们知道的事情非常少,它们都可以简化为数学推理。当它们不能时,说明我们对它们的认识非常有限且混乱。能够进行数学推理时,使用其他任何推理方法都是极大的愚蠢,就像在黑暗中摸索事物时,身边有一根蜡烛却不去使用它。

关于机会法则,序言 (1692)

约翰·阿巴斯诺特 (1667–1735)

内容

  1. 关于作者

  2. 序言

    1. 第一章 财务机器学习作为一个独特主题

      1. 1.1 动机

      2. 1.2 财务机器学习项目通常失败的主要原因

      3. 1.3 书籍结构

      4. 1.4 目标受众

      5. 1.5 必备条件

      6. 1.6 常见问题解答

      7. 1.7 致谢

      8. 练习题

      9. 参考文献

      10. 参考书目

      11. 笔记

  3. 第一部分 数据分析

    1. 第二章 财务数据结构

      1. 2.1 动机

      2. 2.2 财务数据的基本类型

      3. 2.3 条形图

      4. 2.4 处理多产品系列

      5. 2.5 特征采样

      6. 练习题

      7. 参考文献

    2. 第三章 标记

      1. 3.1 动机

      2. 3.2 固定时间范围方法

      3. 3.3 计算动态阈值

      4. 3.4 三重障碍法

      5. 3.5 学习侧面和规模

      6. 3.6 元标记

      7. 3.7 如何使用元标记

      8. 3.8 量化思维方式

      9. 3.9 删除不必要的标签

      10. 练习题

      11. 参考书目

    3. 第四章 示例权重

      1. 4.1 动机

      2. 4.2 重叠结果

      3. 4.3 同时标签的数量

      4. 4.4 标签的平均独特性

      5. 4.5 装袋分类器和独特性

      6. 4.6 回报归因

      7. 4.7 时间衰减

      8. 4.8 类别权重

      9. 练习

      10. 参考文献

      11. 参考书目

    4. 第五章 分数微分特征

      1. 5.1 动机

      2. 5.2 平稳性与记忆困境

      3. 5.3 文献综述

      4. 5.4 方法

      5. 5.5 实施

      6. 5.6 最大内存保存的平稳性

      7. 5.7 结论

      8. 练习

      9. 参考文献

      10. 参考书目

  4. 第二部分 建模

    1. 第六章 集成方法

      1. 6.1 动机

      2. 6.2 三种误差来源

      3. 6.3 自助聚合

      4. 6.4 随机森林

      5. 6.5 提升法

      6. 6.6 财务中的袋装法与提升法

      7. 6.7 可扩展性的袋装法

      8. 练习

      9. 参考文献

      10. 参考书目

      11. 笔记

    2. 第七章 财务中的交叉验证

      1. 7.1 动机

      2. 7.2 交叉验证的目标

      3. 7.3 为什么 K 折交叉验证在财务中失败

      4. 7.4 解决方案:清理的 K 折交叉验证

      5. 7.5 Sklearn 的交叉验证中的错误

      6. 练习

      7. 参考书目

    3. 第八章 特征重要性

      1. 8.1 动机

      2. 8.2 特征重要性的重要性

      3. 8.3 带替代效应的特征重要性

      4. 8.4 无替代效应的特征重要性

      5. 8.5 并行与堆叠特征重要性

      6. 8.6 使用合成数据的实验

      7. 练习

      8. 参考文献

      9. 注释

    4. 第九章 超参数调整与交叉验证

      1. 9.1 动机

      2. 9.2 网格搜索交叉验证

      3. 9.3 随机搜索交叉验证

      4. 9.4 评分和超参数调优

      5. 练习

      6. 参考文献

      7. 书目

      8. 注释

  5. 第三部分 回测

    1. 第十章 投注规模

      1. 10.1 动机

      2. 10.2 独立于策略的投注规模方法

      3. 10.3 基于预测概率的投注规模

      4. 10.4 活动投注的平均值

      5. 10.5 尺寸离散化

      6. 10.6 动态投注规模和限制价格

      7. 练习

      8. 参考文献

      9. 书目

      10. 注释

    2. 第十一章 回测的危险

      1. 11.1 动机

      2. 11.2 不可能的任务:完美回测

      3. 11.3 即使你的回测完美,它也可能是错误的

      4. 11.4 回测不是研究工具

      5. 11.5 一些一般性建议

      6. 11.6 策略选择

      7. 练习

      8. 参考文献

      9. 书目

    3. 第十二章 通过交叉验证进行回测

      1. 12.1 动机

      2. 12.2 前行法

      3. 12.3 交叉验证法

      4. 12.4 组合清理交叉验证法

      5. 12.5 组合清理交叉验证如何解决回测过拟合

      6. 练习

      7. 参考文献

    4. 第十三章 在合成数据上回测

      1. 13.1 动机

      2. 13.2 交易规则

      3. 13.3 问题

      4. 13.4 我们的框架

      5. 13.5 最优交易规则的数值确定

      6. 13.6 实验结果

      7. 13.7 结论

      8. 练习

      9. 参考文献

      10. 注释

    5. 第十四章 回测统计

      1. 14.1 动机

      2. 14.2 回测统计的类型

      3. 14.3 一般特征

      4. 14.4 绩效

      5. 14.5 跑道

      6. 14.6 实施短缺

      7. 14.7 效率

      8. 14.8 分类分数

      9. 14.9 归因

      10. 练习

      11. 参考文献

      12. 参考书目

      13. 注释

    6. 第十五章 理解策略风险

      1. 15.1 动机

      2. 15.2 对称支付

      3. 15.3 非对称支付

      4. 15.4 策略失败的概率

      5. 练习

      6. 参考文献

    7. 第十六章 机器学习资产配置

      1. 16.1 动机

      2. 16.2 凸组合优化的问题

      3. 16.3 马科维茨的诅咒

      4. 16.4 从几何关系到层次关系

      5. 16.5 数值示例

      6. 16.6 超出样本的蒙特卡洛模拟

      7. 16.7 进一步研究

      8. 16.8 结论

      9. 附录

      10. 16.A.1 基于相关性的度量

      11. 16.A.2 反向方差配置

      12. 16.A.3 复制数值示例

      13. 16.A.4 复制蒙特卡洛实验

      14. 练习

      15. 参考文献

      16. 注释

  6. 第四部分 有用的金融特征

    1. 第十七章 结构性断裂

      1. 17.1 动机

      2. 17.2 结构性断裂测试的类型

      3. 17.3 CUSUM 测试

      4. 17.4 爆炸性测试

      5. 练习

      6. 参考文献

    2. 第十八章 熵特征

      1. 18.1 动机

      2. 18.2 香农熵

      3. 18.3 插件(或最大似然)估计器

      4. 18.4 兰佩尔-齐夫估计器

      5. 18.5 编码方案

      6. 18.6 高斯过程的熵

      7. 18.7 熵与广义均值

      8. 18.8 熵的一些金融应用

      9. 练习题

      10. 参考文献

      11. 参考书目

      12. 注意

    3. 第十九章 微观结构特征

      1. 19.1 动机

      2. 19.2 文献回顾

      3. 19.3 第一代:价格序列

      4. 19.4 第二代:战略交易模型

      5. 19.5 第三代:顺序交易模型

      6. 19.6 微观结构数据集的附加特征

      7. 19.7 什么是微观结构信息?

      8. 练习题

      9. 参考文献列表

  7. 第五部分 高性能计算食谱

    1. 第二十章 多处理与向量化

      1. 20.1 动机

      2. 20.2 向量化示例

      3. 20.3 单线程与多线程与多处理

      4. 20.4 原子与分子

      5. 20.5 多处理引擎

      6. 20.6 多处理示例

      7. 练习题

      8. 参考文献

      9. 参考书目

      10. 注释

    2. 第二十一章 粗暴搜索与量子计算机

      1. 21.1 动机

      2. 21.2 组合优化

      3. 21.3 目标函数

      4. 21.4 问题

      5. 21.5 整数优化方法

      6. 21.6 数值示例

      7. 练习题

      8. 参考文献

    3. 第二十二章 高性能计算智能与预测技术

      1. 22.1 动机

      2. 22.2 对 2010 年闪电崩盘的监管响应

      3. 22.3 背景

      4. 22.4 HPC 硬件

      5. 22.5 HPC 软件

      6. 22.6 用例

      7. 22.7 总结与参与邀请

      8. 22.8 致谢

      9. 参考文献

      10. 注释

  8. 索引

  9. 最终用户许可协议 (EULA)

表格列表

  1. 第一章

    1. 表 1.1

    2. 表 1.2

  2. 第二章

    1. 表 2.1
  3. 第五章

    1. 表 5.1
  4. 第十三章

    1. 表 13.1
  5. 第十四章

    1. 表 14.1
  6. 第十六章

    1. 表 16.1
  7. 第十七章

    1. 表 17.1

插图列表

  1. 第二章

    1. 图 2.1

    2. 图 2.2

    3. 图 2.3

  2. 第三章

    1. 图 3.1

    2. 图 3.2

  3. 第四章

    1. 图 4.1

    2. 图 4.2

    3. 图 4.3

  4. 第五章

    1. 图 5.1

    2. 图 5.2

    3. 图 5.3

    4. 图 5.4

    5. 图 5.5

  5. 第六章

    1. 图 6.1

    2. 图 6.2

    3. 图 6.3

  6. 第七章

    1. 图 7.1

    2. 图 7.2

    3. 图 7.3

  7. 第八章

    1. 图 8.1

    2. 图 8.2

    3. 图 8.3

    4. 图 8.4

  8. 第九章

    1. 图 9.1

    2. 图 9.2

  9. 第十章

    1. 图 10.1

    2. 图 10.2

    3. 图 10.3

  10. 第十一章

    1. 图 11.1

    2. 图 11.2

  11. 第十二章

    1. 图 12.1

    2. 图 12.2

  12. 第十三章

    1. 图 13.1

    2. 图 13.2

    3. 图 13.3

    4. 图 13.4

    5. 图 13.5

    6. 图 13.6

    7. 图 13.7

    8. 图 13.8

    9. 图 13.9

    10. 图 13.10

    11. 图 13.11

    12. 图 13.12

    13. 图 13.13

    14. 图 13.14

    15. 图 13.15

    16. 图 13.16

    17. 图 13.17

    18. 图 13.18

    19. 图 13.19

    20. 图 13.20

    21. 图 13.21

    22. 图 13.22

    23. 图 13.23

    24. 图 13.24

    25. 图 13.25

  13. 第十四章

    1. 图 14.1

    2. 图 14.2

    3. 图 14.3

  14. 第十五章

    1. 图 15.1

    2. 图 15.2

    3. 图 15.3

  15. 第十六章

    1. 图 16.1

    2. 图 16.2

    3. 图 16.3

    4. 图 16.4

    5. 图 16.5

    6. 图 16.6

    7. 图 16.7

    8. 图 16.8

  16. 第十七章

    1. 图 17.1

    2. 图 17.2

    3. 图 17.3

  17. 第十八章

    1. 图 18.1

    2. 图 18.2

  18. 第十九章

    1. 图 19.1

    2. 图 19.2

    3. 图 19.3

  19. 第二十章

    1. 图 20.1

    2. 图 20.2

  20. 第二十一章

    1. 图 21.1
  21. 第二十二章

    1. 图 22.1

    2. 图 22.2

    3. 图 22.3

    4. 图 22.4

    5. 图 22.5

    6. 图 22.6

    7. 图 22.7

    8. 图 22.8

    9. 图 22.9

    10. 图 22.10

关于作者

马科斯·洛佩斯·德·普拉多使用机器学习算法为机构投资者管理多个数十亿资金的基金。在过去的 20 年中,他的工作将高级数学与超级计算技术结合起来,为投资者和公司带来了数十亿美元的净利润。作为合作研究的倡导者,马科斯与 30 多位顶尖学者合作发表论文,结果是一些在金融领域阅读量最大的论文。

自 2010 年以来,马科斯还在劳伦斯伯克利国家实验室(美国能源部科学办公室)担任研究员,他的研究重点是大规模金融问题的数学和计算研究部门的高性能计算。在过去的七年里,他在康奈尔大学授课,目前在运筹学系教授金融大数据和机器学习的研究生课程。

马科斯是 1999 年国家学术优秀奖的获得者,该奖项由西班牙政府授予全国最优秀的研究生。他于 2003 年获得马德里自治大学的金融经济学博士学位,并于 2011 年获得数学金融博士学位。在获得两个博士学位之间,马科斯在哈佛大学担任 RCC 的博士后研究员三年,期间他在 JCR 索引的科学期刊上发表了十多篇文章。根据美国数学学会的标准,马科斯拥有一个 #2 和一个爱因斯坦 #4。

前言

  1. 第一章 金融机器学习作为一个独立的学科

第一章:金融机器学习作为一个独立的学科

1.1 动机

机器学习(ML)正在改变我们生活的几乎每个方面。今天,机器学习算法可以完成直到最近只有专业人士才能完成的任务。与金融相关,这是采用一种颠覆性技术的最激动人心的时刻,这将改变每个人在未来几代人的投资方式。这本书解释了在我二十年的职业生涯中使用的科学合理的机器学习工具,帮助我管理一些最苛刻的机构投资者的大量资金。

关于投资的书籍大致可分为两类。一方面,我们发现一些书籍的作者并没有实践他们所教授的内容。这些书籍包含了极其优雅的数学,描述了一个并不存在的世界。一个定理在逻辑上是真实的,并不意味着它在物理上也是真实的。另一方面,我们也看到一些书籍的作者提供的解释缺乏任何严谨的学术理论。他们错误使用数学工具来描述实际观察。他们的模型过拟合,在实施时失败。学术研究和出版与金融市场的实际应用脱节,而在交易/投资领域的许多应用并没有基于适当的科学。

写这本书的首要动机是为了跨越学术界与行业之间的隐喻鸿沟。我曾在这两方面都有所经历,因此我了解跨越这一鸿沟有多么困难,以及在一侧固守有多么容易。美德在于平衡。这本书不会仅仅因为某个理论在数学上美观而加以倡导,也不会仅仅因为某个解决方案看起来有效而提出。我希望传递的是那种仅来自经验的知识,并以严谨的方式加以形式化。

第二个动机源于希望金融能服务于某种目的。多年来,我在学术期刊和报纸上发表的一些文章表达了我对金融在我们社会中当前角色的不满。投资者被诱导将财富押注于来自江湖骗子的荒谬猜测,并受到大众媒体的鼓励。在不久的将来,机器学习将主导金融,科学将限制猜测,投资不再意味着赌丨博。我希望读者能在这场革命中发挥一份力量。

第三个动机是许多投资者未能理解机器学习应用于投资的复杂性。这在向“量化基本面”领域转型的自由裁量公司中尤其明显。我担心他们的高期望将无法实现,这并不是因为机器学习失败,而是因为他们错误地使用了机器学习。在未来几年中,许多公司将使用从学术界或硅谷直接引进的现成机器学习算法进行投资,我的预测是,他们将因此亏损(相较于更好的机器学习解决方案)。战胜群体智慧比识别面孔或驾驶汽车要困难得多。通过这本书,我希望你能学会解决一些使金融成为机器学习特别困难的挑战,比如回测过拟合。金融机器学习是一个独立的主题,虽然与标准机器学习有关但又有所不同,这本书将为你解开这一主题。

1.2 金融机器学习项目通常失败的主要原因

定量金融的失败率很高,尤其是在金融机器学习领域。少数成功者积累了大量资产,并持续为投资者提供卓越的业绩。然而,这是一种罕见的结果,原因在本书中有说明。在过去的二十年中,我见过许多面孔来来往往,许多公司创立又关闭。根据我的经验,所有这些失败的根本原因在于一个关键错误。

1.2.1 西西弗斯范式

自由裁量投资组合经理(PMs)做出的投资决策并不遵循特定的理论或理由(如果有,他们就是系统性 PMs)。他们消费原始新闻和分析,但主要依赖于自己的判断或直觉。他们可能根据某个故事来合理化这些决策,但每个决策背后总有一个故事。因为没有人完全理解他们下注背后的逻辑,投资公司要求他们彼此独立工作,形成孤岛,以确保多样化。如果你曾经参加过自由裁量 PM 的会议,可能会注意到它们是多么漫长而无目的。每位与会者似乎对某个特定的轶事信息着迷,并在没有基于事实的实证证据的情况下做出巨大的争论跳跃。这并不意味着自由裁量 PM 不能成功。相反,其中一些确实能成功。关键是,他们不能自然地作为一个团队工作。把 50 个自由裁量 PM 放在一起,他们会互相影响,最终你为一人的工作支付 50 份薪水。因此,他们在孤岛中工作是有意义的,以尽量减少互动。

无论我在哪些定量或机器学习项目中看到这个公式的应用,最终都导致了灾难。董事会的心态是,让我们对定量分析师做与自由裁量基金经理相同的事情。让我们雇佣 50 名博士,并要求每个人在六个月内提出一个投资策略。这种方法总是适得其反,因为每位博士都会疯狂寻找投资机会,最终只能满足于(1)在过度拟合回测中看起来不错的假阳性,或(2)标准因子投资,这是一种竞争激烈且夏普比率低的策略,但至少有学术支持。这两种结果都会让投资委员会失望,项目将被取消。即使其中 5 名博士发现了真正的机会,利润也不足以覆盖 50 人的费用,因此这 5 人会转向其他地方,寻找适当的回报。

1.2.2 元策略范式

如果你被要求独自开发机器学习策略,胜算对你来说几乎是微乎其微的。产生一个真实投资策略所需的努力几乎与产生一百个相同,而复杂性是压倒性的:数据整理和处理、高性能计算基础设施、软件开发、特征分析、执行模拟器、回测等。即使公司在这些领域提供共享服务,你就像在 BMW 工厂工作的工人,被要求利用周围的所有车间建造一辆完整的汽车。一周你需要成为一名熟练的焊工,另一周成为电工,再一周成为机械工程师,又一周成为油漆工……你会尝试、失败,然后回到焊接。这样有什么意义呢?

我所了解的每一家成功的定量公司都应用了元策略范式(López de Prado [2014])。因此,这本书是为团队而非个人编写的研究手册。通过本书的章节,你将学习如何建立一个研究工厂,以及装配线的各个站点。每个量化分析师的角色是专注于特定任务,成为该领域的最佳,同时对整个过程有整体的看法。这本书概述了工厂计划,其中团队合作以可预测的速度产生发现,而不依赖于运气。这就是伯克利实验室和其他美国国家实验室如何定期进行科学发现的方式,比如向元素周期表中添加 16 种元素,或为 MRI 和 PET 扫描奠定基础。^(1) 没有特定个人对这些发现负责,因为它们是团队努力的结果,每个人都有所贡献。当然,建立这些金融实验室需要时间,并且需要那些知道自己在做什么并且曾经做过的人。但你认为,这种经过验证的有组织合作范式成功的可能性更高,还是每个量化分析师像西西弗斯一样把巨石推上山的徒劳替代方式更高?

1.3 书籍结构

这本书解开了一系列相互关联的话题,并将其以有序的方式呈现。每一章都假设你已经阅读了前面的内容。第一部分将帮助你以适合机器学习(ML)算法的方式结构化你的财务数据。第二部分讨论如何使用这些数据进行机器学习算法研究。这里强调的是通过科学过程进行研究并取得实际发现,而不是无目的地搜索直到出现某个偶然(可能是错误的)结果。第三部分解释了如何对你的发现进行回测,并评估其错误的可能性。

这三个部分概述了整个过程,从数据分析到模型研究再到发现评估。有了这些知识,第四部分回到数据,解释创新的方法以提取信息特征。最后,这项工作需要大量的计算能力,因此第五部分用一些有用的高性能计算食谱结束本书。

1.3.1 按生产链结构

在 16 世纪和 17 世纪,开采黄金或白银是一项相对简单的事业。在不到一百年的时间里,西班牙的财富舰队使欧洲流通的贵金属数量增加了四倍。那样的时代早已过去,今天的勘探者必须采用复杂的工业方法,从吨土中提取微小的金属颗粒。但这并不意味着黄金生产处于历史低点。相反,如今矿工每年提取 2,500 公吨的微观黄金,而西班牙征服者在整个 16 世纪的平均年产量仅为 1.54 公吨!^(2) 可见的黄金只是地球上黄金总量的微不足道的一部分。埃尔多拉多一直存在……如果皮萨罗能用显微镜交换他的剑就好了。

投资策略的发现经历了类似的演变。如果说十年前个人发现宏观阿尔法(即使用简单的数学工具如计量经济学)相对普遍,那么目前这种机会正在迅速接近于零。如今,无论经验或知识如何,个人在寻找宏观阿尔法时都面临巨大的困难。唯一真正的阿尔法是微观的,找到它需要资本密集型的工业方法。就像黄金一样,微观阿尔法并不意味着整体利润更小。今天的微观阿尔法比历史上任何时候的宏观阿尔法都要丰富得多。这里有很多钱可赚,但你需要使用强大的机器学习工具。

让我们回顾一下现代资产管理公司生产链中涉及的一些环节。

1.3.1.1 数据策展人

这是负责收集、清理、索引、存储、调整和将所有数据传递给生产链的站点。数据的值可以是表格形式或分层结构、对齐或不对齐、历史数据或实时数据馈送等。团队成员是市场微观结构和数据协议(如 FIX)方面的专家。他们必须开发数据处理程序,以理解数据出现的上下文。例如,报价是被取消并在不同级别替换,还是被取消而没有替换?每个资产类别都有其自身的细微差别。例如,债券通常被交换或召回;股票受到拆分、反向拆分、投票权等的影响;期货和期权必须进行滚动;货币不在集中订单簿中交易。这个站点所涉及的专业化程度超出了本书的范围,第一章将仅讨论数据策展的几个方面。

1.3.1.2 特征分析师

这是负责将原始数据转换为信息信号的站点。这些信息信号对金融变量具有一定的预测能力。团队成员是信息理论、信号提取与处理、可视化、标注、加权、分类器和特征重要性技术方面的专家。例如,特征分析师可能会发现,当以下情况发生时,抛售的概率特别高:(1) 报价被取消—替换为市场卖单,(2) 报价买单被取消—替换为在深层订单簿中的限价买单。这种发现本身并不是一种投资策略,可以以不同方式使用:执行、流动性风险监测、做市、建仓等。一个常见的错误是认为特征分析师会制定策略。相反,特征分析师收集和分类可以对多个站点有用的发现库。第 2-9 章和第 17-19 章专门讨论这个至关重要的站点。

1.3.1.3 策略师

在本站,信息特征被转化为实际的投资算法。战略家将遍历特征库,寻找开发投资策略的创意。这些特征是不同分析师研究广泛的工具和资产类别时发现的。战略家的目标是理解所有这些观察结果,并制定一个解释它们的通用理论。因此,策略仅仅是为验证该理论的有效性而设计的实验。团队成员是对金融市场和经济有深入了解的数据科学家。请记住,理论需要解释大量重要特征。特别是,理论必须识别导致代理人向我们亏损的经济机制。这是行为偏见?不对称信息?监管约束?特征可能由黑箱发现,但策略是在白箱中开发的。将多个目录特征拼凑在一起并不构成理论。一旦策略最终确定,战略家将准备利用完整算法的代码,并将该原型提交给下述回测团队。第十章和第十六章专门讨论本站,理解书中揭示具体投资策略是不合理的。

1.3.1.4 回测者

本站评估投资策略在各种情境下的盈利能力。一个感兴趣的情境是如果历史重演,策略将如何表现。然而,历史路径仅仅是随机过程可能结果之一,并不一定是未来最可能的结果。必须评估替代情境,考虑到对所提议策略的优缺点的了解。团队成员是对经验和实验技术有深入理解的数据科学家。一位优秀的回测者在分析中融入有关策略形成过程的元信息。特别是,他的分析必须考虑用于提炼策略所需的试验次数,以评估回测过拟合的概率。这一评估的结果不会被其他站点重用,原因将在第十一章中显现。相反,回测结果会传达给管理层,不会与其他人分享。第 11 至 16 章讨论了本站进行的分析。

1.3.1.5 部署团队

部署团队的任务是将策略代码集成到生产线中。有些组件可能会被多个策略重用,特别是在它们共享共同特征时。团队成员是算法专家和核心数学程序员。他们的部分工作是确保已部署的解决方案在逻辑上与他们接收到的原型相同。部署团队还需优化实现,以确保生产延迟最小化。由于生产计算通常是时间敏感的,该团队将大量依赖过程调度器、自动化服务器(Jenkins)、向量化、多线程、多处理、图形处理单元(GPU-NVIDIA)、分布式计算(Hadoop)、高性能计算(Slurm)以及一般并行计算技术。第 20-22 章涉及与此阶段相关的金融机器学习的各种有趣方面。

1.3.1.6 投资组合监督

一旦策略被部署,它将遵循一个cursus honorum,包括以下阶段或生命周期:

  1. 禁运:最初,策略在回测结束日期之后观察到的数据上运行。这一时期可能是回测人员保留的,或是实施延迟的结果。如果禁运表现与回测结果一致,策略将被提升到下一个阶段。

  2. 纸上交易:此时,策略在实时的实际数据流上运行。这样,表现将考虑数据解析延迟、计算延迟、执行延迟以及观察与定位之间的其他时间间隔。纸上交易将持续,直到收集到足够证据证明策略表现如预期。

  3. 毕业:在这个阶段,策略管理一个真实的位置,无论是孤立的还是作为一个组合的一部分。表现会被精确评估,包括归因风险、收益和成本。

  4. 重新分配:根据生产表现,毕业策略的分配会在多样化投资组合的背景下频繁且自动地重新评估。一般来说,策略的分配遵循一个凹函数。初始分配(在毕业时)较小。随着时间的推移,如果策略表现如预期,分配会增加。随着时间的推移,表现下降,分配逐渐变小。

  5. 退役:最终,所有策略都会停止。这发生在它们的表现低于预期,并且持续时间足够长,以得出支持理论不再有实证依据的结论。

一般来说,发布策略的新变体并与旧版本并行运行是比较理想的。每个版本都将经历上述生命周期,而旧策略将获得较小的分配,以便实现多样化,同时考虑到它们较长历史记录所带来的信心程度。

1.3.2 按策略组件结构

许多投资经理认为,致富的秘诀是实施一个极其复杂的机器学习算法。他们在为自己设定失望。如果这像编写最先进的分类器那么简单,硅谷大多数人都会成为亿万富翁。成功的投资策略是多个因素的结果。表 1.1 总结了哪些章节将帮助你解决开发成功投资策略所涉及的每个挑战。

表 1.1 每章所解决挑战的概述

部分 章节 金融数据 软件 硬件 数学 元策略 过拟合
1 2 X X

|

1 3 X X

|

1 4 X X

|

1 5 X X X

|

2 6
X

|

|

|

|

2 7 X X X
2 8 X X

|

2 9 X X

|

3 10
X

|

X

|

3 11 X X X
3 12 X X X
3 13 X X X
3 14 X X X
3 15 X X X
3 16
X
X X X
4 17 X X
X

|

|

4 18 X X X

|

4 19 X X

|

|

|

|

5 20 X X X

|

5 21
X X

|

|

5 22
X X

|

|

在本书中,你会发现我多年来发表的许多期刊文章的引用。与其重复自己,我常常会引用其中的一篇,你将在其中找到该主题的详细分析。所有引用的论文都可以从我的网站免费下载,格式为预印本:www.QuantResearch.org

1.3.2.1 数据

  • 问题:垃圾进,垃圾出。

  • 解决方案:处理独特且难以操作的数据。如果你是该数据的唯一用户,无论其价值如何,都是你的。

  • 如何:

    • 第二章:正确结构化你的数据。

    • 第三章:生成信息丰富的标签。

    • 第四章和第五章:正确建模非独立同分布系列。

    • 第 17 至 19 章:寻找预测特征。

1.3.2.2 软件

  • 问题:专业任务需要定制工具。

  • 解决方案:开发自己的类。使用流行库意味着更多竞争者会共同使用同一资源。

  • 如何:

    • 第 2 至 22 章:在书中,对于每一章,我们都会开发自己的函数。针对你的特定问题,你也必须这样做,遵循书中的示例。

1.3.2.3 硬件

  • 问题:机器学习涉及到数学中一些最耗费计算资源的任务。

  • 解决方案:成为高性能计算(HPC)专家。如果可能,与你的国家实验室合作,建立超级计算机。

  • 如何:

    • 第 20 和 22 章:学习如何从多处理架构的角度思考。每当你编码一个库时,都要以能够并行调用函数的方式来构建它。你将在书中找到大量示例。

    • 第二十一章:为量子计算机开发算法。

1.3.2.4 数学

  • 问题:数学证明可能需要数年、数十年甚至数世纪。没有投资者会等这么久。

  • 解决方案:使用实验数学。通过实验解决困难的、难以处理的问题,而不是通过证明。例如,Bailey、Borwein 和 Plouffe [1997] 在没有证明的情况下找到了一种π(圆周率)的水龙头算法,挑战了之前对这种数学发现不可能的看法。

  • 如何:

    • 第五章:熟悉保留记忆的数据转换。

    • 第 11-15 章:有实验方法可以评估你的策略的价值,其可靠性大于历史模拟。

    • 第十六章:在样本中最优的算法在样本外可能表现不佳。没有数学证明可以保证投资成功。依赖实验方法来指导你的研究。

    • 第 17 和 18 章:应用方法检测结构性断裂,并量化金融系列所携带的信息量。

    • 第二十章:学习分布式计算的排队方法,以便可以拆分复杂任务并加速计算。

    • 第二十一章:熟悉离散方法,这些方法被量子计算机等用于解决难以处理的问题。

1.3.2.5 元策略

  • 问题:业余人士发展个别策略,相信存在致富的神奇公式。相比之下,专业人士则开发批量生产策略的方法。赚钱的不是制造汽车,而是建立汽车工厂。

  • 解决方案:像经营企业一样思考。你的目标是将研究实验室像工厂一样运营,真正的发现不是源于灵感,而是源于系统的努力工作。这是物理学家欧内斯特·劳伦斯的哲学,他是美国第一个国家实验室的创始人。

  • 如何:

    • 第 7-9 章:建立一个研究过程,以识别跨资产类别相关的特征,同时处理金融特征的多重共线性。

    • 第十章:将多个预测合并为一个单一的赌注。

    • 第十六章:使用一种在样本外表现良好的稳健方法来分配资金给策略。

1.3.2.6 过拟合

  • 问题:标准交叉验证方法在金融领域失败。由于多重检验和选择偏差,金融领域的大多数发现都是错误的。

  • 解决方案:

    • 无论你做什么,总是问自己你可能以何种方式过拟合。对自己的工作保持怀疑,不断挑战自己证明你在创造价值。

    • 过拟合是不道德的。它导致无法兑现的有希望的结果。当明知故犯时,过拟合就是明确的科学欺诈。许多学者这么做并不意味着这是正确的:他们并没有冒任何人的财富风险,甚至连他们自己的都没有。

    • 这也是对你的时间、资源和机会的浪费。此外,行业只支付超出样本的收益。你只有在为投资者创造了可观的财富后才能成功*。

  • 如何:

    • 第 11 至 15 章:有三种回测范式,其中历史模拟只是其中之一。每个回测总是会在某种程度上过拟合,学习如何量化过拟合的程度至关重要。

    • 第十六章:学习稳健的资产配置技术,这些技术不会因在样本内信号过拟合而牺牲样本外性能。

1.3.3 按常见陷阱结构

尽管机器学习有许多优点,但它并不是灵丹妙药。机器学习技术的灵活性和强大也有其阴暗面。当被误用时,机器学习算法会将统计偶然与模式混淆。这一事实,加上金融领域特有的低信噪比,几乎确保了粗心的用户会以越来越快的速度产生错误发现。本书揭示了一些机器学习专家在将其技术应用于金融数据集时所犯的最普遍错误。这些陷阱的一些列表在表 1.2 中列出,解决方案在指明的章节中解释。

表 1.2 金融机器学习中的常见陷阱

# 类别 陷阱 解决方案 章节
1 认识论 西西弗斯范式 元策略范式 1
2 认识论 通过回测进行研究 特征重要性分析 8
3 数据处理 按时间顺序采样 量钟 2
4 数据处理 整数微分 分数微分 5
5 分类 固定时间范围标记 三重障碍法 3
6 分类 同时学习边侧和大小 元标记 3
7 分类 非独立同分布样本加权 独特性加权;序列自举 4
8 评估 交叉验证泄漏 清除和禁运 7, 9
9 评估 向前推进(历史)回测 组合清除交叉验证 11, 12
10 评估 回测过拟合 在合成数据上的回测;被通胀调整的夏普比率 10–16

1.4 目标受众

本书介绍了专门设计用来解决金融数据集挑战的高级机器学习(ML)方法。“高级”并不意味着极其难以掌握,或解释最新版本的深度、递归或卷积神经网络。相反,本书回答了经验丰富的研究人员所认为的关键问题,这些研究人员曾将机器学习算法应用于金融问题。如果你是机器学习的新手,并且没有处理复杂算法的经验,那么这本书可能不适合你(还)。除非你在实践中面对过本章讨论的问题,否则你可能会很难理解解决这些问题的实用性。在阅读本书之前,你可能想研究几本近年来出版的优秀入门机器学习书籍。我在参考文献部分列出了其中的一些。

本书的核心读者是具有强大机器学习背景的投资专业人士。我的目标是让你能将本书中的学习变现,帮助我们现代化金融,为投资者提供实际价值。

本书也面向在金融以外领域成功实施机器学习算法的数据科学家。如果你曾在谷歌工作并应用深度神经网络进行人脸识别,但在金融数据上运行算法时似乎效果不佳,这本书将帮助你。有时你可能无法理解某些结构背后的金融逻辑(例如,元标记、三重障碍法、分数差分),但请耐心等候:一旦你管理投资组合的时间足够长,游戏规则会对你变得更加清晰,同时这些章节的含义也会显现。

1.5 前提条件

投资管理是研究中最具多学科特征的领域之一,这本书也反映了这一事实。理解各个部分需要对机器学习、市场微观结构、投资组合管理、数学金融、统计学、计量经济学、线性代数、凸优化、离散数学、信号处理、信息论、面向对象编程、并行处理和超级计算有实践性的知识。

Python 已成为机器学习的事实标准语言,我必须假设你是经验丰富的开发者。你必须熟悉 scikit-learn(sklearn)、pandas、numpy、scipy、多进程、matplotlib 和一些其他库。代码片段调用这些库的函数,使用它们的常规前缀,pandas 为 pd,numpy 为 np,matplotlib 为 mpl 等等。关于这些库的书籍非常多,你无法对每个库的具体内容知之甚详。在整本书中,我们将讨论它们实施中的一些问题,包括需要注意的未解决的错误。

1.6 常见问题解答

机器学习算法在金融中如何有用?

许多金融操作需要基于预定义规则做出决策,例如期权定价、算法执行或风险监控。这正是迄今为止自动化的大部分发生的地方,将金融市场转变为超快、超连接的信息交换网络。在执行这些任务时,机器被要求尽可能快地遵循规则。高频交易就是一个典型例子。有关该主题的详细讨论,请参见 Easley、López de Prado 和 O'Hara [2013]。

金融算法化势不可挡。在 1968 年 6 月 12 日到 1968 年 12 月 31 日之间,纽约证券交易所每周三关闭,以便后勤部门赶上文书工作。你能想象吗?我们今天生活在一个不同的世界,10 年后情况会更好。因为下一波自动化并不涉及遵循规则,而是做出判断。作为情感生物,我们受制于恐惧、希望和议程,人在做基于事实的决策时并不是特别擅长,尤其是在这些决策涉及利益冲突时。在这种情况下,投资者在机器根据从硬数据中学习到的事实做出决策时会更有利。这不仅适用于投资策略开发,还适用于几乎每个金融建议领域:授予贷款、评级债券、分类公司、招聘人才、预测收益、预测通货膨胀等。此外,机器在被编程遵循法律时,将始终遵守。如果做出可疑决策,投资者可以回溯记录,准确理解发生了什么。改进算法投资过程比完全依赖人类的过程要容易得多。

机器学习算法如何在投资上战胜人类?

你还记得人们曾坚信计算机永远无法战胜人类下棋吗?或者危险边缘?扑克?围棋?数百万年的进化(基因算法)让我们的猿脑在一个敌对的三维世界中生存下来,那里自然法则是静态的。现在,当涉及到在高维世界中识别微妙模式时,游戏规则每天都在变化,所有的微调反而成为了弊端。机器学习算法可以在 100 维的世界中像在我们熟悉的三维世界中一样轻松发现模式。虽然我们看到算法犯傻时总是发笑,但请记住,算法的历史仅占我们数百万年的一小部分。它们每天都在变得更好,而我们则没有。人类学习缓慢,这使我们在像金融这样快速变化的世界中处于劣势。

这是否意味着人类投资者的空间已经没有了?

绝对没有。没有任何人比计算机下棋更出色。而且没有任何计算机比一个由计算机支持的人更擅长下棋。当与机器学习算法对赌时,自主投资经理处于劣势,但最佳结果可能是通过将自主投资经理与机器学习算法结合来实现的。这就是所谓的“量化与基本面结合”的方式。在整本书中,你会发现可以被量化与基本面团队使用的技术,也就是允许你将人类猜测(受到基本变量启发)与数学预测相结合的方法。特别是,第三章介绍了一种称为元标记的新技术,它允许你在自主层之上添加机器学习层。

金融机器学习与计量经济学有何不同?

计量经济学是将经典统计方法应用于经济和金融系列的学科。计量经济学的基本工具是多元线性回归,这是一项 18 世纪的技术,早在 1794 年之前就已被高斯掌握(Stigler [1981])。标准的计量经济模型并不具备学习能力。很难相信像 21 世纪的金融这样复杂的事物能通过简单的反转协方差矩阵来理解。

每一门实证科学都必须基于观察构建理论。如果用于建模这些观察的统计工具箱是线性回归,研究者将无法识别数据的复杂性,理论将显得极为简单、无用。我毫不怀疑,计量经济学是经济学和金融在过去 70 年未能取得实质性进展的主要原因(Calkin 和 López de Prado [2014a, 2014b])。

数世纪以来,中世纪的天文学家们进行了观察并发展了关于天体力学的理论。这些理论从未考虑过非圆轨道,因为这被视为不洁和不符合上帝的计划。预测误差如此严重,以至于必须制定越来越复杂的理论来解释它们。直到开普勒敢于考虑非圆(椭圆)轨道时,突然出现了一种更简单的通用模型,能够以惊人的准确性预测行星的位置。如果天文学家从未考虑过非圆轨道,那会怎么样?那么……如果经济学家最终开始考虑非线性函数呢?我们的开普勒在哪里?金融没有《原理》,因为没有开普勒就没有牛顿。

金融机器学习方法并不取代理论,而是指导理论。机器学习算法在高维空间中学习模式,而不需要特定的指引。一旦我们理解了哪些特征能够预测某个现象,就可以建立一个理论解释,并在独立数据集上进行测试。经济学和金融的学生最好参加机器学习课程,而不是计量经济学。计量经济学可能足以让你在金融学术界取得成功(目前),但在商业上成功则需要机器学习。

你对那些将机器学习算法视为黑箱的人有什么看法?

如果你正在阅读这本书,机器学习算法对你来说很可能是一个黑箱。它们是透明的、明确定义的、清晰的模式识别函数。大多数人没有你的知识,对于他们来说,机器学习就像魔法师的箱子:“那只兔子从哪里来的?你是怎么欺骗我们的,女巫?”人们对他们不理解的事物充满怀疑。他们的偏见根植于无知,而苏格拉底的解药很简单:教育。此外,我们当中有些人喜欢动脑筋,尽管神经科学家至今仍未完全弄清大脑是如何运作的(本身就是一个黑箱)。

不时你会遇到一些无法救赎的技术抵制者。内德·卢德是来自英格兰莱斯特的一位织布工,他在 1779 年因愤怒而砸毁了两台针织机。随着工业革命的到来,因机械化而愤怒的暴民破坏并摧毁了他们能找到的所有机器。纺织工人损坏了如此多的工业设备,以至于国会不得不通过法律,将“破坏机器”定为死罪。在 1811 年至 1816 年间,英格兰的大部分地区都处于公开反抗的状态,以至于参与对抗卢德派的英国军队数量超过了在伊比利亚半岛对抗拿破仑的军队。卢德派叛乱以残酷的军事镇压而告终。让我们希望黑箱运动不会走到那一步。

你为什么不讨论具体的机器学习算法?

这本书对你选择的具体机器学习算法持中立态度。无论你使用卷积神经网络、AdaBoost、随机森林、支持向量机等,你将面临许多共同的通用问题:数据结构化、标记、加权、平稳变换、交叉验证、特征选择、特征重要性、过拟合、回测等。在金融建模的背景下,回答这些问题并非易事,需要开发特定框架的方法。这正是本书的重点。

你还推荐哪些关于这个主题的书籍?

据我所知,这是第一本全面且系统地探讨针对金融的机器学习(ML)方法的书籍:从专门讨论金融数据结构的章节开始,还有用于金融序列标记的章节、样本加权、时间序列差分……一直到专门用于投资策略适当回测的完整部分。确实,之前有少量出版物(主要是期刊文章)将标准机器学习应用于金融序列,但这并不是本书所提供的内容。我的目标是解决那些使金融机器学习建模特别具有挑战性的独特问题。像任何新主题一样,它正在快速发展,书籍会随着重大进展而更新。如果您希望在未来版本中看到任何特定主题,请联系我,邮箱是 mldp@quantresearch.org。我会乐意添加这些章节,同时承认提出建议的读者的名字。

我不理解一些章节和内容。我该怎么办?

我的建议是先阅读章节末尾列出的参考文献。当我写这本书时,我必须假设读者熟悉现有文献,否则这本书将失去焦点。如果在阅读那些参考文献后章节仍然无法理解,可能的原因是它们与投资专业人士非常了解的问题相关(即使文献中没有提及)。例如,第二章将讨论有效的期货价格调整方法,这是一个大多数从业者都知道的问题,即使在教科书中很少涉及。我鼓励你参加我定期举办的研讨会,并在我演讲结束时向我提问。

为什么这本书如此专注于回测过拟合?

这有两个原因。首先,回测过拟合可以说是数学金融中最重要的未解问题。它相当于计算机科学中的“P 与 NP”。如果有一种精确的方法可以防止回测过拟合,我们就能够将回测变现。一个回测几乎可以与现金相媲美,而不是销售推销。对冲基金将有信心将资金分配给投资组合经理。投资者的风险将降低,并愿意支付更高的费用。监管机构将根据可靠的技能和知识证据向对冲基金经理颁发许可证,给骗子留不下空间。在我看来,一本没有解决这一问题的投资书籍是浪费时间。你为什么要读一本讨论 CAPM、APT、资产配置技术、风险管理等内容的书,而这些论点的实证结果在未确定其虚假发现概率的情况下被选择?

第二个原因是,机器学习是您研究工具箱中的一个强大武器,且确实是一个危险的武器。如果在计量经济分析中存在回测过拟合的问题,机器学习的灵活性使其对您的工作构成持续威胁。尤其在金融领域,因为我们的数据集较短,信噪比低,而且我们没有可以控制所有环境变量进行实验的实验室(López de Prado [2015])。一本不解决这些问题的机器学习书籍对您的职业生涯可能弊大于利。

这本书的数学术语是什么?

当我开始写这本书时,我考虑为每个数学变量或函数在所有章节中分配一个符号。如果这本书只涉及一个主题,例如随机最优控制,那会很好。然而,这本书涉及广泛的数学主题,每个主题都有其自己的惯例。读者会发现,如果我不遵循文献标准,查阅参考资料会变得更加困难,这意味着有时我们必须重复使用符号。为了防止任何混淆,每一章都会解释所使用的术语。大多数数学内容都伴随有代码片段,因此如有疑问,请始终遵循代码。

谁写了第二十二章?

一个普遍的看法是,机器学习是一项在 IBM、谷歌、脸书、亚马逊、Netflix、特斯拉等公司发明或完善的新技术。确实,技术公司近年来已经成为机器学习的重度用户。这些公司赞助了一些最近备受关注的机器学习成就(如危险边缘或围棋),这可能增强了这种看法。

然而,读者可能会惊讶地发现,实际上,美国国家实验室是使用机器学习的研究中心中历史悠久且经验丰富的机构。这些中心在机器学习变得流行之前就已经在使用它,并成功应用了几十年,产生了惊人的科学发现。如果预测 Netflix 应该推荐给你观看的电影是一个值得的努力,那么理解宇宙的扩张速率、预测全球变暖将对哪些海岸线产生最大影响,或者防止国家电网发生灾难性故障同样值得。这些只是伯克利实验室等机构每天默默而不懈地利用机器学习研究的一些令人惊叹的问题。

在第二十二章中,霍斯特·西蒙博士和吴克生博士提供了在一家专注于大规模科学研究的美国国家实验室中,作为副主任和项目负责人的视角,该实验室涉及大数据、高性能计算和机器学习。与传统大学环境不同,国家实验室通过组建跨学科团队,遵循精心设计的程序,实现科学突破,具有明确的分工和责任。这种通过生产链进行研究的模型几乎是在 90 年前在伯克利实验室诞生,并启发了第 1.2.2 节和第 1.3.1 节中解释的元策略范式。

1.7 致谢

霍斯特·西蒙博士是劳伦斯伯克利国家实验室的副主任,他与负责多个项目的吴克生博士共同撰写了第二十二章。机器学习需要极大的计算能力,没有他们的慷慨支持和指导,我的研究是无法进行的。在那一章中,霍斯特和克生解释了劳伦斯伯克利实验室如何满足全球研究人员的超级计算需求,以及机器学习和大数据在当今科学突破中所扮演的关键角色。

里卡多·雷博纳托教授是第一个阅读这份手稿并鼓励我出版的人。我与弗兰克·法博兹教授在这些主题上的多次对话对书籍的形成起到了重要作用。在学术界,很少有人具备弗兰克和里卡多的行业经验,而在行业中,也很少有人拥有里卡多和弗兰克的学术背景。

在过去的二十年里,我在本书主题上发表了近百篇作品,包括期刊文章、书籍、章节、讲座、源代码等。根据我最新的统计,这些作品与超过 30 位该领域的顶尖专家共同署名,包括大卫·H·贝利教授(15 篇文章)、大卫·伊斯利教授(8 篇文章)、莫琳·奥哈拉教授(8 篇文章)和乔纳森·M·博尔维因教授(6 篇文章)。在很大程度上,这本书也属于他们,因为没有他们多年来的支持、见解和持续的思想交流,这本书是无法完成的。给予他们适当的信用将花费太长时间,因此我发布了以下链接,您可以在其中找到我们的集体努力:www.quantresearch.org/Co-authors.htm

最后但同样重要的是,我要感谢我的一些研究团队成员对书籍的校对,并帮助我制作了一些图表:迭戈·阿帕里西奥、李·科恩博士、迈克尔·刘易斯博士、迈克尔·洛克博士、曾亚雄博士和张志白博士。

练习

  1. 你知道哪些公司尝试从自由裁量投资转向机器学习主导的投资,或者将其融合成他们所称的“量化基本面”基金吗?

    1. 他们成功了吗?

    2. 在这一转型中涉及哪些文化难题?

  2. 数学金融中最重要的未解决问题是什么?如果这个问题得以解决,如何能够:

    1. 监管机构用它来授予投资管理许可证吗?

    2. 投资者用它来分配资金吗?

    3. 公司用它来奖励研究人员吗?

  3. 根据 机构投资者,只有 17% 的对冲基金资产由定量公司管理。截至 2017 年 6 月,所有定量基金总共分配约 5000 亿美元,而一年前为 3860 亿美元。你认为是什么驱动了这种大规模的资产重新配置?

  4. 根据 机构投资者 的富豪榜,有多少定量投资公司位列前 10 名最盈利公司?这与定量基金管理的资产比例相比如何?

  5. 计量经济学方法与机器学习之间的关键区别是什么?经济学和金融学如何从更新其统计工具包中受益?

  6. 科学对人脑(或任何脑)如何工作几乎没有了解。在这个意义上,大脑是一个绝对的黑箱。你认为是什么导致金融机器学习的批评者将其视为黑箱,而接受自由裁量投资?

  7. 你阅读了一篇描述投资策略的期刊文章。在回测中,它的年化夏普比率超过 2,置信水平为 95%。利用他们的数据集,你能够在独立回测中重现他们的结果。为什么这一发现可能是错误的?

  8. 投资顾问在代表投资者做决策时面临利益冲突。

    1. 机器学习算法可以在没有利益冲突的情况下管理投资。为什么?

    2. 假设一个机器学习算法做出的决策导致了损失。该算法执行了其被编程的操作,投资者同意了程序条款,经过计算机日志的法医检查得以验证。与因自由裁量基金经理的糟糕判断而导致的损失相比,这种情况在什么意义上对投资者更好?投资者在每种情况下的救济措施是什么?

    3. 对于金融顾问来说,将他们的决策与这些中立代理人的决策进行基准比较是否有意义?

参考文献

  1. 贝利, D.,P. 博尔温 和 S. 普卢夫 (1997): “各种多对数常数的快速计算。” 计算数学,第 66 卷,第 218 期,第 903–913 页。

  2. 卡尔金, N. 和 M. 洛佩斯·德·普拉多 (2014a): “随机流图。” 算法金融,第 3 卷,第 1 期,第 21–42 页。

  3. 卡尔金, N. 和 M. 洛佩斯·德·普拉多 (2014b): “宏观金融流的拓扑:随机流图的应用。” 算法金融,第 3 卷,第 1 期,第 43–85 页。

  4. 易斯利, D.,M. 洛佩斯·德·普拉多 和 M. 奥哈拉 (2013): 高频交易,第 1 版。风险出版社。

  5. 洛佩斯·德·普拉多, M. (2014): “定量元策略。” 实用应用,机构投资者期刊,第 2 卷,第 3 期,第 1–3 页。

  6. López de Prado, M. (2015): “经验金融的未来。” 投资组合管理杂志,第 41 卷,第 4 期,页 140–144。

  7. Stigler, Stephen M. (1981): “高斯与最小二乘法的发明。” 统计年鉴,第 9 卷,第 3 期,页 465–474。

参考书目

  1. Abu-Mostafa, Y., M. Magdon-Ismail, 和 H. Lin (2012): 从数据中学习,第 1 版。AMLBook。

  2. Akansu, A., S. Kulkarni, 和 D. Malioutov (2016): 金融信号处理与机器学习,第 1 版。John Wiley & Sons-IEEE 出版社。

  3. Aronson, D. 和 T. Masters (2013): 金融工具算法交易的统计学机器学习:基于预测模型的交易系统开发,第 1 版。CreateSpace 独立出版平台。

  4. Boyarshinov, V. (2012): 计算金融中的机器学习:构建人工智能应用的实用算法,第 1 版。LAP LAMBERT 学术出版。

  5. Cerniglia, J., F. Fabozzi, 和 P. Kolm (2016): “定量股票策略研究的最佳实践。” 投资组合管理杂志,第 42 卷,第 5 期,页 135–143。

  6. Chan, E. (2017): 机器交易:部署计算机算法征服市场,第 1 版。John Wiley & Sons。

  7. Gareth, J., D. Witten, T. Hastie, 和 R. Tibshirani (2013): 统计学习导论:R 语言的应用,第 1 版。Springer。

  8. Geron, A. (2017): 使用 Scikit-Learn 和 TensorFlow 的动手机器学习:构建智能系统的概念、工具和技术,第 1 版。O'Reilly Media。

  9. Gyorfi, L., G. Ottucsak, 和 H. Walk (2012): 金融工程的机器学习,第 1 版。帝国学院出版社。

  10. Hackeling, G. (2014): 精通 Scikit-Learn 的机器学习,第 1 版。Packt Publishing。

  11. Hastie, T., R. Tibshirani, 和 J. Friedman (2016): 统计学习的要素,第 2 版。Springer-Verlag。

  12. Hauck, T. (2014): Scikit-Learn 食谱,第 1 版。Packt Publishing。

  13. McNelis, P. (2005): 金融中的神经网络,第 1 版。学术出版社。

  14. Raschka, S. (2015): Python 机器学习,第 1 版。Packt Publishing。

备注

^(1)    伯克利实验室,www.lbl.gov/about

^(2)     www.numbersleuth.org/worlds-gold/

^(3)     www.nersc.gov/about

第一部分:数据分析

  1. 第二章 财务数据结构

  2. 第三章 标记

  3. 第四章 示例权重

  4. 第五章 分数微分特征

第二章:财务数据结构

2.1 动机

在本章中,我们将学习如何处理非结构化金融数据,并从中推导出适合机器学习算法的结构化数据集。一般来说,你不希望使用他人处理过的数据集,因为结果往往是发现他人已经知道的内容或即将发现的内容。理想情况下,你的起点是一个非结构化的原始数据集合,你将以某种方式处理这些数据,以生成有用的特征。

2.2 基本金融数据的基本类型

金融数据有许多形态和形式。表 2.1 显示了四种基本金融数据类型,按从左到右的多样性递增顺序排列。接下来,我们将讨论它们的不同性质和应用。

表 2.1 四种基本金融数据类型

基本数据 市场数据 分析 替代数据

|

  • 资产

  • 负债

  • 销售

  • 成本/收益

  • 宏观变量

  • . . .

|

  • 价格/收益/隐含波动率

  • 交易量

  • 股息/优惠券

  • 未平仓合约

  • 报价/取消

  • 攻击方

  • . . .

|

  • 分析师推荐

  • 信用评级

  • 盈利预期

  • 新闻情绪

  • . . .

|

  • 卫星/CCTV 图像

  • 谷歌搜索

  • Twitter/聊天

  • 元数据

  • . . .

|

2.2.1 基本数据

基本数据包含可以在监管文件和商业分析中找到的信息。它主要是会计数据,按季度报告。这类数据的一个特定方面是它会有滞后报告。你必须确认每个数据点发布的确切时间,以确保你的分析只使用在公开可用后获得的信息。一个常见的初学者错误是假设这些数据在报告期末发布,但实际上从来不是这样。

例如,彭博社发布的基本数据是按报告中包含的最后日期编制索引的,这个日期通常比发布日期早 1.5 个月。换句话说,彭博社将这些值分配给一个未知的日期。你无法想象每年有多少论文使用了不一致的基本数据,尤其是在因子投资文献中。一旦你正确对齐数据,这些论文中的大量发现是无法复制的。

基础数据的第二个方面是,它经常被补填或恢复。“补填”意味着缺失的数据被赋予一个值,即使在当时这些值是未知的。“恢复值”是纠正了初始发布错误的值。一家公司可能会在首次发布后很久对过去一个季度的结果进行多次修正,而数据供应商可能会用其修正覆盖初始值。问题在于,这些修正值在首次发布时并不知道。一些数据供应商通过存储每个变量的多个发布日期和数值来规避这个问题。例如,我们通常会为单个季度的 GDP 发布有三个值:初始发布值和两个月度修正值。不过,常见的情况是,有研究使用最终发布值并将其分配到首次发布的时间,甚至分配到报告期的最后一天。我们将在第十一章讨论回测错误时重新审视这一错误及其影响。

基础数据极其规范化且频率较低。由于其对市场的可获取性,剩余的可利用价值相对较小。不过,将其与其他数据类型结合使用可能仍然有用。

2.2.2 市场数据

市场数据包括在交易所(如 CME)或交易场所(如 MarketAxess)发生的所有交易活动。理想情况下,您的数据提供者应为您提供一个原始数据源,包含各种非结构化信息,如 FIX 消息,这使您能够完全重建交易簿,或完整的 BWIC(竞争性求购)响应集合。每个市场参与者在交易记录中留下特征性足迹,凭借足够的耐心,您将找到预测竞争对手下一步行动的方法。例如,TWAP 算法留下了非常独特的足迹,被捕食性算法用来抢先进行其日终交易(通常是对冲)活动(Easley, López de Prado, and O'Hara [2011])。人类 GUI 交易员通常以整手交易,您可以利用这一点估算在特定时间内来自他们的交易量占比,然后将其与特定市场行为关联起来。

FIX 数据的一个吸引人的方面是,与基础数据不同,它的处理并不简单。此外,这种数据非常丰富,每天生成超过 10 TB 的数据。这使它成为一个更有趣的策略研究数据集。

2.2.3 分析

你可以将分析视为基于原始来源的衍生数据,这可能是基本数据、市场数据、替代数据,甚至是其他分析的集合。分析的特征不在于信息的内容,而在于它并非直接从原始来源获得,并且它已以特定方式为你处理。投资银行和研究公司出售通过深入分析公司商业模式、活动、竞争、前景等而产生的有价值信息。一些专业公司出售来自替代数据的统计信息,例如,从新闻报道和社交媒体中提取的情绪。

分析的一个积极方面是信号已经从原始来源中提取出来。消极方面是,分析可能会很昂贵,所使用的方法可能存在偏见或不透明性,并且你不是唯一的消费者。

2.2.4 替代数据

Kolanovic 和 Krishnamachari [2017] 区分了由个人(社交媒体、新闻、网页搜索等)、商业流程(交易、公司数据、政府机构等)和传感器(卫星、地理位置、天气、监控摄像头等)生成的替代数据。一些受欢迎的卫星图像或视频源包括对油轮、隧道交通活动或停车场占用率的监测。

真正特征化替代数据的是它是原始信息,也就是说,这些信息尚未被其他来源采纳。在埃克森美孚报告盈利增加之前,在其市场价格飙升之前,在分析师撰写其最新文件的评论之前,所有这些之前,油轮、钻井机和管道交通已经发生。这些活动发生在这些数据类型被反映出来的几个月之前。替代数据的两个问题是其成本和隐私问题。所有的监控活动都是昂贵的,被监视的公司可能会反对,更不用说旁观者。

替代数据提供了处理真正独特、难以处理的数据集的机会。记住,难以存储、操作和处理的数据总是最有前途的。如果数据基础设施团队对某个数据集感到烦恼,你会意识到该数据集可能是有用的。也许你的竞争对手由于后勤原因未尝试使用该数据集,或中途放弃,或处理不当。

2.3 条形图

为了在你的非结构化数据上应用机器学习算法,我们需要解析数据,从中提取有价值的信息,并将这些提取结果存储在规范化格式中。大多数机器学习算法假设提取数据的表格表示。金融从业者通常将这些表的行称为“条”。我们可以区分两类条形方法:(1)标准条形方法,这些方法在文献中很常见,和(2)更高级的、以信息驱动的方法,尽管这些方法在学术期刊文章中尚未出现,但却被复杂的从业者使用。在本节中,我们将讨论如何形成这些条。

2.3.1 标准条

一些条形构建方法在金融行业中非常流行,以至于大多数数据供应商的 API 都提供了几种。这些方法的目的是将不规则频率到达的一系列观察值(通常称为“非均匀系列”)转换为基于规则抽样的均匀系列。

2.3.1.1 时间条

时间条是通过在固定时间间隔内抽样信息获得的,例如每分钟一次。收集的信息通常包括:

  • 时间戳

  • 成交量加权平均价格(VWAP)

  • 开盘价(即,第一个价格)

  • 收盘价(即,最后一个价格)

  • 最高价

  • 最低价

  • 交易量等。

尽管时间条可能是从业者和学术界中最流行的,但应避免使用时间条,原因有二。首先,市场并不是以固定时间间隔处理信息。开盘后的一小时比正午(或期货交易中午夜时分)周围的一小时要活跃得多。作为生物生物体,人类根据阳光周期组织他们的日常生活是合情合理的。但今天的市场是由算法操作的,这些算法在松散的人类监督下进行交易,因此 CPU 处理周期比时间间隔更为相关(Easley, López de Prado, 和 O'Hara [2011])。这意味着时间条在低活动期过采样信息,而在高活动期则欠采样信息。其次,时间抽样系列往往表现出较差的统计特性,如序列相关性、异方差性和收益的非正态性(Easley, López de Prado, 和 O'Hara [2012])。GARCH 模型部分是为了解决与不当抽样相关的异方差性而开发的。正如我们接下来将看到的,形成条作为交易活动的从属过程,首先避免了这个问题。

2.3.1.2 Tick Bars

Tick 条背后的理念很简单:每当发生预定义数量的交易时(例如,1,000 次交易),将提取之前列出的样本变量(时间戳、VWAP、开盘价等)。这使我们能够将抽样与信息到达的代理(ticks 的产生速度)进行同步。

Mandelbrot 和 Taylor [1967]是最早意识到按交易次数进行抽样表现出理想统计特性的学者之一:“在固定交易次数下,价格变动可能具有高斯分布。在固定时间段内,价格变动可能遵循稳定的帕累托分布,其方差是无限的。由于任何时间段内的交易次数都是随机的,上述说法并不一定相互矛盾。”

自从 Mandelbrot 和 Taylor 的论文以来,多项研究确认按交易活动进行抽样使我们能够获得更接近 IID 正态分布的回报(参见 Ané和 Geman [2000])。这一点很重要,因为许多统计方法依赖于观察值来自 IID 高斯过程的假设。直观上,我们只能从一个不变的随机变量中进行推断,而逐笔条比时间条允许更好的推断。

在构建逐笔条时,你需要注意异常值。许多交易所会在开盘和收盘时进行拍卖。这意味着在一段时间内,订单簿积累了未匹配的买单和卖单。当拍卖结束时,会以结算价格发布一笔大交易,交易量相当庞大。这笔拍卖交易可能相当于数千个逐笔交易,即使它被报告为一个逐笔交易。

2.3.1.3 交易量条

逐笔条的一个问题是订单碎片化引入了逐笔数量的任意性。例如,假设有一个订单以 10 的数量挂出。如果我们买入 10 手,我们的一个订单将被记录为一个逐笔。如果在挂单上有 10 个数量为 1 的订单,我们的一个买入将被记录为 10 个单独的交易。此外,匹配引擎协议还可能将一个成交进一步拆分为多个人工部分成交,以便于操作。

交易量条通过在每次交换一定量的证券单位(股份、期货合约等)时进行抽样,从而避免了这一问题。例如,我们可以在期货合约每次交换 1,000 单位时进行价格抽样,而不管涉及的逐笔数量。

现在很难想象,但在 1960 年代,供应商很少发布交易量数据,因为客户主要关心的是逐笔价格。随着交易量也开始被报告,Clark [1973]意识到按交易量抽样的回报具有比按逐笔条抽样更好的统计特性(即,更接近 IID 高斯分布)。另一个更倾向于交易量条而非时间条或逐笔条的原因是,许多市场微观结构理论研究价格与交易量之间的相互作用。按这些变量之一进行抽样是方便的工具,正如我们将在第十九章中发现的那样。

2.3.1.4 美元条

美元条形图是通过每次交易预定义市场价值时采样一个观察值形成的。当然,美元的参考是针对证券所计价的货币,但没有人会称之为欧元条形图、英镑条形图或日元条形图(尽管金条会构成一个有趣的双关语)。

让我用几个例子来说明美元条形图背后的原理。首先,假设我们希望分析一只在某段时间内上涨了 100%的股票。在该时间段结束时,出售价值$1,000 的股票需要交易买入该股票时所需的一半股数。换句话说,交易的股数是实际交易价值的函数。因此,从美元交易价值的角度进行条形图采样是合理的,而不是以成交笔或成交量进行采样,尤其是在分析涉及重大价格波动的情况下。这一点可以通过实证验证。如果您在给定的条形图大小上计算 E-mini S&P 500 期货的成交笔条形图和成交量条形图,日均条形图的数量在多年间会变化很大。一旦您计算出多年中每天的美元条形图数量,且保持条形图大小不变,这种变化的范围和速度将会减少。图 2.1 绘制了在我们对成交笔、成交量和美元采样方法应用固定条形图大小时,每天的条形图数量的指数加权平均。

图 2.1 日均的成交笔数、成交量和美元条形图

另一个使得美元条形图比时间、成交笔或成交量条形图更有趣的论点是,流通股数在证券生命周期内通常会因公司行为而多次变化。即使在调整了拆分和反向拆分后,还有其他行动会影响成交笔数和成交量,例如发行新股或回购现有股份(自 2008 年大衰退以来非常常见的做法)。美元条形图在这些行动面前往往表现出稳健性。尽管如此,您可能希望对美元条形图进行采样,其中条形图的大小并未随时间保持不变。相反,条形图的大小可以根据公司的自由流通市值(在股票的情况下)或已发行债务的未偿金额(在固定收益证券的情况下)动态调整。

2.3.2 信息驱动条形图

信息驱动柱的目的是在新信息到达市场时更频繁地采样。在此背景下,“信息”一词是以市场微观结构的意义使用的。正如我们在第十九章中将看到的,市场微观结构理论赋予不平衡签名交易量的持续性特别重要,因为该现象与有信息交易者的存在相关。通过将采样与有信息交易者的到来同步,我们可能能够在价格达到新的均衡水平之前做出决策。在本节中,我们将探讨如何使用各种信息到达指标来采样柱。

2.3.2.1 tick 不平衡柱

考虑一个 tick 序列{(p[t], v[t])}[t = 1, …, T],其中p[t]是与 tick t 相关的价格,而v[t]是与 tick t 相关的交易量。所谓的 tick 规则定义了一个序列{b[t]}[t = 1, …, T],其中

其中b[t] ∈ {−1, 1},边界条件b[0]被设置为匹配前一柱的终值b[T]。tick 不平衡柱(TIBs)背后的想法是,每当 tick 不平衡超过我们的预期时,就进行柱的采样。我们希望确定 tick 指数T,使得签名 tick 的累积(根据 tick 规则签名)超过给定阈值。接下来,让我们讨论确定T的程序。

首先,我们将时间T的 tick 不平衡定义为

第二,我们计算在柱开始时θ[T]的期望值,E[0][θ[T]] = E[0]T,其中 E[0][T]是 tick 柱的预期大小,P[b[t] = 1]是 tick 被分类为买入的无条件概率,而 P[b[t] = −1]是 tick 被分类为卖出的无条件概率。由于 P[b[t] = 1] + P[b[t] = −1] = 1,因此 E[0][θ[T]] = E[0]T。在实际操作中,我们可以将 E[0][T]视为先前柱中T值的指数加权移动平均,而(2P[b[t] = 1] − 1)视为先前柱中b[t]值的指数加权移动平均。

第三,我们将 tick 不平衡柱(TIB)定义为一个T的*连续 tick 子集,以满足以下条件:

预期不平衡的大小由|2P[b[t] = 1] − 1|所暗示。当θ[T]比预期更不平衡时,较低的T将满足这些条件。因此,在有信息交易(触发单边交易的非对称信息)存在的情况下,TIBs 的产生会更频繁。实际上,我们可以将 TIBs 理解为包含相同数量信息的交易桶(无论交易的交易量、价格或 ticks)。

2.3.2.2 交易量/美元不平衡柱

交易量失衡柱(VIBs)和美元失衡柱(DIBs)背后的理念是扩展 ticks 失衡柱(TIBs)的概念。我们希望在交易量或美元失衡与我们的预期发生偏离时对柱子进行取样。基于我们为 TIBs 讨论的 ticks 规则和边界条件b [0]的相同概念,我们将定义一个程序来确定下一个样本的索引T

首先,我们将时间T的失衡定义为

其中v [t]可以表示交易的证券数量(VIB)或交换的美元金额(DIB)。你选择的v [t]决定了你是根据前者还是后者进行取样。

第二,我们在柱子的开始计算θ[T]的期望值

设我们定义v ^+ = P[b [t] = 1]E [0] [v [t] | b [t] = 1],v ^− = P[b [t] = −1]E [0] [v [t] | b [t] = −1],因此。你可以将v ^+v ^−视为将v [t]的初始期望分解为由买入和卖出贡献的成分。然后

在实践中,我们可以将 E [0] [T]估计为来自先前柱子的T值的指数加权移动平均值,以及(2 v ^+ − E [0] [v [t]])作为来自先前柱子的b [t] v [t]值的指数加权移动平均值。

第三,我们将 VIB 或 DIB 定义为一个T *-连续的 ticks 子集,以满足以下条件:

其中期望失衡的大小由|2 v ^+ − E [0] [v [t]]|暗示。当θ[T]的失衡程度超出预期时,较低的T将满足这些条件。这是基于信息的交易量和美元柱的类似物,像其前身一样,它解决了关于 ticks 碎片化和异常值的相同问题。此外,它还解决了公司行为的问题,因为上述程序不依赖于固定的柱子大小。相反,柱子大小是动态调整的。

2.3.2.3 Tick Runs Bars

TIBs、VIBs 和 DIBs 监测订单流失衡,以 ticks、交易量和交换的美元值为度量。大型交易者将扫清订单簿,使用冰山订单,或将父订单切分成多个子订单,这些操作都会在{b [t]}[t = 1, …, T]序列中留下运行的痕迹。因此,监测整体交易量中的序列,并在该序列与我们的预期发生偏离时进行取样是很有用的。

首先,我们将当前运行的长度定义为

第二,我们在柱子的开始计算θ[T]的期望值

在实践中,我们可以将 E [0] [T]估计为来自先前柱子的T值的指数加权移动平均值,以及 P[b [t] = 1]作为来自先前柱子的买 ticks 比例的指数加权移动平均值。

第三,我们将点交易条(TRB)定义为一个 T *-连续的点集合,满足以下条件:

期望的交易次数由 max{P[ b [t] = 1], 1 − P[ b [t] = −1]} 所隐含。当 θ [T] 展示的交易次数超出预期时,低 T 将满足这些条件。注意在这一交易定义中,我们允许序列中断。也就是说,我们不再测量最长序列的长度,而是计算每一方的点数,而不进行偏移(没有不平衡)。在形成条的背景下,这一定义比测量序列长度更有用。

2.3.2.4 交易量/美元交易条

交易量条(VRBs)和美元交易条(DRBs)将上述交易定义扩展到交易的量和金额。直观上,我们希望在任一方的交易量或金额超出我们对某条的预期时进行抽样。根据我们习惯的点差规则命名法,我们需要确定条中的最后观察值的索引 T

第一,我们将与交易相关的交易量或美元定义为

其中 v [t] 可以代表交易的证券数量(VRB)或交换的美元金额(DRB)。你选择的 v [t] 决定了你是根据前者还是后者进行抽样。

第二,我们计算条开始时 θ [T] 的期望值,

实际上,我们可以将 E [0] [ T ] 估计为先前条中 T 值的指数加权移动平均,P[ b [t] = 1] 估计为先前条中买入点比例的指数加权移动平均,E [0] [ v [t] | b [t] = 1] 估计为先前条中买入交易量的指数加权移动平均,E [0] [ v [t] | b [t] = −1] 估计为先前条中卖出交易量的指数加权移动平均。

第三,我们将交易量条(VRB)定义为一个 T *-连续的点集合,满足以下条件:

期望的交易量由 max{P[ b [t] = 1]E [0] [ v [t] | b [t] = 1], (1 − P[ b [t] = 1])E [0] [ v [t] | b [t] = −1]} 所隐含。当 θ [T] 展示的交易次数超出预期时,或者交易量大于预期时,低 T 将满足这些条件。

2.4 处理多产品系列

有时我们希望建模一个工具的时间序列,其中权重需要随着时间动态调整。其他时候,我们必须处理支付不规则息票或股息的产品,或受到企业行动影响的产品。改变所研究的时间序列性质的事件需要妥善处理,否则我们会无意中引入结构性突破,从而误导我们的研究工作(更多内容将在第十七章讨论)。这个问题以多种形式出现:当我们建模权重变化的价差,或需要再投资股息/息票的证券篮子,或需要重新平衡的篮子,或当一个指数的成分发生变化,或当我们必须用另一个替换已到期/成熟的合同/证券等。

期货就是一个典型的例子。根据我的经验,人们在处理期货时往往不必要地感到困难,主要是因为他们不知道如何很好地处理换仓。基于期货的价差、或股票或债券的组合策略也可以说是如此。在下一节中,我将向你展示如何将一个证券组合建模为一个单一的现金产品。我称之为“ETF 技巧”,因为目标是将任何复杂的多产品数据集转化为一个类似于总回报 ETF 的单一数据集。这有什么用?因为你的代码可以始终假设你只交易现金类产品(非到期现金工具),无论底层系列的复杂性和组成如何。

2.4.1 ETF 技巧

假设我们希望开发一个交易期货价差的策略。在处理价差而不是单一工具时,会出现一些小麻烦。首先,价差由一个随时间变化的权重向量来表征。因此,即使价格不变,价差本身也可能收敛。当这种情况发生时,基于该序列的模型可能会误认为盈亏(利润和损失的净市值)是由于该权重引起的收敛所致。其次,价差可能会出现负值,因为它们并不代表价格。这往往会造成问题,因为大多数模型假设价格为正。第三,交易时间不会完全对齐所有成分,因此价差并不总是可以在最后发布的水平进行交易,或者没有延迟风险。此外,必须考虑执行成本,例如跨越买卖差价。

避免这些问题的一种方法是生成一个反映在价差中投资$1 的时间序列。该序列的变化将反映盈亏(PnL)的变化,该序列在最坏的情况下将始终为正(至多是微小的),并且实施损失将被考虑在内。这个序列将用于建模、生成信号和交易,就像它是一个 ETF 一样。

假设我们有一个由第 2.3 节中解释的任何方法得出的历史数据条。 这些数据条包含以下列:

  • o [i* , t]* 是在柱 t = 1, …, T 时工具 i = 1, …, I 的原始开盘价。

  • p [i* , t]* 是在柱 t = 1, …, T 时工具 i = 1, …, I 的原始收盘价。

  • φ [i , t] 是在柱 t = 1, …, T 时工具 i = 1, …, I 的一个点的 USD 值。这包括外汇汇率。

  • v [i* , t]* 是在柱 t = 1, …, T 时工具 i = 1, …, I 的交易量。

  • d [i* , t]* 是在柱 t 时工具 i 支付的持有成本、股息或票息。这个变量也可以用于收取保证金成本或融资成本。

所有工具 i = 1, …, I 在柱 t = 1, …, T 时均可交易。换句话说,即使某些工具在时间间隔 [t − 1, t] 的整个期间不可交易,但至少在时间 t − 1 和 t 时是可以交易的(市场开放并能够在这些时刻执行订单)。对于由分配向量 ω [t] 重新平衡(或滚动)的期货篮子,$1 的投资价值 {K [t]} 是通过以下公式推导的:

并且 K [0] = 1 是初始的 AUM。变量 h [i* , t]* 表示在时间 t 时工具 i 的持有量(证券或合约数量)。变量 δ [i , t] 是在时间 tt − 1 之间工具 i 市场价值的变化。请注意,当 tB 时利润或损失被再投资,从而防止负价格。股息 d [i* , t]* 已经嵌入到 K [t] 中,因此策略不需要了解它们。h [i* , t]* 中的目的在于去杠杆配置。对于期货系列,我们可能不知道在滚动时间 t 时新合约的 p [i* , t],所以我们使用 o [i , t + 1]* 作为时间上最近的价格。

让 τ [i] 表示与交易 $1 的工具 i 相关的交易成本,例如,τ [i] = 1 E − 4(一个基点)。策略需要知道每个观察到的柱 t 的三个额外变量:

  1. 再平衡成本: 与配置再平衡相关的变量成本 {c [t]} 是 ,∀tB。我们不将 c [t] 嵌入到 K [t] 中,否则在配置再平衡时做空价差会产生虚假利润。在你的代码中,可以将 {c [t]} 视为(负)股息。

  2. 买卖价差: 购买或出售一个单位此虚拟 ETF 的成本 。当一个单位被买入或卖出时,策略必须收取这个成本 ,这相当于穿越此虚拟 ETF 的买卖价差。

  3. 交易量: 交易量 {v [t]} 由篮子中最不活跃的成员决定。让 v [i* , t]* 表示在柱 t 上由工具 i 交易的量。可交易的篮子单位数量是

交易成本函数不一定是线性的,基于上述信息的策略可以模拟这些非线性成本。得益于 ETF 技巧,我们可以将一篮子期货(或单一期货)建模为一个不到期的现金产品。

2.4.2 PCA 权重

感兴趣的读者可以在 López de Prado 和 Leinweber [2012] 以及 Bailey 和 López de Prado [2012] 中找到许多计算对冲权重的实用方法。为了完整性,让我们回顾一下推导上一节中使用的向量 {ω [t] } 的一种方法。考虑一个 IID 多元高斯过程,其特征由一个均值向量 μ(大小为 Nx1)和一个协方差矩阵 V(大小为 NxN)所描述。这个随机过程描述了一个不变的随机变量,如股票的收益、债券收益率的变化,或一组 N 个工具的期权波动率的变化。我们希望计算符合 V 主成分特定风险分布的分配向量 ω。

首先,我们进行谱分解,VW = W Λ,其中 W 中的列经过重新排序,使得 Λ 的对角线元素按降序排列。其次,给定一个分配向量 ω,我们可以计算投资组合的风险为 ,其中 β 表示 ω 在正交基上的投影。第三,Λ 是一个对角矩阵,因此 ,第 n 个成分的风险为 R [n] * = β ² [ n ] Λ [n* , n] σ ^(− 2) = [ W 'ω] ² [ n ] Λ [n , n] σ ^(− 2),且 R '1 [N] = 1,1 [N] 是一个 N 个 1 的向量。你可以将 { R [n] * } [n* = 1, …, N] 理解为在正交成分间风险的分布。

第四,我们希望计算向量 ω,以实现用户定义的风险分布 R。从之前的步骤可以得出, 表示在新的(正交)基中的分配。第五,旧基中的分配由 ω = W β 给出。重新缩放 ω 仅仅是重新缩放 σ,从而保持风险分布不变。图 2.2 说明了每个主成分对逆方差分配风险的贡献。几乎所有主成分都会贡献风险,包括那些方差最高的主成分(成分 1 和 2)。相比之下,对于 PCA 投资组合,只有方差最低的成分会贡献风险。

图 2.2 每个主成分对风险的贡献

Snippet 2.1 实现了此方法,其中用户定义的风险分布 R 通过参数 riskDist 传递(可选为 None)。如果 riskDist 为 None,代码将假设所有风险必须分配给具有最小特征值的主成分,权重将是最后一个特征向量重新缩放以匹配 σ (riskTarget)。

代码片段 2.1 从风险分布 R 中得到 PCA 权重

2.4.3 单一期货滚动

ETF 技巧可以处理单一期货合约的滚动,作为一腿价差的特例。然而,在处理单一期货合约时,更等效且直接的方法是形成累积滚动间隙的时间序列,并将该间隙系列从价格系列中扣除。代码片段 2.2 展示了这一逻辑的可能实现,使用从彭博社下载的 tick bar 系列并存储在 HDF5 表中。彭博社字段的含义如下:

  • FUT_CUR_GEN_TICKER:标识与该价格相关的合约。其值在每次滚动时发生变化。

  • PX_OPEN:与该 bar 相关的开盘价。

  • PX_LAST:与该 bar 相关的收盘价。

  • VWAP:与该 bar 相关的成交量加权平均价格。

函数rollGaps中的参数matchEnd决定期货系列是否应向前滚动(matchEnd=False)或向后滚动(matchEnd=True)。在向前滚动中,滚动系列开始时的价格与原始系列开始时的价格相匹配。在向后滚动中,滚动系列结束时的价格与原始系列结束时的价格相匹配。

代码片段 2.2 形成间隙系列,并从价格中扣除

滚动价格用于模拟损益(PnL)和投资组合的市场价值。然而,仍应使用原始价格来确定头寸规模和资本消耗。请记住,滚动价格确实可能变为负值,尤其是在期货合约在升水状态下出售时。要查看这一点,可以在一系列棉花#2 期货或天然气期货上运行代码片段 2.2。

通常,我们希望处理非负的滚动系列,在这种情况下,我们可以按照以下方式推导出$1 投资的价格系列: (1) 计算滚动期货价格的时间序列,(2) 计算收益(r),即滚动价格变化除以前的原始价格,以及 (3) 使用这些收益形成价格系列(即(1+r).cumprod())。代码片段 2.3 说明了这个逻辑。

代码片段 2.3 非负滚动价格系列

2.5 采样特征

到目前为止,我们已经学习如何从一组非结构化金融数据中生成一个连续、同质且结构化的数据集。虽然你可以尝试在这样的数据集上应用机器学习算法,但一般来说,这并不是一个好主意,原因有几个。首先,几个机器学习算法在样本量上扩展性较差(例如,支持向量机)。其次,机器学习算法在尝试从相关示例中学习时会实现最高的准确性。假设你希望预测下一个 5%的绝对回报是否会是正的(5%的上涨)或负的(5%的下跌)。在任何随机时间,这样的预测准确性都会很低。然而,如果我们要求分类器在特定催化条件后预测下一个 5%绝对回报的符号,我们更可能找到有用的特征,这将帮助我们实现更准确的预测。在本节中,我们讨论从条形图中抽样以生成具有相关训练示例的特征矩阵的方法。

2.5.1 减少的抽样

正如我们之前提到的,从结构化数据集中抽样特征的一个原因是减少用于拟合机器学习算法的数据量。这种操作也称为下采样。这通常通过以固定步长进行顺序抽样(线性空间抽样)或通过使用均匀分布随机抽样(均匀抽样)来完成。

线性空间抽样的主要优点是其简单性。缺点是步长是任意的,并且结果可能因种子条而异。均匀抽样通过在整个条形图集上均匀抽样来解决这些问题。尽管如此,这两种方法都受到批评,认为样本未必包含在预测能力或信息内容方面最相关观察值的子集。

2.5.2 基于事件的抽样

投资组合经理通常会在某些事件发生后下注,例如结构性突破(第十七章)、提取的信号(第十八章)或微观结构现象(第十九章)。这些事件可能与一些宏观经济统计数据的发布、波动率的激增、价差偏离其均衡水平等有关。我们可以将事件表征为重要,并让机器学习算法学习在这些情况下是否存在准确的预测函数。也许答案是否定的,在这种情况下,我们会重新定义什么构成一个事件,或尝试使用替代特征再次进行尝试。为了说明这一点,让我们讨论一种有用的基于事件的抽样方法。

2.5.2.1 CUSUM 滤波器

CUSUM 滤波器是一种质量控制方法,旨在检测所测量量的均值偏离目标值的变化。考虑来自局部平稳过程的独立同分布观察值{ y [t] } [t = 1, …, T]。我们定义累积和。

边界条件S [0] = 0 . 此过程将在满足S [t]h的第一个t上建议采取行动,某个阈值h(过滤器大小)。请注意,S [t] = 0,当y [t] ≤ E [t − 1] [ y [t] ] − S [t* − 1]时。这一零底线意味着我们将跳过一些向下偏差,否则这些偏差会使S [t]*为负。原因是,过滤器被设置为识别从任何重置水平零的向上偏差序列。特别是,当阈值被激活时

这一上升概念可以扩展到包括下降,形成对称的 CUSUM 过滤器:

Lam 和 Yam [1997]提出了一种投资策略,当相对于先前的高点或低点观察到绝对回报h时生成交替的买卖信号。这些作者证明,这种策略等同于 Fama 和 Blume [1966]研究的“过滤交易策略”。我们使用 CUSUM 过滤器的方式不同:我们仅在S [t]h时采样一根柱,届时S [t]被重置。代码片段 2.4 展示了对称 CUSUM 过滤器的实现,其中 E [t − 1] [ y [t] ] = y [t* − 1]*。

代码片段 2.4 对称 CUSUM 过滤器

函数getTEvents接收两个参数:我们希望过滤的原始时间序列(gRaw)和阈值h。CUSUM 过滤器的一个实际优点是,当gRaw在阈值水平附近徘徊时不会触发多个事件,这是一些流行市场信号(如布林带)所遭受的缺陷。gRaw需要完整的长度为h的运行才能触发事件。图 2.3 展示了 CUSUM 过滤器在价格序列上采样的情况。

图 2.3 CUSUM 对价格序列的采样

变量S [t]可以基于我们将在第 17-19 章讨论的任何特征,如结构性断裂统计、熵或市场微观结构测量。例如,我们可以在 SADF 明显偏离先前重置水平时声明一个事件(将在第十七章定义)。一旦我们获得这一事件驱动的柱子子集,我们将让机器学习算法判断这些事件的发生是否构成可采取的情报。

练习

  1. 在一系列 E-mini S&P 500 期货交易数据上:

    1. 形成 tick、成交量和美元柱。使用 ETF 技巧处理滚动问题。

    2. 每周计算由 tick、成交量和美元柱生成的柱数。绘制该柱数的时间序列。哪种柱类型产生了最稳定的每周计数?为什么?

    3. 计算三种柱类型的回报序列相关性。哪种柱方法具有最低的序列相关性?

    4. 将柱系列划分为每月子集。计算每种柱类型每个子集的收益方差。计算这些方差的方差。哪种方法表现出最小的方差?

    5. 对三种柱类型的收益应用 Jarque-Bera 正态性检验。哪种方法实现了最低的检验统计量?

  2. 在一系列 E-mini S&P 500 期货成交数据上,计算美元柱和美元不平衡柱。哪种柱类型表现出更大的序列相关性?为什么?

  3. 在 E-mini S&P 500 期货和 Eurostoxx 50 期货的美元柱序列上:

    1. 应用第 2.4.2 节计算 ETF 技巧使用的 向量。(提示:你需要在滚动日期的 EUR/USD 外汇值。)

    2. 推导 S&P 500/Eurostoxx 50 利差的时间序列。

    3. 通过 ADF 检验确认序列是平稳的。

  4. 形成 E-mini S&P 500 期货美元柱:

    1. 计算宽度为 5% 的布林带围绕滚动移动平均线。计算价格跨越布林带的次数(从带内到带外)。

    2. 现在使用 CUSUM 过滤器对这些柱进行采样,其中 {y [t]} 为收益,h = 0.05*。你得到了多少样本?

    3. 计算两个采样序列的滚动标准差。哪个序列的异方差性最小?这些结果的原因是什么?

  5. 使用练习 4 中的柱:

    1. 使用 CUSUM 过滤器对柱进行采样,其中 {y [t]} 为绝对收益,h = 0.05*。

    2. 计算采样柱的滚动标准差。

    3. 将此结果与练习 4 的结果进行比较。哪个程序产生了最小的异方差样本?为什么?

参考文献

  1. Ané, T. 和 H. Geman (2000):“订单流、交易时钟和资产收益的正态性。” 金融期刊,第 55 卷,第 2259–2284 页。

  2. Bailey, David H. 和 M. López de Prado (2012):“平衡篮子:一种新的交易和对冲风险的方法。” 投资策略期刊(风险期刊),第 1 卷,第 4 期(秋季),第 21–62 页。

  3. Clark, P. K. (1973):“一种具有有限方差的次级随机过程模型用于投机价格。” 计量经济学,第 41 卷,第 135–155 页。

  4. Easley, D., M. López de Prado 和 M. O'Hara (2011):“量能时钟:对高频范式的见解。” 投资组合管理期刊,第 37 卷,第 2 期,第 118–128 页。

  5. Easley, D., M. López de Prado 和 M. O'Hara (2012):“流动性毒性和高频世界中的流动性。” 金融研究评论,第 25 卷,第 5 期,第 1457–1493 页。

  6. Fama, E. 和 M. Blume (1966):“过滤规则和股市交易。” 商业期刊,第 40 卷,第 226–241 页。

  7. Kolanovic, M. 和 R. Krishnamachari (2017):“大数据和 AI 策略:机器学习和另类数据的投资方法。” 白皮书,JP 摩根,量化和衍生品策略。5 月 18 日。

  8. Lam, K. 和 H. Yam (1997):“金融市场技术交易的 CUSUM 技术。” 金融工程与日本市场,第 4 卷,第 257–274 页。

  9. López de Prado, M. 和 D. Leinweber (2012): “协整与子集相关对冲方法的进展。” 投资策略期刊(风险期刊) ,第 1 卷,第 2 期(春季),第 67–115 页。

  10. Mandelbrot, B. 和 M. Taylor (1967): “股票价格差异的分布。” 运筹学 ,第 15 卷,第 5 期,第 1057–1062 页。

第三章:标记

3.1 动机

在第二章中,我们讨论了如何从非结构化数据集中生成金融特征矩阵 X 。无监督学习算法可以从该特征矩阵 X 中学习模式,例如是否包含层次聚类。另一方面,有监督学习算法要求 X 中的行与标签或值 y 数组相关联,以便可以对未见特征样本进行这些标签或值的预测。在本章中,我们将讨论标记金融数据的方法。

3.2 固定时间范围方法

在金融领域,几乎所有的机器学习论文都使用固定时间范围方法对观察结果进行标记。该方法可以描述如下。考虑一个特征矩阵 X ,具有 I 行,{ X [i] } [i = 1, …, I] ,从某些以 t = 1, …, T 为索引的条形图中提取,其中 IT 。第二章第 2.5 节讨论了生成特征集 { X [i] } [i = 1, …, I] 的采样方法。观察 X [i] 被分配一个标签 y [i] ∈ { − 1, 0, 1},

其中 τ 是预定义的常量阈值,t [i* , 0]* 是 X [i] 发生后紧接着的条形图索引,t [i* , 0]* + ht [i* , 0]* 后第 h 个条形图的索引,而 是在条形图范围 h 内的价格回报,

因为文献几乎总是使用时间条形图,h 意味着一个固定时间范围。参考文献部分列出了多个机器学习研究,其中 Dixon 等人 [2016] 是这种标记方法的一个近期例子。尽管其流行,但在大多数情况下,有几个理由要避免这种方法。首先,正如我们在第二章中所看到的,时间条形图并不具有良好的统计性质。其次,无论观察到的波动性如何,都应用相同的阈值 τ 。假设 τ = 1 E − 2,有时我们将观察标记为 y [i] = 1,基于实现的条形图波动性 (例如,在夜间交易时段),有时为 (例如,在开盘时)。即使回报 是可预测且统计显著的,大多数标签将是 0。

换句话说,根据固定的时间柱阈值来标记观察是一个非常常见的错误。这里有几个更好的替代方案。首先,按照变化的阈值标记 ,该阈值是通过对收益的滚动指数加权标准差进行估算的。其次,使用成交量或美元柱,因为它们的波动率更接近恒定(同方差性)。但即使这两个改进也忽略了固定时间区间方法的一个关键缺陷:价格的路径。每个投资策略都有止损限制,无论是投资组合经理自设的,风险部门强制执行的,还是因保证金追缴而触发的。建立一种依赖于会被交易所强制平仓的头寸来获利的策略是极不现实的。几乎没有任何出版物在标记观察时考虑到这一点,这说明了当前投资文献的状态。

3.3 计算动态阈值

正如前一节所论述的,实际上我们希望设置的利润获取和止损限制是与下注风险相关的函数。否则,有时我们会目标过高( ),有时目标过低( ),考虑到当前的波动率。

片段 3.1 在日内估计点计算每日波动率,应用span0天的跨度到指数加权移动标准差。有关pandas.Series.ewm函数的详细信息,请参见 pandas 文档。

片段 3.1 每日波动率估计

我们可以使用该函数的输出在本章的其余部分设置默认的利润获取和止损限制。

3.4 三重障碍法

在这里,我将介绍一种我在文献中未找到的替代标记方法。如果你是一名投资专业人士,我想你会同意这更合理。我称之为三重障碍法,因为它根据接触的第一个障碍对观察进行标记,共有三个障碍。首先,我们设置两个水平障碍和一个垂直障碍。两个水平障碍由利润获取和止损限制定义,这些限制是估计波动率的动态函数(无论是实现的还是隐含的)。第三个障碍根据自持仓以来经过的柱数定义(到期限制)。如果首先触及上障碍,我们将观察标记为 1。如果首先触及下障碍,我们将观察标记为−1。如果首先触及垂直障碍,我们有两个选择:收益的符号,或 0。我个人更倾向于前者,因为这涉及在限制内实现利润或损失,但你应该探索在你的特定问题中 0 是否更有效。

你可能注意到三重障碍方法是路径依赖的。为了标记一个观察,我们必须考虑整个路径 [ t [i* , 0]* , t [i* , 0]* + h ],其中 h 定义了垂直障碍(到期限制)。我们将 t [i* , 1]* 表示为第一次障碍触碰的时间,与观察特征相关的回报为 。为了清晰起见,t [i* , 1] * ≤ t [i* , 0] * + h,并且水平障碍不一定是对称的。

片段 3.2 实现了三重障碍方法。该函数接收四个参数:

  • close : 一个价格的 pandas 系列。

  • events : 一个 pandas 数据框,包含列,

    • t1 : 垂直障碍的时间戳。当值为 np.nan 时,将没有垂直障碍。

    • trgt : 水平障碍的单位宽度。

  • ptSl : 一个包含两个非负浮点值的列表:

    • ptSl[0] : 乘以 trgt 设置上障碍宽度的因子。如果为 0,则不会有上障碍。

    • ptSl[1] : 乘以 trgt 设置下障碍宽度的因子。如果为 0,则不会有下障碍。

  • molecule : 一个包含将由单线程处理的事件索引子集的列表。其使用将在本章后面变得清晰。

片段 3.2 三重障碍标记方法

此函数的输出是一个包含每个障碍触碰时间戳(如果有)的 pandas 数据框。从之前的描述可以看出,该方法考虑了三个障碍可能被禁用的情况。我们用三元组 [ pt,sl,t1 ] 来表示障碍配置,其中 0 表示障碍不活跃,1 表示障碍活跃。可能的八种配置为:

  • 三个有用的配置:

  • 三个不太现实的配置:

  • 两个不合逻辑的配置:

    • [0,0,0]:没有障碍。该位置永远被锁定,并且未生成任何标签。

图 3.1 展示了三重障碍方法的两种替代配置。在左侧,配置为1,1,0,其中第一个触碰的障碍是下方的水平障碍。在右侧,配置为1,1,1,其中第一个触碰的障碍是垂直的。

图 3.1 三重障碍方法的两种替代配置

3.5 学习方向和大小

在本节中,我们将讨论如何标记示例,以便机器学习算法可以学习赌注的方向和大小。当我们没有基础模型来设置头寸的符号(多头或空头)时,我们对学习赌注的方向感兴趣。在这种情况下,我们无法区分获利了结障碍和止损障碍,因为这需要对方向的了解。学习方向意味着要么没有横向障碍,要么横向障碍必须是对称的。

片段 3.3 实现了函数 getEvents,该函数找到第一个障碍触及的时间。该函数接收以下参数:

  • close : 一个价格的 pandas 系列。

  • tEvents : 包含将为每个三重障碍播种的时间戳的 pandas 时间索引。这些是第二章第 2.5 节讨论的采样程序选定的时间戳。

  • ptSl : 一个非负浮点数,用于设置两个障碍的宽度。0 值表示相应的横向障碍(获利了结和/或止损)将被禁用。

  • t1 : 一个包含垂直障碍时间戳的 pandas 系列。当我们想禁用垂直障碍时传递 False

  • trgt : 一个表示绝对收益的 pandas 系列。

  • minRet : 进行三重障碍搜索所需的最低目标收益。

  • numThreads : 函数同时使用的线程数。

片段 3.3 获取第一次触及的时间

假设 I = 1 E 6 和 h = 1 E 3,那么在单个工具上评估的条件数量可高达十亿。许多机器学习任务计算上很昂贵,除非你熟悉多线程,而这就是其中之一。并行计算在这里发挥作用。第二十章讨论了一些我们将在整本书中使用的多进程函数。

函数 mpPandasObj 调用一个多进程引擎,这在第二十章中有深入解释。此时,你只需知道该函数将并行执行 applyPtSlOnT1。函数 applyPtSlOnT1 返回每个障碍被触及的时间戳(如果有的话)。然后,第一个触及的时间是 applyPtSlOnT1 返回的三个时间中最早的时间。因为我们必须学习赌注的方向,我们传递 ptSl = [ptSl, ptSl] 作为参数,并且我们任意将方向设置为始终为多头(横向障碍是对称的,因此方向与确定第一次触及的时间无关)。该函数的输出是一个包含以下列的 pandas 数据框:

  • t1 : 第一个障碍被触及的时间戳。

  • trgt : 用于生成横向障碍的目标。

代码片段 3.4 展示了定义垂直障碍的一种方法。对于 tEvents 中的每个索引,它会找到在 numDays 天数之后或立即之后的下一个价格柱的时间戳。这个垂直障碍可以作为可选参数 t1 传递给 getEvents

代码片段 3.4 添加垂直障碍

最后,我们可以使用代码片段 3.5 中定义的 getBins 函数对观察进行标记。参数是我们刚刚讨论的 events 数据框和 close pandas 价格序列。输出是一个包含以下列的数据框:

  • ret : 第一个触及障碍时实现的回报。

  • bin : 标签,{−1, 0, 1},作为结果符号的函数。该函数可以很容易地调整为将触及垂直障碍的事件标记为 0,这留作练习。

代码片段 3.5 侧面和大小的标记

3.6 元标记

假设你有一个模型来设置投注方向(做多或做空)。你只需要了解该投注的大小,包括没有投注(零大小)的可能性。这是实践者经常面临的情况。我们通常知道我们想买入还是卖出某种产品,唯一剩下的问题是我们应该在这种投注中冒多大风险。我们不希望机器学习算法学习方向,只希望告诉我们适当的大小。在这一点上,听到没有书籍或论文讨论这一常见问题可能不会让你感到惊讶。幸运的是,这种困境在这里结束。我称这个问题为元标记,因为我们想构建一个次级机器学习模型,学习如何使用一个主要的外生模型。

我们将对之前的代码进行一些调整,而不是编写一个全新的 getEvents 函数,以处理元标记。首先,我们接受一个新的 side 可选参数(默认值为 None),该参数包含由主模型决定的我们的投注方向。当 side 不是 None 时,函数理解元标记在起作用。其次,由于我们现在知道方向,我们可以有效地区分获利和平仓。水平障碍不需要对称,如第 3.5 节所述。参数 ptSl 是一个包含两个非负浮点值的列表,其中 ptSl[0] 是乘以 trgt 的因子,用于设置上障碍的宽度,而 ptSl[1] 是乘以 trgt 的因子,用于设置下障碍的宽度。当任一值为 0 时,相应的障碍被禁用。代码片段 3.6 实现了这些增强功能。

代码片段 3.6 扩展 **GETEVENTS** 以整合元标记

同样,我们需要扩展 getBins 函数,以便它处理元标记。代码片段 3.7 实现了必要的更改。

代码片段 3.7 扩展 **GETBINS** 以整合元标记

现在,out[‘bin’]中标签的可能值为{0,1},与之前的可行值{−1,0,1}不同。机器学习算法将被训练来决定是下注还是放弃,这是一种纯粹的二元预测。当预测标签为 1 时,我们可以利用这个二次预测的概率来推导下注的大小,其中位置的方向(符号)由主要模型设定。

3.7 如何使用元标签

二元分类问题在假阳性(类型 I 错误)和假阴性(类型 II 错误)之间存在权衡。一般来说,提高二元分类器的真正阳性率会倾向于提高其假阳性率。二元分类器的接收者操作特征(ROC)曲线衡量提高真正阳性率的成本,表现为接受更高假阳性率。

图 3.2 说明了所谓的“混淆矩阵”。在一组观察中,有一些项目表现出一种条件(正类,左矩形),而有些项目则没有表现出这种条件(负类,右矩形)。一个二元分类器预测某些项目表现出该条件(椭圆),其中 TP 区域包含真正的正类,TN 区域包含真正的负类。这导致了两种错误:假阳性(FP)和假阴性(FN)。“精确率”是 TP 区域与椭圆区域的比率。“召回率”是 TP 区域与左矩形区域的比率。这种召回率(即真正阳性率)是在分类问题的背景下,类似于假设检验中的“检验力”。“准确率”是 TP 和 TN 区域的总和除以总体项目(方形)。一般来说,降低 FP 区域的代价是增加 FN 区域,因为较高的精确率通常意味着较少的调用,因此召回率较低。尽管如此,仍然存在一种精确率和召回率的组合,可以最大化分类器的整体效率。F1 分数测量分类器的效率,作为精确率和召回率之间的调和平均值(更多内容见第十四章)。

图 3.2 “混淆矩阵”的可视化

元标签在你想要实现更高的 F1 分数时特别有用。首先,我们建立一个即使精确率不是特别高也能实现高召回率的模型。其次,我们通过对主要模型预测的正类应用元标签来修正低精确率。

元标签将通过过滤掉假阳性来提高你的 F1-score,其中大多数阳性已经被主要模型识别。换句话说,次要机器学习算法的作用是确定来自主要(外生)模型的阳性是真还是假。它并不是为了提供投注机会。它的目的是确定我们是采取行动还是放弃所呈现的机会。

元标签是你武器库中一个非常强大的工具,原因有四个。首先,机器学习算法常常被批评为黑箱(见第一章)。元标签允许你在白箱之上构建一个机器学习系统(如基于经济理论的基础模型)。将基础模型转化为机器学习模型的能力使得元标签对于“量化基础”公司特别有用。其次,当应用元标签时,过拟合的影响被限制,因为机器学习不会决定你下注的方向,只会决定大小。第三,通过将方向预测与大小预测分开,元标签能够实现复杂的策略结构。例如,驱动上涨的特征可能与驱动下跌的特征不同。在这种情况下,你可能想要专门开发一个基于主要模型买入推荐的长期头寸机器学习策略,以及一个基于完全不同主要模型卖出推荐的短期头寸机器学习策略。第四,在小额投注上实现高准确率而在大额投注上实现低准确率会毁了你。识别良好机会的同时,合理地确定其规模同样重要,因此开发一个专注于准确判断(规模)的机器学习算法是有意义的。我们将在第十章中重提这一第四点。根据我的经验,元标签机器学习模型能够提供比标准标签模型更稳健和可靠的结果。

3.8 量化基础方法

你可能在媒体上看到许多对冲基金正在采纳量化基础的方法。简单的谷歌搜索会显示报告,许多对冲基金,包括一些最传统的基金,正在投资数千万美元于旨在结合人类专业知识与定量方法的技术。事实证明,元标签正是这些人一直在等待的。让我们看看原因。

假设你有一系列特征,相信可以预测某些价格,只是不知道如何做。由于你没有模型来确定每次下注的方向,你需要学习方向和大小。你应用在第 3.5 节中学到的知识,并基于对称水平边界的三重障碍法生成一些标签。现在你准备在训练集上拟合你的算法,并在测试集上评估预测的准确性。或者,你可以这样做:

  1. 使用主要模型的预测,并生成元标签。请记住,在这种情况下,水平障碍不需要对称。

  2. 再次在相同的训练集上拟合你的模型,但这次使用你刚生成的元标签。

  3. 将第一个机器学习模型的“边”与第二个机器学习模型的“大小”结合起来。

你始终可以为任何主要模型添加一个元标签层,无论它是机器学习算法、计量经济方程、技术交易规则、基本分析等。这也包括仅基于人类直觉生成的预测。在这种情况下,元标签将帮助我们判断何时应追求或拒绝一个自由裁量基金经理的建议。这样的元标签机器学习算法使用的特征可以从市场信息到生物统计数据再到心理评估。例如,元标签机器学习算法可能会发现,当发生结构性变化时,自由裁量基金经理往往做出特别好的判断(第十七章),因为他们可能更快地理解市场机制的变化。相反,它可能会发现,由于睡眠不足、疲劳、体重变化等原因,压力下的基金经理往往做出不准确的预测。^(1) 许多职业要求定期进行心理考试,而机器学习元标签算法可能会发现这些分数也与评估我们对基金经理预测的信心程度相关。也许这些因素都不会影响自由裁量基金经理,他们的大脑独立于情感,像冷酷的计算机器一样运作。我猜这不是情况,因此元标签应成为每个自由裁量对冲基金的重要机器学习技术。在不久的将来,每个自由裁量对冲基金都将成为量化与基本结合的公司,元标签为它们提供了明确的转型路径。

3.9 删除不必要的标签

一些机器学习分类器在类别严重不平衡时表现不佳。在这种情况下,最好删除极为稀有的标签,专注于更常见的结果。片段 3.8 提供了一种递归删除与极稀有标签相关的观察值的过程。函数 dropLabels 递归消除与出现频率低于 minPct 的类相关的观察值,除非只剩下两个类。

片段 3.8 删除人口不足的标签

顺便提一下,您可能希望去掉不必要的标签的另一个原因是这个已知的 sklearn bug:github.com/scikit-learn/scikit-learn/issues/8566。这种 bug 是 sklearn 实现中非常基本假设的结果,解决它们远非易事。在这个特定实例中,错误源于 sklearn 选择使用标准 numpy 数组,而不是结构化数组或 pandas 对象。您在阅读本章时不太可能会有修复,或在不久的将来有修复。在后面的章节中,我们将研究通过构建您自己的类和扩展 sklearn 功能来规避这些实现错误的方法。

练习

  1. 为 E-mini S&P 500 期货形成美元条:

    1. 应用对称 CUSUM 过滤器(第二章,第 2.5.2.1 节),阈值为日收益率的标准差(片段 3.1)。

    2. 在一个 pandas 序列t1上使用片段 3.4,其中numDays = 1

    3. 在这些采样特征上,应用三重障碍法,其中ptSl = [1,1]t1是您在第 1.b 点创建的序列。

    4. 应用getBins生成标签。

  2. 从第 1 个练习中,使用片段 3.8 去掉稀有标签。

  3. 调整getBins函数(片段 3.5),以便在垂直障碍首先被触及时返回 0。

  4. 基于流行的技术分析指标(例如交叉移动平均)开发趋势跟随策略。对于每个观察值,模型建议一个方向,但不建议下注的大小。

    1. ptSl = [1,2]t1推导元标签,其中numDays = 1。将日标准差(由片段 3.1 计算得出)作为trgt

    2. 训练一个随机森林来决定是否进行交易。注意:决定是是否交易,{0,1},因为基础模型(交叉移动平均)已决定方向,{−1,1}。

  5. 基于布林带开发均值回归策略。对于每个观察值,模型建议一个方向,但不建议下注的大小。

    1. ptSl = [0,2]t1推导元标签,其中numDays = 1。将日标准差(由片段 3.1 计算得出)作为trgt

    2. 训练一个随机森林来决定是否进行交易。特征包括:波动性、序列相关性以及第 2 个练习中的交叉移动平均线。

    3. 主模型的预测准确率是多少(即,如果次级模型不过滤投注)?精确率、召回率和 F1 分数是多少?

    4. 次级模型的预测准确率是多少?精确率、召回率和 F1 分数是多少?

参考文献

  1. Ahmed, N., A. Atiya, N. Gayar, 和 H. El-Shishiny (2010): “机器学习模型在时间序列预测中的实证比较。” 计量经济学评论,第 29 卷,第 5–6 期,第 594–621 页。

  2. Ballings, M., D. van den Poel, N. Hespeels 和 R. Gryp (2015): “评估多种分类器用于股票价格方向预测。” 应用专家系统 ,第 42 卷,第 20 期,页码 7046–7056。

  3. Bontempi, G., S. Taieb 和 Y. Le Borgne (2012): “时间序列预测的机器学习策略。” 商业信息处理讲义 ,第 138 卷,第 1 期,页码 62–77。

  4. Booth, A., E. Gerding 和 F. McGroarty (2014): “使用性能加权随机森林和季节性进行自动交易。” 应用专家系统 ,第 41 卷,第 8 期,页码 3651–3661。

  5. Cao, L. 和 F. Tay (2001): “使用支持向量机进行金融预测。” 神经计算与应用 ,第 10 卷,第 2 期,页码 184–192。

  6. Cao, L., F. Tay 和 F. Hock (2003): “在金融时间序列预测中使用自适应参数的支持向量机。” IEEE 神经网络学报 ,第 14 卷,第 6 期,页码 1506–1518。

  7. Cervelló-Royo, R., F. Guijarro 和 K. Michniuk (2015): “基于模式识别和技术分析的股票市场交易规则:使用日内数据预测道琼斯工业平均指数。” 应用专家系统 ,第 42 卷,第 14 期,页码 5963–5975。

  8. Chang, P., C. Fan 和 J. Lin (2011): “使用案例基础模糊决策树发现金融时间序列数据的趋势。” 应用专家系统 ,第 38 卷,第 5 期,页码 6070–6080。

  9. Kuan, C. 和 L. Tung (1995): “使用前馈和递归神经网络进行汇率预测。” 应用计量经济学期刊 ,第 10 卷,第 4 期,页码 347–364。

  10. Creamer, G. 和 Y. Freund (2007): “自动交易的提升方法。” 交易期刊 ,第 2 卷,第 3 期,页码 84–96。

  11. Creamer, G. 和 Y. Freund (2010): “使用提升和专家加权的自动交易。” 量化金融 ,第 10 卷,第 4 期,页码 401–420。

  12. Creamer, G., Y. Ren, Y. Sakamoto 和 J. Nickerson (2016): “针对股票市场的文本分析算法:欧洲案例。” 投资期刊 ,第 25 卷,第 3 期,页码 105–116。

  13. Dixon, M., D. Klabjan 和 J. Bang (2016): “基于分类的金融市场预测使用深度神经网络。” 算法金融 ,即将出版 (2017)。可在 SSRN 获取: ssrn.com/abstract=2756331

  14. Dunis, C. 和 M. Williams (2002): “建模和交易欧元/美元汇率:神经网络模型表现得更好吗?” 衍生品与对冲基金期刊 ,第 8 卷,第 3 期,页码 211–239。

  15. Feuerriegel, S. 和 H. Prendinger (2016): “基于新闻的交易策略。” 决策支持系统 ,第 90 卷,页码 65–74。

  16. Hsu, S., J. Hsieh, T. Chih 和 K. Hsu (2009): “通过整合自组织映射和支持向量回归进行股票价格预测的两阶段架构。” 应用专家系统 ,第 36 卷,第 4 期,页码 7947–7951。

  17. Huang, W.、Y. Nakamori 和 S. Wang (2005): “使用支持向量机预测股市变动方向。” 计算机与运筹研究 , 第 32 卷, 第 10 期, 第 2513–2522 页。

  18. Kara, Y.、M. Boyacioglu 和 O. Baykan (2011): “使用人工神经网络和支持向量机预测股票价格指数变动的方向:以伊斯坦布尔证券交易所为例。” 专家系统与应用 , 第 38 卷, 第 5 期, 第 5311–5319 页。

  19. Kim, K. (2003): “使用支持向量机进行金融时间序列预测。” 神经计算 , 第 55 卷, 第 1 期, 第 307–319 页。

  20. Krauss, C.、X. Do 和 N. Huck (2017): “深度神经网络、梯度增强树、随机森林:对标普 500 的统计套利。” 欧洲运筹学杂志 , 第 259 卷, 第 2 期, 第 689–702 页。

  21. Laborda, R. 和 J. Laborda (2017): “树结构分类器能为投资者增值吗?” 金融研究快报 , 第 22 卷 (8 月), 第 211–226 页。

  22. Nakamura, E. (2005): “使用神经网络进行通货膨胀预测。” 经济学信函 , 第 86 卷, 第 3 期, 第 373–378 页。

  23. Olson, D. 和 C. Mossman (2003): “使用会计比率的加拿大股票收益的神经网络预测。” 国际预测杂志 , 第 19 卷, 第 3 期, 第 453–465 页。

  24. Patel, J.、S. Sha、P. Thakkar 和 K. Kotecha (2015): “使用趋势确定数据准备和机器学习技术预测股票及股票价格指数的变动。” 专家系统与应用 , 第 42 卷, 第 1 期, 第 259–268 页。

  25. Patel, J.、S. Sha、P. Thakkar 和 K. Kotecha (2015): “使用机器学习技术的融合预测股票市场指数。” 专家系统与应用 , 第 42 卷, 第 4 期, 第 2162–2172 页。

  26. Qin, Q.、Q. Wang、J. Li 和 S. Shuzhi (2013): “线性与非线性交易模型与梯度增强随机森林及其在新加坡股市的应用。” 智能学习系统与应用杂志 , 第 5 卷, 第 1 期, 第 1–10 页。

  27. Sorensen, E.、K. Miller 和 C. Ooi (2000): “股票选择的决策树方法。” 投资组合管理杂志 , 第 27 卷, 第 1 期, 第 42–52 页。

  28. Theofilatos, K.、S. Likothanassis 和 A. Karathanasopoulos (2012): “使用机器学习技术建模和交易欧元/美元汇率。” 工程、技术与应用科学研究 , 第 2 卷, 第 5 期, 第 269–272 页。

  29. Trafalis, T. 和 H. Ince (2000): “回归的支持向量机及其在金融预测中的应用。” 神经网络 , 第 6 卷, 第 1 期, 第 348–353 页。

  30. Trippi, R. 和 D. DeSieno (1992): “使用神经网络进行股票指数期货交易。” 投资组合管理杂志 , 第 19 卷, 第 1 期, 第 27–33 页。

  31. Tsai, C. 和 S. Wang (2009): “通过混合机器学习技术进行股票价格预测。” 国际工程师和计算机科学家多学科会议录 , 第 1 卷, 第 1 期, 第 755–760 页。

  32. Tsai, C., Y. Lin, D. Yen 和 Y. Chen (2011): “通过分类器集预测股票收益。” 应用软计算,第 11 卷,第 2 期,页 2452–2459。

  33. Wang, J. 和 S. Chan (2006): “使用双层偏差决策树发现股票市场交易规则。” 专家系统与应用,第 30 卷,第 4 期,页 605–611。

  34. Wang, Q., J. Li, Q. Qin 和 S. Ge (2011): “用于新加坡股票市场的线性、自适应和非线性交易模型,采用随机森林。” 第 9 届 IEEE 国际控制与自动化会议论文集,页 726–731。

  35. Wei, P. 和 N. Wang (2016): “维基百科与股票收益:维基百科使用模式有助于预测个别股票的走势。” 第 25 届国际互联网大会会议论文集,第 1 卷,页 591–594。

  36. bikowski, K. (2015): “使用体积加权支持向量机与步进测试和特征选择创建股票交易策略。” 专家系统与应用,第 42 卷,第 4 期,页 1797–1805。

  37. Zhang, G., B. Patuwo 和 M. Hu (1998): “使用人工神经网络进行预测:最新进展。” 国际预测杂志,第 14 卷,第 1 期,页 35–62。

  38. Zhu, M., D. Philpotts 和 M. Stevenson (2012): “基于树的模型在股票选择中的好处。” 资产管理杂志,第 13 卷,第 6 期,页 437–448。

  39. Zhu, M., D. Philpotts, R. Sparks 和 J. Stevenson, Maxwell (2011): “结合 CART 和逻辑回归的混合方法用于股票排名。” 投资组合管理杂志,第 38 卷,第 1 期,页 100–109。

备注

^(1)    你可能知道至少有一家大型对冲基金每天监测其研究分析师的情绪状态。

第四章:样本权重

4.1 动机

第三章介绍了几种标记金融观察的新方法。我们引入了两个新概念,三重障碍法和元标记法,并解释了它们在金融应用中的作用,包括量化投资策略。在本章中,您将学习如何使用样本权重来解决另一个在金融应用中普遍存在的问题,即观察并非由独立同分布(IID)过程生成。大多数机器学习文献基于 IID 假设,许多机器学习应用在金融中失败的原因之一是这些假设在金融时间序列的情况下不切实际。

4.2 重叠结果

在第三章中,我们给观察到的特征 X [i] 指定了一个标签 y [i],其中 y [i] 是发生在区间 [ t [i* , 0]* , t [i* , 1]* ] 的价格条的函数。当 t [i* , 1]* > t [j* , 0]* 且 i < j 时,y [i]y [j] 都将依赖于一个共同的收益 ,即在区间 [ t [j* , 0]* , min{ t [i* , 1]* , t [j* , 1]* } ] 上的收益。这意味着,标签系列 { y [i] } [i = 1, …, I] 在任意两个连续结果之间存在重叠时,均不满足独立同分布(IID)条件,∃ i | t [i* , 1]* > t [i* + 1, 0]* ..

假设我们通过将投注时间限制为 t [i* , 1]* ≤ t [i* + 1, 0]* 来规避这个问题。在这种情况下,没有重叠,因为每个特征的结果在下一个观察到的特征开始之前或开始时就已经确定。这将导致粗糙的模型,其中特征的采样频率将受到用于确定结果的时间范围的限制。一方面,如果我们希望研究持续一个月的结果,特征就必须以每月的频率进行采样。另一方面,如果我们将采样频率提高到每日,那么我们将被迫将结果的时间范围缩短为一天。此外,如果我们希望应用路径依赖的标签技术,比如三重障碍法,采样频率将从属于第一个障碍的触及。无论你做什么,将结果的时间范围限制以消除重叠都是一个糟糕的解决方案。我们必须允许 t [i* , 1]* > t [i* + 1, 0]*,这又让我们回到了之前描述的重叠结果的问题。

这种情况在金融应用中是典型的。大多数非金融的机器学习研究人员可以假设观察结果来自独立同分布的过程。例如,你可以从大量患者中提取血样并测量他们的胆固醇。当然,各种潜在的共同因素会影响胆固醇分布的均值和标准差,但样本仍然是独立的:每个受试者只有一个观察结果。假设你取这些血样,并且实验室里有人把每个试管的血液倒入右侧的九个试管中。也就是说,试管 10 包含患者 10 的血液,但也包含患者 1 到 9 的血液。试管 11 包含患者 11 的血液,但也包含患者 2 到 10 的血液,依此类推。现在你需要确定能够预测高胆固醇的特征(饮食、运动、年龄等),而无法确切知道每个患者的胆固醇水平。这正是我们在金融机器学习中面临的挑战,且额外的障碍在于溢出模式是非确定性的且未知的。金融与机器学习应用并不是一种即插即用的主题。任何告诉你相反的人都会浪费你的时间和金钱。

解决非 IID 标签问题有几种方法,本章将通过设计采样和加权方案来应对这一问题,以纠正重叠结果的不当影响。

4.3 并发标签的数量

当两个标签 y [i]y [j]t 时都是至少一个共同回报的函数时,它们是并发的。图像。重叠不需要是完美的,意味着两个标签跨越相同的时间区间。在这一部分,我们将计算给定回报 r [t* − 1, t]* 的标签数量。首先,对于每个时间点 t = 1, …, T,我们形成一个二进制数组,{1 [t , i]} [i = 1, …, I],其中 1 [t , i] ∈ {0, 1}。变量 1 [t , i] = 1 当且仅当 [t [i* , 0] * , t [i* , 1] ] 与 [t* − 1, t] 重叠,且 1 [t , i] = 0 否则。回想一下,标签的跨度 {[ t [i* , 0] * , t [i* , 1] ]} [i* = 1, …, I] 是由第三章中介绍的 t1 对象定义的。其次,我们计算在 t 时并发的标签数量。图像。代码片段 4.1 说明了此逻辑的实现。

代码片段 4.1 估计标签的唯一性

图像

4.4 标签的平均唯一性

在这一部分,我们将估计标签的唯一性(非重叠性),作为其生命周期内的平均唯一性。首先,标签 i 在时间 t 的唯一性为 u [t* , i]* = 1 [t , i] c ^(− 1) [t]。其次,标签 i 的平均唯一性是标签生命周期内 u [t* , i]* 的平均值。图像。这个平均唯一性也可以解释为事件生命周期内 c [t] 的调和平均的倒数。 图 4.1 绘制了从对象 t1 得出的唯一性值的直方图。代码片段 4.2 实现了此计算。

图像

图 4.1 唯一性值的直方图

代码片段 4.2 估计标签的平均唯一性

图像

请注意,我们再次使用了函数 mpPandasObj,它通过多处理加速计算(见第二十章)。计算与标签 i 相关的平均唯一性,图像,需要在未来时间 events['t1'] 可用的信息。这不是问题,因为图像 在训练集上结合标签信息使用,而不在测试集上使用。这些图像不用于预测标签,因此不存在信息泄漏。这个过程允许我们为每个观察到的特征分配一个在 0 到 1 之间的唯一性评分,基于非重叠结果。

4.5 装袋分类器和唯一性

在对I个项目进行I次有放回抽样后,未选择特定项目i的概率为(1 − I ^(− 1) ) ^(I)。随着样本量的增加,该概率收敛于渐近值。这意味着抽取的独特观察数量预计为

假设最大的不重叠结果数量为KI。根据同样的论点,在对I个项目进行I次有放回抽样后,未选择特定项目i的概率为(1 − K ^(− 1) ) ^(I)。随着样本量的增加,该概率可以近似为。这意味着抽取的独特观察数量预计为。这暗示着错误地假设独立同分布抽样会导致过采样。

在对具有的观察进行有放回抽样(自助法)时,袋内观察相互(1)冗余且(2)与袋外观察非常相似的可能性越来越高。抽样的冗余性使得自助法效率低下(见第六章)。例如,在随机森林的情况下,森林中的所有树实际上都是单一过拟合决策树的非常相似的副本。由于随机抽样使得袋外样本与袋内样本非常相似,袋外准确率将被极大夸大。我们将在第七章中讨论这个第二个问题,当时我们将研究非独立同分布观察下的交叉验证。此刻,让我们集中于第一个问题,即在观察中进行装袋,当

第一个解决方案是在执行自助法之前删除重叠结果。由于重叠并不完美,仅仅因为部分重叠而删除观察将导致信息的极大损失。我不建议您遵循这个解决方案。

第二个更好的解决方案是利用平均独特性,以减少包含冗余信息结果的不当影响。因此,我们可以仅抽取观察的一部分out['tW'].mean(),或者是其小倍数。在 sklearn 中,sklearn.ensemble.BaggingClassifier类接受一个参数max_samples,可以设置为max_samples=out['tW'].mean()。这样,我们确保袋内观察的抽样频率不会远高于其独特性。然而,随机森林并不提供该max_samples功能,解决方案是装袋大量决策树。我们将在第六章进一步讨论此解决方案。

4.5.1 顺序自助法

第三种更好的解决方案是执行顺序自助法,根据控制冗余的变化概率进行抽取。Rao 等人[1997]提出了在出现 K 个不同原始观察值之前进行有替换的顺序重抽样。尽管有趣,但他们的方案并不完全适用于我们的金融问题。在接下来的部分中,我们将介绍一种直接解决重叠结果问题的替代方法。

首先,从均匀分布中抽取一个观察值 X [i]iU [1, I],即抽取任何特定值 i 的概率最初为 δ ^((1)) [i] = I ^(− 1)。在第二次抽取中,我们希望减少抽取高度重叠结果的观察值 X [j] 的概率。请记住,自助法允许重复抽样,因此仍然可以再次抽取 X [i],但我们希望降低其可能性,因为 X [i] 和自身之间存在重叠(实际上是完全重叠)。我们将到目前为止的抽样序列表示为 φ,可能包括重复项。到现在为止,我们知道 φ ^((1)) = { i }。在时间 tj 的唯一性是 ,因为这是通过向现有的抽样序列 φ ^((1)) 添加替代 j 得到的唯一性。j 的平均唯一性是 j 生命周期内的平均 u ^((2)) [tj]。现在我们可以根据更新后的概率 {δ ^((2)) [j]} [j = 1, …, I] 进行第二次抽取,

其中 {δ ^((2)) [j]} [j = 1, .., I] 被缩放为加起来为 1, . 现在我们可以进行第二次抽取,更新 φ ^((2)) 并重新评估 {δ ^((3)) [j]} [j = 1, …, I]。该过程重复进行,直到进行 I 次抽取。这个顺序自助法方案的优点是仍然可能出现重叠(甚至重复),但可能性逐渐降低。顺序自助样本将比从标准自助法中抽取的样本更接近独立同分布(IID)。可以通过测量相对于标准自助法的 的增加来验证这一点。

4.5.2 顺序自助法的实现

片段 4.3 根据两个参数推导出一个指示矩阵:柱子的索引(barIx)和 pandas Series t1,我们在第三章中多次使用。提醒一下,t1的定义是一个包含特征观察时间的索引和一个包含标签确定时间的值数组。该函数的输出是一个二进制矩阵,指示哪些(价格)柱子影响每个观察的标签。

片段 4.3 构建指示矩阵

片段 4.4 返回每个观察特征的平均唯一性。输入是通过 getIndMatrix 构建的指示矩阵。

片段 4.4 计算平均唯一性

片段 4.5 为我们提供了通过顺序自助抽样的特征索引。输入是指示矩阵(indM)和一个可选的样本长度(sLength),其默认值为与indM中的行数相同的抽样次数。

片段 4.5 从顺序自助法返回样本

4.5.3 数值示例

考虑一组标签{ y [i] } [i = 1, 2, 3],其中标签y [1]是回报r [0, 3]的函数,标签y [2]是回报r [2, 4]的函数,标签y [3]是回报r [4, 6]的函数。结果的重叠由此指示矩阵{1 [t , i]}表征,

该程序以φ ^((0)) = ∅开始,概率均匀分布为,∀ i = 1, 2, 3 . 假设我们从{1, 2, 3}中随机抽取一个数字,选择了 2。在我们对{1, 2, 3}进行第二次抽样之前(请记住,自助抽样是带重复的),我们需要调整概率。迄今为止抽取的观察集为φ ^((1)) = {2}。第一个特征的平均独特性为,第二个特征为 . 第二次抽样的概率为。有两点值得注意:(1) 最低概率赋予首次抽样中被选中的特征,因为这将表现出最高的重叠;(2) 在φ ^((1))外的两个可能抽样中,较大的概率赋予δ ^((2)) [ 3 ],因为这是与φ ^((1))没有重叠的标签。假设第二次抽样选择了数字 3。我们留作练习更新第三次和最后一次抽样的概率δ ^((3))。片段 4.6 在此示例中对{1 [t , i]}指示矩阵进行顺序自助抽样。

片段 4.6 顺序自助法示例

4.5.4 蒙特卡洛实验

我们可以通过实验方法评估顺序自助算法的效率。片段 4.7 列出了为多个观察值numObsI)生成随机t1系列的函数。每个观察值是在从均匀分布中抽取的随机数下进行的,其边界为 0 和numBars,其中numBars是柱子的数量(T)。观察值跨度的柱子数量是通过从均匀分布中抽取边界为 0 和maxH的随机数来确定的。

片段 4.7 生成随机 T1 系列

片段 4.8 利用该随机t1系列推导出隐含的指示矩阵indM。然后,该矩阵经过两个程序。在第一个程序中,我们从标准自助法(带替换的随机抽样)中推导出平均独特性。在第二个程序中,我们通过应用顺序自助算法推导出平均独特性。结果以字典的形式报告。

片段 4.8 从标准和顺序自助法中得出的独特性

这些操作必须在大量迭代中重复进行。片段 4.9 使用第二十章讨论的多进程技术实现了这个蒙特卡罗实验。例如,使用 24 核服务器进行 1E6 次迭代的蒙特卡罗实验大约需要 6 小时,其中 numObs=10numBars=100maxH=5。如果不并行化,类似的蒙特卡罗实验将需要约 6 天。

片段 4.9 多线程蒙特卡罗

图 4.2 绘制了标准重采样样本(左)和顺序重采样样本(右)唯一性的直方图。标准方法的平均唯一性的中位数为 0.6,顺序方法的平均唯一性的中位数为 0.7。对均值差异的方差分析(ANOVA)测试返回的概率极小。从统计学角度来看,顺序重采样方法的样本在任何合理的置信水平下,其预期唯一性超过标准重采样方法。

图 4.2标准与顺序重采样的蒙特卡罗实验

4.6 回报归因

在前一节中,我们学习了一种将样本重采样得更接近 IID 的方法。在这一节中,我们将介绍一种为训练机器学习算法加权这些样本的方法。如果考虑到重叠结果与非重叠结果相等,重叠结果将具有不成比例的权重。同时,与大绝对回报相关的标签应比与微不足道的绝对回报相关的标签更重要。简而言之,我们需要通过唯一性和绝对回报的某种函数对观察进行加权。

当标签是回报符号的函数({−1, 1}用于标准标记或{0, 1}用于元标记)时,样本权重可以根据事件生命周期内归因回报的总和来定义,[ t [i* , 0]* , t [i* , 1]* ]。

因此 。我们已将这些权重缩放为加起来等于 I,因为库(包括 sklearn)通常假设算法参数的默认权重为 1。

该方法的 rationale 是我们希望将观察加权为可以唯一归因于它的绝对对数回报的函数。然而,如果存在“中性”(低于阈值的回报)情况,则该方法将无效。在这种情况下,应给较低回报分配较高的权重,而不是其倒数。“中性”情况是多余的,因为它可以通过低置信度的“−1”或“1”预测来隐含。这是我一般建议你放弃“中性”情况的几个原因之一。片段 4.10 实现了该方法。

片段 4.10 通过绝对回报归因确定样本权重

4.7 时间衰减

市场是自适应系统(Lo [2017])。随着市场的演变,旧例子相对于新例子而言相关性下降。因此,我们通常希望样本权重在新观察到来时衰减。设 为将乘以上一节中得出的样本权重的时间衰减因子。最终权重没有衰减,,所有其他权重将相对调整。让 c ∈ (−1., .1] 成为用户定义的参数,以决定衰减函数如下:对于 c ∈ [0, 1],则 d [1] = c,线性衰减;对于 c ∈ (−1, 0),则 ,在 d [x] = 0 之间线性衰减!。对于线性分段函数 d = max{0, a + bx},以下边界条件满足这些要求:

  1. 依赖于 c

    1. ,∀c ∈ [0, 1]

    2. ,∀c ∈ (−1, 0)

片段 4.11 实现了这种时间衰减因子。注意,时间并不意味着是按时间顺序的。在这个实现中,衰减是根据累计独特性进行的,,因为按时间顺序的衰减会在存在冗余观察时过快地降低权重。

片段 4.11 时间衰减因子的实现

值得讨论几个有趣的案例:

  • c = 1 表示没有时间衰减。

  • 0 < c < 1 表示权重随时间线性衰减,但每个观察仍然会得到严格正的权重,无论它有多老。

  • c = 0 意味着权重随着时间的推移线性收敛到零。

  • c < 0 意味着观察中最老的部分 cT 得到零权重(即,它们从记忆中被抹去)。

图 4.3 显示了在 c ∈ {1, .75, .5, 0, −.25, −.5} 的时间衰减因子应用后的衰减权重,out['w']*df。尽管不一定实用,但该过程允许生成随着时间变老而增加的权重,通过设置 c > 1。

图 4.3 分段线性时间衰减因子

4.8 类别权重

除了样本权重,应用类别权重通常也是有用的。类别权重是用于纠正欠代表标签的权重。这在分类问题中尤为重要,其中最重要的类别出现频率较低(King 和 Zeng [2001])。例如,假设你希望预测流动性危机,如 2010 年 5 月 6 日的闪电崩盘。这些事件相对于其间发生的数百万次观察来说是罕见的。除非我们为与这些罕见标签相关的样本分配更高的权重,否则机器学习算法将最大化最常见标签的准确性,而将闪电崩盘视为异常值而非罕见事件。

ML 库通常实现处理类权重的功能。例如,sklearn 会对 class[j] 的样本中的错误进行惩罚,j=1,…,J,权重为 class_weight[j] 而不是 1。因此,标签 j 的更高类权重将迫使算法在 j 上实现更高的准确性。当类权重不加总为 J 时,效果相当于改变分类器的正则化参数。

在金融应用中,分类算法的标准标签为 { − 1, 1},其中零(或中性)案例将由概率略高于 0.5 且低于某个中性阈值的预测暗示。没有理由偏向于一个类别的准确性,因此一个好的默认选择是将 class_weight='balanced'。这个选择重新加权观察,以模拟所有类别以相等频率出现。在包外分类器的上下文中,你可能想考虑参数 class_weight='balanced_subsample',这意味着 class_weight='balanced' 将应用于包内自举样本,而不是整个数据集。有关完整细节,查看实现 class_weight 的 sklearn 源代码是有帮助的。请注意这个报告的错误:github.com/scikit-learn/scikit-learn/issues/4324

练习

  1. 在第三章中,我们将第一次触及障碍的时间戳 pandas 系列表示为 t1,索引为观察的时间戳。这是 getEvents 函数的输出。

    1. 在从 E-mini S&P 500 期货的 tick 数据导出的美元条上计算 t1 系列。

    2. 应用函数 mpNumCoEvents 来计算每个时间点的重叠结果数量。

    3. 在主轴上绘制并发标签数量的时间序列,在次轴上绘制回报的指数加权移动标准差的时间序列。

    4. 生成并发标签数量(x 轴)与回报的指数加权移动标准差(y 轴)的散点图。你能体会到一种关系吗?

  2. 使用函数 mpSampleTW,计算每个标签的平均唯一性。这个时间序列的一阶序列相关性 AR(1) 是多少?它在统计上显著吗?为什么?

  3. 为包含 的金融数据集拟合随机森林。

    1. 什么是平均包外准确率?

    2. 在同一数据集上,k 折交叉验证(不打乱)的平均准确率是多少?

    3. 为什么包外准确率比交叉验证准确率高得多?哪个更正确/偏差更小?这种偏差的来源是什么?

  4. 修改第 4.7 节中的代码以应用指数时间衰减因子。

  5. 考虑到你已经对由趋势跟踪模型确定的事件应用了元标签。假设三分之二的标签为 0,三分之一的标签为 1。

    1. 如果在没有平衡类别权重的情况下拟合分类器,会发生什么?

    2. 标签 1 表示真正例,标签 0 表示假正例。通过应用平衡类别权重,我们迫使分类器更关注真正例,减少对假正例的关注。这有什么意义?

    3. 在应用平衡类别权重之前和之后,预测标签的分布是什么?

  6. 更新 4.5.3 节最后一次抽取的概率。

  7. 在 4.5.3 节中,假设在第二次抽取中再次选择了数字 2。第三次抽取的更新概率会是什么?

参考文献

  1. Rao, C.,P. Pathak 和 V. Koltchinskii (1997): “通过序贯重抽样进行自助法。” 统计规划与推断杂志 ,第 64 卷,第 2 期,第 257–281 页。

  2. King, G. 和 L. Zeng (2001): “稀有事件数据中的逻辑回归。” 工作论文,哈佛大学。可在 gking.harvard.edu/files/0s.pdf 获得。

  3. Lo, A. (2017): 自适应市场 ,第 1 版。普林斯顿大学出版社。

参考文献

样本加权是机器学习文献中的一个常见主题。然而,本章讨论的实际问题是投资应用的特征,相关的学术文献极为稀缺。以下是一些与本章讨论的一些问题间接相关的出版物。

  1. Efron, B. (1979): “自助法:对切片法的另一种看法。” 统计年鉴 ,第 7 卷,第 1–26 页。

  2. Efron, B. (1983): “估计预测规则的错误率:交叉验证的改进。” 美国统计协会杂志 ,第 78 卷,第 316–331 页。

  3. Bickel, P. 和 D. Freedman (1981): “自助法的一些渐近理论。” 统计年鉴 ,第 9 卷,第 1196–1217 页。

  4. Gine, E. 和 J. Zinn (1990): “引导一般经验度量。” 概率年鉴 ,第 18 卷,第 851–869 页。

  5. Hall, P. 和 E. Mammen (1994): “关于一般重抽样算法及其在分布估计中的表现。” 统计年鉴 ,第 24 卷,第 2011–2030 页。

  6. Mitra, S. 和 P. Pathak (1984): “简单随机抽样的性质。” 统计年鉴 ,第 12 卷,第 1536–1542 页。

  7. Pathak, P. (1964): “抽样理论中的充分性。” 数学统计年鉴 ,第 35 卷,第 795–808 页。

  8. Pathak, P. (1964): “在不等概率下的逆抽样。” 生物统计 ,第 51 卷,第 185–193 页。

  9. Praestgaard, J. 和 J. Wellner (1993): “一般经验过程的可交换加权自助法。” 概率年鉴 ,第 21 卷,第 2053–2086 页。

  10. Rao, C.,P. Pathak 和 V. Koltchinskii (1997): “通过序贯重抽样进行自助法。” 统计规划与推断杂志 ,第 64 卷,第 2 期,第 257–281 页。

第五章:分数差分特征

5.1 动机

已知,由于套利力量的影响,金融序列表现出低信噪比(洛佩斯·德·普拉多[2015])。更糟糕的是,标准平稳性变换,比如整数差分,进一步通过去除记忆降低了信号。价格序列具有记忆,因为每个值依赖于长期的历史水平。相比之下,像收益这样的整数差分序列具有记忆截止,意味着在有限的样本窗口后历史被完全忽视。一旦平稳性变换将数据中的所有记忆抹去,统计学家会 resort to 复杂的数学技术来提取剩余的信号。不出所料,在去记忆序列上应用这些复杂技术可能会导致错误发现。在本章中,我们介绍了一种数据变换方法,确保数据的平稳性,同时尽可能保留记忆。

5.2 平稳性与记忆的困境

在金融领域,发现非平稳时间序列是很常见的。导致这些序列非平稳的原因是存在记忆,即长期的历史水平影响序列的均值。为了进行推断分析,研究人员需要处理不变过程,比如价格的收益(或对数价格的变化)、收益变化或波动率变化。这些数据变换使序列平稳,但代价是从原始序列中去除了所有记忆(亚历山大[2001],第十一章)。虽然平稳性是推断分析的必要属性,但在信号处理时,我们通常并不希望完全消除所有记忆,因为这些记忆是模型预测能力的基础。例如,平衡(平稳)模型需要一定的记忆来评估价格过程偏离长期期望值的程度,以生成预测。困境在于,收益是平稳的,但没有记忆,而价格有记忆,但又是非平稳的。问题是:什么是使价格序列平稳的最小差分量,同时尽可能保留记忆?因此,我们希望推广收益的概念,以考虑保留部分记忆的平稳序列。在这个框架下,收益只是一种(在大多数情况下是次优的)价格变换,还有许多其他可能性。

协整方法的重要性部分在于它们能够对具有记忆的序列建模。但为什么零差分的特定情况会带来最佳结果?零差分与 1 步差分一样任意。这两者之间有一个广泛的区域(完全差分序列在一端,零差分序列在另一端),可以通过分数差分来探索,以便开发出高预测能力的机器学习模型。

监督学习算法通常要求特征是平稳的。原因在于我们需要将一个先前未见(未标记)的观察值映射到一组标记示例,并从中推断出该新观察值的标签。如果特征不平稳,我们就无法将新观察值映射到大量已知示例。然而,平稳性并不保证预测能力。平稳性是机器学习算法高性能的必要但不充分条件。问题在于,平稳性与记忆之间存在权衡。我们总是可以通过微分使序列更平稳,但这将以抹去部分记忆为代价,这将削弱机器学习算法的预测目的。在本章中,我们将研究解决这一困境的一种方法。

5.3 文献综述

几乎所有的金融时间序列文献都是基于通过整数变换使非平稳序列平稳的前提(参见汉密尔顿 [1994] 的例子)。这引出了两个问题:(1)为什么整数 1 微分(例如用于计算对数价格回报的微分)是最优的?(2)过度微分是否是文献在高效市场假说方面存在偏见的一个原因?

应用于预测时间序列分析的分数微分概念至少可以追溯到霍斯金 [1981]。在那篇论文中,通过允许微分的阶数取分数值,推广了一类 ARIMA 过程。这是有用的,因为分数微分过程表现出长期的持续性和反持续性,因此增强了与标准 ARIMA 方法相比的预测能力。在同一篇论文中,霍斯金指出:“除了格兰杰(1978)的简短提及,分数微分似乎以前在时间序列分析中并未被提及。”

在霍斯金的论文发表后,这一主题的文献出奇地稀少,总共只有九位作者撰写的八篇期刊文章:霍斯金、约汉森、尼尔森、麦金农、延森、琼斯、波皮尔、卡瓦利埃雷和泰勒。具体参考文献请见文后。大多数论文涉及技术问题,例如计算连续随机过程中的分数微分的快速算法(例如,延森和尼尔森 [2014])。

对随机过程进行微分是一项计算成本高昂的操作。在本章中,我们将采用一种实用的、替代的和新颖的方法来恢复平稳性:我们将将差分算子推广到非整数步。

5.4 方法

考虑反移位算子 B,应用于实值特征矩阵 { X [t] },其中 B ^(k) X [t] = X [t* − k],对于任何整数 k ≥ 0 . 例如,(1 − B ) ² = 1 − 2 B + B ²,其中 B ² X [t]* = X [t* − 2],因此 (1 − B ) ² X [t]* = X [t] − 2 X [t* − 1]* + X [t* − 2]*。注意 ,对于 n 为正整数。对于实数 d,二项级数。

在分数模型中,指数 d 可以是实数,具有以下形式的二项级数展开:

5.4.1 长期记忆

让我们看看一个实数(非整数)正 d 是如何保持记忆的。这一算术序列由一个点积组成。

带权重ω

和数值 X

d 是正整数时,,超出该点的内存被取消。例如,d = 1 用于计算回报,其中 ,且 ω = {1, −1, 0, 0, …}。

5.4.2 迭代估计

从权重序列 ω 中,我们可以看出对于 k = 0, …, ∞,当 ω [0] = 1 时,权重可以通过迭代生成:

图 5.1 绘制了用于计算每个分数差分序列值的权重序列。图例报告了生成每个序列所使用的 d 值,x 轴表示 k 值,y 轴显示 ω [k] 的值。例如,对于 d = 0,所有权重均为 0,只有 ω [0] = 1。这是差分序列与原始序列重合的情况。对于 d = 1,所有权重均为 0,只有 ω [0] = 1 和 ω [1] = −1。这是标准的一阶整数差分,用于推导对数价格回报。在这两种情况之间,所有 ω [0] = 1 之后的权重均为负且大于 −1。

图 5.1 ω [k](y 轴)随着 k 的增加(x 轴)。每条线与特定值的 d ∈ [0,1] 相关,增量为 0.1。

图 5.2 绘制了 d ∈ [1, 2] 的权重序列,增量为 0.1。当 d > 1 时,我们观察到 ω [1] < −1 和 ω [k] > 0,∀ k ≥ 2 .

图 5.2 ω [k](y 轴)随着 k 的增加(x 轴)。每条线与特定值的 d ∈ [1,2] 相关,增量为 0.1。

片段 5.1 列出了用于生成这些图表的代码。

片段 5.1 加权函数

5.4.3 收敛性

让我们考虑权重的收敛性。从上述结果可以看出,对于k > d,如果ω [k − 1] ≠ 0,则,而ω [k] = 0 则为其他情况。因此,权重渐近收敛到零,作为单位圆内因素的无限乘积。此外,对于正的dk < d + 1,我们有,这使得初始权重在符号上交替。对于非整数d,一旦kd + 1,若 int[d]为偶数,ω [k]将为负,反之则为正。总结一下,当 int[d]为偶数时,(从左收敛到零),而当 Int[d]为奇数时,(从右收敛到零)。在特殊情况下d ∈ (0, 1),这意味着−1 < ω [k] < 0,∀ k > 0 *。这种权重符号的交替对于使保持平稳是必要的,因为记忆随着时间的推移而减弱或被抵消。

5.5 实施

在本节中,我们将探讨两种替代的分数微分实现方法:标准的“扩展窗口”方法和我称之为“固定宽度窗口分数微分”(FFD)的新方法。

5.5.1 扩展窗口

让我们讨论如何在实践中进行分数微分的(有限)时间序列。假设有一个包含T个实际观察值的时间序列,{X [t]},t = 1, …, T。由于数据限制,分数微分值无法在无限权重序列上计算。例如,最后一个点将使用权重{ω [k]},k = 0, …, T − 1,而将使用权重{ω [k]},k = 0, …, Tl − 1。这意味着初始点与最终点的记忆量不同。对于每个l,我们可以确定相对权重损失。给定容忍水平τ ∈ [0, 1],我们可以确定值l ,使得。这个值l* 对应于权重损失超过可接受阈值的第一次结果,其中λ [t] > τ(例如,τ = 0.01)

从我们之前的讨论来看,依赖于{ω [k]}的收敛速度,而这又依赖于d ∈ [0, 1]。对于d = 1,ω [k] = 0,∀ k > 1,而λ [l] = 0,∀ l > 1,因此可以忽略。随着d → 0 ^+,l 增加,为了保持权重损失,需要丢弃更多初始的。 图 5.3 绘制了 E-mini S&P 500 期货的交易条,大小为 1E4,前移,分数微分,参数为(d* = .4,τ = 1)在上方,参数为(d = .4,τ = 1 E − 2)在下方。

图 5.3 在不控制体重损失的情况下的分数微分(顶部图)和在使用扩展窗口控制体重损失后的分数微分(底部图)

两个图中的负漂移是由于在扩展窗口时添加到初始观测值的负权重造成的。当我们不控制体重损失时,负漂移非常明显,以至于只有该趋势可见。然而,在控制体重损失后,右侧图中的负漂移相对温和,但仍然相当显著,因为值 是在扩展窗口上计算的。这个问题可以通过在代码片段 5.2 中实现的固定宽度窗口来纠正。

代码片段 5.2 标准分数微分(扩展窗口)

5.5.2 固定宽度窗口分数微分

或者,可以使用固定宽度窗口计算分数微分,也就是说,当权重的模(|ω [k] |)低于给定阈值(τ)时,丢弃权重 *。这相当于找到第一个 l *,使得 成立,并设置一个新变量

,对于 t = Tl * + 1, …, T。 图 5.4 绘制了 E-mini S&P 500 期货交易条的大小为 1E4,向前滚动,分数微分(d = .4, τ = 1 E − 5)。

图 5.4 在控制体重损失后,使用固定宽度窗口的分数微分

该过程的优点在于,在所有 的估计中使用相同的权重向量,从而避免了扩展窗口添加的权重所造成的负漂移。结果是一个无漂移的水平加噪声的组合,符合预期。由于记忆带来的偏斜度和超额峰度,分布不再是高斯分布,但它是平稳的。代码片段 5.3 展示了这个想法的实现。

代码片段 5.3 新的固定宽度窗口分数微分方法

5.6 最大记忆保留的平稳性

考虑一个序列 { X [t] } [t = 1, …, T] 。对该序列应用固定宽度窗口的分数差分 (FFD) 方法,我们可以计算出最小系数 d *,使得得到的分数差分序列 是平稳的。这个系数 d * 量化了需要去除的记忆量以实现平稳性。如果 已经是平稳的,则 d * = 0 *。如果 包含单位根,则 d * < 1 *。如果 表现出爆炸性行为(如在泡沫中),则 d * > 1 *。一个特别值得关注的情况是 0 < d * ≪ 1,当原始序列“轻微非平稳”时。在这种情况下,虽然需要进行差分,但完整的整数差分会移除过多的记忆(和预测能力)。

图 5.5 说明了这个概念。在右侧 y 轴上,它绘制了基于 E-mini S&P 500 期货对数价格计算的 ADF 统计量,使用 ETF 技巧(见第二章)向前滚动,降采样到每日频率,追溯到合同的起始时间。在 x 轴上,它显示了用于生成计算 ADF 统计量的序列的 d 值。原始序列的 ADF 统计量为 –0.3387,而收益序列的 ADF 统计量为 –46.9114。在 95% 的置信水平下,测试的临界值为 –2.8623。ADF 统计量在 d = 0.35 附近穿越了该阈值。左侧 y 轴绘制了原始序列( d = 0)与在不同 d 值下的差分序列之间的相关性。在 d = 0.35 时,相关性仍然非常高,为 0.995。这证实了本章介绍的程序在实现平稳性而不牺牲过多记忆方面是成功的。相比之下,原始序列与收益序列之间的相关性仅为 0.03,这表明标准整数差分几乎完全消除了序列的记忆。

图 5.5 ADF 统计量作为 d 的函数,基于 E-mini S&P 500 期货的对数价格。

几乎所有的金融论文都试图通过应用整数差分 d = 1 ≫ 0.35 来恢复平稳性,这意味着大多数研究过度差分了序列,也就是说,它们移除了比满足标准计量经济学假设所需的更多记忆。片段 5.4 列出了用于产生这些结果的代码。

片段 5.4 寻找通过 ADF 测试的最小 D

E-mini 期货的例子绝对不是例外。表 5.1 显示了在对 87 个全球最活跃期货合约的各种 d 值应用 FFD(d) 后的 ADF 统计量。在所有情况下,用于计算收益的标准 d = 1 表示过度差分。事实上,在所有情况下,d < 0.6 时都能实现平稳性。在某些情况下,如橙汁 (JO1 Comdty) 或活牛 (LC1 Comdty),根本不需要进行任何差分。

表 5.1 某些最活跃期货合约的 FFD( d ) 的 ADF 统计量

5.7 结论

总结来说,大多数计量经济学分析遵循两种范式之一:

  1. Box-Jenkins:收益是平稳的,但没有记忆。

  2. Engle-Granger:对数价格具有记忆,但它们是非平稳的。协整是使回归在非平稳序列上有效的技巧,从而保留记忆。然而,协整变量的数量是有限的,且协整向量 notoriously 不稳定。

相比之下,本章介绍的 FFD 方法表明,不需要放弃所有的记忆就可以获得平稳性。并且在与 ML 预测相关时,没有必要使用协整技巧。一旦你熟悉 FFD,它将使你能够在不放弃记忆(或预测能力)的情况下实现平稳性。

在实践中,我建议你尝试以下特征转换:首先,计算时间序列的累积和。这确保需要某种顺序的差分。第二,计算不同 d ∈ [0, 1] 的 FFD(d) 序列。第三,确定最小的 d 使得 FFD(d) 的 ADF 统计量的 p 值低于 5%。第四,将 FFD(d) 序列用作你的预测特征。

练习

  1. 从 IID 高斯随机过程中生成一个时间序列。这是一个没有记忆的平稳序列:

    1. 计算该序列的 ADF 统计量。p 值是多少?

    2. 计算观测值的累积和。这是一个没有记忆的非平稳序列。

      1. 这个累积序列的积分顺序是多少?

      2. 计算该序列的 ADF 统计量。p 值是多少?

    3. 对序列进行两次差分。这个过度差分序列的 p 值是多少?

  2. 生成一个遵循正弦函数的时间序列。这是一个具有记忆的平稳序列。

    1. 计算该序列的 ADF 统计量。p 值是多少?

    2. 将每个观测值都加上相同的正值。计算观测值的累积和。这是一个具有记忆的非平稳序列。

      1. 计算该序列的 ADF 统计量。p 值是多少?

      2. 应用扩展窗口 fracdiff,τ = 1E − 2. 在什么最小 d 值下,你会得到低于 5% 的 p 值?

      3. 应用 FFD,τ = 1E − 5. 在什么最小 d 值下,你会得到低于 5% 的 p 值?

  3. 取第 2.b 题中的系列:

    1. 将系列拟合到正弦函数上。R 平方值是多少?

    2. 应用 FFD(d = 1)。将系列拟合到正弦函数上。R 平方值是多少?

    3. 什么 d 值最大化 FFD(d) 上的 R 平方值?为什么?

  4. 取 E-mini S&P 500 期货的美元条形系列。使用代码 Snippet 5.3,对于某些 d ∈ [0, 2],计算 fracDiff_FFD(fracDiff_FFD(series,d),-d)。你得到了什么?为什么?

  5. 取 E-mini S&P 500 期货的美元条形系列。

    1. 形成一个新的系列作为对数价格的累积和。

    2. 应用 FFD,τ = 1E − 5. 确定新系列在什么最小 d ∈ [0, 2] 下是平稳的。

    3. 计算 fracdiff 系列与原始(未转换)系列的相关性。

    4. 对原始系列和 fracdiff 系列应用 Engel-Granger 协整检验。它们是协整的吗?为什么?

    5. 对 fracdiff 系列应用 Jarque-Bera 正态性检验。

  6. 取第 5 题中的 fracdiff 系列。

    1. 应用 CUSUM 滤波器(第二章),其中 h 是系列的两倍标准差。

    2. 使用过滤后的时间戳来抽样特征矩阵。将 fracdiff 值作为特征之一。

    3. 使用三重障碍法形成标签,设置为每日标准差的两倍的对称水平障碍,以及 5 天的垂直障碍。

    4. 拟合一个决策树的包袋分类器,其中:

      1. 观察到的特征使用第四章中的顺序方法进行自助抽样。

      2. 在每个自助抽样中,样本权重使用第四章中的技术确定。

参考文献

  1. Alexander, C. (2001): 市场模型 , 第 1 版。约翰·威利与儿子公司。

  2. Hamilton, J. (1994): 时间序列分析 , 第 1 版。普林斯顿大学出版社。

  3. Hosking, J. (1981): “分数差分。” 生物统计学 , 第 68 卷,第 1 期,页码 165–176。

  4. Jensen, A. 和 M. Nielsen (2014): “快速分数差分算法。” 时间序列分析杂志 , 第 35 卷,第 5 期,页码 428–436。

  5. López de Prado, M. (2015): “经验金融的未来。” 投资组合管理杂志 , 第 41 卷,第 4 期,页码 140–144. 可在 ssrn.com/abstract=2609734 获取。

参考书目

  1. Cavaliere, G., M. Nielsen 和 A. Taylor (2017): “具有未知形式异方差的分数时间序列模型的准最大似然估计和自助推断。” 计量经济学杂志 , 第 198 卷,第 1 期,页码 165–188。

  2. Johansen, S. 和 M. Nielsen (2012): “分数函数中心极限定理的必要矩条件。” 计量经济理论 , 第 28 卷,第 3 期,页码 671–679。

  3. Johansen, S. 和 M. Nielsen (2012): “分数协整向量自回归模型的似然推断。” 计量经济学 , 第 80 卷,第 6 期,页码 2267–2732。

  4. Johansen, S. 和 M. Nielsen (2016): “初始值在非平稳分数时间序列模型的条件最小二乘估计中的作用。” 计量经济理论 , 第 32 卷,第 5 期,页码 1095–1139。

  5. Jones, M., M. Nielsen 和 M. Popiel (2015): “经济投票与政治支持的分数协整 VAR 分析。” 加拿大经济学杂志,第 47 卷,第 4 期,页 1078–1130。

  6. Mackinnon, J. 和 M. Nielsen, M. (2014): “分数单位根和协整检验的数值分布函数。” 应用计量经济学杂志,第 29 卷,第 1 期,页 161–171。

第二部分:建模

  1. 第六章 集成方法

  2. 第七章 金融中的交叉验证

  3. 第八章 特征重要性

  4. 第九章 超参数调整与交叉验证

第六章:集成方法

6.1 动机

在这一章中,我们将讨论两种最流行的机器学习集成方法。^(1) 在参考文献和脚注中,您将找到介绍这些技术的书籍和文章。就像本书的其他部分一样,假设您已经使用过这些方法。本章的目的是解释是什么使它们有效,以及如何避免导致其在金融中误用的常见错误。

6.2 三种误差来源

机器学习模型通常会遭受三种错误:^(2)

  1. 偏差: 这种误差是由于不现实的假设造成的。当偏差高时,机器学习算法未能识别特征与结果之间的重要关系。在这种情况下,算法被称为“欠拟合”。

  2. 方差: 这种误差是由于对训练集中的小变化的敏感性造成的。当方差高时,算法已经对训练集进行了过拟合,因此即使是训练集的微小变化也会产生截然不同的预测。算法没有建模训练集中的一般模式,而是将噪声误认为信号。

  3. 噪声: 这种误差是由于观测值的方差造成的,例如不可预测的变化或测量误差。这是不可减少的误差,任何模型都无法解释。

考虑一个观察训练集 { x [i] } [i = 1, …, n] 和实际值结果 { y [i] } [i = 1, …, n]。假设存在一个函数 f [ x ],使得 y = f [ x ] + ϵ,其中 ϵ 是白噪声,且 E[ϵ [i] ] = 0 和 E[ϵ ² [i] ] = σ [ϵ] ²。我们希望估计最佳拟合 f [ x ] 的函数 ,以使得估计误差的方差 最小(均方误差不能为零,因为噪声由 σ ² [ ϵ ] 表示)。这个均方误差可以分解为

集成方法是一种结合了一组弱学习者的方法,所有学习者均基于相同的学习算法,以创建一个(更强的)学习者,该学习者的表现优于任何单个学习者。集成方法有助于减少偏差和/或方差。

6.3 自助聚合

自助聚合(袋装法)是减少预测方差的有效方法。其工作原理如下:首先,通过带替换的随机抽样生成 N 个训练数据集。其次,为每个训练集拟合 N 个估计器。这些估计器是相互独立拟合的,因此模型可以并行拟合。第三,集成预测是 N 个模型的个别预测的 简单 平均值。在分类变量的情况下,观察属于某个类别的概率由将该观察分类为该类别成员的估计器的比例给出(多数投票)。当基础估计器能够用预测概率进行预测时,袋装分类器可能会推导出概率的均值。

如果你使用 sklearn 的 BaggingClassifier 类来计算袋外准确率,你应该注意到这个错误:github.com/scikit-learn/scikit-learn/issues/8933。一种解决方法是将标签按整数顺序重命名。

6.3.1 方差减少

袋装法的主要优点是它降低了预测的方差,从而有助于解决过拟合问题。袋装预测的方差 (φ [i] [ c ]) 是袋装估计器数量 (N)、单个估计器预测的平均方差 ( ) 和它们预测之间的平均相关性 ( ) 的函数:

其中 σ [i , j] 是估计器 ij 的预测协方差; ;和

上面的方程表明,袋装法仅在 的范围内有效;当 时。序列自助抽样(第四章)的一个目标是生成尽可能独立的样本,从而减少 ,这应该降低袋装分类器的方差。图 6.1 绘制了袋装预测的标准差与 N ∈ [5, 30] 的关系, .

图 6.1 袋装预测的标准差

6.3.2 提高准确性

考虑一个通过对 N 个独立分类器进行多数投票来对 k 类进行预测的袋装分类器。我们可以将预测标记为 {0, 1},其中 1 表示正确预测。分类器的准确性是将预测标记为 1 的概率 p。平均而言,我们将获得 Np 个标记为 1 的预测,方差为 Np (1 − p)。当观察到预测的类别是最多被预测的类别时,多数投票会做出正确的预测。例如,当 N = 10 和 k = 3 时,当观察到类别 A 且投票结果为 [ A , B , C ] = [4, 3, 3] 时,袋装分类器做出了正确的预测。然而,当观察到类别 A 且投票结果为 [ A , B , C ] = [4, 1, 5] 时,袋装分类器做出了错误的预测。一个充分条件是这些标签的总和是 。一个必要(但不充分)条件是 ,其发生的概率为

这意味着对于一个足够大的 N,例如 ,那么 ,因此袋装分类器的准确性超过了个体分类器的平均准确性。片段 6.1 实现了此计算。

片段 6.1 袋装分类器的准确性

这是支持一般情况下袋装任何分类器的有力论据,前提是计算要求允许。然而,与提升方法不同,袋装方法无法改善差分类器的准确性:如果个体学习者是差分类器( ),多数投票仍然表现不佳(尽管方差较低)。 图 6.2 阐明了这些事实。因为实现 比实现 更容易,袋装方法在降低方差方面更有可能成功,而不是在降低偏差方面。

关于此主题的进一步分析,请参阅孔多塞的陪审团定理。尽管该定理是为了政治科学中的多数投票而推导的,但该定理所解决的问题与上述讨论有相似之处。

图 6.2 袋装分类器的准确性作为个体估计器的准确性 (P )、估计器数量 (N ) 和 k = 2 的函数

6.3.3 观察冗余

在第四章中,我们研究了为什么金融观察不能假设为独立同分布(IID)的原因。冗余观察对自助法有两个有害影响。首先,抽样替换的样本更有可能几乎相同,即使它们不共享相同的观察结果。这使得!,自助法不会降低方差,无论N。例如,如果每个时间点t的观察根据tt + 100之间的回报进行标记,我们应该每个袋装估计器抽样 1%的观察,而不是更多。第四章第 4.5 节推荐了三种替代解决方案,其中之一是在 sklearn 自助分类器类的实现中设置max_samples=out[‘tW’].mean()。另一种(更好的)解决方案是应用序贯自助法。

观察冗余的第二个有害影响是袋外准确性会被夸大。这是因为随机抽样替换会在训练集中放入与袋外样本非常相似的样本。在这种情况下,适当的分层 k 折交叉验证(在分区前不洗牌)将显示出测试集准确性远低于袋外估计值。因此,建议在使用该 sklearn 类时设置StratifiedKFold(n_splits=k, shuffle=False)来交叉验证自助分类器,并忽略袋外准确性结果。较低的数值k比较高的更为可取,因为过度分区会导致测试集样本与训练集样本过于相似。

6.4 随机森林

决策树被认为容易过拟合,这会增加预测的方差。^(3) 为了解决这个问题,随机森林(RF)方法被设计用来生成具有更低方差的集成预测。

随机森林与自助法(bagging)有一些相似之处,即在对数据的自助子集上独立训练个体估计器。与自助法的主要区别在于,随机森林引入了第二层随机性:在优化每个节点分裂时,仅评估随机属性子样本(不替换),目的是进一步去相关化估计器。

像自助法一样,随机森林在不发生过拟合的情况下降低预测方差(记住,只要!)。第二个优点是,随机森林评估特征的重要性,我们将在第八章深入讨论。第三个优点是,随机森林提供了袋外准确性估计,然而在金融应用中,它们可能被夸大(如第 6.3.3 节讨论的那样)。但是,像自助法一样,随机森林未必会表现出比单个决策树更低的偏差。

如果大量样本是冗余的(非独立同分布),仍然会发生过拟合:带替换的随机抽样将构建大量本质上相同的树( ),其中每棵决策树都是过拟合的(决策树臭名昭著的缺陷)。与袋装法不同,随机森林始终将自助样本的大小固定为与训练数据集大小相匹配。让我们回顾一下在 sklearn 中解决 RF 过拟合问题的方法。为了便于说明,我将引用 sklearn 的类;但是,这些解决方案可以应用于任何实现:

  1. 将参数max_features设置为较低值,以强制树之间产生差异。

  2. 提前停止:将正则化参数min_weight_fraction_leaf设置为足够大的值(例如 5%),以使袋外准确率收敛于样本外(k 折)准确率。

  3. DecisionTreeClassifier上使用BaggingClassifier,其中max_samples设置为样本之间的平均唯一性(avgU)。

    1. clf=DecisionTreeClassifier(criterion=‘entropy’,max_features=‘auto’,class_weight=‘balanced’)

    2. bc=BaggingClassifier(base_estimator=clf,n_estimators=1000,max_samples=avgU,max_features=1.)

  4. RandomForestClassifier上使用BaggingClassifier,其中max_samples设置为样本之间的平均唯一性(avgU)。

    1. clf=RandomForestClassifier(n_estimators=1,criterion=‘entropy’,bootstrap=False,class_weight=‘balanced_subsample’)

    2. bc=BaggingClassifier(base_estimator=clf,n_estimators=1000,max_samples=avgU,max_features=1.)

  5. 修改 RF 类以用顺序自助抽样替代标准自助抽样。

总结来说,片段 6.2 展示了使用不同类设置 RF 的三种替代方法。

片段 6.2 三种设置 RF 的方法

在拟合决策树时,特征空间朝着与轴对齐的方向旋转通常会减少树所需的层数。因此,我建议你在特征的主成分分析(PCA)上拟合随机森林(RF),这样可能会加速计算并减少一些过拟合(在第八章中会详细讨论)。此外,如第四章第 4.8 节所述,class_weight=‘balanced_subsample’将帮助你防止树错误分类少数类。

6.5 提升

Kearns 和 Valiant [1989] 是最早提出是否可以结合弱估计器以获得高准确度的研究者之一。随后,Schapire [1990]证明了这个问题的答案是肯定的,使用了我们今天称之为 boosting 的过程。一般来说,它的工作原理如下:首先,根据某些样本权重(初始化为均匀权重),通过随机抽样带回生成一个训练集。其次,使用该训练集拟合一个估计器。第三,如果单个估计器的准确度超过接受阈值(例如,二分类器中的 50%,使其表现优于随机),则保留该估计器,否则将其丢弃。第四,对误分类的观测值给予更多权重,而对正确分类的观测值给予较少权重。第五,重复前面的步骤,直到产生N个估计器。第六,集成预测是来自N个模型的个别预测的加权平均,其中权重由个别估计器的准确度决定。有许多 boosting 算法,其中 AdaBoost 是最受欢迎的算法之一(Geron [2017])。图 6.3 总结了标准 AdaBoost 实现的决策流程。

图 6.3 AdaBoost 决策流程

6.6 金融中的 Bagging 与 Boosting

从上述描述来看,boosting 与 bagging 有几个方面的显著不同:^(4)

  • 各个分类器是顺序拟合的。

  • 表现不佳的分类器会被淘汰。

  • 在每次迭代中,观测值的权重不同。

  • 集成预测是各个学习者的加权平均。

Boosting 的主要优势在于它能降低预测中的方差和偏差。然而,纠正偏差的代价是增加过拟合的风险。在金融应用中,可以认为 bagging 通常优于 boosting。Bagging 解决过拟合问题,而 boosting 则解决欠拟合问题。过拟合往往比欠拟合更令人担忧,因为在金融数据上对机器学习算法进行过拟合并不困难,原因是信噪比低。此外,bagging 可以并行处理,而 boosting 通常需要顺序运行。

6.7 可扩展性的 Bagging

众所周知,几种流行的机器学习算法在样本量增加时扩展性较差。支持向量机(SVM)就是一个典型的例子。如果你尝试在一百万个观测值上拟合 SVM,算法可能需要一段时间才能收敛。即使它已经收敛,也不能保证解是全局最优的,或者不是过拟合的。

一种实用的方法是构建一个袋装算法,其中基础估计器属于一种对样本大小扩展不佳的类别,比如支持向量机(SVM)。在定义该基础估计器时,我们将施加严格的早期停止条件。例如,在 sklearn 的 SVM 实现中,你可以为 max_iter 参数设置一个较低的值,比如 1E5 次迭代。默认值是 max_iter=-1,这告诉估计器在错误降到容忍水平之前继续进行迭代。或者,你可以通过参数 tol 提高容忍水平,默认值为 tol=1E-3。这两个参数中的任何一个都会强制早期停止。你可以用等效参数提前停止其他算法,如随机森林中的层数(max_depth)或到达叶子节点所需的输入样本总权重的最小加权比例(min_weight_fraction_leaf)。

鉴于袋装算法可以并行化,我们将一个大型顺序任务转化为多个同时运行的小任务。当然,早期停止会增加来自单个基础估计器的输出方差;然而,这种增加可以被与袋装算法相关的方差减少所抵消。通过添加更多独立的基础估计器,你可以控制这种减少。以这种方式使用袋装算法将使你在极大数据集上实现快速而稳健的估计。

练习

  1. 为什么袋装基于有放回的随机抽样?如果采样是无放回的,袋装是否仍会减少预测的方差?

  2. 假设你的训练集基于高度重叠的标签(即,低唯一性,如第四章所定义)。

    1. 这使得袋装算法容易过拟合,还是仅仅无效?为什么?

    2. 袋外准确率在金融应用中一般可靠吗?为什么?

  3. 构建一个估计器集成,其中基础估计器是决策树。

    1. 这个集成与随机森林有什么不同?

    2. 使用 sklearn,产生一个表现如随机森林的袋装分类器。你需要设置哪些参数,如何设置?

  4. 考虑随机森林、其组成树的数量以及所使用特征数量之间的关系:

    1. 你能设想在随机森林中所需的最小树木数量与所使用的特征数量之间的关系吗?

    2. 树的数量是否可能对于所使用的特征数量过少?

    3. 树的数量是否可能对于可用的观察数量过高?

  5. 袋外准确率与分层 k 折(带洗牌)交叉验证准确率有什么不同?

参考文献

  1. Geron, A. (2017): 动手学机器学习与 Scikit-Learn 和 TensorFlow: 构建智能系统的概念、工具和技术,第 1 版。O'Reilly Media。

  2. Kearns, M. 和 L. Valiant (1989): “关于学习布尔公式和有限自动机的密码学限制。” 见第 21 届年度 ACM 计算理论研讨会论文集,第 433–444 页,纽约。计算机协会。

  3. Schapire, R. (1990): “弱学习能力的强度。” 机器学习。Kluwer 学术出版社。第 5 卷第 2 期,第 197–227 页。

参考文献

  1. Gareth, J., D. Witten, T. Hastie 和 R. Tibshirani (2013): 统计学习导论:R 语言应用,第 1 版。Springer-Verlag。

  2. Hackeling, G. (2014): 掌握机器学习与 Scikit-Learn,第 1 版。Packt 出版。

  3. Hastie, T., R. Tibshirani 和 J. Friedman (2016): 统计学习的元素,第 2 版。Springer-Verlag。

  4. Hauck, T. (2014): Scikit-Learn 食谱,第 1 版。Packt 出版。

  5. Raschka, S. (2015): Python 机器学习,第 1 版。Packt 出版。

注释

^(1)    要了解集成方法的介绍,请访问:scikit-learn.org/stable/modules/ensemble.html.

^(2)    我通常不会引用维基百科,然而在这个主题上,用户可能会发现这篇文章中的一些插图很有用:en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff.

^(3)    要获得随机森林的直观解释,请访问以下链接:quantdare.com/random-forest-many-is-better-than-one/.

^(4)    要获取装袋与提升之间差异的视觉解释,请访问:quantdare.com/what-is-the-difference-between-bagging-and-boosting/.

第七章:金融中的交叉验证

7.1 动机

交叉验证(CV)的目的是确定机器学习算法的泛化误差,以防止过拟合。CV 在应用于金融问题时又是一个标准机器学习技术失效的例子。过拟合会发生,而 CV 无法检测到。实际上,CV 通过超参数调优会加剧过拟合。在本章中,我们将学习为什么标准 CV 在金融中失效,以及可以采取什么措施来解决这个问题。

7.2 交叉验证的目标

机器学习的一个目的在于学习数据的一般结构,以便我们能够对未来未知特征进行预测。当我们在与训练时使用的同一数据集上测试机器学习算法时,结果往往令人惊讶地出色。当机器学习算法以这种方式被滥用时,它们与文件有损压缩算法并无二致:它们可以极高保真度地总结数据,但却没有任何预测能力。

交叉验证将从 IID 过程中抽取的观察值划分为两个集合:训练 集和 测试 集。完整数据集中每个观察值仅属于一个集合。这是为了防止一个集合的信息泄漏到另一个集合中,因为那样会违背在未见数据上进行测试的目的。更多细节可以在参考文献部分列出的书籍和文章中找到。

有许多替代的交叉验证方案,其中最流行的之一是 k 折交叉验证。图 7.1 展示了 k 折交叉验证所执行的 k 次训练/测试划分,其中 k = 5。在该方案中:

  1. 数据集被划分为 k 个子集。

  2. 对于 i = 1,…,k

    1. 机器学习算法在不包括 i 的所有子集上进行训练。

    2. 拟合的机器学习算法在 i 上进行测试。

图 7.1 在 5 折交叉验证方案中的训练/测试划分

k 折交叉验证的结果是一个 kx1 的交叉验证性能指标数组。例如,在一个二元分类器中,如果交叉验证的准确率超过 1/2,则模型被认为学到了某些东西,因为那是我们抛一枚公平硬币所能达到的准确率。

在金融领域,交叉验证通常用于两种场景:模型开发(例如超参数调优)和回测。回测是一个复杂的主题,我们将在第 10 到 16 章中详细讨论。在本章中,我们将重点关注用于模型开发的交叉验证。

7.3 为什么 K 折交叉验证在金融中失败

到现在为止,你可能已经阅读了不少金融领域的论文,这些论文展示了 k 折交叉验证(k-fold CV)证据,表明某个机器学习算法表现良好。不幸的是,这些结果几乎可以肯定是错误的。k 折交叉验证在金融中的失败原因之一是观察值不能被假定为来自独立同分布(IID)过程。交叉验证失败的第二个原因是,在模型开发过程中测试集被多次使用,导致多重测试和选择偏差。我们将在第 11 到 13 章重新讨论这一第二个失败原因。暂时,我们只关注第一个失败原因。

当训练集包含也出现在测试集中的信息时,就会发生泄漏。考虑一个与重叠数据形成标签 Y 的序列相关特征 X

  • 由于序列相关性,X [t]X [t* + 1]* 。

  • 由于标签源自重叠的数据点,Y [t]Y [t* + 1]* 。

通过将 tt + 1 放置在不同的集合中,会导致信息泄漏。当分类器首次在 (X [t] , Y [t]) 上训练,然后根据观察到的 X [t* + 1]* 预测 E[Y [t* + 1]* | X [t* + 1]] 时,这个分类器更有可能实现 Y [t + 1]* = E[Y [t* + 1]* | X [t* + 1]*],即使 X 是一个无关特征。

如果 X 是预测特征,泄漏将增强已经有价值策略的表现。问题在于存在不相关特征的泄漏,这会导致虚假发现。至少有两种方法可以减少泄漏的可能性:

  1. 从训练集中删除任何观察 i,其中 Y [i] 是用于确定 Y [j] 的信息的函数,并且 j 属于测试集。

    1. 例如,Y [i]Y [j] 不应跨越重叠的时间段(见第四章关于样本独特性的讨论)。
  2. 避免对分类器的过拟合。这样,即使发生了一些泄漏,分类器也无法从中获利。使用:

    1. 提前停止基础估计器(见第六章)。

    2. 对分类器进行集成,同时控制对冗余样本的过采样,使得个体分类器尽可能多样化。

      1. max_samples 设置为平均独特性。

      2. 应用序贯自助法(第四章)。

考虑 X [i]X [j] 是基于重叠信息形成的情况,其中 i 属于训练集,j 属于测试集。这是信息泄漏的情况吗?不一定,只要 Y [i]Y [j] 是独立的。要发生泄漏,必须满足( X [i] , Y [i] )≈( X [j] , Y [j] ),而仅仅 X [i]X [j] 或甚至 Y [i]Y [j] 是不够的。

7.4 解决方案:清除 K-折 CV

减少泄漏的一种方法是从训练集中清除与测试集中标签时间重叠的所有观察。我称这个过程为“清除”。此外,由于金融特征通常包含表现出序列相关性的序列(如 ARMA 过程),我们应该从训练集中清除紧接着测试集中观察的观察。我称这个过程为“禁运”。

7.4.1 清除训练集

假设一个测试观察,其标签 Y [j] 是基于信息集 Φ [j] 决定的。为了防止前一节所述的泄漏类型,我们希望从训练集中清除任何标签 Y [i] 是基于信息集 Φ [i] 决定的观察,以便 Φ [i] ∩Φ [j] = ∅ *。

特别地,我们将确定两个观察值 ij 之间存在信息重叠,当 Y [i]Y [j] 同时发生时(参见第四章,第 4.3 节),这意味着两个标签依赖于至少一个共同的随机抽样。例如,考虑一个标签 Y [j],它是闭区间 t ∈ [ t [j* , 0]* , t [j* , 1]* ] 中观察值的函数,Y [j] = f [[ t [j* , 0]* , t [j* , 1]* ]](在符号使用上有些滥用)。例如,在三重障碍标记法的背景下(第三章),这意味着该标签是价格柱之间的回报符号,其索引为 t [j* , 0]* 和 t [j* , 1],即 。如果任一满足以下三条充分条件,标签 Y [i]* = f [[ t [i* , 0]* , t [i* , 1]* ]] 与 Y [j] 重叠:

  1. t [j* , 0]* ≤ t [i* , 0]* ≤ t [j* , 1]*

  2. t [j* , 0]* ≤ t [i* , 1]* ≤ t [j* , 1]*

  3. t [i* , 0]* ≤ t [j* , 0]* ≤ t [j* , 1]* ≤ t [i* , 1]*

片段 7.1 实现了从训练集中清理观察值。如果测试集是连续的,即在第一个和最后一个测试观察值之间没有训练观察值,则可以加速清理:对象 testTimes 可以是一个仅包含一个项目的 pandas 系列,跨越整个测试集。

片段 7.1 清理训练集中的观察值

当泄露发生时,仅通过增加 kT 来提高性能,其中 T 是柱的数量。原因是测试划分的数量越大,训练集中的重叠观察值数量就越多。在许多情况下,清理就足以防止泄露:随着 k 的增加,性能将得到改善,因为我们允许模型更频繁地重新校准。但超过某个值 k,性能将不再改善,这表明回测未能从泄露中获利。图 7.2 描绘了 k 折 CV 的一个划分。测试集被两个训练集包围,生成两个必须清理以防止泄露的重叠。

图 7.2 清理训练集中的重叠

7.4.2 禁运

对于无法完全防止所有泄漏的情况,我们可以在每个测试集之后对训练观察施加禁令。禁令不需要影响测试集之前的训练观察,因为训练标签Y [i] = f [[ t [i* , 0]* , t [i* , 1]* ]],其中 t [i* , 1]* < t [j* , 0](训练在测试开始之前结束),包含在测试时间t [j , 0]可用的信息。换句话说,我们只关注在测试后立即发生的训练标签Y [i]* = f [[ t [i* , 0]* , t [i* , 1]* ]],满足 t [j* , 1]* ≤ t [i* , 0]* ≤ t [j* , 1]* + h。我们可以通过在清除之前设置Y [j] = f [[ t [j* , 0]* , t [j* , 1]* + h ]]来实施这个禁令期h。一个小的值h ≈ .01 T 通常足以防止所有泄漏,可以通过测试性能是否不会随着kT而无限改善来确认。图 7.3 说明了在测试集之后立即禁令训练观察。代码片段 7.2 实现了禁令逻辑。

图 7.3 测试后训练观察的禁令

SNIPPET 7.2 训练观察的禁令

7.4.3 清除的 K-Fold 类

在前面的章节中,我们讨论了在标签重叠时如何生成训练/测试划分。这引入了清除和禁令的概念,特别是在模型开发的背景下。一般来说,每当我们生成训练/测试划分时,无论是用于超参数调整、回测还是性能评估,我们都需要清除和禁令重叠的训练观察。代码片段 7.3 扩展了 scikit-learn 的 KFold 类,以考虑测试信息泄漏到训练集的可能性。

SNIPPET 7.3 当观察重叠时的交叉验证类

7.5 Sklearn 交叉验证中的错误

你可能会认为,像交叉验证这样关键的东西应该在最流行的机器学习库之一中得到完美实现。不幸的是,情况并非如此,这也是你必须始终阅读所运行的所有代码的原因之一,也是开源的一个强有力的支持点。开源代码的许多优点之一是你可以验证所有内容并根据自己的需要进行调整。代码片段 7.4 解决了两个已知的 sklearn 错误:

  1. 评分函数不知道 classes_,这是由于 sklearn 依赖于 numpy 数组而不是 pandas 系列:github.com/scikit-learn/scikit-learn/issues/6231

  2. cross_val_score 将给出不同的结果,因为它将权重传递给拟合方法,而不传递给 log_loss 方法:github.com/scikit-learn/scikit-learn/issues/9144

SNIPPET 7.4 使用 **PURGEDKFOLD**

请理解,直到就这些错误达成一致、实施、测试和发布可能需要很长时间。在此之前,你应使用cvScore,并避免运行函数cross_val_score

练习

  1. 为什么在进行 k 折 CV 之前洗牌数据集在金融领域通常是个坏主意?洗牌的目的是什么?洗牌为什么会削弱 k 折 CV 在金融数据集中的目的?

  2. 取一对矩阵(Xy),表示观察到的特征和标签。这些可能是来自第三章练习的某个数据集。

    1. 从(Xy)的 RF 分类器进行 10 折 CV 中推导性能,不进行洗牌。

    2. 从(Xy)的 RF 进行 10 折 CV 中推导性能,进行洗牌。

    3. 为什么这两个结果如此不同?

    4. 洗牌如何泄露信息?

  3. 取你在练习 2 中使用的相同矩阵对(Xy)。

    1. 从(Xy)的 RF 进行 10 折排除 CV 中推导性能,保留 1%的禁运。

    2. 为什么性能更低?

    3. 为什么这个结果更现实?

  4. 本章我们集中讨论了 k 折交叉验证在金融应用中失败的一个原因,即测试集的一些信息泄露到训练集中。你能想到 CV 失败的第二个原因吗?

  5. 假设你尝试一千种相同投资策略的配置,并对每种配置进行 CV。由于运气原因,某些结果肯定会看起来很好。如果你只发布这些积极的结果,并隐藏其余部分,观众将无法推断这些结果是虚假积极结果,统计上的偶然现象。这种现象称为“选择偏差”。

    1. 你能想象一种防止这种情况的程序吗?

    2. 如果我们将数据集分成三个部分:训练集、验证集和测试集,会怎么样?验证集用于评估训练的参数,而测试集只在验证阶段选择的一种配置上运行。在什么情况下这个过程仍然失败?

    3. 避免选择偏差的关键是什么?

参考文献

  1. Bharat Rao, R., G. Fung, 和 R. Rosales (2008): “关于交叉验证的危险:实验评估。” IKM CKS 西门子医疗解决方案白皮书。可在 people.csail.mit.edu/romer/papers/CrossVal_SDM08.pdf 获取。

  2. Bishop, C. (1995):模式识别的神经网络,第一版。牛津大学出版社。

  3. Breiman, L. 和 P. Spector (1992): “回归中的子模型选择与评估:X-随机情况。” 加州大学伯克利分校统计系白皮书。可在 digitalassets.lib.berkeley.edu/sdtr/ucb/text/197.pdf 获取。

  4. Hastie, T., R. Tibshirani, 和 J. Friedman (2009):统计学习的要素,第一版。斯普林格。

  5. James, G., D. Witten, T. Hastie 和 R. Tibshirani (2013):统计学习导论,第 1 版。施普林格出版社。

  6. Kohavi, R. (1995): “交叉验证和自助法在准确性估计和模型选择中的研究。” 国际人工智能联合会议。可在web.cs.iastate.edu/∼jtian/cs573/Papers/Kohavi-IJCAI-95.pdf获取。

  7. Ripley, B. (1996):模式识别与神经网络,第 1 版。剑桥大学出版社。

第八章:特征重要性

8.1 动机

财务研究中最普遍的错误之一是拿一些数据,运行机器学习算法,对预测进行回测,然后重复这一过程,直到出现一个看起来不错的回测结果。学术期刊充斥着这种伪发现,甚至大型对冲基金也常常陷入这个陷阱。无论回测是否为前向行走的样本外测试,我们在同一数据上反复测试的事实都可能导致错误发现。这个方法论错误在统计学家中如此臭名昭著,以至于他们将其视为科学欺诈,美国统计协会在其伦理准则中对此发出警告(美国统计协会[2016],讨论 #4)。通常需要大约 20 次这样的迭代才能发现一个(错误的)投资策略,符合 5%的标准显著性水平(假阳性率)。在本章中,我们将探讨为何这种方法是浪费时间和金钱,以及特征重要性如何提供替代方案。

8.2 特征重要性的重要性

财务行业的一个显著特征是,许多经验丰富的投资组合经理(包括许多具有定量背景的人)并未意识到过度拟合回测是多么简单。如何正确进行回测并不是本章的主题;我们将在第 11 至 15 章中探讨这一极其重要的话题。本章的目标是解释在进行任何回测之前必须执行的分析之一。

假设你得到了一对矩阵(Xy),分别包含特定金融工具的特征和标签。我们可以在(Xy)上拟合一个分类器,并通过经过清除的 k 折交叉验证(CV)来评估泛化误差,如第七章所述。假设我们取得了良好的性能。下一个自然的问题是尝试理解哪些特征对该性能有贡献。也许我们可以添加一些增强分类器预测能力的特征。也许我们可以消除一些仅为系统添加噪声的特征。值得注意的是,理解特征重要性打开了所谓的黑箱。如果我们了解分类器所需的信息来源,我们就能洞察分类器识别的模式。这也是机器学习怀疑论者对黑箱论调过分强调的原因之一。是的,算法在黑箱中学习,没有我们指导这个过程(这就是机器学习的全部意义!),但这并不意味着我们不能(或不应该)查看算法所发现的内容。猎人不会盲目地吃掉他们聪明的狗为他们找回的一切,不是吗?

一旦我们找到了重要特征,我们可以通过进行多次实验来深入了解。 这些特征是否总是重要,还是仅在某些特定环境中重要?是什么导致了重要性的变化?这些转变可以预测吗?这些重要特征与其他相关金融工具相关吗?它们与其他资产类别相关吗?在所有金融工具中,最相关的特征是什么?在整个投资领域中,具有最高排名相关性的特征子集是什么?这是一种比愚蠢的回测周期更好的研究策略的方法。让我把这个格言作为我希望你从本书中学到的最关键的教训之一陈述:

片段 8.1 马科斯的回测第一法则—自行承担后果

“回测不是研究工具。特征重要性才是。”

马科斯·洛佩斯·德·普拉多 金融机器学习的进展(2018)

8.3 具有替代效应的特征重要性

我认为根据特征重要性方法是否受到替代效应的影响进行区分是有用的。在此背景下,当其他相关特征的存在降低了一个特征的估计重要性时,就会发生替代效应。替代效应是机器学习中类似于统计学和计量经济学文献所称的“多重共线性”的概念。解决线性替代效应的一种方法是对原始特征应用 PCA,然后对正交特征进行特征重要性分析。有关更多细节,请参阅 Belsley 等人[1980]、Goldberger [1991,第 245-253 页]和 Hill 等人[2001]。

8.3.1 平均减少杂质

平均降低杂质(MDI)是一种快速的、解释性的重要性(样本内,IS)方法,专门针对树基分类器,如 RF。在每棵决策树的每个节点,所选特征以减少杂质的方式划分其接收到的子集。因此,我们可以推导出每棵决策树中,整体杂质降低的多少可以归因于每个特征。考虑到我们有一片森林的树木,我们可以在所有估计器中平均这些值,并相应地对特征进行排名。有关详细描述,请参见 Louppe 等人 [2013]。在使用 MDI 时,有一些重要的考虑因素需要记住:

  1. 遮蔽效应发生在某些特征被树基分类器系统性忽略以偏向其他特征的情况下。为了避免这种情况,在使用 sklearn 的 RF 类时设置 max_features=int(1)。这样,每层只考虑一个随机特征。

    1. 每个特征都有机会(在某些随机树的某些随机层次中)减少杂质。

    2. 确保零重要性的特征不被平均,因为 0 的唯一原因是该特征没有被随机选择。将这些值替换为 np.nan

  2. 该过程显然是 IS。每个特征都会有一定的重要性,即使它们没有任何预测能力。

  3. MDI 不能推广到其他非树基分类器。

  4. 从构造上看,MDI 具有一个良好的特性,即特征重要性之和为 1,且每个特征的重要性介于 0 和 1 之间。

  5. 该方法没有解决相关特征存在时的替代效应。由于特征的可互换性,MDI 稀释了替代特征的重要性:两个相同特征的重要性将减半,因为它们被随机选择的概率相等。

  6. Strobl 等人 [2007] 实验证明 MDI 对某些预测变量存在偏见。White 和 Liu [1994] 认为,在单棵决策树的情况下,这种偏见是由于流行的杂质函数对类别数量较多的预测变量给予了不公平的优势。

Sklearn 的 RandomForest 类将 MDI 实现为默认的特征重要性评分。这一选择可能是因为能够以最低的计算成本实时计算 MDI。^(1) 片段 8.2 说明了 MDI 的实现,包含了前面提到的考虑因素。

片段 8.2 MDI 特征重要性

8.3.2 平均降低准确率

平均降低准确率(MDA)是一种缓慢的预测重要性(样本外,OOS)方法。首先,它拟合一个分类器;其次,根据某种性能评分(准确率、负对数损失等),推导出其样本外性能;第三,它逐列打乱特征矩阵(X),每次处理一列,在每列打乱后推导出样本外性能。特征的重要性是其列打乱造成的性能损失的函数。一些相关考虑包括:

  1. 此方法可以应用于任何分类器,而不仅限于树基分类器。

  2. MDA 并不限于准确率作为唯一的性能评分。例如,在元标签应用的背景下,我们可能更愿意用 F1 而不是准确率来评分分类器(参见第十四章,第 14.8 节的解释)。这也是一个更好的描述性名称应为“打乱重要性”的原因。当评分函数不对应于度量空间时,MDA 结果应作为排名使用。

  3. 与 MDI 一样,考虑到相关特征,该程序也易受到替代效应的影响。考虑到两个相同的特征,MDA 总是将一个视为冗余于另一个。不幸的是,MDA 会使这两个特征都显得完全无关,即使它们是至关重要的。

  4. 与 MDI 不同,MDA 可能会得出所有特征都不重要的结论。这是因为 MDA 基于 OOS 性能。

  5. 交叉验证必须被清理和封存,原因在第七章中已解释。

Snippet 8.3 实现了带样本权重的 MDA 特征重要性,采用清理过的 k 折交叉验证,并通过负对数损失或准确率进行评分。它将 MDA 重要性测量为改善的函数(从打乱特征到不打乱特征),相对于最大可能得分(负对数损失为 0,或准确率为 1)。请注意,在某些情况下,改善可能是负的,这意味着该特征实际上对 ML 算法的预测能力是有害的。

SNIPPET 8.3 MDA 特征重要性

8.4 没有替代效应的特征重要性

替代效应可能导致我们丢弃一些偶然冗余的重要特征。这在预测的背景下通常不是问题,但当我们试图理解、改进或简化模型时,可能会导致错误的结论。因此,以下单一特征重要性方法可以很好地补充 MDI 和 MDA。

8.4.1 单一特征重要性

单一特征重要性(SFI)是一种横截面预测重要性(样本外)方法。它计算每个特征单独的样本外性能评分。一些考虑事项:

  1. 此方法可以应用于任何分类器,而不仅限于树基分类器。

  2. SFI 并不限于准确率作为唯一的性能评分。

  3. 与 MDI 和 MDA 不同,此时没有替代效应,因为每次只考虑一个特征。

  4. 与 MDA 类似,它可以得出所有特征都不重要的结论,因为性能是通过 OOS CV 进行评估的。

SFI 的主要限制在于,具有两个特征的分类器的性能可能优于两个单特征分类器的集成。例如,(1) 特征 B 可能仅在与特征 A 组合时有用;或者 (2) 特征 B 可能在解释特征 A 的分裂时有用,即使特征 B 单独的表现并不准确。换句话说,联合效应和层次重要性在 SFI 中丧失了。一个替代方案是计算来自特征子集的 OOS 性能评分,但随着考虑的特征增多,该计算将变得难以处理。片段 8.4 演示了 SFI 方法的一个可能实现。关于函数 cvScore 的讨论可以在第七章中找到。

片段 8.4 SFI 的实现

8.4.2 正交特征

正如第 8.3 节所述,替代效应稀释了通过 MDI 测量的特征的重要性,并显著低估了通过 MDA 测量的特征的重要性。一个部分解决方案是在应用 MDI 和 MDA 之前对特征进行正交化。诸如主成分分析(PCA)这样的正交化程序不能完全消除所有替代效应,但至少应该减轻线性替代效应的影响。

考虑一个由平稳特征组成的矩阵 { X [t* , n]* },其中观测 t = 1, …, T,变量 n = 1, …, N。首先,我们计算标准化特征矩阵 Z,使得 Z [t* , n]* = σ ^(− 1) [n] ( X [t* , n]* − μ [n] ),其中 μ [n] 是 { X [t* , n]* } [t = 1, …, T] 的均值,σ [n] 是 { X [t* , n]* } [t = 1, …, T] 的标准差。其次,我们计算特征值 Λ 和特征向量 W,使得 Z ' ZW = W Λ,其中 Λ 是一个 NxN 的对角矩阵,主条目按降序排列,W 是一个 NxN 的正交归一化矩阵。第三,我们推导正交特征为 P = ZW。我们可以通过注意到 P ' P = W ' Z ' ZW = W ' W Λ W ' W = Λ 来验证特征的正交性。

Z 而不是 X 进行对角化,原因有二:(1)数据居中确保第一主成分在观测的主要方向上正确定位。这相当于在线性回归中添加截距;(2)重新缩放数据使 PCA 专注于解释相关性而非方差。如果不重新缩放,第一主成分将会被 X 中方差最大的列主导,我们将无法深入了解变量之间的结构或关系。

片段 8.5 计算解释至少 95% 方差的最小正交特征数量 Z

片段 8.5 正交特征的计算

除了解决替代效应外,使用正交特征还提供了两个额外的好处:(1)正交化还可以通过丢弃与小特征值相关的特征来减少特征矩阵X的维度。这通常加快机器学习算法的收敛速度;(2)分析是在设计用来解释数据结构的特征上进行的。

让我强调这一点。本书中一个普遍关注的问题是过拟合的风险。机器学习算法总会找到某种模式,即使该模式是统计上的偶然。你应该对任何方法(包括 MDI、MDA 和 SFI)所识别的重要特征保持怀疑态度。现在,假设你使用 PCA 得出了正交特征。你的 PCA 分析已经确定某些特征比其他特征更“主要”,而没有任何标签知识(无监督学习)。也就是说,PCA 在分类意义上排名特征时没有任何可能的过拟合。当你的 MDI、MDA 或 SFI 分析(使用标签信息)选择与 PCA 作为主要特征所选相同的特征(忽略标签信息)时,这构成了确认性证据,表明机器学习算法识别的模式并非完全过拟合。如果特征完全随机,PCA 排名将与特征重要性排名没有任何对应关系。图 8.1 显示了与特征相关的特征值(x 轴)与特征 MDI(y 轴)配对的散点图。皮尔逊相关系数为 0.8491(p 值低于 1E-150),证明 PCA 识别了有信息的特征并在没有过拟合的情况下正确排名。

图 8.1 特征值(x 轴)和 MDI 水平(y 轴)在对数-对数尺度上的散点图

我发现计算特征重要性与其相关特征值(或等价地,其逆 PCA 排名)之间的加权肯德尔τ非常有用。这个值越接近 1,PCA 排名与特征重要性排名之间的一致性就越强。偏好加权肯德尔τ而不是标准肯德尔的一个理由是,我们希望优先考虑最重要特征之间的排名一致性。我们并不太关心无关(可能噪声)特征之间的排名一致性。图 8.1 中的样本的双曲加权肯德尔τ为 0.8206。

片段 8.6 展示了如何使用 Scipy 计算这种相关性。在这个例子中,按重要性降序排列特征给我们一个非常接近升序列表的 PCA 排名序列。由于weightedtau函数对较高值赋予更高权重,我们在逆 PCA 排名pcRank**-1上计算相关性。得到的加权肯德尔τ相对较高,为 0.8133。

SNIPPET 8.6 加权肯德尔 tau 计算特征重要性与逆主成分分析排名之间的关系

8.5 并行与堆叠特征重要性

至少有两种研究特征重要性的方法。首先,对于投资宇宙中的每个证券 ii = 1, …, I),我们形成一个数据集(X [i]y [i]),并并行推导特征重要性。例如,设λ [i , j , k]为特征 j 在标准 k 下对工具 i 的重要性。然后,我们可以汇总整个宇宙中的所有结果,以推导特征 j 在标准 k 下的综合重要性Λ [j , k]。在各种工具中重要的特征更可能与潜在现象相关,特别是当这些特征重要性在标准之间表现出高排名相关性时。深入研究使这些特征具有预测能力的理论机制可能是值得的。这种方法的主要优点是计算速度快,因为可以并行处理。缺点是,由于替代效应,重要特征可能会在工具之间交换其排名,从而增加估计的λ [i , j , k] 的方差。如果我们在足够大的投资宇宙中平均λ [i , j , k],则这一缺点相对较小。

第二种选择是我称之为“特征堆叠”。它包括将所有数据集 堆叠成一个单一的组合数据集(Xy),其中 是对 X [i*] * 的变换实例(例如,在滚动窗口上标准化)。这种变换的目的是确保一些分布同质性,。在这种方法下,分类器必须同时学习哪些特征在所有工具中更重要,就好像整个投资宇宙实际上是一个单一工具。特征堆叠有一些优点:(1)分类器将在比并行化(第一种)方法使用的更大数据集上进行训练;(2)重要性是直接推导的,不需要加权方案来组合结果;(3)结论更具普遍性,且不易受异常值或过拟合的影响;(4)由于重要性分数不在工具间平均,替代效应不会抑制这些分数。

我通常更倾向于特征堆叠,不仅用于特征重要性,而且在分类器可以在一组工具上进行拟合时,包括用于模型预测的目的。这减少了对特定工具或小数据集过拟合估计量的可能性。堆叠的主要缺点是可能消耗大量内存和资源,但这正是对 HPC 技术有良好知识的地方(第 20–22 章)。

8.6 与合成数据的实验

在本节中,我们将测试这些特征重要性方法如何对合成数据做出响应。我们将生成一个由三种特征组成的数据集 (X, y):

  1. 信息性:这些是用于确定标签的特征。

  2. 冗余:这些是信息性特征的随机线性组合。它们会引起替代效应。

  3. 噪声:这些是对确定观测标签没有影响的特征。

片段 8.7 显示了如何生成一个包含 40 个特征的合成数据集,其中 10 个是信息性特征,10 个是冗余特征,20 个是噪声特征,基于 10,000 个观测值。有关 sklearn 如何生成合成数据集的详细信息,请访问:scikit-learn.org/stable/modules/generated/sklearn.datasets.make_classification.html

片段 8.7 创建合成数据集

鉴于我们确切知道每个特征属于哪个类别,我们可以评估这三种特征重要性方法是否按设计执行。现在我们需要一个可以对同一数据集进行各项分析的函数。片段 8.8 实现了这一点,使用袋装决策树作为默认分类器(第六章)。

片段 8.8 调用任何方法的特征重要性

最后,我们需要一个主函数来调用所有组件,从数据生成到特征重要性分析,再到输出的收集和处理。这些任务由片段 8.9 执行。

片段 8.9 调用所有组件

对于审美有要求的用户,片段 8.10 提供了一个不错的布局来绘制特征重要性图。

片段 8.10 特征重要性绘图函数

图 8.2 显示了 MDI 的结果。对于每个特征,水平条表示所有决策树的平均 MDI 值,水平线是该平均值的标准差。由于 MDI 重要性加起来为 1,如果所有特征同样重要,则每个重要性值将为 1/40。垂直虚线标记了 1/40 的阈值,区分了特征的重要性是否超过了不可区分特征所期望的水平。如你所见,MDI 在将所有信息性和冗余特征置于红色虚线之上方面表现非常好,唯一例外的是 R_5,略微未能入选。替代效应使得一些信息性或冗余特征的排名优于其他特征,这一点是预期之中的。

图 8.2 在合成数据集上计算的 MDI 特征重要性

图 8.3 显示 MDA 也表现良好。结果与 MDI 的结果一致,即所有信息量大的和冗余的特征排名都优于噪声特征,R_6 除外,可能是由于替代效应。MDA 的一个不太积极的方面是均值的标准差稍高,虽然通过将清理后的 k 折交叉验证中的分区数量从 10 增加到 100(在没有并行化的情况下计算时间增加 10 倍)可以解决这一问题。

图 8.3 在合成数据集上计算的 MDA 特征重要性

图 8.4 显示 SFI 的表现也不错;然而,几个重要特征的排名低于噪声 (I_6, I_2, I_9, I_1, I_3, R_5),可能是由于联合效应。

标签是特征组合的函数,独立预测它们会错过联合效应。不过,SFI 作为 MDI 和 MDA 的补充是有用的,正是因为这两种分析受不同问题的影响。

图 8.4 在合成数据集上计算的 SFI 特征重要性

练习

  1. 使用第 8.6 节中提供的代码:

    1. 生成数据集 (X , y )。

    2. X 应用 PCA 转换,记作

    3. 上计算 MDI、MDA 和 SFI 特征重要性,其中基准估计器为 RF。

    4. 这三种方法在重要特征上是否一致?为什么?

  2. 从练习 1 中生成新数据集 ,其中 X 的特征联合。

    1. 上计算 MDI、MDA 和 SFI 特征重要性,其中基准估计器为 RF。

    2. 这三种方法在重要特征上是否一致?为什么?

  3. 从练习 2 中获取结果:

    1. 根据每种方法删除最重要的特征,得到特征矩阵

    2. 上计算 MDI、MDA 和 SFI 特征重要性,其中基准估计器为 RF。

    3. 相比于练习 2 的结果,你是否注意到重要特征排名的显著变化?

  4. 使用第 8.6 节中提供的代码:

    1. 生成一个包含 1E6 个观察值的数据集 (X , y ),其中 5 个特征是信息量大的,5 个是冗余的,10 个是噪声。

    2. 将 (X , y ) 拆分为 10 个数据集 {(X [i] , y [i] )} [i = 1, …, 10],每个包含 1E5 个观察值。

    3. 在每个 10 个数据集 {(X [i] , y [i] )} [i = 1, …, 10] 上计算并行化特征重要性(第 8.5 节)。

    4. 在组合数据集 (X , y ) 上计算堆叠特征重要性。

    5. 两者之间的差异是什么?哪一个更可靠?

  5. 重复第 1–4 题中的所有 MDI 计算,但这次允许掩蔽效应。这意味着,不要在代码片段 8.2 中设置max_features=int(1)。结果因这一变化而有何不同?为什么?

参考文献

  1. 美国统计协会 (2016): “统计实践的伦理指南。”美国统计协会职业伦理委员会(四月)。可在www.amstat.org/asa/files/pdfs/EthicalGuidelines.pdf获取。

  2. Belsley, D., E. Kuh, 和 R. Welsch (1980): 回归诊断:识别影响数据和共线性来源,第 1 版。约翰·威利父子公司。

  3. Goldberger, A. (1991): 计量经济学课程。哈佛大学出版社,第 1 版。

  4. Hill, R. 和 L. Adkins (2001): “共线性。”见 Baltagi, Badi H. 理论计量经济学的伴侣,第 1 版。Blackwell,页码 256–278。

  5. Louppe, G., L. Wehenkel, A. Sutera, 和 P. Geurts (2013): “理解随机树森林中的变量重要性。”第 26 届国际神经信息处理系统会议论文集,页码 431–439。

  6. Strobl, C., A. Boulesteix, A. Zeileis, 和 T. Hothorn (2007): “随机森林变量重要性度量中的偏差:插图、来源和解决方案。” BMC 生物信息学,第 8 卷,第 25 期,页码 1–11。

  7. White, A. 和 W. Liu (1994): “技术说明:决策树归纳中基于信息的度量的偏差。” 机器学习,第 15 卷,第 3 期,页码 321–329。

注意

^(1)     blog.datadive.net/selecting-good-features-part-iii-random-forests/ .

第九章:交叉验证下的超参数调优

9.1 动机

超参数调优是拟合机器学习算法的重要步骤。如果这一步没有做好,算法可能会过拟合,实际表现会令人失望。机器学习文献特别关注对任何调优超参数进行交叉验证。正如我们在第七章中看到的,金融领域的交叉验证(CV)是一个特别困难的问题,其他领域的解决方案可能会失败。在本章中,我们将讨论如何使用清除的 k 折 CV 方法进行超参数调优。参考文献部分列出了提出可能在特定问题中有用的替代方法的研究。

9.2 网格搜索交叉验证

网格搜索交叉验证根据用户定义的得分函数对最大化 CV 性能的参数组合进行彻底搜索。当我们对数据的底层结构了解不多时,这是一种合理的初步方法。Scikit-learn 在GridSearchCV函数中实现了这一逻辑,该函数接受 CV 生成器作为参数。由于第七章中解释的原因,我们需要传递PurgedKFold类(代码片段 7.3),以防止GridSearchCV对泄漏信息过拟合 ML 估计器。

代码片段 9.1 使用清除的 K 折交叉验证的网格搜索

代码片段 9.1 列出了函数clfHyperFit,该函数实现了清除的GridSearchCV。参数fit_params可用于传递sample_weight,而param_grid包含将组合成网格的值。此外,该函数允许对调优的估计器进行集成。对估计器进行集成通常是个好主意,原因在第六章中已解释,上述函数包含了为此目的的逻辑。

我建议你在元标签应用的上下文中使用scoring=‘f1’,原因如下。假设样本中有大量负面(即,标签为‘0’)案例。一个将所有案例预测为负面的分类器将获得高‘accuracy’‘neg_log_loss’,尽管它并未从特征中学习如何区分案例。实际上,这种模型的召回率为零,精确度未定义(见第三章第 3.7 节)。‘f1’分数通过从精确度和召回率的角度评分分类器来纠正这种性能膨胀(见第十四章第 14.8 节)。

对于其他(非元标签)应用,使用‘accuracy’‘neg_log_loss’是可以的,因为我们对所有案例的预测都同样感兴趣。请注意,对案例的重新标记对‘accuracy’‘neg_log_loss’没有影响,但会对‘f1’产生影响。

此示例很好地引入了 sklearn 的Pipelines的一个限制:它们的拟合方法不期望sample_weight参数,而是期望一个带关键字的fit_params参数。这是一个已在 GitHub 上报告的错误;不过,修复可能需要一些时间,因为这涉及到重写和测试大量功能。在那之前,可以自由使用代码片段 9.2 中的解决方法。它创建了一个新类,称为MyPipeline,该类继承了 sklearn 的Pipeline中的所有方法。它用一个新的方法覆盖继承的fit方法,该方法处理参数sample_weight,然后重定向到父类。

代码片段 9.2 增强型管道类

如果你不熟悉扩展类的这种技术,建议阅读这个入门的 Stackoverflow 文章:stackoverflow.com/questions/ 576169/understanding-python-super-with-init-methods

9.3 随机搜索交叉验证

对于参数数量较多的机器学习算法,网格搜索交叉验证 (CV) 变得计算上不可行。在这种情况下,一个具有良好统计特性的替代方案是从一个分布中抽样每个参数(Begstra 等人 [2011, 2012])。这有两个好处:首先,我们可以控制搜索的组合数量,而不考虑问题的维度(相当于计算预算)。其次,性能上相对无关的参数不会显著增加我们的搜索时间,这与网格搜索 CV 的情况相反。

与其编写一个新的函数来处理 RandomizedSearchCV,不如扩展代码片段 9.1,加入一个选项。一个可能的实现是代码片段 9.3。

代码片段 9.3 使用清除 K 折交叉验证的随机搜索

9.3.1 对数均匀分布

一些机器学习算法通常仅接受非负超参数。这就是一些非常流行的参数的情况,例如 SVC 分类器中的 C 和 RBF 核中的 gamma。^(1) 我们可以从一个界定在 0 和某个大值(例如 100)的均匀分布中抽取随机数。这意味着 99% 的值预计会大于 1。这并不一定是探索非线性响应参数的可行区域的最有效方法。例如,SVC 对于将 C 从 0.01 增加到 1 的反应与将 C 从 1 增加到 100 的反应是一样的。^(2) 因此,从 U [0, 100](均匀)分布中抽样 C 将是低效的。在这种情况下,似乎从对数分布均匀抽取值更为有效。我称之为“对数均匀分布”,由于在文献中找不到这个定义,我必须对其进行恰当的定义。

随机变量 xa > 0 和 b > a 之间遵循对数均匀分布,当且仅当 log [ x ] ∼ U [log [ a ], log [ b ]]。该分布的累积分布函数 (CDF) 为:

从中,我们得出一个 PDF:

图 9.1 测试 logUniform_gen 类的结果

请注意,CDF 对对数的底数是不变的,因为!,对任何底数 c 都是如此,因此随机变量不是 c 的函数。Snippet 9.4 在 scipy.stats 中实现(并测试)了一个随机变量,其中 [ a , b ] = [1 E − 3, 1 E 3],因此 log [ x ] ∼ U [log [1 E − 3], log [1 E 3]]。 图 9.1 显示了样本在对数尺度上的均匀性。

SNIPPET 9.4 THE **LOGUNIFORM_GEN** CLASS

9.4 评分与超参数调优

片段 9.1 和 9.3 为元标签应用设置了 scoring=‘f1’。对于其他应用,它们设置了 scoring=neg_log_loss`` 而不是标准的 scoring=‘accuracy’。尽管准确度有更直观的解释,我建议你在调整投资策略的超参数时使用 neg_log_loss。让我解释一下我的理由。

假设你的机器学习投资策略预测你应该以高概率购买某个证券。你将根据策略的信心进入一个较大的多头头寸。如果预测是错误的,而市场反而下跌,你将会损失很多钱。然而,准确度对高概率的错误买入预测和低概率的错误买入预测一视同仁。此外,准确度可以用低概率的命中来弥补高概率的漏掉。

投资策略通过以高信心预测正确标签而获利。低信心的良好预测所带来的收益不足以弥补高信心的错误预测带来的损失。因此,准确度无法真实反映分类器的性能。相反,日志损失 ^(3)(也称交叉熵损失)计算分类器在给定真实标签时的对数似然,考虑了预测的概率。日志损失可以如下估计:

其中

  • p [n* , k]* 是与标签 k 的预测 n 相关的概率。

  • Y 是一个 1-of-K 的二元指示矩阵,当观察 n 被分配标签 k(从 K 个可能标签中)时,y [n* , k]* = 1,否则为 0。

假设分类器预测两个 1,其中真实标签分别为 1 和 0。第一个预测是命中,第二个预测是漏掉,因此准确度为 50%。图 9.2 绘制了这些预测来自于概率范围 [0.5, 0.9] 时的交叉熵损失。可以观察到在图的右侧,由于高概率的漏掉,日志损失很大,尽管所有情况下的准确度都是 50%。

图 9.2 日志损失与命中和漏掉的预测概率的关系

偏好交叉熵损失而不是准确度的第二个原因是,交叉验证通过应用样本权重来评估分类器(见第七章,第 7.5 节)。正如您在第四章中回忆的那样,观察权重是根据观察的绝对收益确定的。这意味着,样本加权的交叉熵损失在 PNL(市值损益)计算中估计了分类器的表现:它使用正确的标签来表示方向,概率来表示头寸规模,样本权重来表示观察的收益/结果。这是金融应用中超参数调整的正确机器学习性能指标,而不是准确度。

当我们使用对数损失作为评分统计时,通常更喜欢改变其符号,因此称之为“负对数损失 . ”。这种变化的原因是出于美观,基于直觉:高的负对数损失值优于低的负对数损失值,这与准确度类似。在使用neg_log_loss时,请记住这个 sklearn 的 bug:github.com/scikit-learn/scikit-learn/issues/9144。为了规避此 bug,您应该使用第七章中介绍的cvScore函数。

练习

  1. 使用第八章中的getTestData函数,形成一个包含 10,000 个观测值和 10 个特征的合成数据集,其中 5 个是信息性特征,5 个是噪声特征。

    1. 在 10 折交叉验证中使用GridSearchCV来寻找具有 RBF 内核的 SVC 的Cgamma最优超参数,其中param_grid = {'C':[1E-2,1E-1,1,10,100],'gamma':[1E-2,1E-1,1,10,100]},评分函数为neg_log_loss

    2. 网格中有多少个节点?

    3. 找到最优解决方案花了多少次拟合?

    4. 找到这个解决方案花了多长时间?

    5. 如何访问最优结果?

    6. 最优参数组合的 CV 评分是多少?

    7. 如何将样本权重传递给 SVC?

  2. 使用练习 1 中的相同数据集,

    1. 在 10 折交叉验证中使用RandomizedSearchCV来寻找具有 RBF 内核的 SVC 的Cgamma最优超参数,其中param_distributions = {C:logUniform(a = 1E-2,b = 1E2),gamma:logUniform(a = 1E-2,b = 1E2)},n_iter = 25,评分函数为neg_log_loss

    2. 找到这个解决方案花了多长时间?

    3. 最优参数组合是否与练习 1 中找到的类似?

    4. 最优参数组合的 CV 评分是多少?与练习 1 中的 CV 评分相比如何?

  3. 来自练习 1,

    1. 计算从 1.a 中得出的样本内预测的夏普比率(有关夏普比率的定义,请参见第十四章)。

    2. 重复 1.a,这次使用accuracy作为评分函数。计算由超参数调整得出的样本内预测。

    3. 哪种评分方法导致更高的(样本内)夏普比率?

  4. 来自练习 2,

    1. 计算从 2.a 中得出的样本内预测的夏普比率。

    2. 重复第 2.a 点,这次用 accuracy 作为评分函数。计算基于超调参数的样本内预测。

    3. 什么评分方法会导致更高的(样本内)Sharpe 比率?

  5. 阅读日志损失的定义,L [Y , P]。

    1. 为什么评分函数 neg_log_loss 被定义为负日志损失,− L [Y , P]?

    2. 最大化日志损失而不是负日志损失的结果会是什么?

  6. 考虑一种投资策略,无论预测的置信度如何,均等地调整赌注。在这种情况下,进行超参数调整时,更合适的评分函数是准确性还是交叉熵损失?

参考文献

  1. Bergstra, J., R. Bardenet, Y. Bengio 和 B. Kegl (2011): “超参数优化的算法。” 神经信息处理系统进展,页 2546–2554。

  2. Bergstra, J. 和 Y. Bengio (2012): “超参数优化的随机搜索。” 机器学习研究期刊,第 13 卷,页 281–305。

参考书目

  1. Chapelle, O., V. Vapnik, O. Bousquet 和 S. Mukherjee (2002): “为支持向量机选择多个参数。” 机器学习,第 46 卷,页 131–159。

  2. Chuong, B., C. Foo 和 A. Ng (2008): “对数线性模型的高效多超参数学习。” 神经信息处理系统进展,第 20 卷。可在 ai.stanford.edu/∼chuongdo/papers/learn_reg.pdf 查阅。

  3. Gorissen, D., K. Crombecq, I. Couckuyt, P. Demeester 和 T. Dhaene (2010): “用于计算机设计的替代建模和自适应采样工具箱。” 机器学习研究期刊,第 11 卷,页 2051–2055。

  4. Hsu, C., C. Chang 和 C. Lin (2010): “支持向量分类的实用指南。” 技术报告,国立台湾大学。

  5. Hutter, F., H. Hoos 和 K. Leyton-Brown (2011): “通用算法配置的顺序模型优化。” 第五届国际学习与智能优化会议论文集,页 507–523。

  6. Larsen, J., L. Hansen, C. Svarer 和 M. Ohlsson (1996): “神经网络的设计与正则化:验证集的最佳使用。” 1996 年 IEEE 信号处理学会研讨会论文集。

  7. Maclaurin, D., D. Duvenaud 和 R. Adams (2015): “通过可逆学习进行基于梯度的超参数优化。” 工作论文。可在 arxiv.org/abs/1502.03492 查阅。

  8. Martinez-Cantin, R. (2014): “BayesOpt:用于非线性优化、实验设计和赌丨博的贝叶斯优化库。” 机器学习研究期刊,第 15 卷,页 3915–3919。

注释

^(1)     scikit-learn.org/stable/modules/metrics.html.

^(2)     scikit-learn.org/stable/auto_examples/svm/plot_rbf_parameters.html.

^(3)     scikit-learn.org/stable/modules/model_evaluation.html#log-loss .

第三部分:回测

  1. 第十章 下注大小

  2. 第十一章 回测的危险

  3. 第十二章 通过交叉验证进行回测

  4. 第十三章 在合成数据上回测

  5. 第十四章 回测统计

  6. 第十五章 理解策略风险

  7. 第十六章 机器学习资产配置

第十章:下注大小

10.1 动机

策略游戏和投资之间有着迷人的相似之处。我曾与一些最优秀的投资组合经理合作,他们都是出色的扑克玩家,也许比棋手更优秀。一个原因是下注大小,德州扑克牌提供了很好的类比和训练场。你的机器学习算法可以实现高准确度,但如果你不正确地设置下注大小,你的投资策略必然会亏损。在本章中,我们将回顾几种基于机器学习预测的下注大小方法。

10.2 独立于策略的下注大小方法

考虑在同一工具上的两种策略。令 m [i* , t]* ∈ [ − 1, 1] 为策略 i 在时间 t 的下注大小,其中 m [i* , t]* = −1 表示完全空头头寸,而 m [i* , t]* = 1 表示完全多头头寸。假设一种策略产生了一系列下注大小 [ m [1, 1] , m [1, 2] , m [1, 3] ] = [.5, 1, 0],市场价格跟随的序列为 [ p [1] , p [2] , p [3] ] = [1, .5, 1.25],其中 p [t] 是时间 t 的价格。另一种策略产生的序列为 [ m [2, 1] , m [2, 2] , m [2, 3] ] = [1, .5, 0],因为它在市场对初始全头寸不利时被迫减少下注大小。两种策略的预测都正确(在 p [1]p [3] 之间价格上涨了 25%),然而第一种策略盈利 (0.5),而第二种策略亏损 (−.125)。

我们希望以某种方式调整头寸,以便为交易信号在减弱之前可能增强的情况保留一些现金。一种选择是计算序列 c [t] = c [t* , l]* − c [t* , s],其中 c [t , l]* 是时间 t 时同时存在的多头赌注数量,而 c [t* , s]* 是时间 t 时同时存在的空头赌注数量。这种赌注并发性是类似于我们在第四章中计算标签并发性的方法得出的(回忆一下 t1 对象,具有重叠的时间跨度)。我们对 { c [t] } 进行两个高斯混合模型的拟合,采用类似于 López de Prado 和 Foreman [2014] 中描述的方法。然后,赌注大小得出为

其中 F [ x ] 是拟合的两个高斯混合模型在值 x 处的累积分布函数(CDF)。例如,当观察到更大值的信号的概率仅为 0.1 时,我们可以将赌注大小设为 0.9。信号越强,信号变得更强的概率越小,因此赌注大小越大。

第二种解决方案是采用预算方法。我们计算同时存在的多头赌注的最大数量(或其他某个分位数),,以及同时存在的空头赌注的最大数量,。然后我们得出赌注大小为 ,其中 c [t* , l]* 是时间 t 时同时存在的多头赌注数量,而 c [t* , s]* 是时间 t 时同时存在的空头赌注数量。目标是在最后一个并发信号触发之前,不达到最大头寸。

第三种方法是应用元标签技术,如我们在第三章中解释的那样。我们拟合一个分类器,例如 SVC 或 RF,以确定误分类的概率,并利用该概率推导赌注大小。^(1) 这种方法有几个优点:首先,决定赌注大小的机器学习算法独立于主要模型,允许引入预测假阳性的特征(见第三章)。其次,预测概率可以直接转化为赌注大小。让我们看看如何实现。

10.3 根据预测概率进行赌注大小调整

我们用 p [ x ] 表示标签 x 发生的概率。对于两个可能的结果,x ∈ { − 1, 1},我们希望检验原假设 。我们计算检验统计量 ,其中 z ∈ ( − ∞, +∞),Z 表示标准正态分布。我们得出赌注大小为 m = 2 Z [ z ] − 1,其中 m ∈ [ − 1, 1],Z [.] 是 Z 的 CDF。

对于超过两个可能结果的情况,我们遵循一对多的方法。设 X = { − 1, …, 0, …, 1} 为与赌注大小相关的各种标签,xX 为预测标签。换句话说,标签是由与之相关的赌注大小所确定的。对于每个标签 i = 1, …, || X ||,我们估计概率 p [i],其中 . 我们将 定义为 x 的概率,我们希望对 进行检验。^( 2 ) 我们计算检验统计量 ,其中 z ∈ 0., . + ∞)。我们将赌注大小推导为 ![,其中 m ∈ [ − 1, 1],而 Z [ z ] 调节预测 x 的大小(其中边际由 x 隐含)。

图 10.1 绘制了赌注大小与检验统计量的关系。片段 10.1 实现了从概率到赌注大小的转换。它处理了预测来自元标签估计器或标准标签估计器的可能性。在步骤 #2 中,它还平均化活跃赌注,并离散化最终值,我们将在后面的章节中解释。

图 10.1 预测概率下的赌注大小

片段 10.1 从概率到赌注大小

10.4 活跃赌注的平均化

每个赌注都与持有期相关,涵盖从赌注产生到触及第一个障碍的时间 t1(见第三章)。一种可能的方法是在新赌注到来时覆盖旧赌注;然而,这可能导致过度交易。更明智的方法是在某一时刻平均所有仍然活跃的赌注大小。片段 10.2 说明了这个想法的一种可能实现。

片段 10.2 只要仍然活跃,赌注就被平均化

10.5 大小离散化

平均化可以减少一些过度交易,但仍然可能会在每次预测时触发小额交易。由于这种抖动可能导致不必要的过度交易,我建议将赌注大小离散化为 ,其中 d ∈ (0, ..1] 决定离散化的程度。图 10.2 说明了赌注大小的离散化。片段 10.3 实现了这个概念。

图 10.2 赌注大小的离散化,d = 0.2

片段 10.3 大小离散化以防止过度交易

10.6 动态赌注大小和限制价格

回顾第三章中介绍的三重障碍标记方法。i 号障碍在时间 t [i* , 0]* 形成,此时我们预测将触及的第一个障碍。该预测隐含了与障碍设置一致的预测价格 。在结果发生之前的时间段内,t ∈ [ t [i* , 0] * , t [i* , 1] * ],价格 p [t] * 波动,可能会形成额外的预测 ,其中 j ∈ [ i + 1, I ] 且 t [j , 0] * ≤ t [i* , 1] * 。在第 10.4 节和第 10.5 节中,我们讨论了在形成新预测时对活跃赌注进行平均和离散化赌注大小的方法。在本节中,我们将介绍一种方法来调整赌注大小,因为市场价格 p [t] * 和预测价格 f [i] * 发生波动。在这个过程中,我们将推导出订单的限价。

q [t] 为当前头寸,Q 为最大绝对头寸大小, 为与预测 f [i*] * 相关的目标头寸大小,使得

其中 m [ω, x ] 是赌注大小,x = f [i]p [t] 是当前市场价格与预测之间的偏差,ω 是调节 sigmoid 函数宽度的系数,Int[ x ] 是 x 的整数值。请注意,对于实值价格偏差 x ,− 1 < m [ω, x ] < 1,整数值 是有界的

目标头寸大小 可以根据 p [t] * 的变化动态调整。特别地,当 p [t] * → f [i*] * 时,我们得到 ,因为算法希望实现收益。这意味着为了避免实现损失,订单大小的盈亏平衡限价是 。具体来说,

其中 L [ f [i] , ω, m ] 是关于 p [t]m [ω, f [i]p [t] ] 的反函数,

我们不需要担心 m ² = 1 的情况,因为 . 由于该函数是单调的,算法在 p [t] * → f [i] * 时无法实现损失。

让我们校准ω。给定用户定义的对 ( x , m ),使得 x = f [i]* − p [t]m * = m [ω, x ],关于ω的 m [ω, x ] 的反函数是

代码片段 10.4 实现了一个算法,该算法根据p [t]f [i]计算动态头寸大小和限制价格。首先,我们对 sigmoid 函数进行校准,以便在价格偏差x = 10 时返回一个下注大小m * = .95。第二,我们计算目标头寸 ,最大头寸Q = 100,f [i] = 115 和p [t] = 100。如果你尝试f [i] = 110,你会得到 ,这与ω的校准一致。第三,此大小订单的限制价格为p [t] < 112.3657 < f [i],位于当前价格和预测价格之间。

代码片段 10.4 动态头寸大小和限制价格

作为 sigmoid 函数的替代方案,我们可以使用幂函数 ,其中ω ≥ 0,x ∈ [−1, 1],其结果为 。这种替代方案具有以下优点:

  • 曲率可以通过ω直接操控。

  • 对于ω > 1,该函数由凹变为凸,而不是反过来,因此该函数在拐点附近几乎是平坦的。

我们将幂函数方程的推导留给读者作为练习。图 10.3 绘制了下注大小(y 轴)作为价格偏差fp [t](x 轴)的函数,包括 sigmoid 和幂函数。

图 10.3 f [x] = sgn [x]|x|²(由凹到凸)和 f [x] = x (.1 + ) ^(−.5)(由凸到凹)

练习

  1. 使用第 10.3 节中的公式,绘制下注大小(m)作为最大预测概率的函数(当|| X || = 2, 3, …, 10 时)。

  2. 从均匀分布中抽取 10,000 个随机数,边界为U [.5, 1.]。

    1. 计算下注大小m,使得||X|| = 2*。

    2. 将 10,000 个连续的日历天分配给下注大小。

    3. 从均匀分布中抽取 10,000 个随机数,边界为U [1, 25]。

    4. 形成一个由 2.b 中的日期索引的 pandas 系列,值等于 2.c 中的天数前移的索引。这是一个与我们在第三章中使用的t1对象类似的对象。

    5. 计算结果的平均活跃下注,遵循第 10.4 节。

  3. 使用来自练习 2.d 的t1对象:

    1. 确定最大并发多头下注数量,

    2. 确定最大并发空头下注数量,

    3. 将下注大小推导为 ,其中c [t* , l]是时间t时的并发多头下注数量,c [t , s]是时间t*时的并发空头下注数量。

  4. 使用来自练习 2.d 的t1对象:

    1. 计算系列c [t] = c [t* , l]* − c [t* , s],其中c [t , l]是时间t时的并发多头下注数量,c [t , s]是时间t*时的并发空头下注数量。

    2. 在 {c [t] } 上拟合双高斯混合。你可能想使用 López de Prado 和 Foreman [2014] 中描述的方法。

    3. 计算投注大小为 ,其中 F [x ] 是针对值 x 的拟合双高斯混合的累计分布函数(CDF)。

    4. 解释此系列 {m [t] } 如何不同于在练习 3 中计算的投注大小系列。

  5. 重复练习 1,其中你使用 stepSize=.01stepSize=.05stepSize=.1 来离散化 m

  6. 重写第 10.6 节中的方程,以便投注大小由幂函数确定,而不是由 sigmoid 函数确定。

  7. 修改代码片段 10.4,以便实现你在练习 6 中推导的方程。

参考文献

  1. López de Prado, M. 和 M. Foreman (2014): “高斯混合方法在数学投资组合监督中的应用:EF3M 算法。” 定量金融 ,第 14 卷,第 5 期,页码 913–930。

  2. Wu, T.,C. Lin 和 R. Weng (2004): “通过成对耦合进行多类分类的概率估计。” 机器学习研究期刊 ,第 5 卷,页码 975–1005。

书目

  1. Allwein, E.,R. Schapire 和 Y. Singer (2001): “将多类问题简化为二类问题:边际分类器的统一方法。” 机器学习研究期刊 ,第 1 卷,页码 113–141。

  2. Hastie, T. 和 R. Tibshirani (1998): “通过成对耦合进行分类。” 统计年鉴 ,第 26 卷,第 1 期,页码 451–471。

  3. Refregier, P. 和 F. Vallet (1991): “神经网络多类分类的概率方法。” 国际人工网络会议论文集,页码 1003–1007。

注释

^(1)    参考文献部分列出了一些解释这些概率如何推导的文章。通常这些概率会结合拟合优度或对预测的信心的信息。参见 Wu 等 [2004],并访问 scikit-learn.org/stable/modules/svm.html#scores-and-probabilities

^(2)    当所有结果同样可能时,不确定性是绝对的。

第十一章:回测的危险

11.1 动机

回测是量化工具箱中最重要但却最少被理解的技术之一。一个常见的误解是将回测视为研究工具。研究与回测就像饮酒与驾驶。不要在回测的影响下进行研究。大多数在期刊上发表的回测都有缺陷,因多次测试导致选择偏差(Bailey、Borwein、López de Prado 和 Zhu [2014]; Harvey et al. [2016])。可以写一本完整的书列出人们在回测过程中所犯的各种错误。尽管我可能是发表回测^(1)和投资绩效指标的学术作者中拥有最多期刊文章的,但我仍然感觉没有精力汇总过去 20 年里看到的所有不同错误。本章并不是回测的速成课程,而是一些即使是经验丰富的专业人士也会犯的常见错误的简短列表。

11.2 不可能的任务:完美的回测

在其狭义的定义中,回测是对一项策略在过去某一时期内可能表现的历史模拟。因此,它是一个假设,而绝不是实验。在物理实验室,比如伯克利实验室,我们可以在控制环境变量的情况下重复实验,从而推导出精确的因果关系。相比之下,回测不是实验,并且不证明任何事情。回测不能保证任何结果,甚至如果我们能够穿越时空回到过去,也无法确保达到那种夏普比率(Bailey 和 López de Prado [2012])。随机抽样的结果会有所不同。过去不会重演。

那么,回测的意义何在?它是对多个变量的理性检验,包括下注规模、周转率、对成本的韧性以及在特定情境下的表现。一个好的回测可以非常有帮助,但做好回测却非常困难。在 2014 年,德意志银行的量化团队,在尹罗的带领下,发布了一项题为“量化投资的七大罪恶”(Luo et al. [2014])的研究。这是一篇非常生动易懂的文章,我建议这个领域的每一个人都仔细阅读。在文中,这个团队提到了常见的偏差:

  1. 幸存者偏差: 以当前的投资范围为基础,因此忽略了一些公司在过程中破产以及某些证券被摘牌的情况。

  2. 前瞻性偏差: 使用在模拟决策时并不公开的信息。确保每个数据点的时间戳准确无误。考虑发布日期、分发延迟和补充修正。

  3. 叙事: 为了证明某种随机模式而事后编造故事。

  4. 数据挖掘和数据窥探: 在测试集上训练模型。

  5. 交易成本: 模拟交易成本是困难的,因为唯一能确定这一成本的方法是与交易记录互动(即,进行实际交易)。

  6. 离群值: 基于过去观察到的一些极端结果制定策略,这些结果可能永远不会再发生。

  7. 做空: 对现金产品采取空头头寸需要找到借款人。借贷的成本和可用金额通常是未知的,取决于关系、库存、相对需求等。

这些只是大多数期刊发表的论文常见的一些基本错误。其他常见错误包括使用非标准方法计算业绩(第十四章);忽视隐性风险;只关注收益而忽视其他指标;将相关性与因果关系混淆;选择不具代表性的时间段;未能预见意外情况;忽视强平线或保证金要求的存在;忽视融资成本;以及忘记实用方面(Sarfati [2015])。还有很多其他错误,但真的,没有必要列举它们,因为接下来的部分标题。

11.3 即使你的回测完美,它也可能是错误的

恭喜你!你的回测在每个人都能重现你结果的意义上是完美的,并且你的假设是如此保守,以至于连你的老板都无法反对。你为每一笔交易支付的费用是任何人可能要求的两倍以上。你是在全球一半的人已知信息几个小时后,以极低的参与率执行的。尽管有这些严重的成本,你的回测仍然赚了很多钱。然而,这个完美的回测可能是错误的。为什么?因为只有专家才能生成完美的回测。成为专家意味着你在多年中进行了成千上万次的回测。总之,这并不是你第一次进行回测,因此我们需要考虑到这可能是一次虚假发现,一个在你对同一数据集进行多次测试后不可避免出现的统计异常。

回测令人抓狂的地方在于,你在这方面变得越擅长,出现虚假发现的可能性就越高。初学者会陷入罗等人 [2014] 提出的七大罪恶(还有更多,但谁在计数呢?)。专业人士可能会生成完美的回测,仍然会陷入多重测试、选择偏差或回测过拟合(Bailey 和 López de Prado [2014b])。

11.4 回测不是研究工具

第八章讨论了替代效应、联合效应、掩蔽、MDI、MDA、SFI、并行特征、堆叠特征等。即使某些特征非常重要,也并不意味着可以通过投资策略实现货币化。相反,许多策略看似盈利,尽管它们是基于无关特征的。特征重要性是真正的研究工具,因为它帮助我们理解机器学习算法揭示的模式的性质,无论其是否能货币化。重要的是,特征重要性是事前得出的,在历史表现被模拟之前。

相比之下,回测不是研究工具。它对特定策略为何能赚钱几乎没有提供任何见解。就像彩票赢家可能觉得自己做了什么值得的事情来获得运气一样,总是有一些事后的故事(罗的罪过第三)。作者们声称发现了数百个“阿尔法”和“因子”,并且总有一些复杂的解释。相反,他们所发现的只是赢得上局游戏的彩票。赢家已经兑现,那些数字对下一轮毫无用处。如果你不愿意为那些彩票支付额外费用,为什么你会在意那些数百个阿尔法呢?这些作者从未告诉我们所有售出的票,即找到这些“幸运”阿尔法所需的数百万次模拟。

回测的目的是剔除糟糕的模型,而不是改进它们。根据回测结果调整模型是浪费时间……而且是危险的。把你的时间和精力投入到确保所有组件正确上,正如我们在书中其他地方讨论的那样:结构化数据、标记、加权、集成、交叉验证、特征重要性、投注规模等。等你进行回测时,已经太晚了。永远不要在模型完全指定之前进行回测。如果回测失败,就重新开始。如果这样做,找到虚假发现的机会将会大幅降低,但仍然不会是零。

11.5 一些一般性建议

回测过拟合可以定义为在多个回测中的选择偏差。当一个策略是为了在回测中表现良好而开发时,通过利用随机历史模式,就会发生回测过拟合。因为这些随机模式不太可能在未来再次出现,因此所开发的策略将会失败。每个经过回测的策略都在某种程度上受到“选择偏差”的过拟合:大多数人分享的唯一回测结果是那些展现所谓成功投资策略的。

如何解决回测过拟合可以说是量化金融中最根本的问题。为什么?因为如果这个问题有简单的答案,投资公司就能确定实现高性能,因为它们只会投资于成功的回测。期刊将自信地评估某个策略是否可能是假阳性。金融可能在波普尔和拉卡托斯的意义上成为真正的科学(洛佩斯·德·普拉多 [2017])。回测过拟合如此难以评估的原因在于,每次对同一数据集进行新的测试时,假阳性的概率都会变化,而这些信息要么研究者不知道,要么不与投资者或审稿人分享。虽然没有简单的方法可以防止过拟合,但一些步骤可以帮助减少其出现。

  1. 为整个资产类别或投资领域开发模型,而不是针对特定证券(第八章)。投资者会分散投资,因此他们不会仅在证券 Y 上犯错误 X。如果你在证券 Y 上发现错误 X,无论其看似多么有利可图,可能都是一个虚假发现。

  2. 应用袋装法(第六章)作为防止过拟合和减少预测误差方差的手段。如果袋装法降低了策略的表现,可能是因为它过拟合了少数观察值或离群值。

  3. 在完成所有研究之前不要进行回测(第 1–10 章)。

  4. 记录在数据集上进行的每一次回测,以便可以在最终选择结果上估计回测过拟合的概率(见贝利、博温、洛佩斯·德·普拉多和朱 [2017a] 和第十四章),并且夏普比率可以通过进行的试验数量进行适当调整(贝利和洛佩斯·德·普拉多 [2014b])。

  5. 模拟场景而不是历史(第十二章)。标准的回测是历史模拟,容易过拟合。历史只是实现的随机路径,完全可能不同。你的策略应该在广泛的场景下盈利,而不仅仅是轶事性的历史路径。过拟合数千个“如果”场景的结果更困难。

  6. 如果回测未能识别出盈利策略,则从头开始。抵制重用那些结果的诱惑。遵循回测第二法则。

片段 11.1 马尔科斯的回测第二法则

“在研究时进行回测就像酒后驾驶。不要在回测的影响下进行研究。”

马尔科斯·洛佩斯·德·普拉多 金融机器学习进展(2018)

11.6 策略选择

在第七章中,我们讨论了标签中的序列条件性如何破坏标准的 k 折交叉验证,因为随机抽样会将冗余观察分散到训练集和测试集中。我们必须找到一种不同的(真实的外样本)验证程序:一种在最不可能与用于训练模型的观察相关/冗余的观察上评估我们的模型的程序。有关详细调查,请参见 Arlot 和 Celisse [2010]。

Scikit-learn 实现了一种步进前进的时间折叠方法。² 在这种方法下,测试沿时间方向前进,旨在防止泄漏。这与历史回测(和交易)的一般方式一致。然而,在存在长程序列依赖的情况下,仅在训练集结束前一个观察点进行测试可能不足以避免信息泄漏。我们将在第十二章第 12.2 节重新讨论这一点。

步进前进法的一个缺点是容易过拟合。原因在于如果没有随机抽样,就会有一条可以重复多次的测试路径,直到出现假阳性。与标准的交叉验证一样,需要一些随机化来避免这种绩效目标或回测优化,同时避免将与训练集相关的样本泄漏到测试集中。接下来,我们将介绍一种基于回测过拟合概率估计(PBO)的策略选择交叉验证方法。我们将在第十二章中解释回测的交叉验证方法。

Bailey 等人[2017a]通过组合对称交叉验证(CSCV)方法估计 PBO。示意图如下。

首先,我们通过收集N次试验的绩效系列形成一个矩阵M。特别地,每一列n = 1, …, N表示与研究人员尝试的特定模型配置相关的P&L(市值利润和损失)在t = 1, …, T观察下的向量。因此,M是一个实值矩阵,阶数为(T×N)。我们施加的唯一条件是:(1) M是真正的矩阵,即每一列的行数相同,观察在N次试验中的每一行都是同步的,(2) 用于选择“最佳”策略的性能评估指标可以在每一列的子样本上进行估计。例如,如果该指标是夏普比率,我们假设在报告的绩效的各个切片上可以保持独立同分布的正态分布假设。如果不同的模型配置以不同的频率交易,观察会被聚合(降采样)以匹配一个公共索引t = 1, …, T

其次,我们将M按行划分为个数S的相等维度的不相交子矩阵。每个子矩阵M[s],其中s* = 1, …, S,的阶数为!

第三,我们形成所有组合 C [S]M [s] ,按大小为 的组进行选择。这给出了组合的总数。

例如,如果 S = 16 ,我们将形成 12,780 个组合。每个组合 cC [S] 子矩阵 M [s] 组成。

第四,对于每个组合 cC [S] ,我们:

  1. 形成 训练集 J ,通过连接构成 c 子矩阵 M [s]J 是一个阶数为 的矩阵。

  2. 形成 测试集 ,作为 JM 中的补集。换句话说, 是由 M 中所有不属于 J 的行构成的 矩阵。

  3. 形成一个阶数为 N 的性能统计向量 R ,其中 R 的第 n 项报告与 J (训练集)的第 n 列相关的性能。

  4. 确定元素 n * ,使得 ,∀n = 1, …, N 。换句话说,

  5. 形成一个阶数为 N 的性能统计向量 ,其中 的第 n 项报告与 (测试集)的第 n 列相关的性能。

  6. 确定 中的相对等级。我们将此相对等级表示为 ,其中 。这是与在样本 (IS) 中选择的试验相关的样本外 (OOS) 性能的相对等级。如果策略优化过程没有过拟合,我们应该观察到 系统性地优于 (OOS),就像 超过了 R (IS)。

  7. 定义 logit 。这展示了 λ [c] = 0 的特性,当 的中位数重合时。高 logit 值暗示 IS 与 OOS 性能之间的一致性,表明回测过拟合的水平较低。

第五,通过收集所有的 λ [c] 来计算 OOS 的等级分布,其中 cC [S] 。概率分布函数 f (λ) 然后被估计为 λ 在所有 C [S] 中出现的相对频率,带有 *。最后,PBO 被估计为 ,因为这是与表现不佳的 OOS 的 IS 最优策略相关的概率。

图 11.1 的 x 轴显示最佳策略选择的 Sharpe 比率 IS。y 轴显示该最佳策略选择的 Sharpe 比率 OOS。如可以看出,由于回测过拟合,性能出现强烈且持续的衰退。应用上述算法,我们可以推导与该策略选择过程相关的 PBO,如 图 11.2 所示。

图 11.1 样本内最佳夏普比率 (SR IS) 与样本外夏普比率 (SR OOS)

图 11.2 从 logits 分布中推导的回测过拟合概率

每个子集中的观察结果保持原始时间序列。随机抽样是在相对不相关的子集上进行的,而不是在观察结果上。有关该方法准确性的实验分析,请参见 Bailey 等人 [2017a]。

练习

  1. 一位分析师拟合了一个随机森林分类器,其中一些特征包括季节性调整的就业数据。他将季节性调整后的数据与一月的数据对齐,等等。他犯了什么“罪”?

  2. 一位分析师开发了一种机器学习算法,他利用收盘价生成信号,并在收盘时执行。罪过在哪里?

  3. 美国的游戏厅产生的总收入与授予的计算机科学博士学位之间的相关性为 98.51%。随着博士学位数量的预期增长,我们应该投资游戏厅公司吗?如果不,罪过在哪里?

  4. 华尔街日报 报道,九月份是年度中唯一一个平均股票收益为负的月份,回顾过去 20、50 和 100 年。我们应该在八月底出售股票吗?如果不,罪过在哪里?

  5. 我们从彭博社下载市盈率,每月对股票进行排名,出售排名前四分之一的股票,并购买排名后四分之一的股票。表现惊人。罪过在哪里?

参考文献

  1. Arlot, S. 和 A. Celisse (2010): “模型选择的交叉验证程序综述。” 统计调查,第 4 卷,第 40–79 页。

  2. Bailey, D., J. Borwein, M. López de Prado, 和 J. Zhu (2014): “伪数学与金融骗子:回测过拟合对样本外表现的影响。” 美国数学学会公告,第 61 卷,第 5 期(五月),第 458–471 页。可在 ssrn.com/abstract=2308659 获取。

  3. Bailey, D., J. Borwein, M. López de Prado, 和 J. Zhu (2017a): “回测过拟合的概率。” 计算金融杂志,第 20 卷,第 4 期,第 39–70 页。可在 ssrn.com/abstract=2326253 获取。

  4. Bailey, D. 和 M. López de Prado (2012): “夏普比率有效前沿。” 风险杂志,第 15 卷,第 2 期(冬季)。可在 ssrn.com/abstract=1821643 获取。

  5. Bailey, D. 和 M. López de Prado (2014b): “膨胀夏普比率:修正选择偏差、回测过拟合和非正态性。” 投资组合管理杂志,第 40 卷,第 5 期,第 94–107 页。可在 ssrn.com/abstract=2460551 获取。

  6. Harvey, C., Y. Liu, 和 H. Zhu (2016): “. . . 和预期收益的横截面。” 金融研究回顾,第 29 卷,第 1 期,第 5–68 页。

  7. López de Prado, M. (2017): “金融作为一门工业科学。” 投资组合管理杂志,第 43 卷,第 4 期,5–9 页。可在 www.iijournals.com/doi/pdfplus/10.3905/jpm.2017.43.4.005 获取。

  8. Luo, Y., M. Alvarez, S. Wang, J. Jussa, A. Wang 和 G. Rohal (2014): “量化投资的七大罪恶。” 白皮书,德意志银行市场研究,9 月 8 日。

  9. Sarfati, O. (2015): “回测:评估策略和避免陷阱的实务指南。” Citi Equity Derivatives。CBOE 2015 风险管理会议。可在 www.cboe.com/rmc/2015/olivier-pdf-Backtesting-Full.pdf 获取。

参考文献

  1. Bailey, D., J. Borwein 和 M. López de Prado (2016): “股票投资组合设计与回测过拟合。” 投资管理杂志,第 15 卷,第 1 期,1–13 页。可在 ssrn.com/abstract=2739335 获取。

  2. Bailey, D., J. Borwein, M. López de Prado, A. Salehipour 和 J. Zhu (2016): “金融市场中的回测过拟合。” 自动化交易者,第 39 卷。可在 ssrn.com/abstract=2731886 获取。

  3. Bailey, D., J. Borwein, M. López de Prado 和 J. Zhu (2017b): “‘回测过拟合的概率’的数学附录。” 计算金融杂志(风险期刊),第 20 卷,第 4 期。可在 ssrn.com/abstract=2568435 获取。

  4. Bailey, D., J. Borwein, A. Salehipour 和 M. López de Prado (2017): “市场预测者的评估与排名。” 投资管理杂志,即将出版。可在 ssrn.com/abstract=2944853 获取。

  5. Bailey, D., J. Borwein, A. Salehipour, M. López de Prado 和 J. Zhu (2015): “在线工具用于展示回测过拟合。” 工作论文。可在 ssrn.com/abstract=2597421 获取。

  6. Bailey, D., S. Ger, M. López de Prado, A. Sim 和 K. Wu (2016): “统计过拟合与回测表现。” 收录于 基于风险和因子的投资,定量金融,Elsevier。可在 ssrn.com/abstract=2507040 获取。

  7. Bailey, D. 和 M. López de Prado (2014a): “在序列相关性下的止损和‘三重惩罚规则’。” 风险杂志,第 18 卷,第 2 期,61–93 页。可在 ssrn.com/abstract=2201302 获取。

  8. Bailey, D. 和 M. López de Prado (2015): “‘在序列相关性下的止损’的数学附录。” 风险杂志,第 18 卷,第 2 期。可在 ssrn.com/abstract=2511599 获取。

  9. Bailey, D., M. López de Prado, 和 E. del Pozo (2013): “策略批准决策:夏普比率无差异曲线方法。” 算法金融 ,第 2 卷,第 1 期,页码 99–109。可在 ssrn.com/abstract=2003638 获取。

  10. Carr, P. 和 M. López de Prado (2014): “确定最佳交易规则而不进行回测。” 工作论文。可在 ssrn.com/abstract=2658641 获取。

  11. López de Prado, M. (2012a): “投资组合监督:一种进化的方法。” 在康奈尔大学的讲座。可在 ssrn.com/abstract=2172468 获取。

  12. López de Prado, M. (2012b): “锋利的刀刃:非正态收益的绩效评估。” 在康奈尔大学的讲座。可在 ssrn.com/abstract=2150879 获取。

  13. López de Prado, M. (2013): “回测中需要关注的事项。” 在康奈尔大学的讲座。可在 ssrn.com/abstract=2308682 获取。

  14. López de Prado, M. (2014a): “没有回测的最佳交易规则。” 在康奈尔大学的讲座。可在 ssrn.com/abstract=2502613 获取。

  15. López de Prado, M. (2014b): “降低夏普比率。” 在康奈尔大学的讲座。可在 ssrn.com/abstract=2465675 获取。

  16. López de Prado, M. (2015a): “量化元策略。” 实用应用,机构投资者期刊 ,第 2 卷,第 3 期,页码 1–3。可在 ssrn.com/abstract=2547325 获取。

  17. López de Prado, M. (2015b): “经验金融的未来。” 投资组合管理杂志 ,第 41 卷,第 4 期,页码 140–144。可在 ssrn.com/abstract=2609734 获取。

  18. López de Prado, M. (2015c): “回测。” 在康奈尔大学的讲座。可在 ssrn.com/abstract=2606462 获取。

  19. López de Prado, M. (2015d): “经验金融中的近期趋势。” 投资组合管理杂志 ,第 41 卷,第 4 期,页码 29–33。可在 ssrn.com/abstract=2638760 获取。

  20. López de Prado, M. (2015e): “为什么大多数经验发现可能是错误的,以及可以采取的措施。” 在宾夕法尼亚大学的讲座。可在 ssrn.com/abstract=2599105 获取。

  21. López de Prado, M. (2015f): “量化元策略的进展。” 在康奈尔大学的讲座。可在 ssrn.com/abstract=2604812 获取。

  22. López de Prado, M. (2016): “构建超越样本外表现的多元化投资组合。” 投资组合管理杂志 ,第 42 卷,第 4 期,页码 59–69。可在 ssrn.com/abstract=2708678 获取。

  23. López de Prado, M. 和 M. Foreman (2014): “一种高斯混合方法的数学投资组合监督:EF3M 算法。” 定量金融 ,第 14 卷,第 5 期,页码 913–930。可在 ssrn.com/abstract=1931734 获取。

  24. López de Prado, M. 和 A. Peijan (2004): “对冲基金策略损失潜力的测量。” 替代投资期刊 ,第 7 卷,第 1 期,页码 7–31,2004 年夏季。可在 ssrn.com/abstract=641702 获取。

  25. López de Prado, M.,R. Vince,和 J. Zhu (2015): “有限投资期限内的风险调整增长投资组合。” 康奈尔大学讲座。可在 ssrn.com/abstract=2624329 获取。

注意

^(1)     papers.ssrn.com/sol3/cf_dev/AbsByAuth.cfm?per_id=434076 ; www.QuantResearch.org/ .

第十二章:通过交叉验证进行回测

12.1 动机

回测使用过去的观察结果评估投资策略的超样本表现。这些过去的观察结果可以通过两种方式使用:(1)在狭义上,模拟投资策略的历史表现,就好像它在过去运行过一样;(2)在广义上,模拟过去没有发生的情景。第一种(狭义)方法,也称为前向行走,普遍到“回测”一词实际上已经成为“历史模拟”的事实同义词。第二种(广义)方法则鲜为人知,在本章中我们将介绍一些新的实施方式。每种方法都有其优缺点,都应给予谨慎考虑。

12.2 前向行走法

文献中最常见的回测方法是前向行走(WF)方法。WF 是对策略在过去表现的历史模拟。每个策略决策都是基于该决策之前的观察结果。正如我们在第十一章看到的,进行无懈可击的 WF 模拟是一项艰巨的任务,需要对数据源、市场微观结构、风险管理、绩效测量标准(例如,GIPS)、多重测试方法、实验数学等有极高的知识。遗憾的是,没有通用的回测配方。为了准确且具有代表性,每个回测都必须定制以评估特定策略的假设。

WF 享有两个关键优势:(1)WF 具有明确的历史解释。其表现可以与纸上交易相协调。(2)历史是过滤;因此,使用滞后数据确保测试集是样本外的(没有泄漏),只要清除工作得到了正确实施(见第七章,第 7.4.1 节)。在 WF 回测中发现泄漏是一个常见错误,在这里 t1.index 落在训练集内,但 t1.values 落在测试集内(见第三章)。在 WF 回测中不需要禁运,因为训练集总是早于测试集。

12.2.1 前向验证方法的陷阱

WF 存在三个主要缺点:首先,仅测试单一场景(历史路径),容易过拟合(Bailey et al. [2014])。其次,WF 不一定代表未来表现,因为结果可能受到特定数据点序列的偏见。WF 方法的支持者通常认为预测过去会导致过于乐观的表现估计。然而,常常在反向观察序列上拟合出表现优越的模型会导致表现不佳的 WF 回测。事实上,过拟合前向回测和后向回测同样容易,而观察序列的变化导致不一致的结果就是这种过拟合的证据。如果 WF 的支持者是对的,我们应该观察到后向回测系统地优于前向回测。但事实并非如此,因此支持 WF 的主要论点相对较弱。

为了更清楚地说明这个第二个缺点,假设一个在标普 500 数据上进行 WF 回测的股票策略,从 2007 年 1 月 1 日开始。直到 2009 年 3 月 15 日,涨跌混合将训练策略使其保持市场中性,对每个头寸信心较低。之后,长期上涨将主导数据集,到 2017 年 1 月 1 日,买入预测将占主导地位。若从 2017 年 1 月 1 日向后回放信息,表现会大相径庭(长期上涨后跟随剧烈下跌)。通过利用特定序列,WF 选择的策略可能会让我们陷入困境。

WF 的第三个缺点是初始决策是在总样本的一小部分上做出的。即使设置了热身期,大部分信息仅用于少部分决策。考虑一个热身期的策略,它使用 t [0] 的观察值中的 T. 这个策略在平均数据点上做出一半的决策

这仅仅是观察值的一个 比例。尽管通过增加热身期可以减轻这个问题,但这样做也会缩短回测的长度。

12.3 交叉验证方法

投资者常常询问,如果将策略置于如 2008 年危机、网络泡沫、缩减恐慌或 2015–2016 年中国恐慌等不可预见的压力情境中,策略会表现如何。回答的一种方法是将观察值分为两组,一组是我们希望测试的时间段(测试集),另一组是其余的时间段(训练集)。例如,一个分类器将在 2009 年 1 月 1 日至 2017 年 1 月 1 日的时间段上进行训练,然后在 2008 年 1 月 1 日至 2008 年 12 月 31 日的时间段上进行测试。我们对于 2008 年的性能并不具备历史准确性,因为分类器是在 2008 年之后才可用的数据上进行训练的。但是,测试的目标并不是历史准确性。测试的目的在于将一个对 2008 年无知的策略置于如 2008 年的压力情境中。

通过交叉验证(CV)进行回测的目标并不是推导历史准确的表现,而是从多个样本外场景中推断未来表现。对于回测的每个时间段,我们模拟一个分类器的表现,该分类器知道除该时间段以外的一切信息。

优势

  1. 测试并不是特定(历史)情境的结果。事实上,CV 测试了 k 个替代情境,其中只有一个与历史序列相对应。

  2. 每个决策都是基于相等大小的集合做出的。这使得在不同时间段之间的结果在决策所用信息量方面可以进行比较。

  3. 每个观察值都是一个且仅一个测试集的一部分。没有热身子集,从而实现最长的样本外模拟。

劣势

  1. 与 WF 类似,模拟了一个单一的回测路径(尽管不是历史路径)。每个观察值生成的预测只有一个且唯一。

  2. CV 并没有明确的历史解释。输出并不模拟策略在过去的表现,而是模拟在各种压力情境下它可能在 未来 的表现(这本身就是一个有用的结果)。

  3. 由于训练集并不落后于测试集,因此可能会出现信息泄漏。必须非常小心以避免将测试信息泄漏到训练集中。有关如何通过清除和禁运来防止信息泄漏的讨论,请参见第七章。

12.4 组合清除交叉验证方法

在这一部分,我将介绍一种新方法,它解决了 WF 和 CV 方法的主要缺点,即这些方案只测试单一路径。我称之为“组合清除交叉验证”(CPCV)方法。考虑研究者所针对的回测路径数量 φ,CPCV 生成所需的训练/测试集组合的精确数量,同时清除包含泄漏信息的训练观察值。

12.4.1 组合分割

考虑T个观测值划分为N个组而不进行洗牌,其中组n = 1, …, N − 1 的大小为⌊ T / N ⌋,第N组的大小为T − ⌊ T / N ⌋( N − 1),⌊.⌋是向下取整或整数函数。对于大小为k组的测试集,可能的训练/测试划分数量为

由于每种组合涉及到k个测试组,因此测试组的总数为。而且,由于我们计算了所有可能的组合,这些测试组在所有N中是均匀分布的(每个组属于相同数量的训练集和测试集)。这意味着,从N组的k大小测试集中,我们可以回测总路径数φ[ N , k ]。

图 12.1 说明了N = 6 和k = 2 时训练/测试划分的组成。存在个划分,索引为S1, … ,S15。对于每个划分,图中用叉号(x)标记了包含在测试集中的组,未标记的组则形成训练集。每个组都是φ[6, 2] = 5 个测试集的一部分,因此这个训练/测试划分方案允许我们计算 5 条回测路径。

图 12.1生成的路径为φ [6, 2] = 5

图 12.2 显示了每个测试组分配到一个回测路径的情况。例如,路径 1 是将来自(G 1, S 1),(G 2, S 1),(G 3, S 2),(G 4, S 3),(G 5, S 4)和(G 6, S 5)的预测结果结合起来的结果。路径 2 则是将来自(G 1, S 2),(G 2, S 6),(G 3, S 6),(G 4, S 7),(G 5, S 8)和(G 6, S 9)的预测结果结合起来的结果,依此类推。

图 12.2测试组分配到每个 5 条路径

这些路径是通过在每种组合的数据部分θ = 1 − k / N上训练分类器生成的。虽然理论上可以在部分θ < 1/2 上进行训练,但在实践中我们将假设kN /2。训练集中数据的部分θ随着NT而增加,但随着kN /2 而减少。路径数量φ[ N , k ]随着NTkN /2 而增加。在极限情况下,通过设置N = Tk = N /2 = T /2 可以实现路径数量的最大值,但这意味着每个组合的分类器仅在一半的数据上进行训练(θ = 1/2)。

12.4.2 组合清除交叉验证回测算法

在第七章中,我们介绍了在 CV 上下文中清除和禁止的概念。现在我们将利用这些概念进行回测。CPCV 回测算法如下进行:

  1. T 个观察值划分为 N 组,不进行洗牌,其中组 n = 1, …, N − 1 的大小为 ⌊T /N ⌋,第 N 组的大小为 T − ⌊T /N ⌋(N − 1)。

  2. 计算所有可能的训练/测试划分,其中每个划分 Nk 组构成训练集,k 组构成测试集。

  3. 对于任何一对标签 (y [i] , y [j] ),其中 y [i] 属于训练集,y [j] 属于测试集,应用 PurgedKFold 类来清除 y [i],如果 y [i] 跨越了用于确定标签 y [j] 的时间段。该类还会实施禁令,如果某些测试样本早于某些训练样本。

  4. 训练集上拟合分类器,并在各自的 测试集上生成预测。

  5. 计算 φ[N , k ] 回测路径。你可以从每条路径计算一个夏普比率,并由此推导出策略的夏普比率的经验分布(而不是单个夏普比率,如 WF 或 CV)。

12.4.3 一些示例

对于 k = 1,我们将获得 φ[ N , 1] = 1 条路径,在这种情况下 CPCV 简化为 CV。因此,CPCV 可以理解为 CV 的一种推广,适用于 k > 1 *。

对于 k = 2,我们将获得 φ[ N , 2] = N − 1 路径。这是一个特别有趣的情况,因为在大部分数据上训练分类器时,θ = 1 − 2/ N,我们几乎可以生成与组数相同的回测路径,即 N − 1 。一个简单的经验法则是将数据划分为 N = φ + 1 组,其中 φ 是我们目标的路径数,然后形成 组合。在极限情况下,我们可以将每个观察分配到一个组,N* = T,并生成 φ[ T , 2] = T − 1 路径,同时在每个组合中训练分类器的数据部分为 θ = 1 − 2/ T

如果需要更多路径,可以将 k 增加到 N /2,但正如之前所述,这将以使用更小的数据集部分进行训练为代价。在实践中,k = 2 通常足以生成所需的 φ 路径,通过设置 N = φ + 1 ≤ T

12.5 组合清除交叉验证如何解决回测过拟合

给定一个 IID 随机变量样本,x [i]Zi = 1, …, I,其中 Z 是标准正态分布,该样本的期望最大值可以近似为

其中 Z ^(− 1) [.] 是 Z 的 CDF 的逆,γ ≈ 0.5772156649⋅⋅⋅ 是欧拉-马歇罗尼常数,且 I ≫ 1(见 Bailey et al. [2014] 以获取证明)。现在假设一位研究者在一个表现如马尔可夫链的工具上回测 I 个策略,夏普比率为 { y [i] } [i = 1, …, I],E[ y [i] ] = 0,σ ² [ y [i] ] > 0,并且 。尽管真实的夏普比率为零,我们期望找到一个夏普比率为

WF 回测表现出高方差,σ[ y [i] ] ≫ 0,至少有一个原因:大部分决策基于小部分数据集。一些观察会对夏普比率产生很大影响。使用预热期会缩短回测时间,这可能导致方差更高。WF 的高方差导致虚假发现,因为研究人员会选择最大估计夏普比率的回测,即使真实夏普比率为零。这就是在 WF 回测中控制试验次数(I)的必要原因。没有这些信息,就无法确定家庭错误率(FWER)、虚假发现率(FDR)、回测过拟合概率(PBO,见第十一章)或类似的模型评估统计。

CV 回测(第 12.3 节)通过在数据集的相等且较大部分上训练每个分类器来解决该方差来源。虽然 CV 比 WF 导致更少的虚假发现,但两种方法仍然是从策略iy [i]的单一路径中估计夏普比率,而这种估计可能非常波动。相比之下,CPCV 从大量路径中推导夏普比率的分布,j = 1, …, φ,均值为 E[{ y [i* , j]* } [j = 1, …, φ] ] = μ [i],方差为σ ² [{ y [i* , j]* } [j = 1, …, φ] ] = σ ² [i]。CPCV 路径的样本均值方差是

其中σ ² [i]是策略i在路径之间的夏普比率方差,而是{ y [i* , j] * } [j = 1, …, φ]之间的平均非对角相关性。CPCV 比 CV 和 WF 导致更少的虚假发现,因为意味着样本均值的方差低于样本的方差,

路径越不相关,,CPCV 的方差就会越小,极限情况下 CPCV 将报告真实的夏普比率 E[ y [i] * ],方差为零, . 不会有选择偏差,因为从i* = 1, …, I中选择的策略将是具有最高真实夏普比率的策略。

当然,我们知道零方差是无法实现的,因为φ有上界,。尽管如此,对于足够多的路径φ,CPCV 可以使回测的方差小到几乎可以忽略虚假发现的概率。

在第十一章中,我们认为回测过拟合可能是所有数学金融领域中最重要的未解问题。让我们看看 CPCV 如何在实践中帮助解决这个问题。假设一位研究者向期刊提交了一项策略,支持该策略的 WF 回测存在过拟合,从大量未公开的试验中选择。期刊可以要求研究者在给定的Nk下重复实验,使用 CPCV。由于研究者事先不知道要回测的路径的数量和特征,他的过拟合努力将很容易被击败。该论文将被拒绝或撤回。希望 CPCV 能减少期刊及其他地方发表的虚假发现的数量。

练习

  1. 假设你在一个期货合约上开发了一个动量策略,预测基于 AR(1)过程。你使用 WF 方法对该策略进行回测,夏普比率为1.5。然后你在反向序列上重复回测,获得了–1.5的夏普比率。如果有的话,忽略第二个结果的数学依据是什么?

  2. 你在一个期货合约上开发了一个均值回归策略。你的 WF 回测达到了1.5的夏普比率。你增加了热身期的长度,结果夏普比率降到了0.7。你继续仅呈现较高夏普比率的结果,辩称较短的热身策略更为现实。这是否构成选择偏差?

  3. 你的策略在 WF 回测中达到了1.5的夏普比率,但在 CV 回测中只有0.7。你继续仅呈现较高夏普比率的结果,辩称 WF 回测在历史上是准确的,而 CV 回测则是情景模拟或推理练习。这是否构成选择偏差?

  4. 你的策略在一段时间内产生了100,000个预测。你希望通过生成1,000条路径来推导夏普比率的 CPCV 分布。哪些参数组合(Nk)能让你实现这一目标?

  5. 你发现一个策略在 WF 回测中达到了1.5的夏普比率。你撰写了一篇论文,解释可以证明该结果的理论,并提交给一个学术期刊。编辑回复说,有一位评审要求你使用CPCV方法重复回测,设置N=100k=2,包括你的代码和完整数据集。你按照这些指示进行,平均夏普比率为–1,标准差为0.5。你愤怒地不再回复,而是撤回你的提交,并在一个影响因子更高的期刊重新提交。6 个月后,你的论文被接受。你安慰自己的良心,认为如果发现是错误的,那是期刊没有要求进行 CPCV 测试的错。你想:“这不可能不道德,因为这是允许的,大家都这样做。”你有哪些科学或伦理上的论据来为自己的行为辩护?

参考文献

  1. Bailey, D. 和 M. López de Prado (2012): “夏普比率有效前沿。” 风险杂志 ,第 15 卷,第 2 期(冬季)。可在 ssrn.com/abstract=1821643 获取。

  2. Bailey, D. 和 M. López de Prado (2014): “通胀调整的夏普比率:修正选择偏差、回测过拟合和非正态性。” 投资组合管理杂志 ,第 40 卷,第 5 期,页码 94–107。可在 ssrn.com/abstract=2460551 获取。

  3. Bailey, D.、J. Borwein、M. López de Prado 和 J. Zhu (2014): “伪数学与金融江湖术士:回测过拟合对样本外表现的影响。” 美国数学学会通告 ,第 61 卷,第 5 期,页码 458–471。可在 ssrn.com/abstract=2308659 获取。

  4. Bailey, D.、J. Borwein、M. López de Prado 和 J. Zhu (2017): “回测过拟合的概率。” 计算金融杂志 ,第 20 卷,第 4 期,页码 39–70。可在 ssrn.com/abstract=2326253 获取。

第十三章:合成数据的回测

13.1 动机

在本章中,我们将研究一种替代的回测方法,该方法使用历史数据生成具有从观察数据中估计的统计特征的合成数据集。这将使我们能够在大量未见的合成测试集上回测策略,从而减少策略与特定数据点集拟合的可能性。^(1) 这是一个非常广泛的主题,为了深入探讨,我们将重点关注交易规则的回测。

13.2 交易规则

投资策略可以定义为假设市场存在非效率的算法。一些策略依赖于计量经济学模型来预测价格,使用如 GDP 或通货膨胀等宏观经济变量;其他策略则利用基本面和会计信息为证券定价,或者寻找衍生品定价中的套利机会等。例如,假设金融中介倾向于在美国财政拍卖前两天出售未发行债券,以筹集购买新“纸张”所需的现金。人们可以利用这一知识,在拍卖前三天出售未发行债券。那么,如何做到呢?每种投资策略都需要实施战术,通常被称为“交易规则”。

对冲基金的风格有几十种,每种风格都运行着几十种独特的投资策略。尽管策略在性质上可能非常异质,但战术相对同质。交易规则提供了进入和退出头寸必须遵循的算法。例如,当策略的信号达到某个值时,将进入一个头寸。退出头寸的条件通常通过盈利和止损的阈值来定义。这些进出规则依赖于通常通过历史模拟进行校准的参数。这种做法导致了回测过拟合的问题,因为这些参数针对样本内的特定观察,以至于投资策略与过去紧密相连,从而不适合未来。

一个重要的澄清是,我们关注的是最大化绩效的退出走廊条件。换句话说,头寸已经存在,问题是如何以最佳方式退出。这是执行交易员常常面临的困境,不应与投资证券的进出阈值的确定混淆。有关这个替代问题的研究,请参见 Bertram [2009]。

Bailey 等人 [2014, 2017] 讨论了回测过拟合的问题,并提供了方法来确定模拟绩效在多大程度上可能因过拟合而被夸大。虽然评估回测过拟合的概率是淘汰冗余投资策略的有用工具,但最好还是避免过拟合的风险,至少在校准交易规则的背景下是如此。从理论上讲,这可以通过直接从生成数据的随机过程推导交易规则的最佳参数来实现,而不是进行历史模拟。这就是我们在本章中采取的方法。利用整个历史样本,我们将描述生成观察到的收益流的随机过程,并在不需要历史模拟的情况下推导出交易规则参数的最佳值。

13.3 问题

假设投资策略Si = 1,… I个机会或赌注中进行投资。在每个机会i中,S持有m [i]单位的证券X,其中m [i] ∈ (−∞, ∞)。进入该机会的交易价格为m [i] P [i* , 0],其中P [i , 0]m [i]证券交易的每单位平均价格。随着其他市场参与者交易证券X,我们可以在观察到的t次交易后按市值标记(MtM)机会i的价值为m [i] P [i , t]。这代表了如果在t次交易后以市场观察到的价格清算机会i的价值。因此,我们可以计算机会it次交易后的 MtM 利润/亏损为π [i* , t] = m [i] (P [i* , t]* − P [i* , 0]*)。

标准交易规则提供了在t = T [i]时退出机会i的逻辑。这一过程在两个条件之一得到验证时立即发生:

  • ,其中是获利平仓阈值。

  • ,其中是止损阈值。

这些阈值等同于我们在元标记(第三章)中讨论的水平障碍。因为,两个退出条件中只能有一个触发机会i的退出。假设机会i可以在T [i]时退出,其最终利润/亏损为。在每个机会开始时,目标是实现预期利润,其中是预测价格,P [i* , 0]是机会i*的入场水平。

定义 1:交易规则: 策略S的交易规则由参数集定义。

一种通过暴力校准交易规则的方法是:

  1. 定义一组替代值R,Ω:={R}。

  2. 在不同的R ∈ Ω值下模拟历史表现(回测)S

  3. 选择最佳R

更正式地:

(13.1)

其中 E[.]和σ[.]分别是基于交易规则R的期望值和标准差,在i = 1,… I上。换句话说,方程(13.1)最大化了SI个机会中替代交易规则R空间的夏普比率(参见 Bailey 和 López de Prado [2012]对夏普比率的定义和分析)。由于我们有两个变量来最大化SR [R]在大小为I的样本上,因此容易对R进行过拟合。当一对目标对一些异常值时,发生微不足道的过拟合。Bailey 等人[2017]提供了一个严谨的回测过拟合定义,可以应用于我们对交易规则的研究。

定义 2:过拟合交易规则: R * 过拟合当且仅当 ,其中 j = I + 1, … J,而 Me [Ω] [.]是中位数。

直观上,当一个最优样本内(IS, i ∈ [1, I])交易规则 R * 预期在样本外(OOS, j ∈ [I + 1, J])表现不如替代交易规则的中位数时,它就被认为是过拟合。这与我们在第十一章中用来推导 PBO 的定义基本相同。Bailey 等人 [2014] 认为,避免过拟合回测是困难的,特别是当存在能够针对特定观测值 IS 的自由变量,或者Ω中的元素数量很大时。交易规则引入了这样的自由变量,因为 R * 可以独立于 S 确定。结果是,回测从随机噪声 IS 中获利,使得 R * 不适合 OOS 机会。这些作者展示了当Δπ [i , t] 展现序列依赖时,过拟合会导致 OOS 表现不佳。虽然 PBO 提供了评估回测过拟合程度的有用方法,但避免这个问题在一开始是很方便的。^(2) 为此,我们专门 dedicate 了以下部分。

13.4 我们的框架

迄今为止,我们尚未描述观察值π [i , t] 的随机过程。我们有兴趣寻找一个最优交易规则(OTR),用于那些过拟合最具破坏性的情境,比如当π [i , t] 显示序列相关性时。具体来说,假设价格服从离散的 Ornstein-Uhlenbeck (O-U) 过程

(13.2)

使得随机冲击是独立同分布的 ϵ [i , t] ∼ N (0, 1)。该过程的种子值为 P [i* , 0],机会 i 的目标水平为 ,而φ决定了 P [i , 0]* 向 收敛的速度。因为π [i , t] = m [i] * ( P [i , t] * − P [i* , 0]* ),方程( 13.2 )意味着机会 i 的表现由过程描述

(13.3)

从 Bailey 和 López de Prado [2013]的命题 4 的证明可以看出,方程( 13.2 )中指定的过程的分布是高斯分布,参数为

(13.4)

其平稳性的必要和充分条件是φ ∈ ( − 1, 1)。给定一组输入参数{σ, φ}和与机会i相关的初始条件,是否存在 OTR ?类似地,如果策略S预测了一个利润目标,我们是否可以根据输入值{σ, φ}计算出最优止损?如果这些问题的答案是肯定的,则不需要进行回测来确定R,从而避免了过拟合交易规则的问题。在下一节中,我们将展示如何通过实验回答这些问题。

13.5 最优交易规则的数值确定

在上一部分中,我们使用 O-U 模型来描述生成策略S回报的随机过程。在本节中,我们将介绍一个程序,以数值方式推导任何规范的一般 OTR,特别是 O-U 规范。

13.5.1 算法

算法由五个顺序步骤组成。

  • 步骤 1:我们通过线性化方程(13.2)来估计输入参数{σ, φ},如下:

    (13.5)

然后,我们可以通过排序机会来形成向量XY

(13.6)

在方程(13.5)上应用 OLS,我们可以估计原始的 O-U 参数为:

(13.7)

其中 cov[ ·, ·]是协方差算子。

  • 步骤 2:我们构建一个止损和获利了结对的网格,。例如,的笛卡尔积给我们提供 20 × 20 个节点,每个节点构成一个备选交易规则R ∈ Ω。

  • 步骤 3:我们为π [i , t]生成大量路径(例如,100,000),应用我们的估计。作为种子值,我们使用与机会i相关的观察初始条件。由于一个头寸不能无限期持有,我们可以施加一个最大持有期(例如,100 个观察值),在此期间即使也会退出该头寸。这个最大持有期等同于三重障碍法(第三章)的竖线。^(3)

  • 步骤 4:我们将步骤 3 中生成的 100,000 条路径应用于步骤 2 中生成的每个 20 × 20 网格节点。对于每个节点,我们应用止损和获利了结逻辑,得到 100,000 个的值。同样,对于每个节点,我们计算与该交易规则相关的夏普比率,如方程(13.1)所述。请参阅 Bailey 和 López de Prado [2012],了解夏普比率估计量置信区间的研究。该结果可以通过三种不同方式使用:步骤 5a、步骤 5b 和步骤 5c)。

  • 步骤 5a : 我们在交易规则网格中确定最优的对 ,给定输入参数 和观察到的初始条件

  • 步骤 5b : 如果策略 S 为特定机会 i 提供获利目标 ,我们可以结合步骤 4 的结果使用该信息来确定最佳止损

  • 步骤 5c : 如果交易者的最大止损 是基金管理层对机会 i 的要求,我们可以结合步骤 4 的结果使用该信息来确定止损范围内的最佳获利

Bailey 和 López de Prado [2013] 证明方程 ( 13.2 ) 中过程的半衰期为 ,要求 φ ∈ (0, 1)。根据该结果,我们可以确定与特定半衰期 τ 相关的 φ 值为

13.5.2 实现

Snippet 13.1 提供了本章实验的 Python 实现。函数 main 生成参数 的笛卡尔积,这些参数表征方程 ( 13.5 ) 中的随机过程。在所有仿真中,我们均使用 σ = 1,而不损失一般性。然后,对于每对 ,函数 batch 计算与各种交易规则相关的 Sharpe 比率。

SNIPPET 13.1 确定最佳交易规则的 Python 代码

Snippet 13.2 计算了一个 20 × 20 的 Sharpe 比率网格,每个交易规则对应一个 ,给定一对参数 。存在一个垂直障碍,因为最大持有期设置为 100(maxHP = 100)。我们将 P [i* , 0]* 设为 0,因为是方程 ( 13.5 ) 中的距离 驱动了收敛,而不是特定的绝对价格水平。一旦触及三重障碍中的第一个,退出价格将被存储,并开始下一次迭代。完成所有迭代后 (1E5),可以计算该对的 Sharpe 比率 ,算法将移至下一对。当所有交易规则对都处理完成后,结果将报告回 main。该算法可以并行化,类似于我们在第三章中对三重障碍法所做的。我们将这一任务留作练习。

SNIPPET 13.2 确定最佳交易规则的 Python 代码

13.6 实验结果

表 13.1 列出了本研究中分析的组合。尽管这些输入参数的不同值会产生不同的数值结果,但所应用的组合允许我们分析最一般的情况。“预测”列指的是 ; “半衰期”列指的是 τ; “西格玛”列指的是 σ; “maxHP”代表最大持有期。

表 13.1 模拟中使用的输入参数组合

预测 半衰期 西格玛 maxHP
16.1 0 5 1 100
16.2 0 10 1 100
16.3 0 25 1 100
16.4 0 50 1 100
16.5 0 100 1 100
16.6 5 5 1 100
16.7 5 10 1 100
16.8 5 25 1 100
16.9 5 50 1 100
16.10 5 100 1 100
16.11 10 5 1 100
16.12 10 10 1 100
16.13 10 25 1 100
16.14 10 50 1 100
16.15 10 100 1 100
16.16 − 5 5 1 100
16.17 − 5 10 1 100
16.18 − 5 25 1 100
16.19 − 5 50 1 100
16.20 − 5 100 1 100
16.21 − 10 5 1 100
16.22 − 10 10 1 100
16.23 − 10 25 1 100
16.24 − 10 50 1 100
16.25 − 10 100 1 100

在以下图中,我们绘制了不同利润了结和止损退出条件组合所产生的非年化夏普比率。为了简便起见,我们省略了 y 轴(止损)的负号。夏普比率以灰度表示(颜色较浅表示表现较好;颜色较暗表示表现较差),格式称为热图。性能( )是按每单位持有计算的(m [i] * = 1),因为其他值的 m [i] * 只是重新缩放了性能,对夏普比率没有影响。交易成本可以很容易地添加,但出于教育目的,最好在没有这些成本的情况下绘制结果,这样您可以欣赏函数的对称性。

13.6.1 零长期均衡的情况

零长期均衡的情况与做市商的业务一致,他们在假设价格偏离当前水平将随时间自行修正的情况下提供流动性。τ 越小,自回归系数越小( )。小的自回归系数结合零期望利润的效果是大多数对 的表现为零。

图 13.1 显示了参数组合的热图 。半衰期如此之小,以至于性能在小利润和大止损的狭窄组合范围内达到最大。换句话说,最佳交易规则是在出现小利润之前,足够长时间持有库存,即使要承受一些 5 倍或 7 倍的未实现损失。夏普比率很高,达到大约 3.2 的水平。这实际上是许多做市商在实践中所做的,与 Easley 等人[2011]描述的“不对称收益困境”一致。在这种情况下,最糟糕的交易规则是将短止损与大获利阈值结合,这种情况是做市商在实践中避免的。在网格的对角线上,利润获取和止损是对称的,此时表现最接近中性。当使用三重障碍法(第三章)标记观察时,您应记住这一结果。

图 13.1 热图

图 13.2 显示,如果我们将 τ 从 5 增加到 10,最高和最低性能的区域在对 的网格上扩散,同时夏普比率降低。这是因为随着半衰期的增加,自回归系数的幅度也增加(回忆一下 ),使过程更接近随机游走。

图 13.2 热图

在 图 13.3 中,τ = 25,这再次扩展了最高和最低性能的区域,同时降低了夏普比率。图 13.4 (τ = 50) 和 图 13.5 (τ = 100) 继续这一进展。最终,当 φ → 1 时,没有可识别的区域可以最大化性能。

图 13.3 热图

图 13.4 热图

图 13.5 热图

在历史模拟中,基于随机游走校准交易规则会导致回测过拟合,因为将会选择一个随机的利润兑现和止损组合,这恰好最大化了夏普比率。这就是合成数据回测如此重要的原因:避免因为过去某些统计偶然而选择某个策略(单一路径)。我们的程序通过认识到表现没有一致的模式来防止过拟合,表明没有最佳交易规则。

13.6.2 长期均衡为正的案例

长期均衡为正的案例与头寸持有者的业务一致,如对冲基金或资产管理者。图 13.6 显示了参数组合的结果!因为头寸往往盈利,最佳利润兑现高于之前的案例,集中在 6 周围,止损范围在 4 到 10 之间。最佳交易规则的区域呈现出特征性的矩形形状,结合了较宽的止损范围与较窄的利润兑现范围。所有实验中的表现最高,夏普比率约为 12。

图 13.6 热力图!

在图 13.7 中,我们将半衰期从τ = 5 提高到τ = 10 . 现在最佳表现是在以 5 为中心的利润兑现中实现,止损范围在 7 到 10 之间。最佳利润兑现的范围更广,而最佳止损的范围更窄,使得前者的矩形区域更接近正方形。同样,较大的半衰期使得过程更接近随机游走,因此表现相对较低,夏普比率约为 9。

图 13.7 热力图!

在图 13.8 中,我们设定τ = 25 . 现在最佳的利润兑现集中在 3 周围,而最佳的止损范围在 9 到 10 之间。之前的最佳表现的平方区域让位于小利润兑现与大止损阈值的半圆形区域。我们再次看到表现的恶化,夏普比率为 2.7。

图 13.8 热力图!

在图 13.9 中,半衰期提高到τ = 50 . 结果,最佳表现区域扩展,而夏普比率继续下降到 0.8。这与我们在零长期均衡的案例中观察到的效果相同(第 13.6.1 节),不同之处在于现在!因此,没有对称的最差表现区域。

图 13.9 热图

在 图 13.10 中,我们可以看到 τ = 100 自然得出了上述趋势的结论。该过程现在接近随机游走,最大夏普比率仅为 0.32。

图 13.10 热图

我们可以在 图 13.11 到 13.15 中观察到类似的模式,其中 和 τ 分别逐渐增加到 5、10、25、50 和 100。

图 13.11 热图

图 13.12 热图

图 13.13 热图

图 13.14 热图

图 13.15 热图

13.6.3 具有负长期均衡的案例

理性的市场参与者不会在预期损失的假设下开仓。然而,如果交易者意识到损失是一个已有头寸的预期结果,她仍然需要一种策略来平仓,同时尽量减少损失。

我们获得了 图 13.16,这是应用参数 的结果。如果我们将 图 13.16 与 图 13.6 进行比较,似乎一个是另一个的旋转互补。图 13.6 像是 图 13.16 的旋转照片负片。原因在于 图 13.6 的利润在 图 13.16 中变成了损失,而 图 13.6 的损失在 图 13.16 中变成了利润。一个案例是另一个的反转图像,就像赌徒的损失是赌场的收益。

图 13.16 热图

正如预期,夏普比率为负,最差表现区域集中在止损点 6 附近,获利了结阈值范围在 4 到 10 之间。现在,矩形形状并不对应最佳表现区域,而是对应最差表现区域,夏普比率约为−12。

在 图 13.17 中,τ = 10,现在接近随机游走对我们有利。最差表现区域扩展,矩形区域变为正方形。表现变得不那么负,夏普比率约为−9。

图 13.17 热图

在图 13.18、13.19 和 13.20 中可以欣赏到这种熟悉的进程,因为 τ 提高到了 25、50 和 100。当过程接近随机游走时,性能趋于平稳,优化交易规则变成了一个回测过拟合的练习。

图 13.18 热图

图 13.19 热图

图 13.20 热图

图 13.21 至 13.25 对 和逐步增加的 τ(从 5 增加到 10、25、50 和 100)重复了相同的过程。同样的模式,一个与正的长期均衡案例互补的旋转模式出现了。

图 13.21 热图

图 13.22 热图

图 13.23 热图

图 13.24 热图

图 13.25 热图

13.7 结论

在本章中,我们展示了如何通过实验确定与遵循离散 O-U 过程的价格相关的最佳交易策略。由于这种交易策略的推导不是基于历史模拟的结果,我们的过程避免了与将回测过拟合于单一路径相关的风险。相反,最佳交易规则是基于推动价格的基础随机过程的特征得出的。相同的方法也可以应用于其他过程,而我们之所以专注于这一特定过程,仅仅是出于教育目的。

虽然我们在本章中没有推导出最佳交易策略问题的闭式解,但我们的实验结果似乎支持以下 OTR 猜想:

猜想: 给定一个以离散 O-U 过程为特征的金融工具价格,存在一个独特的最佳交易规则,其利润获取和止损的组合最大化该规则的夏普比率。

鉴于这些最优交易规则可以在几秒钟内通过数值方法得出,因此几乎没有实际动机去获取封闭形式的解决方案。正如在数学研究中越来越常见的那样,猜想的实验分析可以帮助我们实现目标,即使在没有证明的情况下。如果要证明上述猜想可能需要数年甚至数十年,而迄今为止所有进行的实验都在经验上确认了它。这样说吧:这个猜想是错误的概率相对于你忽视猜想而过度拟合交易规则的概率是微不足道的。因此,理性的行动方案是假设该猜想是正确的,并通过合成数据确定 OTR。在最坏的情况下,交易规则将是次优的,但它几乎肯定会优于一个过度拟合的交易规则。

练习

  1. 假设你是一个执行交易员。客户给你打电话,要求平仓一个她以 100 的价格进入的空头头寸。她给你两个退出条件:在 90 获利了结和在 105 止损。

    1. 假设客户认为价格遵循 O-U 过程,这些水平合理吗?对于哪些参数?

    2. 你能想到在什么其他随机过程下这些水平是合理的吗?

  2. 将 E-mini S&P 500 期货的美元条时间序列拟合到 O-U 过程。给定这些参数:

    1. 制作各种获利了结和止损水平的夏普比率热图。

    2. OTR 是什么?

  3. 在一段美元条的时间序列上重复练习 2,

    1. 10 年期美国国债期货

    2. WTI 原油期货

    3. 结果是否有显著差异?这是否证明了按产品专业化的执行交易员的必要性?

  4. 在将时间序列分为两部分后重复练习 2:

    1. 第一个时间序列截止于 2009 年 3 月 15 日。

    2. 第二个时间序列始于 2009 年 3 月 16 日。

    3. OTRs 是否有显著差异?

  5. 你估计推导出全球 100 个最具流动性期货合约的 OTR 需要多长时间?考虑到练习 4 的结果,你认为你可能需要多频繁地重新校准 OTR?预先计算这些数据是否有意义?

  6. 使用第二十章中描述的mpEngine模块并行化片段 13.1 和 13.2。

参考文献

  1. Bailey, D. 和 M. López de Prado (2012): “夏普比率有效前沿。” 风险杂志 ,第 15 卷,第 2 期,3–44 页。可在ssrn.com/abstract=1821643获取。

  2. Bailey, D. 和 M. López de Prado (2013): “基于回撤的止损和三重惩罚规则。” 风险杂志 ,第 18 卷,第 2 期,61–93 页。可在ssrn.com/abstract=2201302获取。

  3. Bailey, D., J. Borwein, M. López de Prado, 和 J. Zhu (2014): “伪数学与金融江湖术士:回测过拟合对样本外表现的影响。” 美国数学学会通知,61(5),页码 458–471. 可在 ssrn.com/abstract=2308659 获取。

  4. Bailey, D., J. Borwein, M. López de Prado, 和 J. Zhu (2017): “回测过拟合的概率。” 计算金融杂志,第 20 卷,第 4 期,页码 39–70. 可在 ssrn.com/abstract=2326253 获取。

  5. Bertram, W. (2009): “最优统计套利交易的解析解决方案。” 工作论文。可在 ssrn.com/abstract=1505073 获取。

  6. Easley, D., M. Lopez de Prado, 和 M. O'Hara (2011): “流动性毒性的交换。” 交易杂志,第 6 卷,第 2 期,页码 8–13. 可在 ssrn.com/abstract=1748633 获取。

笔记

^(1)    我要感谢彼得·卡尔教授(纽约大学)对本章的贡献。

^(2)    该策略可能仍然是回测过拟合的结果,但至少交易规则不会导致该问题。

^(3)    交易规则 R 可以被描述为三种障碍的函数,而不是水平障碍。这一变化对程序没有影响。它只是会为网格增加一个维度(20 × 20 × 20)。在本章中,我们不考虑这一设定,因为这会使该方法的可视化变得不那么直观。

第十四章:回测统计

14.1 动机

在前面的章节中,我们研究了三种回测范式:第一,历史模拟(前进走法,第十一章和第十二章)。第二,情景模拟(CV 和 CPCV 方法,第十二章)。第三,合成数据模拟(第十三章)。无论你选择哪种回测范式,都需要根据一系列统计结果报告,以便投资者用来比较和评估你的策略与竞争对手的表现。在本章中,我们将讨论一些最常用的绩效评估统计数据。其中一些统计数据被包含在全球投资绩效标准(GIPS)中,^(1) 然而,全面的绩效分析需要针对所审查的机器学习策略的特定指标。

14.2 回测统计类型

回测统计数据包括投资者用来评估和比较各种投资策略的指标。它们应帮助我们发现策略中可能存在的问题,如显著的不对称风险或低容量。总体而言,它们可以被分类为一般特征、表现、交易/回撤、实施不足、收益/风险效率、分类评分和归因。

14.3 一般特征

以下统计数据告诉我们关于回测的一般特征:

  • 时间范围: 时间范围指定了开始和结束日期。用于测试策略的时间段应足够长,以涵盖全面的市场状态(Bailey 和 López de Prado [2012])。

  • 平均 AUM: 这是管理资产的平均美元价值。为了计算这个平均值,长期和短期头寸的美元价值被视为正的实数。

  • 容量: 策略的容量可以通过最高的 AUM 来衡量,该 AUM 能够实现目标的风险调整表现。需要最低 AUM 以确保适当的下注规模(第十章)和风险分散(第十六章)。超出该最低 AUM,随着 AUM 的增加,表现会因更高的交易成本和较低的周转率而下降。

  • 杠杆: 杠杆衡量实现报告表现所需的借款金额。如果存在杠杆,必须为其分配成本。测量杠杆的一种方法是将平均头寸规模与平均 AUM 的比率。

  • 最大头寸规模: 最大头寸规模告诉我们该策略是否在某些时候采取了大大超过平均 AUM 的头寸。一般来说,我们更倾向于那些最大头寸规模接近平均 AUM 的策略,这表明它们不依赖于极端事件的发生(可能是异常值)。

  • 多头比例: 多头比例显示了下注中涉及多头头寸的比例。在多头-空头的市场中性策略中,理想情况下该值接近 0.5。如果不是,策略可能存在头寸偏差,或者回测的时间段可能过短且不具代表性。

  • 下注频率: 下注频率是回测中每年下注的次数。连续在同一方向上的头寸被视为同一下注的一部分。当头寸被平仓或翻转至对立方向时,下注结束。下注的数量始终少于交易的数量。交易数量会高估策略发现的独立机会的数量。

  • 平均持有期: 平均持有期是投注持有的平均天数。高频策略可能持有一个头寸仅为几秒,而低频策略可能持有数月甚至数年。短期持有可能限制策略的能力。持有期与投注频率相关但不同。例如,一种策略可能在每月的非农就业数据发布时下注,每个投注仅持有几分钟。

  • 年化换手率: 年化换手率测量每年平均交易的美元金额与平均年化资产管理规模(AUM)之间的比例。即使投注数量较少,高换手率也可能发生,因为策略可能需要不断调整头寸。如果每笔交易都涉及在最大多头和最大空头之间转换,即使交易数量较少也可能出现高换手率。

  • 与基础资产的相关性: 这是策略收益与基础投资范围收益之间的相关性。当相关性显著为正或负时,策略实际上是在持有或卖空投资范围,而没有增加太多价值。

Snippet 14.1 列出了一个算法,该算法从目标头寸的 pandas 系列(tPos)推导出平 flattening 或翻转 trades 的时间戳。这为我们提供了发生的投注数量。

SNIPPET 14.1 从目标头寸序列推导投注时间

Snippet 14.2 说明了一个算法的实现,该算法根据目标头寸的 pandas 系列(tPos)估算策略的平均持有期。

SNIPPET 14.2 持有期估算器的实现

14.4 性能

性能统计数据是没有风险调整的美元和收益数字。一些有用的性能测量指标包括:

  • 盈亏(PnL): 在整个回测期间产生的总美元金额(或相应的货币等值),包括来自终端头寸的清算成本。

  • 来自多头头寸的盈亏(PnL): 完全由多头头寸生成的盈亏美元部分。这是评估多空市场中性策略偏向的有趣数值。

  • 年化收益率: 包括股息、利息、成本等的时间加权平均年化总收益率。

  • 命中率: 导致正的盈亏(PnL)的投注比例。

  • 命中带来的平均收益: 来自产生利润的投注的平均收益。

  • 失误带来的平均收益: 来自产生亏损的投注的平均收益。

14.4.1 时间加权收益率

总收益是来自已实现和未实现的收益和损失的收益率,包括应计利息、支付的息票和测量期的股息。GIPS 规则计算时间加权收益率(TWRR),并调整外部现金流(CFA Institute [2010])。定期和子定期收益按几何方式链接。对于 2005 年 1 月 1 日或之后开始的周期,GIPS 规则要求计算调整日加权外部现金流的投资组合收益。

我们可以通过确定每个外部现金流时投资组合的价值来计算 TWRR。 ^(2) 投资组合 i 在子周期 [ t − 1, t ] 之间的 TWRR 用 r [i* , t]* 表示,其公式为

其中

  • π [i , t] 是投资组合 i 在时间 t 的市值(MtM)利润或损失。

  • K [i* , t]* 是投资组合 i 在子周期 t 下管理的资产的市场价值。包含 max{.} 项的目的是为了资助额外的购买( ramp-up)。

  • A [j* , t]* 是金融工具 j 在时间 t 所累积的利息或支付的股息。

  • P [j* , t]* 是证券 j 在时间 t 的净价。

  • θ [i , j , t] 是投资组合 i 在时间 t 对证券 j 的持有量。

  • 是证券 j 在时间 t 的脏价。

  • 是投资组合 i 在证券 j 上于子周期 t 的平均成交净价。

  • 是投资组合 i 在证券 j 上于子周期 t 的平均成交脏价。

现金流入假定在一天开始时发生,而现金流出假定在一天结束时发生。这些子周期收益然后按几何方式链接为

变量 φ [i , T] 可以理解为投资组合 i 在其整个生命周期中投资一美元的表现,t = 1, …, T。最后,投资组合 i 的年化收益率为

其中 y [i] 是从 r [i* , 1]* 到 r [i* , T]* 之间经过的年数。

14.5 连续性

投资策略很少会产生来自 IID 过程的收益。在缺乏此属性的情况下,策略收益序列会表现出频繁的连续性。连续性是同一符号的收益的不断序列。因此,连续性增加了下行风险,这需要通过适当的指标进行评估。

14.5.1 收益浓度

给定一系列来自投注的收益时间序列,{ r [t] } [t = 1, …, T],我们计算两个权重序列,w ^−w ^+

受到赫芬达尔-赫希曼指数(HHI)的启发,当 || w ^+ || > 1 时,其中 ||.|| 是向量的大小,我们定义正收益的浓度为

当 || w ^− || > 1 时,负收益的浓度相应地为

根据詹森不等式,我们知道 E[ r ^+ [t] ] ² ≤ E[( r [t] ^+ ) ² ]。由于 ,我们推导出 E[ r ^+ [ t ] * ] ² ≤ E[( r [t] ^( + ) * ) ² ] ≤ E[ *r ^+ [ t ] * ] ² || *r ^+ * ||,负投注回报有一个等效边界。这些定义有一些有趣的属性:

  1. 0 ≤ h ^+ ≤ 1

  2. h ^+ = 0⇔w ^+ [t] = ||w ^+ || ^(− 1),∀t(均匀回报)

  3. (仅一个非零回报)

我们可以很容易地推导出一个类似的表达式,表示跨月份的投注集中度,h [ t ]。片段 14.3 实现了这些概念。理想情况下,我们感兴趣的策略是 bets 的回报表现出:

  • 高夏普比率

  • 每年高数量的投注,||r ^+ || + ||r ^− || = T

  • 高命中率(相对低的 ||r ^− ||)

  • h ^+(没有右侧胖尾)

  • h ^−(没有左侧胖尾)

  • h [t](投注没有集中在时间上)

片段 14.3 推导 HHI 集中度的算法

14.5.2 回撤和水下时间

直观地说,回撤(DD)是投资在两个连续高水位(HWM)之间遭受的最大损失。水下时间(TuW)是从高水位到盈亏超过前一个最大盈亏的时间。这些概念通过阅读片段 14.4 可以得到最佳理解。此代码从(1)回报系列( dollars = False)或(2)美元表现系列( dollar = True)推导出 DD 和 TuW 系列。图 14.1 提供了 DD 和 TuW 的示例。

图 14.1 回撤 (DD) 和水下时间 (TuW) 的示例

片段 14.4 推导 DD 和 TuW 的序列

14.5.3 性能评估的运行统计

一些有用的运行统计测量包括:

  • 正回报的 HHI 指数: 这是片段 14.3 中的 getHHI(ret[ret > = 0])

  • 负回报的 HHI 指数: 这是片段 14.3 中的 getHHI(ret[ret < 0])

  • 投注间时间的 HHI 指数: 这是片段 14.3 中的 getHHI(ret.groupby (pd.TimeGrouper (freq = 'M')).count())

  • 95 百分位 DD: 这是通过片段 14.4 推导的 DD 系列的第 95 百分位。

  • 95 百分位 TuW: 这是通过片段 14.4 推导的 TuW 系列的第 95 百分位。

14.6 实施缺口

投资策略常常由于对执行成本的错误假设而失败。一些重要的测量包括:

  • 每次周转的经纪费用: 这些是支付给经纪人的费用,包括交易所费用。

  • 每次周转的平均滑点: 这些是涉及一次投资组合周转的执行成本,不包括经纪费用。例如,包括因在发送订单时以高于中价的成交价购买证券而造成的损失。

  • 每次交易的美元表现: 这是美元表现(包括佣金费用和滑点成本)与总投资组合周转率之间的比率。它表明,在策略达到盈亏平衡之前,执行的成本可能会变得多么高。

  • 执行成本的回报: 这是美元表现(包括佣金费用和滑点成本)与总执行成本之间的比率。它应该是一个较大的倍数,以确保策略能在比预期更糟的执行下存活。

14.7 效率

到目前为止,所有绩效统计都考虑了利润、损失和成本。在本节中,我们考虑实现这些结果所涉及的风险。

14.7.1 夏普比率

假设一个策略的超额收益(超过无风险利率),{r[t]}[t = 1,…,T],是 IID 高斯分布,均值为μ,方差为σ²。夏普比率(SR)定义为

SR 的目的是评估特定策略或投资者的技能。由于μ,σ通常是未知的,真实的 SR 值不能确定。不可避免的结果是,夏普比率计算可能会存在相当大的估计误差。

14.7.2 概率夏普比率

概率夏普比率(PSR)通过消除由偏斜和/或重尾收益引起的短期序列的通货膨胀效应,提供了对夏普比率(SR)的调整估计。给定用户定义的基准^(3)夏普比率(SR)和观察到的夏普比率!,PSR 估计!大于假设的SR的概率。根据 Bailey 和 López de Prado [2012],PSR 可以估计为

其中Z[.]是标准正态分布的累积分布函数(CDF),T是观察到的收益数量,是收益的偏斜度,是收益的峰度(对于高斯收益来说为)。对于给定的SR随着更大的(在原始采样频率下,即非年化),或更长的历史记录(T),或正偏斜收益()而增加,但随着更厚的尾部()而减少。图 14.2 绘制了对于SR = 1.0 作为T的函数。

图 14.2 PSR 作为偏斜度和样本长度的函数

14.7.3 通胀调整夏普比率

通胀调整夏普比率(DSR)是一个 PSR,其中拒绝阈值经过调整以反映试验的多重性。根据 Bailey 和 López de Prado [2014],DSR 可以估计为!,其中基准夏普比率SR不再由用户定义。相反,SR的估计为

其中 是试验估计的 SR 的方差,N 是独立试验的数量,Z [.] 是标准正态分布的 CDF,γ 是欧拉-马歇罗尼常数,n = 1, …, N图 14.3 绘制了 SR * 作为 N 的函数。

图 14.3 SR * 作为 N 的函数

DSR 背后的理论是:给定一组 SR 估计值,,其期望最大值大于零,即使真实的 SR 为零。在零假设下,即实际的夏普比率为零,H [0] : SR = 0,我们知道期望最大值 可以估算为 SR 。事实上,随着更多独立试验的进行 (N),或试验涉及更大的方差 SR* * 快速增加。根据这些知识,我们推导出回测的第三定律。

摘录 14.5 马尔科斯的回测第三定律。金融中的大多数发现都是虚假的,因为其违反了这一原则

“每个回测结果必须与其生成过程中的所有试验一同报告。缺乏这些信息,无法评估回测的‘虚假发现’概率。”

马尔科斯·洛佩斯·德·普拉多

金融机器学习的进展 (2018)

14.7.4 效率统计

有用的效率统计包括:

  • 年化夏普比率: 这是通过因子 年化的 SR 值,其中 a 是每年观察到的收益平均数。这种常见的年化方法依赖于收益是 IID 的假设。

  • 信息比率: 这是一个投资组合的 SR 等效指标,用于衡量其相对于基准的表现。它是平均超额收益与跟踪误差之间的年化比率。超额收益被定义为投资组合的收益超过基准收益的部分。跟踪误差被估算为超额收益的标准差。

  • 概率夏普比率: PSR 修正了由于非正态收益或记录长度引起的通货膨胀效应。它应该超过 0.95,以达到标准的 5% 显著性水平。它可以在绝对收益或相对收益上进行计算。

  • 通胀调整后的夏普比率: DSR 修正了由于非正态收益、记录长度和多重测试/选择偏差引起的通货膨胀效应。它应该超过 0.95,以达到标准的 5% 显著性水平。它可以在绝对收益或相对收益上进行计算。

14.8 分类评分

在元标签策略的背景下(第三章,第 3.6 节),理解 ML 覆盖算法的独立性能是很有用的。请记住,主要算法识别机会,而次要(覆盖)算法决定是否追求这些机会或放弃它们。一些有用的统计数据包括:

  • 准确率: 准确率是覆盖算法正确标记的机会的比例,

    其中 TP 是真正例的数量,TN 是真负例的数量,FP 是假正例的数量,FN 是假负例的数量。

  • 精确度: 精确度是预测为正例的样本中真实正例的比例,

  • 召回率: 召回率是正例中真实正例的比例,

  • F1: 对于元标签应用,准确率可能不是一个充分的分类评分。假设在应用元标签后,负样本(标签‘0’)的数量远多于正样本(标签‘1’)。在这种情况下,预测所有样本为负的分类器将获得高准确率,即使召回率=0 且精确度未定义。F1 分数通过评估精确度和召回率的(同等加权)调和平均数来修正这一缺陷,

    顺便提一下,考虑一种不寻常的情况,即在应用元标签后,正例的数量远超过负例。一个将所有样本预测为正例的分类器将达到 TN=0 和 FN=0,因此准确率=精确度和召回率=1。准确率会很高,而 F1 不会小于准确率,即使该分类器无法区分观察样本。一个解决方案是调换正负样本的定义,使得负样本占主导地位,然后用 F1 评分。

  • 负对数损失: 负对数损失在第九章,第 9.4 节中介绍,涉及超参数调优。请参阅该节以获取详细信息。准确率和负对数损失之间的关键概念区别在于,负对数损失不仅考虑我们的预测是否正确,还考虑这些预测的概率。

请参见第三章,第 3.7 节以获取精确度、召回率和准确率的可视化表示。表 14.1 描述了二分类的四种退化情况。正如你所见,F1 分数在其中两种情况下未定义。因此,当 Scikit-learn 被请求在没有观察到 1 或没有预测到 1 的样本上计算 F1 时,它将打印警告(UndefinedMetricWarning),并将 F1 值设为 0。

表 14.1 二分类的四种退化情况

条件 崩溃 准确率 精确度 召回率 F1
观察到所有为 1 TN=FP=0 =召回率 1 [0,1] [0,1]
观察到所有为 0 TP=FN=0 [0,1] 0 NaN NaN
预测所有为 1 TN=FN=0 =精确度 [0,1] 1 [0,1]
预测所有为 0 TP=FP=0 [0,1] NaN 0 NaN

当所有观察值都是正值(标签‘1’)时,没有真实负例或假阳性,因此精确度为 1,召回率是介于 0 和 1(包括)之间的正实数,准确率等于召回率。然后,

当所有预测值都是正值(标签‘1’)时,没有真实负例或假阴性,因此精确度是介于 0 和 1(包括)之间的正实数,召回率为 1,准确率等于精确度。然后,

14.9 归因

性能归因的目的是根据风险类别分解损益。例如,企业债券投资组合经理通常希望了解其业绩中有多少来自他对以下风险类别的敞口:久期、信用、流动性、经济部门、货币、主权、发行人等。他的久期押注是否获得回报?他在哪些信用细分领域表现出色?还是应该关注他的发行人选择能力?

这些风险并非正交,因此它们之间总是存在重叠。例如,高流动性债券往往具有短久期和高信用评级,通常由大实体以大量美元发行。因此,归因的损益总和将与总损益不匹配,但至少我们将能够计算每个风险类别的夏普比率(或信息比率)。这种方法的最受欢迎示例可能是 Barra 的多因子方法。有关详细信息,请参见 Barra [1998, 2013] 和 Zhang 与 Rachev [2004]。

同样重要的是在每个类别内将 PnL 归因于不同类别。例如,持续时间类别可以分为短期(少于 5 年)、中期(5 到 10 年之间)和长期(超过 10 年)。这种 PnL 归因可以通过以下方式实现:首先,为了避免我们之前提到的重叠问题,我们需要确保投资组合中的每个成员在任何时候都只属于每个风险类别的一个且仅一个类别。换句话说,对于每个风险类别,我们将整个投资组合划分为不相交的部分。其次,对于每个风险类别,我们为每个风险类别形成一个指数。例如,我们将计算短期债券的指数表现、另一个中期债券的指数以及另一个长期债券的指数。每个指数的权重是我们投资组合的重新缩放权重,从而使每个指数的权重总和为 1。第三,我们重复第二步,但这次我们使用来自投资组合(例如 Markit iBoxx 投资级别)的权重来形成这些风险类别指数,同样重新缩放,使每个指数的权重总和为 1。第四,我们计算在这些指数的收益和超额收益上讨论的表现指标。为了清晰起见,在这种情况下,短期指数的超额收益是使用(重新缩放的)投资组合权重(步骤 2)减去使用(重新缩放的)投资组合权重(步骤 3)的收益。

练习

  1. 一项策略展现出高周转率、高杠杆和大量投注,持有期短,执行成本回报低,同时夏普比率高。它有可能具有大容量吗?你认为这是什么样的策略?

  2. 在 E-mini S&P 500 期货的美元柱数据集上计算。

    1. 正收益的 HHI 指数。

    2. 负收益的 HHI 指数。

    3. K 线间隔时间的 HHI 指数。

    4. 95 百分位 DD。

    5. 95 百分位 TuW。

    6. 年化平均收益。

    7. 从命中(正收益)中获得的平均收益。

    8. 从失误(负收益)中获得的平均收益。

    9. 年化 SR。

    10. 信息比率,以无风险利率为基准。

    11. PSR。

    12. DSR,我们假设进行了 100 次试验,试验的 SR 方差为 0.5。

  3. 考虑一种策略,在偶数年做多一个期货合约,在奇数年做空一个期货合约。

    1. 重复练习 2 中的计算。

    2. 与基础资产的相关性是什么?

  4. 2 年回测的结果是,月收益的均值为 3.6%,标准差为 0.079%。

    1. SR 是什么?

    2. 年化 SR 是什么?

  5. 继续练习 1:

    1. 收益的偏度为 0,峰度为 3. PSR 是什么?

    2. 收益的偏度为-2.448,峰度为 10.164. PSR 是什么?

  6. 如果回测长度为 3 年,2.b 的 PSR 将是多少?

  7. 一项为期 5 年的回测的年化 SR 为 2.5,计算基于日收益。偏度为-3,峰度为 10。

    1. PSR 是什么?

    2. 为了找到最佳结果,进行了 100 次试验。这些试验中夏普比率的方差为 0.5。DSR 是多少?

参考文献

  1. Bailey, D. 和 M. López de Prado (2012): “夏普比率有效前沿。” 风险期刊 , 第 15 卷,第 2 期,页码 3–44。

  2. Bailey, D. 和 M. López de Prado (2014): “去通胀的夏普比率:修正选择偏差、回测过拟合和非正态性。” 投资组合管理期刊 , 第 40 卷,第 5 期。可在 ssrn.com/abstract=2460551 获取。

  3. Barra (1998): 风险模型手册:美国股票 , 第 1 版。Barra。可在 www.alacra.com/alacra/help/barra_handbook_US.pdf 获取。

  4. Barra (2013): MSCI BARRA 因子指数方法论 , 第 1 版。MSCI Barra。可在 www.msci.com/eqb/methodology/meth_docs/MSCI_Barra_Factor%20Indices_Methodology_Nov13.pdf 获取。

  5. CFA Institute (2010): “全球投资业绩标准。” CFA Institute, 第 2010 卷,第 4 期,二月。可在 www.gipsstandards.org/. 获取。

  6. Zhang, Y. 和 S. Rachev (2004): “风险归因与投资组合业绩测量—概述。” 工作论文,加州大学圣巴巴拉分校。可在 citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.318.7169 获取。

参考文献

  1. 美国统计协会 (1999): “统计实践的伦理指南。” 可在 www.amstat.org/committees/ethics/index.html 获取。

  2. Bailey, D., J. Borwein, M. 洛佩斯·德·普拉多 和 J. 朱 (2014): “伪数学与金融骗子:回测过度拟合对样本外表现的影响。” 美国数学学会通告 , 第 61 卷,第 5 期. 可在 ssrn.com/abstract=2308659 获取。

  3. Bailey, D., J. Borwein, M. 洛佩斯·德·普拉多 和 J. 朱 (2017): “回测过度拟合的概率。” 计算金融学杂志 , 第 20 卷,第 4 期,第 39–70 页. 可在 ssrn.com/abstract=2326253 获取。

  4. Bailey, D. 和 M. 洛佩斯·德·普拉多 (2012): “平衡篮子:一种新的交易和对冲风险的方法。” 投资策略杂志(风险期刊) , 第 1 卷,第 4 期,第 21–62 页。

  5. Beddall, M. 和 K. 兰德 (2013): “CTA 的假设表现。” 工作论文,温顿资本管理。

  6. Benjamini, Y. 和 Y. Hochberg (1995): “控制错误发现率:一种实用而强大的多重检验方法。” 皇家统计学会杂志,B 系列(方法论) , 第 57 卷,第 1 期,第 289–300 页。

  7. Bennet, C., A. Baird, M. 米勒 和 G. 沃尔福德 (2010): “大西洋鲑鱼尸体中的跨物种视角取舍的神经相关性:对适当的多重比较校正的论证。” 意外结果杂志 , 第 1 卷,第 1 期,第 1–5 页。

  8. Bruss, F. (1984): “对一类最佳选择问题的统一方法,选项数量未知。” 概率年鉴 , 第 12 卷,第 3 期,第 882–891 页。

  9. Dmitrienko, A., A.C. Tamhane 和 F. Bretz (2010): 制药统计中的多重检验问题 , 第 1 版. CRC 出版社。

  10. Dudoit, S. 和 M.J. van der Laan (2008): 多重检验程序及其在基因组学中的应用 , 第 1 版. 施普林格。

  11. Fisher, R.A. (1915): “在无限大总体样本中相关系数值的频率分布。” 生物统计学 , 第 10 卷,第 4 期,第 507–521 页。

  12. Hand, D. J. (2014): 不可能原则 , 第 1 版. 科学美国人/法拉尔,斯特劳斯与吉鲁。

  13. Harvey, C., Y. 刘 和 H. 朱 (2013): “. . . 以及预期收益的横截面。” 工作论文,杜克大学。可在 ssrn.com/abstract=2249314 获取。

  14. Harvey, C. 和 Y. 刘 (2014): “回测。” 工作论文,杜克大学。可在 ssrn.com/abstract=2345489 获取。

  15. Hochberg Y. 和 A. Tamhane (1987): 多重比较程序 , 第 1 版. 约翰·威利与儿子。

  16. Holm, S. (1979): “一种简单的顺序拒绝多重检验程序。” 斯堪的纳维亚统计学杂志 , 第 6 卷,第 65–70 页。

  17. Ioannidis, J.P.A. (2005): “为什么大多数已发表的研究结果是错误的。” PloS 医学,第 2 卷,第 8 期,第 696–701 页。

  18. Ingersoll, J., M. Spiegel, W. Goetzmann 和 I. Welch (2007): “投资组合绩效操纵和抗操纵绩效度量。” 金融研究评论,第 20 卷,第 5 期,第 1504–1546 页。

  19. Lo, A. (2002): “Sharpe 比率的统计学。” 金融分析师期刊,第 58 卷,第 4 期(7/8 月),第 36–52 页。

  20. López de Prado M. 和 A. Peijan (2004): “对冲基金策略的损失潜力测量。” 另类投资期刊,第 7 卷,第 1 期(夏季),第 7–31 页。可在 ssrn.com/abstract=641702 获得。

  21. Mertens, E. (2002): “Lo (2002) 中 IID 估计量的方差。” 工作论文,巴塞尔大学。

  22. Roulston, M. 和 D. Hand (2013): “被乐观蒙蔽。” 工作论文,Winton 资本管理公司。

  23. Schorfheide, F. 和 K. Wolpin (2012): “关于使用保留样本进行模型选择。” 美国经济评论,第 102 卷,第 3 期,第 477–481 页。

  24. Sharpe, W. (1966): “共同基金绩效。” 商业期刊,第 39 卷,第 1 期,第 119–138 页。

  25. Sharpe, W. (1975): “在投资组合绩效测量中调整风险。” 投资组合管理期刊,第 1 卷,第 2 期(冬季),第 29–34 页。

  26. Sharpe, W. (1994): “Sharpe 比率。” 投资组合管理期刊,第 21 卷,第 1 期(秋季),第 49–58 页。

  27. Studený M. 和 Vejnarová J. (1999): “多信息函数作为测量随机依赖的工具,” 见 M. I. Jordan, 编,图形模型中的学习。MIT 出版社,第 261–296 页。

  28. Wasserstein R. 和 Lazar N. (2016) “ASA 对 p 值的声明:背景、过程和目的。” 美国统计学家,第 70 卷,第 2 期,第 129–133 页。DOI: 10.1080/00031305.2016.1154108。

  29. Watanabe S. (1960): “多变量相关的信息理论分析。” IBM 研究与开发期刊,第 4 卷,第 66–82 页。

注释

^(1)    有关更多细节,请访问 www.gipsstandards.org.

^(2)    外部现金流是进入或退出投资组合的资产(现金或投资)。例如,股息和利息收入支付不被视为外部现金流。

^(3)    这可以设置为零的默认值(即与没有投资技能进行比较)。

第十五章:理解策略风险

15.1 动机

正如我们在第三章和第十三章中看到的,投资策略通常以持有头寸的方式实现,直到满足以下两种条件之一:(1)以盈利退出头寸的条件(获利了结),或者(2)以亏损退出头寸的条件(止损)。即使策略未明确声明止损,始终存在一个隐含的止损限度,投资者在此限度下无法继续为其头寸提供资金(追加保证金通知)或承受因未实现亏损增加而带来的痛苦。由于大多数策略(隐含或明确)都有这两个退出条件,因此通过二项过程建模结果的分布是有意义的。这将帮助我们理解投注频率、赔率和收益的哪些组合是经济上的不合理。本章的目标是帮助您评估何时策略对这些变量中的小变化脆弱。

15.2 对称收益

考虑一个策略,每年产生 n 个独立同分布的投注,其中投注 i ∈ [1, n] 的结果 X [i] 是以概率 P[ X [i] = π] = p 获得的利润 π > 0,以及以概率 P[ X [i] = −π] = 1 − p 的亏损 − π。你可以将 p 理解为一个二分类器的精度,其中正面表示投注一个机会,负面表示放弃一个机会:真正的正面得到奖励,假阳性受到惩罚,而负面(无论是真还是假)没有收益。由于投注结果 { X [i] } [i = 1, …, n] 是独立的,我们将计算每次投注的期望时刻。一次投注的期望利润为 E[ X [i] ] = π p + ( − π)(1 − p ) = π(2 p − 1)。方差为 V[ X [i] ] = E[ X ² [i] ] − E[ X [i] ] ²,其中 E[ X ² [i] ] = π ² p + ( − π) ² (1 − p ) = π ²,因此 V[ X [i] ] = π ² − π ² (2 p − 1) ² = π ² [1 − (2 p − 1) ² ] = 4π ² p (1 − p )。对于每年 n 个独立同分布的投注,年化夏普比率 (θ) 是

注意到 π 从上述方程中消去,因为收益是对称的。就像在高斯情况下,θ[ p , n ]可以理解为重新缩放的 t 值。这说明了一个观点,即使是很小的 ,在足够大的 n 下,夏普比率也可以被提高。这就是高频交易的经济基础,在这种情况下,p 可能仅略高于 .5,而成功业务的关键是增加 n。夏普比率是精度的函数而非准确性的,因为放弃一个机会(负面)不会直接受到奖励或惩罚(尽管过多的负面可能导致小 n,从而将夏普比率压低到接近零)。

例如,对于 p = .55, ,并且实现年化夏普比率 2 需要每年 396 次投注。摘录 15.1 在实验中验证了这一结果。图 15.1 绘制了夏普比率作为不同投注频率下精度的函数。

图 15.1 各种下注频率 (n) 下精度 (x 轴) 和夏普比率 (y 轴) 的关系

片段 15.1 将夏普比率作为下注次数的函数

解出 0 ≤ p ≤ 1,得到 ,解为

该方程明确了给定夏普比率 (θ) 下精度 (p) 和频率 (n) 之间的权衡。例如,只有每周下注 (n = 52) 的策略需要相当高的精度 p = 0.6336 才能实现年化夏普比率为 2。

15.3 非对称支付

考虑一个每年产生 n 个独立同分布 (IID) 下注的策略,其中下注 i ∈ [1, n ] 的结果 X [i] 以概率 P[ X [i] = π [+] ] = p 为 π [+],结果为 π [−],π [−] < π [+] 的概率为 P[ X [i] = π [−] ] = 1 − p。一次下注的期望利润为 E[ X [i] ] = p π [+] + (1 − p )π [−] = (π [+] − π [−] ) p + π [−]。方差为 V[ X [i] ] = E[ X ² [i] ] − E[ X [i] ] ²,其中 E[ X ² [i] ] = p π [+] ² + (1 − p )π ² [−] = (π [+] ² − π ² [−] ) p + π [−] ²,因此 V[ X [i] ] = (π [+] − π [−] ) ² p (1 − p )。对于每年 n 个 IID 下注,年化夏普比率 (θ) 为

而对于 π [−] = −π [+],我们可以看到这个方程简化为对称情况:。例如,对于 n = 260,π [−] = −.01,π [+] = .005,p = .7,我们得到 θ = 1.173。

最后,我们可以解出前面的方程,得到 0 ≤ p ≤ 1,

其中:

  • a = (n + θ ² )(π [+] − π [−] ) ²

  • b = [2n π [−] − θ ² (π [+] − π [−] )](π [+] − π [−] )

  • c = n π ² [−]

作为旁注,片段 15.2 使用 SymPy Live 验证了这些符号运算:live.sympy.org/

片段 15.2 使用 SymPy 库进行符号运算

上述方程回答了以下问题:给定参数为 {π [−] , π [+] , n } 的交易规则,达到 θ* 的夏普比率所需的精度率 p 是多少?例如,对于 n = 260,π [−] = −.01,π [+] = .005,想要得到 θ = 2,我们需要 p = .72 由于下注次数众多,p 的一个微小变化(从 p = .7 到 p = .72)使夏普比率从 θ = 1.173 提升到 θ = 2 另一方面,这也告诉我们,该策略对 p 的小变化非常敏感。片段 15.3 实现了隐含精度的推导。图 15.2 显示了 n 和 π [−] 的隐含精度,其中 π [+] = 0.1,θ* = 1.5 当给定 n 时,π [−] 越负,达到给定 π [+] 的 θ* 需要的 p 越高。当给定 π [−] 时,n 越小,达到给定 π [+] 的 θ* 需要的 p 越高。

图 15.2 隐含精度的热图作为 n 和 π [−] 的函数,π [+] = 0.1 和 θ* = 1.5。

片段 15.3 计算隐含精度

片段 15.4 计算隐含投注频率的 θ[ p , n , π [−] , π [+] ]。 图 15.3 绘制了隐含频率作为 p 和 π [−] 的函数,其中 π [+] = 0.1 和 θ* = 1.5 . 当对于给定的 p,π [−] 越负,达到给定 π [+] 的 θ* 所需的 n 越高。当对于给定的 π [−],p 越小,达到给定 π [+] 的 θ* 所需的 n 越高。

图 15.3 隐含频率作为 p 的函数,并且 = 0.1 和 = 1.5。

片段 15.4 计算隐含投注频率

15.4 策略失败的概率

在上述示例中,参数 π [−] = −.01, π [+] = .005 由投资组合经理设定,并传递给交易员执行订单。参数 n = 260 也是由投资组合经理设定,因为她决定什么构成值得投注的机会。两个不在投资组合经理控制之下的参数是 p(由市场决定)和 θ(投资者设定的目标)。由于 p 是未知的,我们可以将其建模为随机变量,期望值为 E[ p ]。我们定义 p 的值,低于此值策略将低于目标夏普比率 θ,即 。我们可以使用上述方程(或 binHR 函数)得出结论,对于 . 这突显了该策略所涉及的风险,因为 p 的相对小幅下降(从 p = .7 降至 p = .67)将消灭所有利润。该策略本质上是有风险的,即使持仓没有风险。这是我们希望在本章中明确的关键区别:策略风险 不应与 投资组合风险 混淆。

大多数公司和投资者在计算、监控和报告投资组合风险时,未意识到这并不能告诉我们策略本身的风险。策略风险不是由首席风险官计算的基础投资组合的风险。策略风险是投资策略随时间推移未能成功的风险,这是对首席投资官而言更具相关性的问题。问题“这项策略失败的概率是什么?”的答案相当于计算 。以下算法将帮助我们计算策略风险。

15.4.1 算法

在本节中,我们将描述计算 的过程。给定一系列投注结果 {π [t] } [t = 1, …, T],首先我们估计 π [−] = E[{π [t] |π [t] ≤ 0} [t = 1, …, T] ],以及 π [+] = E[{π [t] |π [t] > 0} [t = 1, …, T] ]。或者,{π [−] , π [+] } 可以通过拟合两个高斯混合模型得出,使用 EF3M 算法(López de Prado 和 Foreman [2014])。其次,年度频率 n 给出,其中 yt = 1 和 t = T 之间经过的年份数。第三,我们对 p 的分布进行自助抽样,如下所示:

  1. 对于迭代 i = 1, …, I

    1. 从 {π [t] } [t = 1, …, T] 中以替换方式抽取 ⌊nk⌋ 个样本,其中 k 是投资者用来评估策略的年数(例如,2 年)。我们将这些抽取的样本集合记作 {π ^(( i )) [j] } [j = 1, …, ⌊ nk⌋]。

    2. 从迭代 i 中推导观察到的精度为

  2. 通过对 {p [i] } [i = 1, …, I] 应用核密度估计器 (KDE),拟合 p 的概率密度函数 (PDF),记作 f [p]。

对于足够大的 k,我们可以将第三步近似为 ,其中 。第四,给定一个阈值 θ*(将失败与成功分开的夏普比率),推导出 (见第 15.4 节)。第五,策略风险计算为

15.4.2 实现

片段 15.5 列出了该算法的一种可能实现。通常我们会将 的策略视为过于冒险,即使它们投资于低波动性的工具。原因在于,即使它们的资金损失不多,但未能达到目标的概率仍然太高。为了能够使用,该策略开发者必须找到降低 的方法。

片段 15.5 实际计算策略风险

这种方法与 PSR 有一些相似之处(见第十四章,以及 Bailey 和 López de Prado [2012, 2014])。PSR 在非高斯收益下推导出真实夏普比率超过给定阈值的概率。类似地,本章介绍的方法基于不对称二元结果推导策略的失败概率。关键区别在于,PSR 不区分在投资组合经理控制内外的参数,而这里讨论的方法允许投资组合经理研究在其控制参数 {π [−] , π [+] , n } 下策略的可行性。这在设计或评估交易策略的可行性时非常有用。

练习

  1. 一位投资组合经理打算推出一项目标年化 SR 为 2 的策略。投注的精度率为 60%,且频率为每周。退出条件为盈利时的 2% 和止损时的 -2%。

    1. 该策略可行吗?

    2. 其他条件相同,使策略盈利所需的精度率是多少?

    3. 达到目标的下注频率是多少?

    4. 达到目标的获利阈值是多少?

    5. 替代止损的选项是什么?

  2. 跟进练习 1 中的策略。

    1. SR 对每个参数 1%变化的敏感度是多少?

    2. 鉴于这些敏感性,并假设所有参数都同样难以改进,哪一个提供了最低的回报?

    3. 练习 1 中任何参数的变化是否影响其他参数?例如,改变下注频率是否会修改精度率等?

  3. 假设一个策略在两年内每月产生下注,收益遵循两个高斯分布的混合。第一个分布的均值为-0.1,标准差为 0.12. 第二个分布的均值为 0.06,标准差为 0.03. 从第一个分布得出的抽样概率为 0.15。

    1. 根据 López de Prado 和 Peijan [2004]以及 López de Prado 和 Foreman [2014],推导混合收益的前四个矩。

    2. 年化 SR 是多少?

    3. 利用这些矩,计算 PSR[1](见第十四章)。在 95%的置信水平下,你会否决这个策略吗?

  4. 使用 Snippet 15.5,计算练习 3 中描述的 。在 0.05 的显著性水平下,你会否决这个策略吗?这个结果与PSR [θ*]一致吗?

  5. 通常,你期望哪个结果更准确,PSR [θ*] 还是 ? 这两种方法如何互补?

  6. 根据你在本章学到的知识,重新审视第十三章的结果。

    1. 在 OTR 中,获利和止损阈值之间的不对称是否有意义?

    2. 图 13.1 所暗示的每日下注频率下的p范围是什么?

    3. 图 13.5 所暗示的每周下注频率下的p范围是什么?

参考文献

  1. Bailey, D. 和 M. López de Prado (2014): “通胀 Sharpe 比率:修正选择偏差、回测过拟合和非正态性。” 投资组合管理杂志 , 第 40 卷,第 5 期. 可在 ssrn.com/abstract=2460551 获取。

  2. Bailey, D. 和 M. López de Prado (2012): “Sharpe 比率有效前沿。” 风险杂志 , 第 15 卷,第 2 期,页 3–44. 可在 ssrn.com/abstract=1821643. 获取。

  3. López de Prado, M. 和 M. Foreman (2014): “高斯混合模型的数学投资组合监督方法:EF3M 算法。” 定量金融 , 第 14 卷,第 5 期,页 913–930. 可在 ssrn.com/abstract=1931734 获取。

  4. López de Prado, M. 和 A. Peijan (2004): “衡量对冲基金策略的损失潜力。” 另类投资杂志 , 第 7 卷,第 1 期(夏季),页 7–31. 可在 ssrn.com/abstract=641702 获取。

第十六章:机器学习资产配置

16.1 动机

本章介绍了层次风险平价(HRP)方法。^(1) HRP 投资组合解决了二次优化器普遍存在的三个主要问题,特别是马科维茨的关键线算法(CLA):不稳定性、集中度和表现不佳。HRP 运用现代数学(图论和机器学习技术)根据协方差矩阵中的信息构建多元化投资组合。然而,与二次优化器不同,HRP 并不要求协方差矩阵可逆。实际上,HRP 可以在病态甚至奇异的协方差矩阵上计算投资组合,这对二次优化器来说是不可能的。蒙特卡洛实验表明,尽管最小方差是 CLA 的优化目标,HRP 的样本外方差却低于 CLA。与传统的风险平价方法相比,HRP 在样本外产生的投资组合风险更低。历史分析也表明,HRP 的表现优于标准方法(Kolanovic 等[2017],Raffinot[2017])。HRP 的一个实际应用是确定多个机器学习(ML)策略之间的配置。

16.2 凸投资组合优化的问题

投资组合构建可能是最常见的金融问题。投资经理每天必须构建包含他们对风险和收益看法与预测的投资组合。这是 24 岁的哈里·马科维茨在六十多年前试图回答的根本问题。他的重大见解是认识到,不同的最优投资组合在风险调整收益方面与各种风险水平相关,因此有了“有效前沿”的概念(马科维茨[1952])。一个含义是,通常将所有资产分配给预期收益最高的投资并不最优。相反,我们应该考虑替代投资之间的相关性,以构建一个多元化的投资组合。

在 1954 年获得博士学位之前,马科维茨离开学术界为兰德公司工作,他在那开发了关键线算法。CLA 是一种专门为不等式约束的投资组合优化问题设计的二次优化程序。这个算法的显著之处在于,它保证在已知的迭代次数后找到精确解,并巧妙地规避了卡鲁什-库恩-塔克条件(库恩和塔克[1951])。有关该算法的描述和开源实现可以在贝利和洛佩斯·德·普拉多[2013]中找到。令人惊讶的是,大多数金融从业者似乎仍对 CLA 一无所知,因为他们常常依赖于不保证正确解或停止时间的通用二次规划方法。

尽管马科维茨理论非常出色,但一些实际问题使得 CLA 解决方案有些不可靠。一个主要的警告是,预测收益的小偏差会导致 CLA 产生非常不同的投资组合(Michaud [1998])。鉴于收益很难以足够的准确性进行预测,许多作者选择完全放弃预测,专注于协方差矩阵。这导致了基于风险的资产配置方法,其中“风险平价”是一个突出的例子(Jurczenko [2015])。放弃收益预测可以改善但无法防止不稳定性问题。原因在于,二次规划方法需要对正定协方差矩阵进行求逆(所有特征值必须为正)。当协方差矩阵数值条件较差时,即当其条件数较高时,这种求逆容易产生较大误差(Bailey 和 López de Prado [2012])。

16.3 马科维茨的诅咒

协方差、相关(或正态,因此可对角化)矩阵的条件数是其最大和最小(按模)特征值之间绝对值的比率。图 16.1 绘制了几个相关矩阵的特征值排序图,其中条件数是每行首尾值的比率。对角相关矩阵的条件数最低,且其自身是逆矩阵。随着我们增加相关(多重共线性)投资,条件数增长。在某个时刻,条件数高到数值误差使逆矩阵变得不稳定:任何条目的小变化都会导致非常不同的逆。这就是马科维茨的诅咒:投资越相关,越需要分散投资,但我们越有可能得到不稳定的解决方案。分散投资的好处往往被估计误差所抵消。

图 16.1 马科维茨诅咒的可视化

对角相关矩阵具有最低的条件数。随着我们增加相关投资,最大特征值增大,最小特征值减小。条件数迅速上升,导致不稳定的逆相关矩阵。在某个时刻,分散投资的好处被估计误差所抵消。

增加协方差矩阵的大小只会使问题变得更糟,因为每个协方差系数的估计自由度较少。一般来说,我们至少需要个独立同分布(IID)观测值,以便估计一个不奇异的大小为N的协方差矩阵。例如,估计一个可逆的 50 大小的协方差矩阵至少需要 5 年的日常 IID 数据。正如大多数投资者所知,相关结构在如此长的时间内不会以任何合理的置信水平保持不变。这些挑战的严重性体现在,即使是天真的(等权重)投资组合也已显示出超越均值-方差和基于风险的优化的样本外表现(De Miguel 等人[2009])。

16.4 从几何关系到层次关系

近年来,这些不稳定性问题得到了相当大的关注,正如 Kolm 等人[2014]仔细记录的那样。大多数替代方案试图通过引入额外约束(Clarke et al. [2002])、引入贝叶斯先验(Black 和 Litterman [1992])或改善协方差矩阵逆的数值稳定性(Ledoit 和 Wolf [2003])来实现鲁棒性。

到目前为止讨论的所有方法,虽然近年来发表,但源自(非常)经典的数学领域:几何、线性代数和微积分。相关性矩阵是一个线性代数对象,用于测量由收益序列形成的向量空间中任意两个向量之间角度的余弦(见 Calkin 和 López de Prado [2014a, 2015b])。二次优化器不稳定的一个原因是向量空间被建模为一个完整(完全连接)的图,其中每个节点都是替代其他节点的潜在候选者。从算法的角度看,反转矩阵意味着评估完整图上的部分相关性。图 16.2(a)可视化了 50 × 50 的协方差矩阵所隐含的关系,即 50 个节点和 1225 条边。这种复杂结构放大了小的估计误差,导致错误的解决方案。从直观上看,减少不必要的边缘是可取的。

图 16.2 完整图(上)和树图(下)结构

相关性矩阵可以表示为完整图,缺乏层次结构的概念:每项投资都可以替代另一项。相比之下,树结构则包含层次关系。

让我们暂时考虑这种拓扑结构的实际意义。假设一个投资者希望构建一个多样化的证券投资组合,包括数百种股票、债券、对冲基金、房地产、私募等。有些投资似乎是彼此的近似替代品,而其他投资则似乎是互补的。例如,股票可以根据流动性、规模、行业和地区进行分组,在给定组内的股票竞争配置。在决定对像摩根大通这样的美国大型上市金融股票的配置时,我们将考虑增加或减少对另一家大型上市美国银行如高盛的配置,而不是瑞士的一家小社区银行或加勒比地区的一项房地产投资。然而,在相关矩阵中,所有投资都是彼此的潜在替代品。换句话说,相关矩阵缺乏层次性的概念。这种缺乏层次结构的情况导致权重以意想不到的方式自由变化,这是 CLA 不稳定的根本原因。图 16.2 (b)可视化了一种称为树的层次结构。树结构引入了两个理想特性:(1) 它只有N - 1 条边连接N个节点,因此权重仅在不同层次的同级之间重新平衡;(2) 权重是自上而下分配的,这与许多资产管理者构建投资组合的方式一致(例如,从资产类别到行业再到个别证券)。出于这些原因,层次结构更适合提供不仅稳定而且直观的结果。

在本章中,我们将研究一种新的投资组合构建方法,利用现代数学:图论和机器学习来解决 CLA 的缺陷。这种层次风险平价方法利用协方差矩阵中包含的信息,而无需其逆或正定性。HRP 甚至可以基于单一协方差矩阵计算投资组合。该算法分为三个阶段:树聚类、准对角化和递归二分法。

16.4.1 树聚类

考虑一个TxN的观察矩阵X,例如N个变量在T个时期的回报系列。我们希望将这N个列向量组合成一个层次结构的聚类,以便配置可以通过树图向下流动。

首先,我们计算一个 NxN 的相关矩阵,条目为 ρ = {ρ [i , j] } [i , j = 1, …, N],其中 ρ [i , j] = ρ[ X [i] , X [j] ]。我们定义距离度量 , ,其中 B 是 {1, …, i , …, N } 中项目的笛卡尔积。这使我们能够计算 NxN 的距离矩阵 D = { d [i* , j] * } [i , j = 1, …, N]。矩阵 D 是一个合适的度量空间(见附录 16.A.1 以获取证明),在于 d [ x , y ] ≥ 0(非负性),d [ x , y ] = 0⇔ X = Y (重合),d [ x , y ] = d [ Y , X ] (对称性),以及 d [ X , Z ] ≤ d [ x , y ] + d [ Y , Z ] (亚加性)。参见示例 16.1。

示例 16.1 将相关矩阵 ρ 编码为距离矩阵 D

其次,我们计算 D 中任意两个列向量之间的欧几里得距离, , 。注意距离度量 d [i* , j] * 和 之间的区别。虽然 d [i* , j] * 是在 X 的列向量上定义的, 是在 D 的列向量上定义的(距离的距离)。因此, 是在整个度量空间 D 上定义的距离,因为每个 是整个相关矩阵的函数(而不是特定的互相关对)。参见示例 16.2。

示例 16.2 相关距离的欧几里得距离

第三,我们将满足 的列对 ( i *, j *) 聚在一起,称这个聚类为 u [1]。参见示例 16.3。

示例 16.3 聚类项目

第四,我们需要定义新形成的聚类 u [1] 与单个(未聚类)项目之间的距离,以便可以更新 。在层次聚类分析中,这被称为“连结标准”。例如,我们可以将 中的一个项目 i 与新聚类 u [1] 之间的距离定义为 (最近点算法)。参见示例 16.4。

示例 16.4 更新矩阵 与新聚类 u

第五,矩阵 通过附加 并删除聚类的列和行 ju [1] 进行更新。参见示例 16.5。

示例 16.5 更新矩阵 与新聚类 u

第六,递归应用步骤 3、4 和 5,使我们能够将 N − 1 个这样的聚类附加到矩阵 D,此时最终聚类包含所有原始项目,聚类算法停止。参见示例 16.6。

示例 16.6 搜索剩余聚类的递归

图 16.3 显示了此示例中每次迭代形成的聚类,以及触发每个聚类的距离 (第三步)。该过程可以应用于广泛的距离度量 d [i* , j] * ,,超出了本章所示的那些。请参见 Rokach 和 Maimon [2005] 的替代度量,Brualdi [2010] 中关于 Fiedler 向量和 Stewart 光谱聚类方法的讨论,以及 scipy 库中的算法。^( 2 ) 片段 16.1 提供了一个使用 scipy 功能的树聚类示例。

图 16.3 聚类形成的序列

从我们的数值示例中派生出的树结构,这里绘制为树状图。y 轴测量合并的两个叶子之间的距离。

片段 16.1 使用 SCIPY 功能的树聚类

这个阶段允许我们定义一个链接矩阵,作为一个 ( N − 1) x 4 矩阵,结构为 Y = {( y [m* , 1]* , y [m* , 2]* , y [m* , 3]* , y [m* , 4]* )} [m = 1, …, N − 1](即,每个聚类一个 4 元组)。项目 ( y [m* , 1]* , y [m* , 2]* ) 报告构成。项目 y [m* , 3]* 报告 y [m* , 1]* 和 y [m* , 2]* 之间的距离,即 。项目 y [m* , 4]* ≤ N 报告聚类 m 中包含的原始项目数量。

16.4.2 准对角化

这个阶段重新组织协方差矩阵的行和列,使得最大值位于对角线上。这种协方差矩阵的准对角化(不需要更改基)呈现出一个有用的特性:相似的投资被放在一起,不相似的投资则远离(见图 16.5 和 16.6 的例子)。算法工作如下:我们知道链接矩阵的每一行将两个分支合并为一个。我们递归地用其构成替换 ( y [N* − 1, 1]* , y [N* − 1, 2]* ) 中的聚类,直到没有聚类为止。这些替换保持聚类的顺序。输出是原始(未聚类)项目的排序列表。此逻辑在片段 16.2 中实现。

片段 16.2 准对角化

16.4.3 递归二分法

第 2 阶段交付了一个准对角矩阵。逆方差分配对于对角协方差矩阵是最优的(见附录 16.A.2 的证明)。我们可以通过两种不同方式利用这些事实:(1)自下而上,定义一个连续子集的方差为逆方差分配的方差;或(2)自上而下,在与它们的聚合方差成反比的情况下,分割相邻子集之间的分配。以下算法形式化了这个想法:

  1. 算法初始化为:

    1. 设置项目列表:L = {L [0]},其中 L [0] = {n} [n = 1, …, N]。

    2. 对所有项目分配单位权重:w [n] = 1,∀n = 1, …, N

  2. 如果 |L [i]| = 1,∀L [i]L,则停止。

  3. 对于每个 L [i]L,当 |L [i]| > 1 时:

    1. L [i] 二分为两个子集,L ^((1)) [i]L [i] ^((2)) = L [i],其中 ,并且顺序保持不变。

    2. 定义 L ^((j)) [i] 的方差,j = 1, 2,作为二次形式 ,其中 V ^((j)) [i]L ^((j)) [i] 二分的组成部分之间的协方差矩阵,和 ,其中 diag[.] 和 tr[.] 是对角线和迹运算符。

    3. 计算拆分因子:,以使 0 ≤ α [i] ≤ 1。

    4. 通过 α [i] 的因子重新缩放分配 w [n],∀nL ^((1)) [i]

    5. 通过 (1 − α [i]) 的因子重新缩放分配 w [n],∀nL ^((2)) [i]

  4. 循环到步骤 2

步骤 3b 利用自下而上的准对角化,因为它使用逆方差加权定义分区 L ^((j)) [i] 的方差!。步骤 3c 利用自上而下的准对角化,因为它按与集群方差的反比例分割权重。该算法确保 0 ≤ w [i] ≤ 1,∀ i = 1, …, N,并且 ,因为在每次迭代中,我们都在分割来自更高层次的权重。在此阶段,可以通过根据用户偏好替换步骤 3c、3d 和 3e 中的方程轻松引入约束。阶段 3 在代码片段 16.3 中实现。

代码片段 16.3 递归二分

这结束了 HRP 算法的第一次描述,该算法在最佳情况下以确定性对数时间解决分配问题,!,在最坏情况下以确定性线性时间解决,!。接下来,我们将实践所学,并评估该方法的样本外准确性。

16.5 数值示例

我们首先模拟一个观测矩阵 X,维度为 (10000 x 10)。相关矩阵在 图 16.4 中以热图形式可视化。图 16.5 显示了结果集群的树状图(阶段 1)。图 16.6 显示了同一相关矩阵,按识别的集群重新组织成块(阶段 2)。附录 16.A.3 提供了用于生成此数值示例的代码。

图 16.4 原始协方差矩阵的热图

此相关矩阵是使用代码片段 16.4 中的函数 generateData 计算的(见第 16.A.3 节)。最后五列与前五列的某些系列部分相关。

图 16.5 聚类形成的树状图

聚类过程正确识别了序列 9 和 10 是序列 2 的扰动,因此(9, 2, 10)被聚集在一起。同样,7 是 1 的扰动,6 是 3 的扰动,而 8 是 5 的扰动。唯一没有扰动的原始项目是 4,而聚类算法未能找到与之相似的项。

图 16.6 聚类协方差矩阵

第 2 阶段准对角化了相关矩阵,意义在于最大值沿对角线分布。然而,与 PCA 或类似程序不同,HRP 不需要基变换。HRP 以稳健的方式解决分配问题,同时处理原始投资。

在这些随机数据上,我们计算 HRP 的分配(第 3 阶段),并将其与两种竞争方法的分配进行比较:(1)二次优化,由 CLA 的最小方差投资组合表示(这是有效前沿中唯一不依赖于收益均值的投资组合);(2)传统风险平价,以逆方差投资组合(IVP)为例。有关 CLA 的全面实现,请参见 Bailey 和 López de Prado [2013],关于 IVP 的推导请参见附录 16.A.2。我们应用标准约束条件 0 ≤ w [i] ≤ 1(非负性),∀ i = 1, …, N,以及 (完全投资)。顺便提一下,这个例子中协方差矩阵的条件数仅为 150.9324,算不上特别高,因此对 CLA 并不不利。

从 表 16.1 的分配中,我们可以欣赏到一些典型特征:首先,CLA 将 92.66% 的分配集中在前五个持有资产上,而 HRP 仅集中 62.57%。其次,CLA 对 3 项投资分配零权重(如果没有 0 ≤ w [i] 的约束,分配将是负数)。第三,HRP 似乎在 CLA 集中解决方案和传统风险平价的 IVP 分配之间找到了一种折衷。读者可以使用附录 16.A.3 中的代码来验证这些发现通常适用于其他随机协方差矩阵。

表 16.1 三种分配的比较

权重 # CLA HRP IVP
1 14.44% 7.00% 10.36%
2 19.93% 7.59% 10.28%
3 19.73% 10.84% 10.36%
4 19.87% 19.03% 10.25%
5 18.68% 9.72% 10.31%
6 0.00% 10.19% 9.74%
7 5.86% 6.62% 9.80%
8 1.49% 9.10% 9.65%
9 0.00% 7.12% 9.64%
10 0.00% 12.79% 9.61%

三种方法的一个特征结果是:CLA 将权重集中于少数投资,因此容易受到特有冲击的影响。IVP 则将权重均匀分配到所有投资中,忽略了相关性结构,这使其容易受到系统性冲击的影响。HRP 在所有投资之间分散与在聚类之间分散之间找到了折衷,从而使其对这两种冲击更具韧性。

CLA 极端集中化的驱动因素是其最小化投资组合风险的目标。然而,这两个投资组合的标准差非常相似(σ [HRP] = 0.4640, σ [CLA] = 0.4486)。因此,CLA 放弃了一半的投资范围,以换取较小的风险降低。当然,现实是 CLA 的投资组合在表面上看似分散,因为任何影响前五个配置的危机情况将对 CLA 的影响远大于对 HRP 的投资组合。

16.6 样本外蒙特卡洛模拟

在我们的数值示例中,CLA 的投资组合在样本内的风险低于 HRP。然而,样本内的最小方差投资组合不一定是样本外最小方差的投资组合。我们很容易选择一个特定的历史数据集,其中 HRP 的表现优于 CLA 和 IVP(参见 Bailey 和 López de Prado [2014],并回忆我们在第十一章讨论的选择偏差)。相反,在这一部分我们遵循第十三章中解释的回测范式,通过蒙特卡洛方法评估 HRP 与 CLA 的最小方差和传统风险平价的 IVP 配置的样本外表现。这也将帮助我们理解哪些特征使一种方法优于其他方法,而不论个案反例。

首先,我们生成 10 系列随机高斯收益(520 个观察值,相当于 2 年的每日历史),均值为 0,标准差为 10%(任意)。真实价格经常出现跳跃(Merton [1976]),收益并非横截面独立,因此我们必须向生成的数据中添加随机冲击和随机相关性结构。其次,我们通过回顾 260 个观察值(相当于一年的每日历史)计算 HRP、CLA 和 IVP 投资组合。这些投资组合每 22 个观察值重新估算和再平衡一次(相当于每月一次)。第三,我们计算与这三种投资组合相关的样本外收益。这个过程重复 10,000 次。

所有样本外的平均投资组合收益基本为 0,符合预期。关键的差异来自样本外投资组合收益的方差:σ ² [CLA] = 0.1157,σ ² [IVP] = 0.0928,以及σ ² [HRP] = 0.0671 . 尽管 CLA 的目标是实现最低方差(这是其优化程序的目标),但其表现恰好在样本外显示出最高的方差,比 HRP 的方差高出 72.47%。这一实验发现与 De Miguel 等人[2009]的历史证据一致。换句话说,HRP 将使 CLA 策略的样本外夏普比率提高约 31.3%,这是相当显著的提升。假设协方差矩阵是对角线形式,可以为 IVP 带来一定的稳定性;然而,其方差仍比 HRP 高出 38.24%。这一样本外方差的降低对风险平价投资者至关重要,因为他们使用了大量杠杆。有关样本内与样本外表现的更广泛讨论,请参见 Bailey 等人[2014]。

HRP 在超越 Markowitz 的 CLA 和传统风险平价的 IVP 方面的数学证明相对复杂,超出了本章的范围。从直观上讲,我们可以这样理解上述实证结果:影响特定投资的冲击会惩罚 CLA 的集中性。涉及多个相关投资的冲击会惩罚 IVP 对相关结构的无知。HRP 通过在所有投资之间的多样化和在多个层次的投资集群之间的多样化之间找到妥协,从而更好地抵御共同和特异性冲击。图 16.7 绘制了 10,000 次运行中第一次分配的时间序列。

图 16.7 (a) IVP 的分配时间序列。

在第一次和第二次再平衡之间,一项投资受到特异性冲击,导致其方差增加。IVP 的应对方式是减少对该投资的分配,并将以前的风险敞口分散到所有其他投资中。在第五次和第六次再平衡之间,两项投资受到共同冲击。IVP 的应对方式相同。因此,在七项未受影响的投资之间的分配随着时间的推移而增长,无论它们的相关性如何。

(b) HRP 的分配时间序列

HRP 对特异性冲击的响应是减少对受影响投资的分配,并利用减少的金额增加对未受影响的相关投资的分配。作为对共同冲击的回应,HRP 减少对受影响投资的分配,并增加对不相关投资(具有较低方差)的分配。

(c) CLA 的分配时间序列

CLA 配置对特定和共同冲击的反应是不可预测的。如果考虑了再平衡成本,CLA 的表现将会非常糟糕。

附录 16.A.4 提供了实现上述研究的 Python 代码。读者可以尝试不同的参数配置,并得出类似的结论。特别地,HRP 的样本外超越表现对于更大的投资范围变得更加显著,或者当添加更多冲击时,或者考虑更强的相关性结构,或考虑再平衡成本时。这些 CLA 再平衡每次都产生交易成本,随着时间的推移可能会累积成巨大的损失。

16.7 进一步研究

本章介绍的方法灵活、可扩展,并允许相同思想的多种变体。使用提供的代码,读者可以研究和评估哪些 HRP 配置最适合他们特定的问题。例如,在第一阶段,他们可以应用 d [i* , j]* 的替代定义,,或不同的聚类算法,如双聚类;在第三阶段,他们可以对 和 α 使用不同的函数,或替代配置约束。第三阶段不仅可以执行递归二分,还可以使用第一阶段的聚类进行自上而下的配置拆分。

将预测收益、Ledoit-Wolf 收缩和 Black-Litterman 风格的观点整合到这种层次化方法中相对简单。实际上,细心的读者可能已经意识到,HRP 在本质上是一种避免矩阵求逆的稳健程序,HRP 背后的相同理念可以用来替代许多著名的计量经济学回归方法,这些方法以其不稳定的输出而闻名(如 VAR 或 VECM)。图 16.8 显示了(a)聚类前的固定收益证券的大型相关性矩阵和(b)聚类后的相关性矩阵,包含超过 210 万个条目。传统的优化或计量经济学方法未能识别金融大数据的层次结构,使得数值不稳定性削弱了分析的优势,导致不可靠和有害的结果。

图 16.8 聚类前后的相关性矩阵

本章所述的方法可以应用于优化之外的问题。例如,对大型固定收益投资组合进行 PCA 分析也面临与 CLA 相同的缺陷。几十年前和几个世纪前开发的小数据技术(因子模型、回归分析、计量经济学)未能识别金融大数据的层次性质。

Kolanovic 等人[2017]进行了一项关于 HRP 的详细研究,得出结论:“HRP 提供了优越的风险调整收益。虽然 HRP 和 MV 投资组合都提供最高的回报,但 HRP 投资组合在波动性目标上表现得远远优于 MV 投资组合。我们还进行了模拟研究以确认我们的发现的稳健性,其中 HRP 始终在 MV 和其他基于风险的策略中表现优越[…] HRP 投资组合真正实现了多元化,具有更高数量的无相关敞口,并且权重和风险配置不那么极端。”

Raffinot[2017]得出结论:“实证结果表明,基于层次聚类的投资组合稳健、真正多元化,并且在风险调整表现上统计上优于常用的投资组合优化技术。”

16.8 结论

精确的分析解决方案可能表现得比近似的最大似然解决方案差得多。尽管在数学上是正确的,二次优化器通常,以及马科维茨的 CLA 特别,以其不稳定性、集中性和表现不佳而闻名,提供的解决方案通常不可靠。这些问题的根本原因在于二次优化器需要对协方差矩阵进行反演。马科维茨的诅咒是,投资之间相关性越高,对多元化投资组合的需求就越大,但该投资组合的估计误差也越大。

在这一章中,我们揭示了二次优化器不稳定性的一个主要来源:大小为N的矩阵与一幅完整图相连,包含条边。如此多的边连接图的节点,使得权重可以完全自由地重新平衡。这种缺乏层次结构意味着小的估计误差将导致完全不同的解决方案。HRP 用树结构替代协方差结构,实现了三个目标:(1)与传统的风险平价方法不同,它充分利用了协方差矩阵中包含的信息,(2)权重的稳定性得以恢复,以及(3)通过构建,解决方案变得直观。该算法在确定性对数(最佳情况)或线性(最坏情况)时间内收敛。

HRP 具有稳健性、可视化和灵活性,允许用户引入约束或操控树结构而不妨碍算法的搜索。这些属性源于 HRP 不要求协方差可逆的事实。实际上,HRP 可以在退化或甚至奇异的协方差矩阵上计算投资组合。

本章专注于组合构建应用;然而,读者会发现其他在不确定性下做决策的实际应用,特别是在几乎奇异的协方差矩阵存在时:对组合经理的资本分配、算法策略之间的分配、机器学习信号的集成和提升、随机森林的预测、对不稳定计量经济模型的替代(VAR, VECM)等。

当然,像 CLA 这样的二次优化器在样本内生成最小方差组合(这就是它的目标函数)。蒙特卡罗实验表明,HRP 在样本外的方差低于 CLA 或传统风险平价方法(IVP)。自从 Bridgewater 在 1990 年代首创风险平价以来,一些最大的资产管理公司推出了遵循这种方法的基金,合计资产超过 5000 亿美元。鉴于这些基金广泛使用杠杆,它们应该从采用更稳定的风险平价分配方法中受益,从而实现更优的风险调整回报和较低的再平衡成本。

附录

16.A.1 基于相关性的度量

考虑两个实值向量 X , Y,大小为 T,以及一个相关变量 ρ[ x , y ],唯一要求是 σ[ x , y ] = ρ[ x , y ]σ[ X ]σ[ Y ],其中 σ[ x , y ] 是两个向量之间的协方差,σ[.] 是标准差。请注意,皮尔逊相关不是唯一满足这些要求的相关性。

让我们证明 是一个真实的度量。首先,两个向量之间的欧几里得距离是 。其次,我们将这些向量进行 z 标准化,得到 , 。因此,0 ≤ ρ[ x , y ] = ρ[ x , y ]。第三,我们推导出欧几里得距离 d [ x , y ] 为,

换句话说,距离 d [ x , y ] 是经过 z 标准化后向量 { X , Y } 之间欧几里得距离的线性倍数,因此它继承了欧几里得距离的真度量特性。

同样,我们可以证明 /2 商上下降为真实度量。为此,我们重新定义 ,其中 sgn[.] 是符号运算符,因此 0 ≤ ρ[ x , y ] = |ρ[ x , y ]|。然后,

16.A.2 反方差分配

第 3 阶段(见第 16.4.3 节)根据子集的方差反比例划分权重。我们现在证明,当协方差矩阵是对角时,这种分配是最优的。考虑大小为 N 的标准二次优化问题,

解为 。对于特征向量 a = 1 [N],解是最小方差组合。如果 V 是对角的,则 。在 N = 2 的特定情况下,,这就是第 3 阶段如何在子集的两个二分之间划分权重。

16.A.3 复制数值示例

Snippet 16.4 可用于复制我们的结果并模拟其他数值示例。函数 generateData 生成一个时间序列矩阵,其中数量为 size0 的向量是无相关的,数量为 size1 的向量是相关的。读者可以更改 generateData 中的 np.random.seed 来运行其他示例,从而直观了解 HRP 的工作原理。Scipy 的函数 linkage 可用于执行第一阶段(第 16.4.1 节),函数 getQuasiDiag 执行第二阶段(第 16.4.2 节),函数 getRecBipart 执行第三阶段(第 16.4.3 节)。

SNIPPET 16.4 HRP 算法的完整实现

16.A.4 复制蒙特卡洛实验

Snippet 16.5 对三种分配方法进行蒙特卡洛实验:HRP、CLA 和 IVP。除 HRP 外,所有库都是标准库,HRP 的内容在附录 16.A.3 中提供,CLA 的内容可以在 Bailey 和 López de Prado [2013]中找到。子程序 generateData 模拟相关数据,具有两种类型的随机冲击:对多项投资共同的和对单项投资特有的。每种类型有两个冲击,一个正面和一个负面。实验变量作为hrpMC的参数设置。它们是任意选择的,用户可以尝试其他组合。

SNIPPET 16.5 蒙特卡洛实验的 HRP 样本外表现

练习

  1. 给定 N 个投资策略的 PnL 序列:

    1. 将它们与其投注的平均频率对齐(例如,对于每周交易的策略进行每周观察)。提示:这种数据对齐有时称为“下采样”。

    2. 计算它们收益的协方差 V

    3. 确定 N 个策略之间的层次聚类。

    4. 绘制 N 个策略的聚类相关矩阵。

  2. 使用练习 1 中的聚类协方差矩阵 V

    1. 计算 HRP 分配。

    2. 计算 CLA 分配。

    3. 计算 IVP 分配。

  3. 使用练习 1 中的协方差矩阵 V

    1. 执行光谱分解:VW = W Λ。

    2. 通过从 U [0, 1] 分布中抽取 N 个随机数来形成数组 ϵ。

    3. 形成一个 NxN 矩阵 , 其中 , n = 1, …, N

    4. 计算

    5. 重复练习 2,这次使用 作为协方差矩阵。哪个分配方法受到光谱方差重缩放的影响最大?

  4. 你会如何修改 HRP 算法,以产生总和为 0 的分配,其中 | w [n] | ≤ 1, ∀ n = 1, …, N ?

  5. 你能想到一种简单的方法将预期收益纳入 HRP 分配中吗?

参考文献

  1. Bailey, D. 和 M. López de Prado (2012): “平衡篮子:一种交易和对冲风险的新方法。” 投资策略杂志 ,第 1 卷,第 4 期,页 21–62。可在 ssrn.com/abstract=2066170 查阅。

  2. Bailey, D. 和 M. López de Prado (2013): “投资组合优化的关键线算法的开源实现。” 算法 ,第 6 卷,第 1 期,页 169–196。可在 ssrn.com/abstract=2197616 查阅。

  3. Bailey, D., J. Borwein, M. López de Prado 和 J. Zhu (2014) “伪数学和金融江湖术士:回测过拟合对样本外表现的影响。” 美国数学学会通告 ,第 61 卷,第 5 期,页 458–471。可在 ssrn.com/abstract=2308659 查阅。

  4. Bailey, D. 和 M. López de Prado (2014): “调整夏普比率:修正选择偏差、回测过拟合和非正态性。” 投资组合管理杂志 ,第 40 卷,第 5 期,页 94–107。

  5. Black, F. 和 R. Litterman (1992): “全球投资组合优化。” 金融分析师杂志 ,第 48 卷,页 28–43。

  6. Brualdi, R. (2010): “图形与矩阵的互利关系。” 数学科学会议委员会,数学区域会议系列,第 115 号。

  7. Calkin, N. 和 M. López de Prado (2014): “随机流图。” 算法金融 ,第 3 卷,第 1 期,页 21–42。可在 ssrn.com/abstract=2379314 查阅。

  8. Calkin, N. 和 M. López de Prado (2014): “宏观金融流的拓扑:随机流图的应用。” 算法金融 ,第 3 卷,第 1 期,页 43–85。可在 ssrn.com/abstract=2379319 查阅。

  9. Clarke, R., H. De Silva 和 S. Thorley (2002): “投资组合约束与主动管理的基本法则。” 金融分析师杂志 ,第 58 卷,页 48–66。

  10. De Miguel, V., L. Garlappi 和 R. Uppal (2009): “最优与天真多样化:1/N 投资组合策略有多低效?” 金融研究回顾 ,第 22 卷,页 1915–1953。

  11. Jurczenko, E. (2015): 基于风险和因子的投资 ,第 1 版。爱思唯尔科学出版社。

  12. Kolanovic, M., A. Lau, T. Lee, 和 R. Krishnamachari (2017): “可交易风险溢价指数的跨资产投资组合。分层风险均衡:在目标波动率下提升收益。” 白皮书,全球量化与衍生品策略。摩根大通,4 月 26 日。

  13. Kolm, P., R. Tutuncu 和 F. Fabozzi (2014): “投资组合优化的 60 年。” 欧洲运筹学杂志 ,第 234 卷,第 2 期,页 356–371。

  14. Kuhn, H. W. 和 A. W. Tucker (1951): “非线性规划。” 第二届伯克利研讨会论文集。加州大学出版社,页 481–492。

  15. Markowitz, H. (1952): “投资组合选择。” 金融杂志 ,第 7 卷,页 77–91。

  16. Merton, R. (1976): “当基础股票收益不连续时的期权定价。” 金融经济学杂志,第 3 卷,页码 125–144。

  17. Michaud, R. (1998):有效资产配置:股票投资组合优化与资产配置的实用指南,第 1 版。哈佛商学院出版社。

  18. Ledoit, O. 和 M. Wolf (2003): “通过应用于投资组合选择的改进股票收益协方差矩阵估计。” 实证金融杂志,第 10 卷,第 5 期,页码 603–621。

  19. Raffinot, T. (2017): “基于层次聚类的资产配置。” 投资组合管理杂志,即将出版。

  20. Rokach, L. 和 O. Maimon (2005): “聚类方法,” 见 Rokach, L. 和 O. Maimon 编,数据挖掘与知识发现手册。施普林格,页码 321–352。

笔记

^(1)    本章的简短版本出现在投资组合管理杂志,第 42 卷,第 4 期,页码 59–69,2016 年夏季。

^(2)    有关其他指标,请参见:

第四部分:有用的金融特征

  1. 第十七章 结构性突破

  2. 第十八章 熵特征

  3. 第十九章 微观结构特征

第十七章:结构性突破

17.1 动机

在制定基于机器学习的投资策略时,我们通常希望在多个因素汇聚、其预测结果提供有利的风险调整收益时进行投资。结构性突破,例如从一个市场状态转变为另一个市场状态,就是这样一种特别值得关注的汇聚实例。例如,均值回归模式可能会转变为动量模式。在这种转变发生时,大多数市场参与者会感到措手不及,并会犯下代价高昂的错误。这类错误是许多盈利策略的基础,因为处于失败一方的参与者通常在为时已晚时才意识到自己的错误。在他们接受损失之前,往往会表现出非理性行为,试图持有头寸,并希望市场反弹。有时,他们甚至会因绝望而增加亏损头寸。最终,他们会被迫止损或平仓。结构性突破提供了一些最佳的风险/回报。在本章中,我们将回顾一些测量结构性突破可能性的方法,以便基于这些方法构建有用的特征。

17.2 结构性突破测试的类型

我们可以将结构性突破测试分为两个一般类别:

  • CUSUM 测试: 这些测试评估累积预测误差是否显著偏离白噪声。

  • 爆炸性测试: 除了偏离白噪声之外,这些测试还评估过程是否表现出指数增长或崩溃,因为这与随机游走或平稳过程不一致,且在长期内是不可持续的。

    • 右尾单位根测试: 这些测试评估指数增长或崩溃的存在,同时假设自回归规范。

    • 次/超马丁戈尔测试: 这些测试在各种函数形式下评估指数增长或崩溃的存在。

17.3 CUSUM 测试

在第二章中,我们介绍了 CUSUM 滤波器,并将其应用于基于事件的柱状图采样。其想法是每当某个变量(如累积预测误差)超过预定义阈值时,就采样一个柱状图。这个概念可以进一步扩展到结构性断裂的测试。

17.3.1 布朗-达宾-埃文斯递归残差 CUSUM 测试

该测试由布朗、达宾和埃文斯 [1975] 提出。假设在每个观察值t = 1, …, T下,我们使用特征数组x [t]来预测值y [t]。矩阵X [t]由特征时间序列组成tT,{ x [i] } [i = 1, …, t]。这些作者建议我们根据以下规范计算递归最小二乘(RLS)估计的β。

该值在子样本上拟合([1, k + 1],[1, k + 2],…,[1, T]),给出Tk的最小二乘估计!。我们可以计算标准化的 1 步前递归残差为

CUSUM 统计量定义为

在假设β是某个常数值的情况下,H [0] : β [t] = β,则S [t]N [0, tk − 1]。该程序的一个警告是起始点是任意选择的,结果可能由于此而不一致。

17.3.2 朱-斯廷科姆-怀特水平 CUSUM 测试

该测试遵循 Homm 和 Breitung [2012]。它通过去掉{ x [t] } [t = 1, …, T],简化了之前的方法,并假设H [0] : β [t] = 0,即我们预测没有变化(E [t − 1] [Δ y [t] ] = 0)。这将使我们能够直接处理y [t]的水平,从而减轻计算负担。我们计算相对于y [n]的对数价格y [t]的标准化偏离,t > n,为

在原假设H [0] : β [t] = 0 下,S [n* , t]* ∼ N [0, 1]。一侧检验的时间相关临界值为

这些作者通过蒙特卡洛法得出 b [0.05] = 4.6。该方法的一个缺点是参考水平 y [n] 的设定有些任意。为克服这个缺陷,我们可以在一系列向后移动的窗口 n ∈ [1, t] 上估计 S [n* , t]*,并选择

17.4 爆炸性测试

爆炸性测试通常可以分为测试单一泡沫和测试多个泡沫的测试。在这种情况下,泡沫不仅限于价格上涨,还包括抛售。允许多个泡沫的测试更为稳健,因为泡沫-破裂-泡沫的周期会使单一泡沫测试的系列看起来是平稳的。Maddala 和 Kim [1998],以及 Breitung [2014] 提供了文献的良好概述。

17.4.1 周-类型迪基-福勒检验

一系列爆炸性测试的灵感来源于 Gregory Chow 的研究,从 Chow [1960] 开始。考虑一阶自回归过程

其中 ϵ [t] 是白噪声。零假设是 y [t] 遵循随机游走,H [0] : ρ = 1,备择假设是 y [t] 最初作为随机游走,但在时刻 τ* T 发生变化,其中 τ* ∈ (0, 1),变为爆炸过程:

在时刻 T 我们可以检验是否在时刻 τ* T(断裂日期)发生了从随机游走到爆炸过程的转换。为了检验这个假设,我们拟合以下模型,

其中 D [t]] 是一个虚拟变量,当 t < τ T 时取值为零,当 t ≥ τ* T 时取值为一。然后,零假设 H [0] : δ = 0 与(单侧)备择假设 H [1] : δ > 1 进行检验:

此方法的主要缺点是 τ* 是未知的。为了解决这个问题,Andrews [1993] 提出了一个新的检验方法,其中在某个区间 τ* ∈ [τ [0] , 1 − τ [0] ] 内尝试所有可能的 τ。正如 Breitung [2014] 所解释的,我们应该在样本的开始和结束处排除一些可能的 τ,以确保任一状态都有足够的观测值(D [t]] 中必须有足够的零和足够的一)。未知 τ 的检验统计量是所有 T (1 − 2τ [0] ) 值的最大值!

Chow 方法的另一个缺点是它假设只有一个断裂日期 τ* T,并且泡沫一直持续到样本结束(没有回到随机游走)。对于存在三种或更多状态(随机游走 → 泡沫 → 随机游走……)的情况,我们需要讨论极大增强的迪基-福勒(SADF)检验。

17.4.2 极大增强的迪基-福勒检验

正如 Phillips、Wu 和 Yu [2011] 所说:“标准单位根和协整检验不适合检测泡沫行为,因为它们无法有效区分平稳过程和周期性崩溃的泡沫模型。数据中周期性崩溃泡沫的模式看起来更像是来自单位根或平稳自回归生成的数据,而不是潜在的爆炸性过程。”为了解决这个缺陷,这些作者提出拟合回归规范

这里我们检验 H [0] : β ≤ 0, H [1] : β > 0。受 Andrews [1993] 的启发,Phillips 和 Yu [2011] 以及 Phillips、Wu 和 Yu [2011] 提出了极大值增强迪基-福勒检验(SADF)。SADF 在每个结束点 t 上使用向后扩展的起始点拟合上述回归,然后计算

其中 是在从 t [0] 开始并在 t 结束的样本上估计的,τ 是分析中使用的最小样本长度,t [0] 是向后扩展窗口的左边界,而 t = τ,…,T 。在 SADF [t] 的估计中,窗口的右侧固定在 t。标准 ADF 检验是 SADF [t] 的特例,其中 τ = t − 1。

SADF [t] 和 SDFC 之间有两个关键区别:首先,SADF [t] 在每个 t ∈ [τ, T ] 处计算,而 SDFC 仅在 T 处计算。其次,SADF 通过递归扩展样本的开始(t [0] ∈ [1, t − τ])而不是引入虚拟变量。通过在(t [0]t)上尝试所有组合的嵌套双重循环,SADF 不假设已知的 regime 切换或断点数量。图 17.1 显示了在应用 ETF 技巧(第二章,第 2.4.1 节)后的 E-mini S&P 500 期货价格系列,以及由该价格系列得出的 SADF。SADF 曲线在价格出现泡沫行为时激增,并在泡沫破裂时回落至低水平。在接下来的部分中,我们将讨论对 Phillips 原始 SADF 方法的一些增强。

图 17.1 价格(左侧 y 轴)和 SADF(右侧 y 轴)随时间变化

17.4.2.1 原始价格与对数价格

在文献中常见的研究会对原始价格进行结构性断裂检验。在这一节中,我们将探讨为什么应优先使用对数价格,特别是在处理涉及泡沫和崩溃的长期时间序列时。

对于原始价格 { y [t] },如果拒绝 ADF 的原假设,这意味着价格是平稳的,具有有限的方差。这意味着收益 并不是时间不变的,因为收益的波动性必须随着价格上涨而降低,随着价格下跌而增加,以保持价格方差恒定。当我们对原始价格进行 ADF 检验时,我们假设收益的方差并不对价格水平不变。如果收益方差恰好对价格水平不变,该模型将结构性异方差。

相比之下,如果我们使用对数价格,ADF 规格将指出

让我们进行变量替换,x [t] = ky [t]。现在,log[ x [t] ] = log[ k ] + log[ y [t] ],ADF 规格将指出

在这个基于对数价格的替代规格下,价格水平决定了收益的均值,而不是收益的波动性。在小样本中,k ≈ 1 时,差异可能在实践中并不重要,但 SADF 在跨十年和泡沫中进行回归时,产生的水平在不同状态下是显著不同的(k ≠ 1)。

17.4.2.2 计算复杂性

算法运行在 ,因为 SADF 所需的总样本长度 T 的 ADF 测试数量是

考虑 ADF 规格的矩阵表示,其中 。解决单个 ADF 回归涉及到的浮点运算(FLOPs)如 表 17.1 中列出。

表 17.1 每个 ADF 估计的 FLOPs

矩阵运算 FLOPs
o [1] = X 'y (2T − 1)N
o [2] = X 'X (2T − 1)N ²
o [3] = o ^(− 1) [2] N ³ + N ² + N
o [4] = o [3] o [1] 2N ²N
o [5] = yXo [4] T + (2N − 1)T
o [6] = o ^' [5] o [5] 2T − 1
2 + N ²
1

这给出了每个 ADF 估计的总 f ( N , T ) = N ³ + N ² (2 T + 3) + N (4 T − 1) + 2 T + 2 FLOPs。单个 SADF 更新需要 FLOPs(T − τ 次运算以找到最大 ADF 统计量),而估计完整的 SADF 序列需要

考虑 E-mini S&P 500 期货上的美元条形系列。对于(T, N) = (356631, 3),ADF 估计需要 11,412,245 FLOPs,而 SADF 更新需要 2,034,979,648,799 次操作(大约 2.035 TFLOPs)。完整的 SADF 时间序列需要 241,910,974,617,448,672 次操作(大约 242 PFLOPs)。随着T的持续增长,这个数字将迅速增加。而且这个估计不包括对齐、数据预处理、I/O 作业等著名的昂贵操作。毫无疑问,这个算法的双重循环需要大量操作。可能需要一个高性能计算集群来在合理时间内估计 SADF 系列。第二十章将介绍一些在这些情况下有用的并行化策略。

17.4.2.3 指数行为的条件

考虑对数价格的零滞后规范,Δlog[y [t]] = α + βlog[y [t* − 1]] + ϵ[t]。这可以重写为,其中。回滚t个离散步骤,我们得到,或。索引t可以在给定时间重置,以预测在接下来的t步骤后y [0]* → y [t]的未来轨迹。这揭示了表征该动态系统三种状态的条件:

  • 稳定:

    • 不均衡是

    • 然后(半衰期)。

  • 单根:β = 0,其中系统是非平稳的,表现为一个鞅。

  • 爆炸性:β > 0,其中

17.4.2.4 分位数 ADF

SADF 在 t 值系列中取上确界,。选择极值会引入一些鲁棒性问题,其中 SADF 估计可能会根据采样频率和样本的具体时间戳显著变化。ADF 极值的更鲁棒的估计量如下:首先,设定。其次,我们定义Q [t* , q]* = Q [s [t] , q],作为高 ADF 值的集中性度量,其中q ∈ [0, 1]。第三,我们定义,其中 0 < v ≤ min{q, 1 − q},作为高 ADF 值的离散度量。例如,我们可以设置q = 0.95 和v = 0.025。请注意,SADF 只是 QADF 的一个特例,其中SADF [t] = Q [t* , 1],并且未定义,因为q* = 1。

17.4.2.5 条件 ADF

或者,我们可以通过计算条件矩来解决对 SADF 稳健性的担忧。设 f [ x ] 为 的概率分布函数,xs [t]。然后,我们定义 C [t* , q] * = *K ^(− 1) * ∫ ^∞ [ Qt , q ] xf [ x ] dx 作为高 ADF 值的中心度量, 作为高 ADF 值的离散度量,正则化常数为 。例如,我们可以使用 q = 0.95。

由构造得出,C [t* , q]* ≤ SADF [t]SADF [t]C [t* , q]* 的散点图显示了下边界,呈现为一条大约单位梯度的上升线(见 图 17.2)。当 SADF 超过 -1.5 时,我们可以看到一些水平轨迹,这与 s [t] 的右侧肥尾突然扩展一致。换句话说, 即使 C [t* , q]* 相对较小,也可以达到显著大的值,因为 SADF [t] 对离群值敏感。

图 17.2 SADF (x 轴) 对比 CADF (y 轴)

图 17.3 (a) 绘制了随时间变化的 E-mini S&P 500 期货价格的 。 图 17.3 (b) 是 SADF [t] * 的散点图,基于 E-mini S&P 500 期货价格计算。它显示了 s [t] * 中的离群值向上偏倚 SADF [t*] * 的证据。

图 17.3 (a) 随时间变化 (b) (y 轴) 作为 SADF [t*] * (x 轴) 的函数

17.4.2.6 SADF 实现

本节介绍 SADF 算法的实现。此代码的目的是阐明估算 SADF 的步骤,而不是快速估算 SADF。代码片段 17.1 列出了 SADF 的内部循环。这部分估算 ,这是算法的回移成分。外部循环(此处未显示)对逐步的 t 重复此计算,{ SADF [t] * } [t* = 1, …, T]。参数为:

  • logP : 包含对数价格的 pandas 系列

  • minSL : 最小样本长度 (τ),用于最终回归

  • constant : 回归的时间趋势成分

    • 'nc' : 没有时间趋势,仅有一个常数

    • 'ct' : 一个常数加上线性时间趋势

    • 'ctt' : 一个常数加上二次多项式时间趋势

  • lags : ADF 规范中使用的滞后数

代码片段 17.1 SADF 的内部循环

代码片段 17.2 列出了函数 getXY,该函数准备进行递归测试所需的 numpy 对象。

代码片段 17.2 准备数据集

代码片段 17.3 列出了函数 lagDF,它将滞后应用于指定的参数 lags 的数据框。

代码片段 17.3 将滞后应用于数据框

最后,片段 17.4 列出了函数getBetas,它执行实际的回归。

片段 17.4 拟合 ADF 规范

17.4.3 次级和超级马尔可夫链测试

在本节中,我们将介绍不依赖于标准 ADF 规范的爆炸性测试。考虑一个过程,它要么是次马尔可夫链,要么是超级马尔可夫链。给定一些观测值{ y [t] },我们希望测试是否存在爆炸性时间趋势,H [0] : β = 0,H [1] : β ≠ 0,在其他规范下:

  • 多项式趋势(SM-Poly1):

  • 多项式趋势(SM-Poly2):

  • 指数趋势(SM-Exp):

  • 势能趋势(SM-Power):

类似于 SADF,我们对每个结束点t = τ, …, T进行向后扩展的起始点拟合,然后计算

绝对值的原因在于我们同样关注爆炸性增长和崩溃。在简单回归情况下(Greene [2008], p. 48),β的方差是,因此。相同的结果可以推广到多元线性回归情况(Greene [2008], pp. 51–52)。弱长期泡沫的可能小于强短期泡沫的,从而使该方法偏向长期泡沫。为了纠正这种偏差,我们可以通过确定系数φ ∈ [0, 1]来惩罚较大的样本长度,从而产生最佳的爆炸性信号。

例如,当φ = 0.5 时,我们在简单回归情况下补偿与较长样本长度相关的较低。当φ → 0 时,SMT [t]将显示更长的趋势,因为这种补偿减弱,长期泡沫掩盖短期泡沫。当φ → 1 时,SMT [t]变得更加嘈杂,因为更多的短期泡沫被选中而不是长期泡沫。因此,这是一种自然的方法来调整爆炸性信号,使其过滤针对特定持有期的机会。机器学习算法使用的特征可能包括从广泛的φ值估算的SMT [t]

练习

  1. 在 E-mini S&P 500 期货的美元条形系列中,

    1. 应用布朗-达宾-埃文斯方法。它能识别网络泡沫吗?

    2. 应用 Chu-Stinchcombe-White 方法。它能找到 2007-2008 年的泡沫吗?

  2. 在 E-mini S&P 500 期货的美元条形系列中,

    1. 计算SDFC(周-类型)爆炸性测试。此方法选择了什么断裂日期?这是你所预期的吗?

    2. 计算并绘制此系列的 SADF 值。你是否观察到围绕网络泡沫和大衰退之前的极端峰值?这些爆发是否也导致了峰值?

  3. 继续练习 2,

    1. 确定系列显示的周期

      1. 稳定条件

      2. 单根条件

      3. 爆炸性条件

    2. 计算 QADF。

    3. 计算 CADF。

  4. 在 E-mini S&P 500 期货的美元条形系列中,

    1. 计算 SM-Poly1 和 SM-Poly 2 的 SMT,其中φ = 1。它们的相关性是什么?

    2. 计算 SM-Exp 的 SMT,其中φ = 1 和φ = 0.5。它们的相关性是什么?

    3. 计算 SM-Power 的 SMT,其中φ = 1 和φ = 0.5。它们的相关性是什么?

  5. 如果你计算每个价格的倒数,序列{ y ^(− 1) [t] }将泡沫转变为爆破,爆破转变为泡沫。

    1. 识别爆破是否需要这种转化?

    2. 本章中有哪些方法可以识别爆破而不需要这种转化?

参考文献

  1. Andrews, D. (1993): “具有未知变更点的参数不稳定性和结构变化的检验。” 计量经济学,第 61 卷,第 4 期(7 月),页码 821–856。

  2. Breitung, J. 和 R. Kruse (2013): “当泡沫破裂时:基于结构断裂的计量经济学检验。” 统计论文,第 54 卷,页码 911–930。

  3. Breitung, J. (2014): “投机泡沫的计量经济学检验。” 波恩经济学杂志,第 3 卷,第 1 期,页码 113–127。

  4. Brown, R.L., J. Durbin, 和 J.M. Evans (1975): “检验回归关系在时间上的恒定性的技术。” 皇家统计学会杂志 B 系列,第 35 卷,页码 149–192。

  5. Chow, G. (1960). “两个线性回归中系数集相等的检验。” 计量经济学,第 28 卷,第 3 期,页码 591–605。

  6. Greene, W. (2008): 计量经济学分析,第 6 版。培生普伦蒂斯霍尔。

  7. Homm, U. 和 J. Breitung (2012): “股市投机泡沫的检验:替代方法的比较。” 金融计量经济学杂志,第 10 卷,第 1 期,198–231。

  8. Maddala, G. 和 I. Kim (1998): 单位根、协整与结构变化,第一版。剑桥大学出版社。

  9. Phillips, P., Y. Wu, 和 J. Yu (2011): “1990 年代纳斯达克的爆炸性行为:何时过度乐观推动资产价值上升?” 国际经济评论,第 52 卷,页码 201–226。

  10. Phillips, P. 和 J. Yu (2011): “在次贷危机期间对金融泡沫时间线的追溯。” 定量经济学,第 2 卷,页码 455–491。

  11. Phillips, P., S. Shi, 和 J. Yu (2013): “多重泡沫的检验 1:S&P 500 的历史过度乐观与崩溃事件。” 工作论文 8–2013,新加坡管理大学。

第十八章:熵特征

18.1 动机

价格序列传达关于需求和供应力量的信息。在完美市场中,价格是不可预测的,因为每个观察都传递了关于产品或服务的所有已知信息。当市场不完美时,价格是基于部分信息形成的,由于一些参与者了解的信息比其他人更多,他们可以利用这种信息不对称。评估价格序列的信息内容,并形成特征以供机器学习算法学习可能的结果将是有益的。例如,机器学习算法可能发现,当价格传递的信息很少时,动量投资更有利可图,而当价格传递的信息很多时,均值回归投资更有利可图。在本章中,我们将探讨确定价格序列中包含的信息量的方法。

18.2 香农熵

在本节中,我们将回顾一些信息理论中的概念,这些概念在本章的其余部分将会有用。读者可以在 MacKay [2003] 中找到完整的阐述。信息理论之父克劳德·香农定义熵为由一个静态数据源产生的平均信息量(在长消息中)。它是描述消息所需的每个字符的最小比特数,以唯一可解码的方式表示。数学上,香农 [1948] 将离散随机变量 X 的熵定义为其可能值 xA

满足 0 ≤ H [ X ] ≤ log [2] [|| A ||],其中:p [ x ] 是 x 的概率;H [ X ] = 0⇔∃ x | p [ x ] = 1; 对于所有 x;|| A || 是集合 A 的大小。这可以解释为在 X 中信息内容的概率加权平均值,其中信息的比特数被测量为 。将信息测量为 的原因在于观察到低概率结果所揭示的信息比高概率结果更多。换句话说,当意外发生时,我们会学习。类似地,冗余被定义为

满足 0 ≤ R [ X ] ≤ 1。科尔莫哥洛夫 [1965] 形式化了冗余与马尔可夫信息源复杂性之间的联系。两个变量之间的互信息被定义为从联合概率密度到边际概率密度乘积的库尔贝克-莱布勒发散。

互信息(MI)总是非负的,对称的,并且当且仅当 XY 独立时等于零。对于正态分布的变量,互信息与熟悉的皮尔逊相关性 ρ 密切相关。

因此,互信息是变量之间关联的自然度量,无论它们是线性还是非线性的(Hausser 和 Strimmer [2009])。信息的标准化变异是从互信息派生的度量。有关多个熵估计器的信息,请参见:

18.3 插值(或最大似然)估计器

在本节中,我们将按照 Gao 等人 [2008] 对熵最大似然估计器的阐述进行讨论。术语可能一开始显得有些奇怪(无意中的双关),但一旦你熟悉它,就会发现它很方便。给定数据序列 x ^(n) [1],包括从位置 1 开始到位置 n 结束的值串,我们可以在该序列中形成所有长度为 w < n 的单词字典 A ^(w)。考虑一个任意单词 y ^(w) [1]A ^(w),其长度为 w。我们用 表示单词 y ^(w) [1]x ^(n) [1] 中的经验概率,这意味着 y ^(w) [1]x ^(n) [1] 中出现的频率。假设数据是由一个平稳且遍历的过程生成的,那么大数法则保证,对于固定的 w 和较大的 n,经验分布 将接近真实分布 p [w]。在这种情况下,熵率(即每位的平均熵)的自然估计器是

由于经验分布也是对真实分布的最大似然估计,因此这通常被称为最大似然熵估计器。值 w 应足够大,以便 接近真实熵 H。值 n 需要远大于 w,以确保阶数为 w 的经验分布接近真实分布。片段 18.1 实现了插值熵估计器。

片段 18.1 插值熵估计器

18.4 Lempel-Ziv 估计器

熵可以被解释为复杂度的度量。复杂的序列包含的信息比规则(可预测)序列要多。Lempel-Ziv(LZ)算法有效地将消息分解为非冗余子串(Ziv 和 Lempel [1978])。我们可以将消息的压缩率估计为 Lempel-Ziv 字典中项目数量相对于消息长度的函数。这里的直觉是,复杂消息具有高熵,这会要求相对于要传输的字符串长度需要较大的字典。片段 18.2 显示了 LZ 压缩算法的实现。

片段 18.2 使用 LZ 算法构建的库

Kontoyiannis [1998] 试图更有效地利用消息中的可用信息。以下是对 Gao 等人[2008]的阐述的忠实总结。我们将重现该论文中的步骤,并补充实现其思想的代码片段。我们定义 L ^(n) [i] 为在i之前的n位中找到的最长匹配长度加 1,

片段 18.3 实现了确定最长匹配长度的算法。一些值得注意的事项:

  • 对于滑动窗口,值n是常量,而对于扩展窗口,n = i

  • 计算L ^(n) [i]需要数据x ^(i* + n − 1) [in]。换句话说,索引i必须位于窗口的中心。这一点很重要,以确保两个匹配字符串的长度相同。如果它们长度不同,l*的范围将有限,最大值会被低估。

  • 允许两个子字符串之间有一些重叠,尽管显然它们不能同时在i处开始。

片段 18.3 计算最长匹配长度的函数

Ornstein 和 Weiss [1993] 正式建立了

Kontoyiannis 利用这一结果来估计香农的熵率。他估计平均值,并使用该平均值的倒数来估计H。一般的直觉是,随着可用历史的增加,我们期望具有高熵的消息产生相对较短的非冗余子字符串。相反,具有低熵的消息在解析时将产生相对较长的非冗余子字符串。给定数据实现x ^∞ [ − ∞ ]、窗口长度n ≥ 1,以及匹配数量k ≥ 1,滑动窗口 LZ 估计器定义为

同样,增加窗口的 LZ 估计器定义为

计算时窗口大小n是常量,因此L ^(n) [ i ]。然而,计算时,窗口大小随着i的增加而增加,因此L ^(i) [ i ],并且。在这个扩展窗口的情况下,消息的长度N应该是一个偶数,以确保所有位都被解析(回想一下,x [i]位于中心,因此对于奇数长度的消息,最后一位不会被读取)。

上述表达式是在以下假设下推导出的:平稳性、遍历性,过程取有限多个值,并且该过程满足 Doeblin 条件。直观上,这一条件要求在有限步骤r后,无论之前发生了什么,任何事情都可以以正概率发生。事实证明,如果我们考虑上述估计器的修改版本,可以完全避免这一 Doeblin 条件:

在估计 时,一个实际问题是如何确定窗口大小 n。Gao et al. [2008] 认为 k + n = N 应该大致等于消息长度。考虑到 L ^(n) [ i ] * 的偏差为 级别,L ^(n) [ i ] * 的方差为 级别,偏差/方差权衡在 附近达到平衡。也就是说,n 可以选择使 Nn + (log [2] [ n ])²。比如,对于 N = 2 ⁸,一个平衡的偏差/方差窗口大小将是 n ≈ 198,此时 k ≈ 58。

Kontoyiannis [1998] 证明了 n 趋近于无穷大时以概率 1 收敛于香农的熵率。代码片段 18.4 实现了 Gao et al. [2008] 中讨论的思想,通过寻找两个相同大小子字符串之间的最大冗余来改进 Kontoyiannis [1997] 的方法。

代码片段 18.4 在 Gao et al. [2008] 中讨论的算法的实现

该方法的一个警告是熵率在极限中定义。用 Kontoyiannis 的话说,“我们将一个大整数 N 固定为我们的数据库大小。”Kontoyiannis 论文中使用的定理证明了渐近收敛;然而,哪里也没有声称单调性属性。当消息较短时,解决方案可能是多次重复相同的消息。

第二个警告是,由于匹配的窗口必须是对称的(字典与被匹配的子字符串长度相同),只有在消息长度对应于偶数时,最后一位才会被考虑进行匹配。一个解决方案是去掉长度为奇数的消息的第一位。

第三个警告是,当前面的序列不规则时,一些最终位将被忽略。这也是对称匹配窗口的一个结果。例如,“10000111”的熵率等于“10000110”的熵率,这意味着由于第六位和第七位的不匹配“11”,最后一位是无关的。当消息的结尾特别重要时,一个好的解决方案可能是分析反转消息的熵。这不仅确保了最终位(即反转后的初始位)被使用,实际上,它们将被用于潜在地匹配每一位。根据前面的例子,“11100001”的熵率为 0.96,而“01100001”的熵率为 0.84。

18.5 编码方案

估计熵需要对消息进行编码。在本节中,我们将回顾文献中使用的一些基于收益的编码方案。尽管接下来的讨论中未提及,但建议对分数(而非整数)微分系列中的信息进行编码(第四章),因为它们仍然包含一些记忆。

18.5.1 二进制编码

熵率估计需要将连续变量离散化,以便每个值可以从有限字母表中分配一个代码。例如,一串收益 r [t] 可以根据符号进行编码,r [t] > 0 时为 1,r [t] < 0 时为 0,去除 r [t] = 0 的情况。在从价格条采样的收益序列中,二进制编码自然产生,因为 | r [t] | 大致是恒定的。

当 | r [t] | 可以采用广泛的结果时,二进制编码会丢弃潜在的有用信息。尤其在处理受异方差影响的日内时间条时,这一点尤为明显,因其源于非均质的逐笔数据。解决这种异方差的一种方法是根据一个从属随机过程对价格进行采样。例如,交易条和成交量条包含固定数量的交易或固定成交量的交易(见第二章)。通过在这种非时间顺序的市场驱动时钟中操作,我们在高度活跃的时期更频繁地采样,而在活动较少的时期则较少采样,从而使 | r [t] | 的分布得到规整,并减少对大量字母表的需求。

18.5.2 分位数编码

除非使用价格条,否则可能需要超过两个代码。一种方法是根据每个 r [t] 所在的分位数分配代码。分位数边界是使用样本内周期(训练集)确定的。总体样本内每个字母分配的观察数量相同,样本外每个字母的观察数量接近相同。在使用该方法时,某些代码覆盖的 r [t] 范围比其他代码大。这种均匀(样本内)或接近均匀(样本外)的代码分布往往会平均提高熵值读数。

18.5.3 西格玛编码

作为一种替代方法,我们可以让价格流决定实际字典,而不是固定代码数量。假设我们固定一个离散化步骤,σ。那么,我们将值 0 分配给 r [t] ∈ [.min{ r }, min{ r } + σ),1 分配给 r [t] ∈ .min{ r } + σ, min{ r } + 2σ),以此类推,直到每个观察值都用总共 ![ 个代码进行编码,其中 ceil[.] 是天花板函数。与分位数编码不同,现在每个代码覆盖 r [t] 的范围相同的比例。由于代码并非均匀分布,熵读数往往会比分位数编码小;然而,“稀有”代码的出现会导致熵读数的峰值。

18.6 高斯过程的熵

IID 正态随机过程的熵(见诺里奇 [2003])可以推导为

对于标准正态分布,H ≈ 1.42。这个结果至少有两个用途。首先,它允许我们基准测试熵估计器的性能。我们可以从标准正态分布中抽样,找出哪种估计器、消息长度和编码的组合给出的熵估计 足够接近理论推导的值 H。例如,图 18.1 绘制了使用 Kontoyiannis 方法在长度为 100 的消息中,使用 10、7、5 和 2 字母编码下的熵估计的引导分布。当字母表至少有 10 个字母时,Snippet 18.4 中的算法给出了正确答案。当字母表过小时,信息会丢失,熵会被低估。

图 18.1 在长度为 100 的消息中,使用 10(顶部)、7(底部)字母编码下的熵估计分布

在长度为 100 的消息中,使用 5(顶部)和 2(底部)字母编码下的熵估计分布

其次,我们可以使用上述方程将熵与波动性联系起来,注意到 。这给出了熵隐含的波动性估计,前提是收益确实来自正态分布。

18.7 熵与广义均值

这里有一种有趣的思考熵的方法。考虑一组实数 x = { x [i] } [i = 1, …, n] 和权重 p = { p [i] } [i = 1, …, n],使得 0 ≤ p [i] ≤ 1,∀ i 并且 。加权均值的推广 x 在幂 q ≠ 0 时定义为

对于 q < 0,我们必须要求 x [i] > 0,∀ i。之所以称其为广义均值,是因为其他均值可以作为特例得到:

  • 最小值:

  • 调和均值:

  • 几何均值:

  • 算术均值:

  • 加权均值:

  • 二次均值:

  • 最大值:

在信息理论的背景下,一个有趣的特例是 x = { p [i] } [i = 1, …, n],因此

让我们定义量 ,对于某些 q ≠ 1。再次,对于 q < 1 在 N [q] * [ p ]中,我们必须有 p [i] * > 0,∀ i。如果 对于 k ∈ [1, n] 不同的索引,且 p [i] * = 0 在其他地方,则权重均匀分布在 k 个不同项目上,并且 N [q] * [ p ] = k 对于 q > 1。换句话说,N [q*] * [ p ] 根据 q 设置的某种加权方案,给出了 有效数量多样性

使用詹森不等式,我们可以证明 ,因此 。较小的q值为分区的元素分配了更均匀的权重,相对赋予较少见元素更多的权重,而 只是非零 p [i] 的总数。

香农熵是 。这表明熵可以被解释为列表 p 中项目的有效数的对数,其中 q → 1。图 18.2 说明了一族随机生成的 p 数组的对数有效数是如何随着 q 接近 1 而收敛到香农熵的。同时注意,当 q 变大时,它们的行为是如何稳定的。

图 18.2 随机生成的p数组族的对数有效数

直观上,熵测量信息的水平是随机变量所包含的多样性。这一直觉通过广义均值的概念得到形式化。这意味着香农熵是多样性度量的一个特例(因此与波动性的关联)。我们现在可以定义和计算除了熵之外的其他多样性度量,其中 q ≠ 1。

18.8 熵的一些金融应用

在本节中,我们将介绍熵在金融市场建模中的一些应用。

18.8.1 市场效率

当套利机制利用了所有机会时,价格会瞬间反映出所有可用信息的总量,变得不可预测(即,鞅),且没有明显的模式。相反,当套利不完美时,价格包含不完整的信息,这会导致可预测的模式。当一串数据包含冗余信息时,就会出现模式,这使得其能够被压缩。字符串的熵率决定了其最佳压缩率。熵越高,冗余越低,信息内容越丰富。因此,价格字符串的熵告诉我们在某一时刻市场效率的程度。“未压缩”的市场是一个有效市场,因为价格信息是非冗余的。“压缩”的市场是一个无效市场,因为价格信息是冗余的。泡沫是在压缩(低熵)市场中形成的。

18.8.2 最大熵生成

在一系列论文中,Fiedor [2014a, 2014b, 2014c] 提出使用 Kontoyiannis [1997] 来估计价格序列中的熵量。他认为,在可能的未来结果中,最大化熵的结果可能是最有利可图的,因为它是最不易被频率统计模型预测的情形。这是最有可能触发止损的黑天鹅情境,从而产生一个反馈机制,增强并加剧市场变动,导致收益时间序列的波动。

18.8.3 投资组合集中度

考虑一个在收益上计算的NxN协方差矩阵V,首先,我们计算矩阵的特征值分解,VW = W Λ。其次,我们获得因子负载向量为f [ω] = W 'ω,其中ω是分配向量, . ^( 1 ) 第三,我们推导每个主成分所贡献的风险部分(Bailey 和 López de Prado [2012])为

其中 ,且θ[i] ∈ [0, 1],∀ i = 1, …, N。第四,Meucci [2009] 提出了以下受熵启发的投资组合集中度定义,

起初,这一定义的投资组合集中度可能听起来很惊人,因为θ[i]不是一个概率。这种集中度概念与熵的联系源于我们在第十八章第 18.7 节讨论的广义均值。

18.8.4 市场微观结构

Easley 等人 [1996, 1997] 表明,当好消息/坏消息的赔率相等时,信息交易的概率(PIN)可以推导为

其中μ是知情交易者的到达率,ϵ是不知情交易者的到达率,α是信息事件的概率。PIN 可以解释为来自知情交易者的订单相对于整体订单流的比例。

在大小为V的成交量区间内,我们可以根据某些算法(例如 tick 规则或 Lee-Ready 算法)将价格波动分类为买入或卖出。设V ^(B) [τ]为成交量区间τ内买入价格波动的成交量总和,V ^(S) [τ]为成交量区间τ内卖出价格波动的成交量总和。Easley 等人 [2012a, 2012b] 指出 E[| V ^(B) [τ]V [τ] ^(S) |] ≈ αμ,并且期望总成交量为 E[ V ^(B) [τ] + V [τ] ^(S) ] = αμ + 2ϵ。通过使用成交量时钟(Easley 等人 [2012c]),我们可以将 E[ V ^(B) [τ] + V [τ] ^(S) ] = αμ + 2ϵ = V 设定为外生的。这意味着,在成交量时钟下,PIN 简化为

其中 。注意,2 v ^(B*) [ τ ] * − 1 表示订单流不平衡 OI [τ],这是一个有界的实值变量,其中 OI [τ] ∈ [ − 1, 1]。因此,VPIN 理论提供了在成交量时钟下,信息交易概率(PIN)与订单流不平衡的持久性之间的正式联系。有关此微观结构理论的进一步细节,请参见第十九章。

持续的订单流失衡是不利选择的必要但不充分条件。为了使市场做市商能够向知情交易者提供流动性,该订单流失衡 | OI [τ] | 也必须相对不可预测。换句话说,当市场做市商对订单流失衡的预测准确时,即使 | OI [τ] | ≫ 0,他们也不会被不利选择。在确定不利选择的概率时,我们必须确定订单流失衡的不可预测性。我们可以通过应用信息理论来确定这一点。

考虑一个长的符号序列。当该序列包含少量冗余模式时,它具有一种复杂性,使其难以描述和预测。Kolmogorov [1965] 制定了冗余与复杂性之间的联系。在信息理论中,无损压缩的任务是用尽可能少的比特完美描述一个序列。序列中包含的冗余越多,可以实现的压缩率就越大。熵表征了源的冗余,因此也表征了其 Kolmogorov 复杂性及其可预测性。我们可以利用序列的冗余与其不可预测性(由市场做市商判断)之间的联系来推导不利选择的概率。

在这里,我们将讨论一种特定程序,该程序将不利选择的概率推导为订单流失衡中固有复杂性的函数。首先,给定一个按τ = 1, …, N 索引的成交量条序列,每个条的大小为V,我们确定被分类为买入的成交量部分,v ^(B) [τ] ∈ [0, 1]。第二,我们计算{ v ^(B) [τ] }上的 q -分位数,定义一个集合Kq 个不相交子集,K = { K [1] , …, K [q] }。第三,我们从每个 v ^(B) [τ] 生成一个映射到其中一个不相交子集,f : v ^(B) [τ] → {1, …, q },其中 f [ v ^(B) [τ] ] = iv [τ] ^(B)K [i] , ∀ i ∈ [1, q ]。第四,我们通过将每个值 v ^(B) [τ] 分配给它所属的子集 K 的索引 f [ v ^(B) [τ] ] 来量化{ v ^(B) [τ] }。这导致将订单失衡集合{ v ^(B) [τ] }翻译为量化消息 X = [ f [ v ^(B) [1] ], f [ v [2] ^(B) ], …, f [ v ^(B) [N] ] ]。第五,我们使用 Kontoyiannis 的 Lempel-Ziv 算法估计熵 H [ X ]。第六,我们推导累积分布函数 F [ H [ X ] ],并使用{ F [ H [ X [τ] ]]} [τ = 1, …, N]的时间序列作为特征来预测不利选择。

练习

  1. 在 E-mini S&P 500 期货上形成美元条:

    1. 使用二进制方法量化回报序列。

    2. 使用分位数编码对回报序列进行量化,使用 10 个字母。

    3. 使用σ为所有条回报的标准差的 sigma 编码对回报序列进行量化。

    4. 使用插值法计算三个编码序列的熵。

    5. 使用 Kontoyiannis 方法计算三个编码序列的熵,窗口大小为 100。

  2. 使用练习 1 中的柱状图:

    1. 计算收益序列,{r [t] }。

    2. 将序列编码如下:如果 r [t] r [t* − 1]* < 0,则为 0;如果 r [t] r [t* − 1]* ≥ 0,则为 1。

    3. 将序列分成 1000 个相等大小的不重叠子集(你可能需要在开头丢弃一些观测值)。

    4. 使用插值法计算每个 1000 个编码子集的熵。

    5. 使用 Kontoyiannis 方法计算每个 1000 个编码子集的熵,窗口大小为 100。

    6. 计算结果 2.d 和 2.e 之间的相关性。

  3. 从标准正态分布中抽取 1000 个观测值:

    1. 这个过程的真实熵是什么?

    2. 根据 8 个分位数标记观测值。

    3. 使用插值法估计熵。

    4. 使用 Kontoyiannis 方法估计熵:

      1. 使用窗口大小为 10。

      2. 使用窗口大小为 100。

  4. 使用练习 3 中的抽样,{ x [t] } [t = 1, …, 1000]:

    1. 计算 y [t] = ρy [t* − 1]* + x [t],其中ρ = .5,y [0] = 0。

    2. 根据 8 个分位数标记 {y [t] } 的观测值。

    3. 使用插值法估计熵。

    4. 使用 Kontoyiannis 方法估计熵。

      1. 使用窗口大小为 10。

      2. 使用窗口大小为 100。

  5. 假设有一个投资组合,包含 10 个等额投资的持仓。

    1. 总风险中由第 i 个主成分贡献的部分是 i = 1, …, 10。投资组合的熵是多少?

    2. 总风险中由第 i 个主成分贡献的部分是 i = 1, …, 10。投资组合的熵是多少?

    3. 总风险中由第 i 个主成分贡献的部分是 i = 1, …, 10,α ∈ [0, 1]。将投资组合的熵作为α的函数进行绘图。

参考文献

  1. Bailey, D.和 M. López de Prado(2012):“平衡篮子:一种新的交易和对冲风险的方法。” 投资策略期刊,第 1 卷,第 4 期,页 21–62。可在ssrn.com/abstract=2066170获得。

  2. Easley D.、M. Kiefer、M. O'Hara 和 J. Paperman(1996):“流动性、信息与不常交易的股票。” 金融期刊,第 51 卷,第 4 期,页 1405–1436。

  3. Easley D.、M. Kiefer 和 M. O'Hara(1997):“交易过程的信息内容。” 实证金融期刊,第 4 卷,第 2 期,页 159–185。

  4. Easley, D.、M. López de Prado 和 M. O'Hara(2012a):“流动性毒性与高频世界中的流动性。” 金融研究评论,第 25 卷,第 5 期,页 1547–1493。

  5. Easley, D.、M. López de Prado 和 M. O'Hara(2012b):“成交量时钟:对高频范式的洞察。” 投资组合管理期刊,第 39 卷,第 1 期,页 19–29。

  6. Gao, Y., I. Kontoyiannis 和 E. Bienestock (2008): “估计二元时间序列的熵:方法论、一些理论和仿真研究。” 工作论文,arXiv。可在 arxiv.org/abs/0802.4363v1. 查看。

  7. Fiedor, Pawel (2014a): “基于互信息率的金融市场网络。” 工作论文,arXiv。可在 arxiv.org/abs/1401.2548. 查看。

  8. Fiedor, Pawel (2014b): “信息论方法对金融市场的领先-滞后效应。” 工作论文,arXiv。可在 arxiv.org/abs/1402.3820. 查看。

  9. Fiedor, Pawel (2014c): “因果非线性金融网络。” 工作论文,arXiv。可在 arxiv.org/abs/1407.5020. 查看。

  10. Hausser, J. 和 K. Strimmer (2009): “熵推断与詹姆斯-斯坦因估计器,及其在非线性基因关联网络中的应用,” 机器学习研究杂志,第 10 卷,第 1469–1484 页。www.jmlr.org/papers/volume10/hausser09a/hausser09a.pdf.

  11. Kolmogorov, A. (1965): “信息定量定义的三种方法。” 信息传输问题,第 1 卷,第 1 期,第 1–7 页。

  12. Kontoyiannis, I. (1997): “文学风格的复杂性与熵”, NSF 技术报告 # 97。

  13. Kontoyiannis (1998): “渐近最优有损 Lempel-Ziv 编码,” ISIT,马萨诸塞州剑桥,8 月 16–21 日。

  14. MacKay, D. (2003): 信息理论、推理与学习算法,第 1 版。剑桥大学出版社。

  15. Meucci, A. (2009): “管理多样化。” 风险杂志,第 22 卷,第 74–79 页。

  16. Norwich, K. (2003): 信息、感觉与知觉,第 1 版。学术出版社。

  17. Ornstein, D.S. 和 B. Weiss (1993): “熵与数据压缩方案。” IEEE 信息理论学报,第 39 卷,第 78–83 页。

  18. Shannon, C. (1948): “通信的数学理论。” 贝尔系统技术杂志,第 27 卷,第 3 期,第 379–423 页。

  19. Ziv, J. 和 A. Lempel (1978): “通过可变速率编码压缩个体序列。” IEEE 信息理论学报,第 24 卷,第 5 期,第 530–536 页。

参考文献

  1. Easley, D., R. Engle, M. O'Hara 和 L. Wu (2008): “信息与非信息交易者的时间变化到达率。” 金融计量学杂志,第 6 卷,第 2 期,第 171–207 页。

  2. Easley, D., M. López de Prado 和 M. O'Hara (2011): “闪电崩盘的微观结构。” 投资组合管理杂志,第 37 卷,第 2 期,第 118–128 页。

  3. Easley, D., M. López de Prado 和 M. O'Hara (2012c): “最优执行时间。” 数学金融,第 25 卷,第 3 期,第 640–672 页。

  4. Gnedenko, B. 和 I. Yelnik (2016): “最小熵作为有效维数的度量。” 工作论文。可在 ssrn.com/abstract=2767549. 查看。

备注

^(1)    另外,如果协方差矩阵是基于价格变化计算的,我们也可以使用持仓向量。

第十九章:微观结构特征

19.1 动机

市场微观结构研究“在明确的交易规则下交换资产的过程和结果”(O'Hara [1995])。微观结构数据集包括关于拍卖过程的主要信息,如订单取消、双向拍卖簿、排队、部分成交、主动方、修正、更换等。主要来源是金融信息交换(FIX)消息,这些消息可以从交易所购买。FIX 消息中包含的细节水平使研究人员能够理解市场参与者如何隐瞒和透露他们的意图。这使得微观结构数据成为构建预测机器学习特征的重要成分之一。

19.2 文献回顾

市场微观结构理论的深度和复杂性随着可用数据的数量和多样性而不断演变。第一代模型仅使用价格信息。那时的两个基础性结果是交易分类模型(如 tick 规则)和 Roll [1984]模型。第二代模型是在成交量数据集开始可用后出现的,研究者将注意力转向研究成交量对价格的影响。该代模型的两个例子是 Kyle [1985]和 Amihud [2002]。

第三代模型在 1996 年之后出现,那时莫琳·奥哈拉、大卫·伊斯利等人发表了他们的“知情交易的概率”(PIN)理论(Easley et al. [1996])。这是一个重大的突破,因为 PIN 解释了买卖差价是流动性提供者(市场做市商)与持仓者(知情交易者)之间顺序战略决策的结果。本质上,它说明了市场做市商是知情交易者的反向选择的卖方,而买卖差价是他们为此选项收取的溢价。Easley et al. [2012a, 2012b] 解释了如何估计 VPIN,即基于成交量采样下的 PIN 高频估计。

这些是微观结构文献中使用的主要理论框架。O'Hara [1995]和 Hasbrouck [2007]提供了低频微观结构模型的良好汇编。Easley et al. [2013]呈现了高频微观结构模型的现代处理。

19.3 第一代:价格序列

第一代微观结构模型关注于估计买卖差价和波动率作为流动性的代理。他们在数据有限的情况下,未对交易过程施加战略或顺序结构。

19.3.1 Tick 规则

在双重拍卖书中,报价用于在不同价格水平上出售证券(出价)或在不同价格水平上购买证券(竞标)。出价价格始终高于竞标价格,因为否则将立即匹配。每当买方匹配出价或卖方匹配竞标时,就会发生交易。每笔交易都有买方和卖方,但只有一方发起交易。

Tick 规则是一种用于确定交易主动方的算法。根据该逻辑,买方发起的交易标记为“1”,卖方发起的交易标记为“-1”。

其中 p [t] 是按 t = 1, …, T 索引的交易价格,而 b [0] 被任意设定为 1。许多研究已确定,尽管相对简单,tick 规则仍能实现高分类准确率(Aitken 和 Frino [1996])。竞争分类方法包括 Lee 和 Ready [1991] 以及 Easley 等 [2016]。

对 { b [t] } 序列的变换可以产生有用的特征。这些变换包括:(1) 对其未来期望值 E [t] [ b [t* + 1]* ] 的卡尔曼滤波;(2) 对这些预测的结构性断裂(第十七章);(3) { b [t] } 序列的熵(第十八章);(4) 对 { b [t] } 进行的 Wald-Wolfowitz 的运行检验的 t 值;(5) 对累积 { b [t] } 序列的分数微分,(第五章);等等。

19.3.2 Roll 模型

Roll [1984] 是首个提出证券有效买卖差价解释的模型之一。这是有用的,因为买卖差价是流动性的函数,因此 Roll 的模型可以被视为早期测量证券流动性的尝试。考虑中间价格序列 { m [t] },其中价格遵循随机游走且无漂移。

因此,价格变化 Δ m [t] = m [t]m [t* − 1]* 是从正态分布独立且同分布地抽取的。

这些假设当然与所有实证观察相悖,这些观察表明金融时间序列存在漂移、异方差、表现出序列依赖性,其回报分布是非正态的。但通过适当的抽样程序,如我们在第二章中看到的,这些假设可能并不太不现实。观察到的价格 { p [t] } 是对买卖差价进行顺序交易的结果:

其中 c 是买卖差价的一半,b [t] ∈ { − 1, 1} 是主动方。Roll 模型假设买卖双方的可能性相等,,序列独立,E[ b [t] b [t* − 1] * ] = 0,并且与噪声独立,E[ b [t] u [t*] * ] = 0 . 在这些假设下,Roll 推导出 c 和 σ ² [ u ] 的值如下:

导致 和 σ ² [ u ] = σ ² [Δ p [t] * ] + 2σ[Δ p [t] * , Δ p [t* − 1] * ]。总之,买卖差价是价格变化的序列协方差的函数,而真实(未观察到的)价格噪声,排除微观结构噪声,是观察到的噪声和价格变化的序列协方差的函数。

读者可能会质疑如今使用 Roll 模型的必要性,因为数据集中包含了多个书籍层次的买卖价格。尽管 Roll 模型存在局限性,但它仍在使用的一个原因是,它提供了一种相对直接的方法来确定那些交易较少的证券或其公开报价不能代表市场做市商愿意提供流动性的水平(例如公司债券、市政债券和机构债券)的有效买卖差价。使用 Roll 的估计,我们可以推导出有关市场流动性状况的信息特征。

19.3.3 高低波动率估计器

Beckers [1983] 显示,基于高低价格的波动率估计器比基于收盘价格的标准波动率估计器更准确。Parkinson [1980] 推导出,对于遵循几何布朗运动的连续观察价格,

其中 k [1] = 4log[2],H [t] * 是柱 t 的最高价格,L [t] * 是柱 t 的最低价格。然后,基于观察到的高低价格,可以稳健地估计波动率特征 σ [HL]。

19.3.4 Corwin 和 Schultz

在 Beckers [1983] 的基础上,Corwin 和 Schultz [2012] 引入了一种基于高低价格的买卖差价估计器。该估计器基于两个原则:首先,最高价格几乎总是与出价匹配,而最低价格几乎总是与买价匹配。高低价格的比率反映了基本波动率以及买卖差价。其次,高低价格比率中由于波动性造成的部分与两个观察之间的时间推移成比例增加。

Corwin 和 Schultz 表明,作为价格百分比的差价可以估计为

其中

并且 H [t* − 1, t]* 是两个时间段(t − 1 和 t)的最高价,而 L [t* − 1, t]* 是两个时间段的最低价(t − 1 和 t)。因为 α [t] < 0⇒ S [t] < 0,作者建议将负阿尔法设为 0(见科尔温和舒尔茨 [2012],第 727 页)。片段 19.1 实现了该算法。corwinSchultz 函数接受两个参数,一个带有列(HighLow)的系列数据框,以及一个整数值 sl,用于定义估计 β [t] 时使用的样本长度。

片段 19.1 科尔温-舒尔茨算法的实现

注意,波动性未出现在最终的科尔温-舒尔茨方程中。原因是波动性已被其高/低估计器取代。作为该模型的副产品,我们可以推导出贝克-帕金森波动性,如片段 19.2 所示。

片段 19.2 高低价波动性的估计

该程序在公司债券市场中特别有用,因为该市场没有集中订单簿,交易通过竞标(BWIC)进行。由此产生的特征,买卖差价 S ,可以在滚动窗口中递归估计,并且可以使用卡尔曼滤波器进行平滑处理。

19.4 第二代:战略交易模型

第二代微观结构模型专注于理解和测量非流动性。非流动性是金融机器学习模型中的一个重要信息特征,因为它是一种具有相关溢价的风险。这些模型比第一代模型具有更强的理论基础,因为它们将交易解释为知情交易者与非知情交易者之间的战略互动。在此过程中,它们关注签名交易量和订单流不平衡。

这些特征大多数是通过回归估计的。在实践中,我观察到与这些微观结构估计相关的 t 值比(均值)估计本身更具信息性。尽管文献中没有提到这一观察,但有充分理由偏好基于 t 值的特征而非基于均值的特征:t 值是由估计误差的标准差重新缩放的,包含了均值估计中缺失的另一维信息。

19.4.1 凯尔的 Lambda

凯尔 [1985] 引入了以下战略交易模型。考虑一个风险资产,其终值 vN [ p [0] , Σ [0] ],以及两个交易者:

  • 一个噪音交易者以数量 u = N [0, σ ² [u] ] 进行交易,且与 v 独立。

  • 一个知情交易者知道 v 并通过市场订单需求数量 x

市场做市商观察到总订单流 y = x + u,并相应地设定价格 p。在这个模型中,做市商无法区分噪音交易者和知情交易者的订单。他们根据订单流不平衡调整价格,因为这可能表明有知情交易者的存在。因此,价格变化与订单流不平衡之间存在正相关关系,这被称为市场影响。

知情交易者推测市场做市商有一个线性的价格调整函数 p = λ y + μ,其中 λ 是流动性的逆测量。知情交易者的利润为 π = ( vp ) x,在 处最大化,且二阶条件为 λ > 0。

相反,市场做市商推测知情交易者的需求是 v 的线性函数:x = α + β v,这意味着 。注意,流动性降低意味着 λ 增加,这意味着知情交易者的需求降低。

凯尔认为,市场做市商必须在利润最大化和市场效率之间找到平衡,在上述线性函数下,唯一可能的解决方案发生在

最后,知情交易者的预期利润可以重写为

这意味着知情交易者有三个利润来源:

  • 证券的错误定价。

  • 噪音交易者净订单流的方差。噪音越大,知情交易者越容易隐藏他的意图。

  • 终端证券方差的倒数。波动性越低,错误定价的货币化就越容易。

在凯尔的模型中,变量 λ 捕捉价格影响。流动性不足随着对 v 的不确定性增加而增加,并随着噪音的增加而减少。作为一个特征,它可以通过拟合回归进行估计。

其中 { p [t] } 是价格的时间序列,{ b [t] } 是攻击者标志的时间序列,{ V [t] } 是交易量的时间序列,因此 { b [t] V [t] } 是签名交易量或净订单流的时间序列。图 19.1 绘制了在 E-mini S&P 500 期货系列上估计的凯尔的 λ 的直方图。

图 19.1 凯尔在 E-mini S&P 500 期货上计算的 λ

19.4.2 Amihud 的 Lambda

Amihud [2002] 研究了绝对收益与流动性不足之间的正相关关系。特别地,他计算了与一美元交易量相关的每日价格反应,并认为其值是价格影响的代理。这个思想的一个可能实现是

其中 B [τ] 是包含在时间柱 τ 中的交易集, 是时间柱 τ 的收盘价,p [t] V [t*] * 是涉及交易 t ∈ *B [τ] * 的美元交易量。尽管其表面上看似简单,Hasbrouck [2009] 发现每日的 Amihud λ 估计与日内有效价差的估计之间存在高度秩相关。图 19.2 绘制了在 E-mini S&P 500 期货系列上估计的 Amihud 的 λ 的直方图。

图 19.2 在 E-mini S&P 500 期货上估计的 Amihud 的 λ

19.4.3 Hasbrouck 的 λ

Hasbrouck [2009] 跟进了 Kyle 和 Amihud 的思想,并将其应用于基于交易和报价(TAQ)数据的价格影响系数估计。他使用 Gibbs 采样器生成回归规范的贝叶斯估计。

其中 B [i* , τ]* 是包含在安全 i 的时间柱 τ 中的交易集,i = 1, …, I 是安全 i 的时间柱 τ 的收盘价,b [i* , t] * ∈ { − 1, 1} 表示交易 tB [i* , τ] * 是买入启动还是卖出启动;而 p [i* , t] V [i , t] * 是涉及交易 tB [i* , τ] * 的美元交易量。然后我们可以为每个安全 i 估计 λ [i],并将其用作近似交易有效成本(市场影响)的特征。

与大多数文献一致,Hasbrouck 推荐使用 5 分钟的时间柱来抽样价格波动。然而,正如第二章所讨论的,通过与市场活动同步的随机抽样方法可以获得更好的结果。图 19.3 绘制了在 E-mini S&P 500 期货系列上估计的 Hasbrouck 的 λ 的直方图。

图 19.3 在 E-mini S&P 500 期货上估计的 Hasbrouck 的 λ

19.5 第三代:顺序交易模型

正如我们在上一节中所见,战略交易模型以一个能够多次交易的单一知情交易者为特征。在本节中,我们将讨论一种替代模型,其中随机选择的交易者顺序独立地进入市场。

自出现以来,顺序交易模型在市场制造商中变得非常流行。原因之一是,它们包含了流动性提供者面临的不确定性来源,即信息事件发生的概率、该事件是负面的概率、噪声交易者的到达率和知情交易者的到达率。考虑到这些变量,市场制造商必须动态更新报价,并管理他们的库存。

19.5.1 基于信息的交易概率

Easley 等人[1996]使用交易数据来确定个别证券的基于信息的交易概率(PIN)。这个微观结构模型将交易视为市场制造者和持仓者之间在多个交易期间重复进行的博弈。

将某证券的价格表示为S,当前值为S [0]。然而,一旦某些新信息被纳入价格中,S将是S [B](坏消息)或S [G](好消息)。在分析的时间范围内,新信息到达的概率为α,坏消息的概率为δ,而好消息的概率为(1 − δ)。这些作者证明,证券价格的期望值可以在时间t处计算为

按照泊松分布,知情交易者以速率μ到达,而不知情交易者以速率ε到达。然后,为了避免知情交易者的损失,市场制造者在竞标水平B [t] 达到盈亏平衡,

盈亏平衡的卖出价水平A [t]在时间t处必须为,

由此,盈亏平衡的买卖价差被确定为

时,我们得到

这个方程告诉我们,决定市场制造者提供流动性的价格区间的关键因素是

下标t表示在该时间点估计的概率α和δ。作者应用贝叶斯更新过程,将每次交易到达市场后的信息纳入考虑。

为了确定值PIN [t],我们必须估计四个不可观察的参数,即{α, δ, μ, ε}。一种最大似然方法是拟合三个泊松分布的混合体,

其中V ^(B)是以卖出价交易的交易量(买入发起交易),而V ^(S)是以买入价交易的交易量(卖出发起交易)。

19.5.2 量化同步信息交易概率

Easley 等人[2008]证明了

特别地,对于足够大的μ,

Easley 等人[2011]提出了一种高频 PIN 估计方法,他们称之为量化同步信息交易概率(VPIN)。该过程采用了量化时钟,它将数据采样与市场活动同步,这通过交易量来捕捉(见第二章)。我们可以估计

其中V ^(B) [τ]是量化柱τ内买入发起交易的交易量总和,V ^(S) [τ]是量化柱τ内卖出发起交易的交易量总和,n是用于生成该估计的柱数。由于所有量化柱的大小相同V,我们知道通过构造

因此,PIN 可以高频估计为

有关 VPIN 的更多细节和案例研究,请参见 Easley 等人[2013]。Andersen 和 Bondarenko [2013]通过线性回归得出 VPIN 不是波动性的良好预测指标。然而,许多研究发现 VPIN 确实具有预测能力:Abad 和 Yague [2012]、Bethel 等人[2012]、Cheung 等人[2015]、Kim 等人[2014]、Song 等人[2014]、Van Ness 等人[2017]和 Wei 等人[2013]等。无论如何,线性回归是一种 18 世纪数学家已经知道的技术(Stigler [1981]),经济学家不应感到惊讶,当它无法识别 21 世纪金融市场中的复杂非线性模式时。

19.6 来自微观结构数据集的附加特征

我们在第 19.3 到 19.5 节中研究的特征是由市场微观结构理论建议的。此外,我们还应考虑一些替代特征,尽管这些特征未被理论提出,但我们怀疑它们携带有关市场参与者运作方式及其未来意图的重要信息。在这样做时,我们将利用机器学习算法的力量,这些算法可以学习如何使用这些特征,而不需要理论的具体指导。

19.6.1 顺序大小的分布

Easley 等人[2016]研究了每个交易规模的交易频率,发现圆整规模的交易异常频繁。例如,频率率随着交易规模的增加迅速衰减,圆整交易规模{5, 10, 20, 25, 50, 100, 200, …}除外。这些作者将这一现象归因于所谓的“鼠标”或“GUI”交易者,即通过点击 GUI(图形用户界面)上的按钮发送订单的人类交易者。例如,在 E-mini S&P 500 中,大小为 10 的交易比大小为 9 的交易频率高出 2.9 倍;大小为 50 的交易比大小为 49 的交易频率高出 10.9 倍;大小为 100 的交易比大小为 99 的交易频率高出 16.8 倍;大小为 200 的交易比大小为 199 的交易频率高出 27.2 倍;大小为 250 的交易比大小为 249 的交易频率高出 32.5 倍;大小为 500 的交易比大小为 499 的交易频率高出 57.1 倍。这种模式对于“硅基交易者”而言并不典型,他们通常被编程为随机化交易,以掩盖他们在市场中的足迹。

一个有用的特征可能是确定圆整规模交易的正常频率,并监测与该预期值的偏差。例如,机器学习算法可以确定通常比例较大的圆整规模交易是否与趋势相关,因为人类交易者往往倾向于基于基本面观点、信念或信念进行下注。相反,比例低于通常水平的圆整规模交易可能会增加价格横盘的可能性,因为硅基交易者通常不会持有长期观点。

19.6.2 取消率、限价单、市场单

Eisler 等人 [2012] 研究市场订单、限价单和报价取消的影响。这些作者发现,小型股票对这些事件的反应与大型股票不同。他们得出结论,测量这些量与建模买卖价差的动态相关。

Easley 等人 [2012] 还认为,大量的报价取消率可能表明流动性低,因为参与者发布的报价并不打算被成交。

  • 报价填塞者: 他们参与“延迟套利”。他们的策略是用信息淹没交易所,唯一的目的是减缓竞争算法的速度,迫使其解析只有发起者知道可以忽略的消息。

  • 报价悬挂者: 这一策略发送报价,迫使被挤压的交易者追逐与其利益相悖的价格。O'Hara [2011] 提供了其扰乱活动的证据。

  • 流动性挤压者: 当一个处于困境的大型投资者被迫平仓时,掠夺性算法会朝同一方向交易,尽可能地抽取流动性。因此,价格会过度波动,从中获利(Carlin 等人 [2007])。

  • 成群捕猎者: 独立捕猎的掠夺者会意识到彼此的活动,并组成一个团队以最大化触发级联效应的机会(Donefer [2010],Fabozzi 等人 [2011],Jarrow 和 Protter [2011])。NANEX [2011] 显示了似乎是成群捕猎者强制止损的情况。尽管他们各自的行为太小,无法引起监管者的怀疑,但他们的集体行为可能是市场操控的。当这种情况发生时,很难证明他们的勾结,因为他们以去中心化、自发的方式进行协调。

这些掠夺性算法利用报价取消和各种订单类型,试图对市场制造者进行不利选择。它们在交易记录中留下不同的特征,测量报价取消率、限价单和市场订单可以为其意图提供有用的特征基础。

19.6.3 时间加权平均价格执行算法

Easley 等 [2012] 演示了如何识别针对特定时间加权平均价格(TWAP)的执行算法的存在。TWAP 算法是一种将大订单分割成小订单的算法,这些小订单在固定时间间隔内提交,以试图实现预定义的时间加权平均价格。这些作者以 2010 年 11 月 7 日至 2011 年 11 月 7 日期间的 E-mini S&P 500 期货交易为样本。他们将一天分为 24 小时,并为每个小时统计每秒的交易量,而不考虑分钟。然后,他们将这些总交易量绘制成一个表面,其中 x 轴表示每秒的交易量,y 轴表示一天中的小时,z 轴表示总交易量。这一分析使我们能够看到一天中每分钟内交易量的分布,并寻找在时间-空间上执行其大额订单的低频交易者。在几乎每天的每个小时内,分钟内交易量的最大集中往往发生在前几秒。这在 00:00–01:00 GMT(亚洲市场开盘时)、05:00–09:00 GMT(英国和欧洲股票开盘时)、13:00–15:00 GMT(美国股票开盘时)和 20:00–21:00 GMT(美国股票收盘时)尤为明显。

一个有用的机器学习特征可能是评估每分钟开始时的订单不平衡,并确定是否存在持续的成分。这可以用于提前跟踪大型机构投资者,同时他们的 TWAP 订单的大部分仍在待处理。

19.6.4 期权市场

Muravyev 等 [2013] 利用美国股票和期权的微观结构信息研究两个市场不一致的事件。他们通过推导由看跌-看涨平价报价隐含的基础买卖差价范围并将其与股票的实际买卖差价范围进行比较,来表征这种不一致性。他们得出结论,争议往往倾向于股票报价,这意味着期权的 报价 不包含经济上显著的信息。同时,他们确实发现期权的 交易 包含了股票价格中未包含的信息。这些发现对于习惯于交易相对流动性较低产品(包括股票期权)的投资组合经理来说并不意外。报价可能在较长时间内保持非理性,即使稀疏的价格也很有信息量。

Cremers 和 Weinbaum [2010] 发现,相对昂贵的看涨期权的股票(同时具有高波动率差和高波动率差变化的股票)每周的表现优于相对昂贵的看跌期权的股票(同时具有低波动率差和低波动率差变化的股票)50 个基点。当期权流动性较高而股票流动性较低时,这种可预测性更强。

与这些观察一致,可以通过计算从期权交易衍生的买权-卖权隐含股价提取有用特征。期货价格仅代表平均或预期的未来值。但期权价格使我们能够推导出被定价的结果的整个分布。机器学习算法可以在不同执行价格和到期日的希腊字母中搜索模式。

19.6.5 签名订单流的序列相关性

Toth 等人 [2011] 研究了伦敦证券交易所股票的签名订单流,发现订单符号在许多天内是正自相关的。他们将这一观察归因于两个候选解释:羊群效应和订单分拆。他们得出结论,在几小时以下的时间尺度上,订单流的持续性主要是由于分拆而非羊群效应。

鉴于市场微观结构理论将订单流不平衡的持续性归因于知情交易者的存在,通过签名成交量的序列相关性来衡量这种持续性的强度是合理的。这一特征将与我们在第 19.5 节中研究的特征相辅相成。

19.7 什么是微观结构信息?

让我通过讨论我认为市场微观结构文献中的一个主要缺陷来结束本章。大多数关于这个主题的文章和书籍研究的是不对称信息,以及战略性参与者如何利用这些信息从市场制造商中获利。但是,在交易的背景下,信息究竟是如何定义的呢?不幸的是,在微观结构意义上,并没有广泛接受的信息定义,文献中以一种令人惊讶的松散且相对非正式的方式使用这一概念(López de Prado [2017])。本节提出一个基于信号处理的适当信息定义,可以应用于微观结构研究。

考虑一个特征矩阵X = {X [t]} [t = 1, …, T],其中包含做市商通常用来判断是否在特定水平提供流动性或取消被动报价的信息。例如,列可以是本章讨论的所有特征,如 VPIN、凯尔的λ、取消率等。矩阵X每个决策点有一行。例如,做市商可能在每次交易 10,000 份合约时,或在价格发生显著变化时(回忆第二章中的抽样方法)重新考虑提供流动性或退出市场的决定等。首先,我们导出一个数组y = {y [t]} [t = 1, …, T],将标记 1 分配给导致做市获利的观察,并将标记 0 分配给导致做市亏损的观察(请参见第三章的标记方法)。其次,我们在训练集(Xy)上拟合一个分类器。第三,当新的样本外观察到来时τ > T,我们使用拟合的分类器预测标签!。第四,我们计算这些预测的交叉熵损失L [τ],如第九章第 9.4 节所述。第五,我们在负交叉熵损失数组{−L [t]}[t = T + 1, …, τ]上拟合一个核密度估计器(KDE),以导出其累积分布函数F。第六,我们在时间t处估计微观结构信息为φ [τ] = F [−L [τ]],其中φ [τ] ∈ (0, 1)。

这种微观结构信息可以理解为市场做市商决策模型面临的复杂性。在正常市场条件下,做市商以低交叉熵损失生成有信息的预测,并能够通过向持仓者提供流动性获利。然而,在存在(非对称)有信息交易者的情况下,做市商生成无信息的预测,其高交叉熵损失表明他们受到不利选择。换句话说,微观结构信息只能相对于做市商的预测能力来定义和测量。其含义是{φ [τ]}应成为您金融机器学习工具包中的一个重要特征。

考虑 2010 年 5 月 6 日闪电崩盘的事件。市场制造商错误地预测他们在买价上的被动报价能够被成交,并以更高的价格卖出。崩盘并非由单一的错误预测造成,而是由数千个预测错误的积累(Easley 等人 [2011])。如果市场制造商监控了他们预测的交叉熵损失上升,他们会意识到有知情交易者的存在,以及不利选择的概率危险地上升。这将使他们能够扩大买卖价差,达到停止订单流失衡的水平,因为卖方将不再愿意以这些折扣出售。相反,市场制造商一直在以极其慷慨的水平向卖方提供流动性,直到最终被迫平仓,触发了一场流动性危机,震惊了市场、监管机构和学术界数月甚至数年。

练习

  1. 从 E-mini 标普 500 期货的逐笔数据时间序列中,

    1. 应用逐笔规则推导交易符号系列。

    2. 与 CME 提供的攻击方数据进行比较(FIX 标签 5797)。逐笔规则的准确性如何?

    3. 选择 FIX 标签 5797 与逐笔规则不一致的情况。

      1. 你能看到任何不同之处来解释这种分歧吗?

      2. 这些分歧与大幅价格跳跃有关吗?或者高撤单率?或者薄报价规模?

      3. 这些分歧在高市场活动期还是低市场活动期更可能发生?

  2. 在 E-mini 标普 500 期货逐笔数据的时间序列上计算 Roll 模型。

    1. σ ² [u] 和 c 的估计值是多少?

    2. 了解到该合约是全球最具流动性的产品之一,并且其交易具有最紧的买卖价差,这些值是否符合你的预期?

  3. 计算 E-mini 标普 500 期货的高低波动率估计器(第 19.3.3 节):

    1. 使用每周值,这与收盘到收盘收益的标准差有什么不同?

    2. 使用每日值,这与收盘到收盘收益的标准差有什么不同?

    3. 使用美元柱,每天平均 50 根柱,这与收盘到收盘收益的标准差有什么不同?

  4. 将 Corwin-Schultz 估计应用于 E-mini 标普 500 期货的每日序列。

    1. 预期的买卖价差是多少?

    2. 隐含波动率是什么?

    3. 这些估计与练习 2 和 3 的早期结果一致吗?

  5. 计算凯尔的 λ:

    1. 逐笔数据。

    2. 在 E-mini 标普 500 期货上形成一个美元柱的时间序列,其中

      1. b [t] 是交易符号的成交量加权平均。

      2. V [t] 是该柱中的成交量总和。

      3. Δp [t] 是两个连续柱之间价格的变化。

  6. 重复练习 5,这次应用哈斯布鲁克的 λ。结果一致吗?

  7. 重复练习 5,这次应用阿米哈德的 λ。结果一致吗?

  8. 在 E-mini 标普 500 期货上形成一个成交量柱的时间序列,

    1. 计算 2010 年 5 月 6 日的 VPIN 系列(闪电崩盘)。

    2. 绘制 VPIN 和价格的系列。你看到了什么?

  9. 计算 E-mini S&P 500 期货的订单大小分布。

    1. 在整个期间。

    2. 关于 2010 年 5 月 6 日。

    3. 对两个分布进行 Kolmogorov-Smirnov 检验。它们在 95%的置信水平下显著不同吗?

  10. 计算 E-mini S&P 500 期货数据集中每日报价取消率和市场订单部分的时间序列。

    1. 这两个系列之间的相关性是什么?它在统计上显著吗?

    2. 这两个系列与每日波动性之间的相关性是什么?这是否是你预期的结果?

  11. 在 E-mini S&P 500 期货的逐笔数据上:

    1. 计算每分钟前 5 秒内执行的交易量分布。

    2. 计算每分钟执行的交易量分布。

    3. 对两个分布进行 Kolmogorov-Smirnov 检验。它们在 95%的置信水平下显著不同吗?

  12. 在 E-mini S&P 500 期货的逐笔数据上:

    1. 计算签名交易量的一阶序列相关性。

    2. 在 95%的置信水平下,它在统计上显著吗?

参考文献

  1. Abad, D. 和 J. Yague (2012): “从 PIN 到 VPIN。” 西班牙金融经济评论,第 10 卷,第 2 期,页码 74-83。

  2. Aitken, M. 和 A. Frino (1996): “逐笔测试的准确性:来自澳大利亚证券交易所的证据。” 银行与金融学期刊,第 20 卷,页码 1715–1729。

  3. Amihud, Y. 和 H. Mendelson (1987): “交易机制与股票收益:一项实证研究。” 金融学期刊,第 42 卷,页码 533–553。

  4. Amihud, Y. (2002): “流动性不足与股票收益:横截面与时间序列效应。” 金融市场期刊,第 5 卷,页码 31–56。

  5. Andersen, T. 和 O. Bondarenko (2013): “VPIN 与闪电崩盘。” 金融市场期刊,第 17 卷,页码 1-46。

  6. Beckers, S. (1983): “基于高、低和收盘价格的证券价格收益的方差。” 商业期刊,第 56 卷,页码 97–112。

  7. Bethel, E. W.、Leinweber, D.、Rubel, O. 和 K. Wu (2012): “闪电崩盘后时代的联邦市场信息技术:超级计算的角色。” 交易期刊,第 7 卷,第 2 期,页码 9–25。

  8. Carlin, B.、M. Sousa Lobo 和 S. Viswanathan (2005): “偶发流动性危机:合作与掠夺性交易。” 金融学期刊,第 42 卷,第 5 期(10 月),页码 2235–2274。

  9. Cheung, W.、R. Chou、A. Lei (2015): “交易所交易障碍期权与 VPIN。” 期货市场期刊,第 35 卷,第 6 期,页码 561-581。

  10. Corwin, S. 和 P. Schultz (2012): “从每日高低价格估算买卖差价的一种简单方法。” 金融学期刊,第 67 卷,第 2 期,页码 719–760。

  11. Cremers, M. 和 D. Weinbaum (2010): “偏离期权平价与股票收益可预测性。” 金融与数量分析期刊,第 45 卷,第 2 期(4 月),页码 335–367。

  12. Donefer, B. (2010): “算法失控:自动交易策略世界中的风险。” 交易期刊,第 5 卷,页码 31–34。

  13. Easley, D., N. Kiefer, M. O'Hara 和 J. Paperman (1996): “流动性、信息与不常交易的股票。” 金融期刊,第 51 卷,第 4 期,第 1405–1436 页。

  14. Easley, D., R. Engle, M. O'Hara 和 L. Wu (2008): “信息与无信息交易者的到达率随时间变化。” 金融计量经济学期刊,第 6 卷,第 2 期,第 171–207 页。

  15. Easley, D., M. López de Prado 和 M. O'Hara (2011): “闪崩的微观结构。” 投资组合管理期刊,第 37 卷,第 2 期(冬季),第 118–128 页。

  16. Easley, D., M. López de Prado 和 M. O'Hara (2012a): “高频世界中的流动性毒性与流动性。” 金融研究评论,第 25 卷,第 5 期,第 1457–1493 页。

  17. Easley, D., M. López de Prado 和 M. O'Hara (2012b): “成交量时钟:高频范式的洞察。” 投资组合管理期刊,第 39 卷,第 1 期,第 19–29 页。

  18. Easley, D., M. López de Prado 和 M. O'Hara (2013): 高频交易:交易者、市场与监管者的新现实,第 1 版。风险书籍。

  19. Easley, D., M. López de Prado 和 M. O'Hara (2016): “从交易数据中辨别信息。” 金融经济学期刊,第 120 卷,第 2 期,第 269–286 页。

  20. Eisler, Z., J. Bouchaud 和 J. Kockelkoren (2012): “订单簿事件的影响:市场订单、限价订单和取消。” 定量金融,第 12 卷,第 9 期,第 1395–1419 页。

  21. Fabozzi, F., S. Focardi 和 C. Jonas (2011): “高频交易。方法论与市场影响。” 期货市场评论,第 19 卷,第 7–38 页。

  22. Hasbrouck, J. (2007): 实证市场微观结构,第 1 版。牛津大学出版社。

  23. Hasbrouck, J. (2009): “美国股票的交易成本与回报:从每日数据中估计有效成本。” 金融期刊,第 64 卷,第 3 期,第 1445–1477 页。

  24. Jarrow, R. 和 P. Protter (2011): “高频交易在电子市场中的功能失调角色。” 理论与应用金融国际期刊,第 15 卷,第 3 期。

  25. Kim, C., T. Perry 和 M. Dhatt (2014): “全天候的信息交易与价格发现。” 替代投资期刊,第 17 卷,第 2 期,第 68-81 页。

  26. Kyle, A. (1985): “连续拍卖与内幕交易。” 计量经济学,第 53 卷,第 1315–1336 页。

  27. Lee, C. 和 M. Ready (1991): “从日内数据推断交易方向。” 金融期刊,第 46 卷,第 733–746 页。

  28. López de Prado, M. (2017): “数学与经济学:现实检查。” 投资组合管理期刊,第 43 卷,第 1 期,第 5–8 页。

  29. Muravyev, D., N. Pearson 和 J. Broussard (2013): “股票期权中存在价格发现吗?” 金融经济学期刊,第 107 卷,第 2 期,第 259–283 页。

  30. NANEX (2011): “奇怪的日子:2011 年 6 月 8 日—NatGas 算法。” NANEX 博客。可在www.nanex.net/StrangeDays/06082011.html查看。

  31. O'Hara, M. (1995): 市场微观结构,第 1 版。布莱克威尔,牛津。

  32. O'Hara, M. (2011): “什么是报价?” 交易期刊,第 5 卷,第 2 期(春季),第 10–15 页。

  33. Parkinson, M. (1980): “极值法估计收益率方差。” 商业期刊 , 第 53 卷,页 61–65。

  34. Patzelt, F. 和 J. Bouchaud (2017): “金融市场中集体价格影响的普遍缩放性和非线性。” 工作论文。可在 arxiv.org/abs/1706.04163. 获取。

  35. Roll, R. (1984): “在有效市场中有效买卖价差的简单隐含测量。” 金融期刊 , 第 39 卷,页 1127–1139。

  36. Stigler, Stephen M. (1981): “高斯与最小二乘法的发明。” 统计年鉴 , 第 9 卷,第 3 期,页 465–474。

  37. Song, J, K. Wu 和 H. Simon (2014): “VPIN(量化同步信息交易概率)指标的参数分析。” 在 Zopounidis, C. 主编, 定量金融风险管理:理论与实践 , 第 1 版,Wiley 出版。

  38. Toth, B., I. Palit, F. Lillo 和 J. Farmer (2011): “为什么订单流如此持续?” 工作论文。可在 arxiv.org/abs/1108.1632. 获取。

  39. Van Ness, B., R. Van Ness 和 S. Yildiz (2017): “HFT 在订单流毒性和股票价格方差中的作用,以及预测 HFT 流动性提供的变化。” 经济与金融期刊 , 第 41 卷,第 4 期,页 739–762。

  40. Wei, W., D. Gerace 和 A. Frino (2013): “知情交易、流动毒性及其对日内交易因素的影响。” 澳大利亚会计商业与金融期刊 , 第 7 卷,第 2 期,页 3–24。

第五部分:高性能计算秘籍

  1. 第二十章 多处理与向量化

  2. 第二十一章 暴力破解与量子计算机

  3. 第二十二章 高性能计算智能与预测技术

第二十章:多处理与向量化

20.1 动机

多处理对机器学习至关重要。机器学习算法计算密集,需要高效利用所有的 CPU、服务器和集群。因此,本书中介绍的大多数功能都是为异步多处理设计的。例如,我们频繁使用一个神秘的函数mpPandasObj,而从未定义它。在本章中,我们将解释该函数的功能。此外,我们将详细研究如何开发多处理引擎。本章介绍的程序结构与执行它们所用的硬件架构无关,无论我们使用单个服务器的核心还是分布在多个互连服务器上的核心(例如,在高性能计算集群或云中)。

20.2 向量化示例

向量化,也称为数组编程,是并行化的最简单示例,其中操作一次性应用于整个值集。举个简单的例子,假设你需要在一个三维空间中进行暴力搜索,每个维度有 2 个节点。未向量化的笛卡尔积实现将类似于片段 20.1。假如你需要在 100 个维度中搜索,或者如果维度的数量在运行时由用户定义,这段代码会是什么样子呢?

片段 20.1 未向量化的笛卡尔积

向量化的解决方案将用矩阵代数操作或编译的迭代器或生成器替换所有显式迭代器(例如,For. . .loops)。片段 20.2 实现了片段 20.1 的向量化版本。向量化版本有四个优点:(1)慢速的嵌套 For. . .loops 被快速迭代器替换;(2)代码从 dict0 的维度推断网格的维度;(3)我们可以在不修改代码的情况下运行 100 个维度,而无需 100 个 For. . .loops;(4)在内部,Python 可以在 C 或 C++ 中运行操作。

片段 20.2 向量化的笛卡尔积

20.3 单线程与多线程与多进程

现代计算机拥有多个 CPU 插槽。每个 CPU 有多个核心(处理器),每个核心有多个线程。多线程是一种在同一核心的两个或多个线程上并行运行多个应用程序的技术。多线程的一个优势是,由于应用程序共享同一个核心,它们共享同一个内存空间。这引入了多个应用程序可能同时写入同一内存空间的风险。为防止这种情况发生,全局解释器锁(GIL)一次只为每个核心分配一个线程的写入权限。在 GIL 的限制下,Python 的多线程只能在每个处理器上使用一个线程。因此,Python 通过多进程而非实际的多线程实现并行处理。处理器不共享同一内存空间,因此多进程不会存在写入同一内存空间的风险;然而,这也使得在进程之间共享对象变得更加困难。

为单线程执行而实现的 Python 函数只会利用现代计算机、服务器或集群的部分性能。让我们看看一个简单任务在单线程执行时如何低效地运行的例子。片段 20.3 找到 10,000 个长度为 1,000 的高斯过程首次触碰宽度为标准差 50 倍的对称双障碍的最早时间。

片段 20.3 单线程实现的一次触摸双障碍

将此实现与代码片段 20.4 进行比较。现在代码将之前的问题分为 24 个任务,每个处理器一个。然后,任务在 24 个处理器上异步并行运行。如果在一个拥有 5000 个 CPU 的集群上运行相同的代码,经过的时间将大约是单线程实现的 1/5000。

代码片段 20.4 一次触摸双障碍的多处理实现

此外,你可以实现相同的代码来多处理一个向量化函数,正如我们在第三章中对函数applyPtSlOnT1所做的那样,其中并行进程执行包括向量化 pandas 对象的子例程。这样,你将同时实现两个层次的并行化。但为什么止步于此?你还可以通过在 HPC 集群中运行向量化代码的多进程实例一次性实现三个层次的并行化,其中集群中的每个节点提供第三层并行化。在接下来的部分中,我们将解释多处理的工作原理。

20.4 原子和分子

在准备并行化作业时,区分原子和分子是很有用的。原子是不可分割的任务。我们希望将这些任务分组为分子,而不是在单个线程中顺序执行所有任务,这样可以使用多个处理器并行处理。每个分子是将由回调函数顺序处理的一组原子,使用单个线程。并行化在分子级别进行。

20.4.1 线性划分

形成分子最简单的方法是将原子列表分成相等大小的子集,其中子集的数量是处理器数量与原子数量之间的最小值。对于N个子集,我们需要找到N + 1个索引来划分分区。这个逻辑在代码片段 20.5 中得到了展示。

代码片段 20.5 **LINPARTS** 函数

通常会遇到涉及两个嵌套循环的操作。例如,计算 SADF 序列(第十七章)、评估多个障碍触摸(第三章),或计算未对齐系列的协方差矩阵。在这些情况下,原子任务的线性划分会低效,因为某些处理器必须解决比其他处理器更多的操作,计算时间将取决于最重的分子。一个部分解决方案是将原子任务划分为处理器数量的倍数,然后优先加载重分子到作业队列中。这样,轻分子将被分配给那些首先完成重分子的处理器,确保所有 CPU 在作业队列耗尽之前保持忙碌。在下一节中,我们将讨论更完整的解决方案。图 20.1 绘制了 20 个复杂度相等的原子任务线性划分为 6 个分子的情况。

图 20.1 20 个原子任务的线性划分为 6 个分子

20.4.2 双重嵌套循环划分

考虑两个嵌套循环,外循环迭代 i = 1, …, N,内循环迭代 j = 1, …, i。我们可以将这些原子任务 {( i , j )|1 ≤ ji , i = 1, …, N } 排序为一个 三角矩阵(包括主对角线)。这需要 次操作,其中 是非对角线操作,N 是对角线操作。我们希望通过将原子任务划分为 M 个子集 { S [m] } [m = 1, …, M] 来并行化这些任务,每个子集大约包含 个任务。以下算法确定构成每个子集(一个分子)的行。

第一个子集 S [1] 由前 r [1] 行组成,即 S [1] = {1, …, r [1] },总共有 个项目。然后,r [1] 必须满足条件 。解出 r [1],我们得到正根。

第二个子集包含行 S [2] = { r [1] + 1, …, r [2] },总共有 个项目。然后,r [2] 必须满足条件 。解出 r [2],我们得到正根。

我们可以对未来的子集 S [m] = { r [m* − 1]* + 1, …, r [m] } 重复相同的论点,总共有 个项目。然后,r [m] 必须满足条件 。解出 r [m],我们得到正根。

很容易看出 r [m] 约简为 r [1],其中 r [m* − 1]* = r [0] = 0 . 由于行号是正整数,上述结果取整为最接近的自然数。这可能意味着某些划分的大小可能会稍微偏离 目标。片段 20.6 实现了这一逻辑。

片段 20.6 THE **NESTEDPARTS** FUNCTION

如果外循环迭代 i = 1, …, N,内循环迭代 j = i , …, N,我们可以将这些原子任务 {( i , j )|1 ≤ ij ., j = 1, …, N } 排序为一个 三角矩阵(包括主对角线)。在这种情况下,必须将参数 upperTriang = True 传递给函数 nestedParts。对于好奇的读者,这是一个特殊的装箱问题案例。图 20.2 绘制了原子到分子的双重嵌套循环划分,复杂性逐渐增加。最终得到的 6 个分子涉及类似数量的工作,尽管一些原子任务的难度可能高达其他任务的 20 倍。

图 20.2 原子到分子的双重嵌套循环划分

20.5 多进程引擎

为每个多进程函数编写一个并行化封装是错误的。相反,我们应该开发一个可以并行化未知函数的库,无论它们的参数和输出结构如何。这就是多处理引擎的目标。在这一部分,我们将研究一个这样的引擎,一旦你理解了逻辑,你将准备好开发自己的引擎,包括各种定制属性。

20.5.1 准备作业

在之前的章节中,我们频繁使用了mpPandasObj。该函数接收六个参数,其中四个是可选的:

  • func : 一个回调函数,将在并行中执行

  • pdObj : 包含的元组:

    • 用于将分子传递给回调函数的参数名称

    • 一份不可分割的任务(原子)列表,将被分组为分子

  • numThreads : 将在并行中使用的线程数量(每个线程一个处理器)

  • mpBatches : 并行批次的数量(每个核心的作业数)

  • linMols : 分区将是线性还是双重嵌套

  • kargs : func所需的关键字参数

片段 20.7 列出了mpPandasObj的工作原理。首先,原子被分组为分子,使用linParts(每个分子相同数量的原子)或nestedParts(原子分布在下三角结构中)。当mpBatches大于 1 时,分子的数量将超过核心的数量。假设我们将任务分为 10 个分子,其中分子 1 的处理时间是其余分子的两倍。如果我们在 10 个核心上运行该过程,9 个核心将在运行时的一半处于闲置状态,等待第一个核心处理分子 1。另一方面,我们可以将mpBatches =10设置为将该任务分为 100 个分子。这样,每个核心将接收到相等的工作负载,即使前 10 个分子的处理时间与接下来的 20 个分子相同。在这个例子中,使用mpBatches =10的运行时间将是mpBatches =1所消耗时间的一半。

其次,我们形成作业列表。作业是一个字典,包含处理分子所需的所有信息,即回调函数、其关键字参数以及构成分子的原子子集。第三,如果numThreads = =1(见片段 20.8),我们将顺序处理作业,否则并行处理(见 20.5.2 节)。我们希望顺序运行作业的选项是出于调试目的。在多个处理器中运行程序时,很难捕获错误。^(1) 一旦代码调试完成,我们将希望使用numThreads > 1。第四,我们将每个分子的输出拼接成一个单一的列表、系列或数据框。

**片段 20.7 **MPPANDASOBJ**,在书中多个地方使用

在 20.5.2 节中,我们将看到片段 20.8 的processJobs_函数的多进程对应项。

片段 20.8 单线程执行,用于调试

20.5.2 异步调用

Python 有一个名为multiprocessing的并行化库。这个库是多进程引擎的基础,例如joblib,^(2) 这是许多sklearn算法使用的引擎。^(3) 示例 20.9 说明了如何异步调用 Python 的multiprocessing库。reportProgress函数让我们了解已完成工作的百分比。

示例 20.9 异步调用 Python 的多进程库的例子

20.5.3 解包回调

在示例 20.9 中,指令pool.imap_unordered()通过在单个线程中运行jobs(一个分子)中的每个项目并行化expandCall。示例 20.10 列出了expandCall,它解包工作(分子)中的项目(原子),并执行回调函数。这个小函数是多进程引擎核心的技巧:它将字典转化为任务。一旦你理解了它的角色,你就能够开发自己的引擎。

示例 20.10 将任务(分子)传递给回调函数

20.5.4 序列化/反序列化对象

多进程必须序列化方法,以便将其分配给不同的处理器。问题是,绑定的方法是不可序列化的。^(4) 解决办法是为你的引擎添加功能,告诉库如何处理这种对象。示例 20.11 包含应列在多进程引擎库顶部的指令。如果你对这段代码的具体原因感到好奇,可能想要阅读 Ascher 等人[2005],第 7.5 节。

示例 20.11 将此代码放在你的引擎开头

20.5.5 输出减少

假设你将一个任务分成 24 个分子,目标是让引擎将每个分子分配给一个可用的核心。代码段processJobs将在示例 20.9 中捕获这 24 个输出并将其存储在一个列表中。这种方法在输出不大的问题中是有效的。如果输出必须合并为一个单一输出,首先我们将等待最后一个分子完成,然后处理列表中的项目。只要输出的大小和数量不大,这种后处理所增加的延迟应该不会显著。

然而,当输出消耗大量 RAM,并且需要合并成单个输出时,将所有这些输出存储在列表中可能会导致内存错误。在结果由func异步返回时,动态执行输出减少操作会更好,而不是等到最后一个分子完成。我们可以通过改善 processJobs 来解决这个问题。特别是,我们将传递三个额外参数,以确定如何将分子输出减少为单个输出。片段 20.12 列出了增强版本的processJobs,其中包含三个新参数:

  • redux : 这是一个回调,用于执行减少操作的函数。例如,如果输出数据框应相加,则redux = pd.DataFrame.add

  • reduxArgs : 这是一个字典,包含必须传递给redux的关键字参数(如果有的话)。例如,如果redux = pd.DataFrame.join,则可能是reduxArgs = {'how':'outer'}

  • reduxInPlace : 一个布尔值,指示redux操作是否应在原地发生。例如,redux = dict.updateredux = list.append需要reduxInPlace = True,因为附加列表和更新字典都是原地操作。

片段 20.12 增强 **PROCESSJOBS** 以执行动态输出减少

现在processJobsRedux知道如何处理输出,我们还可以增强 Snippet 20.7 中的mpPandasObj。在 Snippet 20.13 中,新函数mpJobList将三个输出减少参数传递给processJobsRedux。这消除了像mpPandasObj那样处理输出列表的需要,从而节省了内存和时间。

片段 20.13 增强 **MPPANDASOBJ** 以执行动态输出减少

20.6 多进程示例

到目前为止,我们在本章中介绍的内容可以大幅加速许多冗长且大规模的数学运算。在这一节中,我们将说明多进程的另一个动机:内存管理。

假设你已经对形式为Z ' Z的协方差矩阵进行了谱分解,正如我们在第八章第 8.4.2 节所做的,其中Z的大小为TxN。这产生了一个特征向量矩阵W和一个特征值矩阵Λ,使得Z ' ZW = W Λ。现在你想要推导出解释用户定义部分总方差的正交主成分,0 ≤ τ ≤ 1。为此,我们计算!,其中!包含W的前MN列,使得!。计算!可以通过注意来并行化。

其中Z [b]是一个稀疏的TxN矩阵,仅有TxN [b]项(其余为空),是一个NxM矩阵,仅有N [b] xM项(其余为空),以及。这种稀疏性是通过将列集合分割为B个列子集的分区创建的,仅将列的b个子集加载到Z [b]中。这种稀疏性的概念乍一看可能有点复杂,但代码片段 20.14 展示了 pandas 如何使我们以无缝的方式实现它。函数getPCs通过参数eVec接收。参数molecules包含fileNames中的文件名子集,每个文件代表Z [b]。关键概念是我们计算Z [b]与由Z [b]中的列定义的的行切片的点积,而分子结果会即时聚合(redux = pd.DataFrame.add)。

代码片段 20.14 针对部分列的主成分

这种方法有两个优点:首先,因为getPCs顺序加载数据框Z [b],对于足够大的B,内存不会被耗尽。第二,mpJobList并行执行分子,从而加快计算速度。

在实际的机器学习应用中,我们经常会遇到Z包含数十亿个数据点的数据集。正如这个例子所示,并行化不仅在减少运行时间方面有益。许多问题由于内存限制而无法解决,即使我们愿意等待更长时间。

练习

  1. 使用timeit运行代码片段 20.1 和 20.2。重复 100 次执行的 10 个批次。每个代码片段的最小耗时是多少?

  2. 代码片段 20.2 中的指令对于单元测试、穷举搜索和情景分析非常有用。你能记得书中还在哪里见过它们吗?它们还有可能被用于哪里?

  3. 调整代码片段 20.4,以使用两个嵌套循环方案形成分子,而不是线性方案。

  4. timeit比较:

    1. 代码片段 20.4,通过重复 100 次执行的 10 个批次来实现。每个代码片段的最小耗时是多少?

    2. 修改代码片段 20.4(来自练习 3),通过重复 100 次执行的 10 个批次来实现。每个代码片段的最小耗时是多少?

  5. 通过使用mpPandasObj简化代码片段 20.4。

  6. 修改mpPandasObj以处理使用两个嵌套循环方案形成分子的可能性,采用上三角结构。

参考

  1. Ascher, D., A. Ravenscroft, and A. Martelli (2005): Python Cookbook,第 2 版。O'Reilly Media。

参考文献

  1. Gorelick, M.和 I. Ozsvald (2008): 高性能 Python,第 1 版。O'Reilly Media。

  2. López de Prado, M. (2017): “金融领域的超级计算:温和入门。”康奈尔大学讲座材料。可在ssrn.com/abstract=2907803.

  3. McKinney, W. (2012): Python 数据分析,第 1 版。O'Reilly Media。

  4. Palach, J. (2008): 用 Python 进行并行编程,第 1 版。Packt Publishing。

  5. Summerfield, M. (2013): Python 实战:使用并发、库和模式创建更好的程序,第 1 版。Addison-Wesley。

  6. Zaccone, G. (2015): Python 并行编程食谱,第 1 版。Packt Publishing。

注释

^(1)    海森堡效应,以海森堡的不确定性原理命名,描述了在仔细观察时会改变行为的错误。多处理的错误就是一个典型例子。

^(2)     pypi.python.org/pypi/joblib

^(3)     scikit-learn.org/stable/developers/performance.html#multi-core-parallelism-using-joblib-parallel

^(4)     stackoverflow.com/questions/1816958/cant-pickle-type-instancemethod-when-using-pythons-multiprocessing-pool-ma

第二十一章:暴力搜索与量子计算机

21.1 动机

离散数学自然地出现在多个机器学习问题中,包括层次聚类、网格搜索、基于阈值的决策和整数优化。有时,这些问题没有已知的解析(封闭形式)解决方案,甚至没有可以近似的启发式方法,我们唯一的希望就是通过暴力搜索来寻找解决方案。在本章中,我们将研究一个对现代超级计算机来说无法解决的金融问题如何被重新表述为一个整数优化问题。这种表示方式使其适合量子计算机。通过这个例子,读者可以推断出如何将他特定的金融机器学习难题转化为量子暴力搜索。

21.2 组合优化

组合优化问题可以描述为存在有限个可行解的问题,这些解是通过组合有限个变量的离散值而得出的。随着可行组合数量的增加,穷举搜索变得不切实际。旅行推销员问题就是一个已知为 NP 困难的组合优化问题的例子(Woeginger [2003]),即问题类别至少和最难的可解问题一样困难,并且是非确定性多项式时间内的。

使得全面搜索不切实际的原因在于标准计算机是顺序评估和存储可行解的。但如果我们能够一次性评估和存储所有可行解呢?这正是量子计算机的目标。标准计算机的位只能在两个可能状态({0, 1})中选择一个,而量子计算机依赖于量子位(qubits),这是一种可以同时持有两种状态的 线性叠加 的存储元素。理论上,量子计算机能够做到这一点,得益于量子力学现象。在某些实现中,量子位可以支持两个方向的电流同时流动,从而提供所需的叠加。这种线性叠加特性使得量子计算机特别适合解决 NP 难的组合优化问题。有关量子计算机能力的一般论述,请参见 Williams [2010]。

理解这种方法的最佳方式是通过一个特定的例子。我们将看到一个动态投资组合优化问题如何在一般交易成本函数的约束下,被表示为一个组合优化问题,从而使量子计算机能够处理。与 Garleanu 和 Pedersen [2012] 不同,我们不假设收益来自 IID 正态分布。这个问题对大型资产管理者尤其相关,因为过度周转和执行短缺所带来的成本可能会严重侵蚀其投资策略的盈利能力。

21.3 目标函数

考虑一组资产 X = { x [i] }, i = 1, …, N,其收益在每个时间阶段 h = 1, …, H 下遵循多元正态分布,且均值和方差各不相同。我们假设收益是多元正态分布,与时间无关,但在时间上并非同分布。我们将交易轨迹定义为一个 NxH 矩阵 ω,该矩阵决定在每个 H 阶段对每个 N 资产分配的资本比例。在特定阶段 h = 1, …, H 下,我们有一个预测均值 μ [h]、一个预测方差 V [h] 和一个预测交易成本函数 τ [h] [ω]。这意味着,给定交易轨迹 ω,我们可以计算预期投资收益的向量 r ,为

其中 τ[ω] 可以采用任何功能形式。为简化起见,考虑以下情况:

  • ,对于 h = 2, …, H

  • ω[n] 是对工具 n 的初始分配,n = 1, …, N

τ[ω] 是一个 Hx1 的交易成本向量。用通俗的话来说,与每项资产相关的交易成本是资本分配变化平方根的总和,经过一个与资产相关的特定因子 C [h] = { c [n* , h]* } [n = 1, …, N] 重新缩放,该因子会随 h 而变化。因此,C [h] 是一个 Nx1 的向量,用于确定各资产之间的相对交易成本。

r 相关的夏普比率(第十四章)可以计算为(μ [h] 为净风险无风险利率)

21.4 问题

我们希望计算出能够解决该问题的最佳交易轨迹。

该问题试图计算全局动态最优解,与均值方差优化器(见第十六章)导出的静态最优解形成对比。注意,非连续的交易成本嵌入在 r 中。与标准的投资组合优化应用相比,这至少有三个原因使其不是一个凸(二维)规划问题:(1)收益并非同分布,因为 μ [h] 和 V [h]h 而变化。(2)交易成本 τ [h] [ω] 是非连续的,并随 h 而变化。(3)目标函数 SR [ r ] 不是凸的。接下来,我们将展示如何在不利用目标函数的任何分析性质的情况下计算解决方案(因此这种方法的广义性质)。

21.5 整数优化方法

该问题的普遍性使得使用标准的凸优化技术变得不可行。我们的解决策略是对其进行离散化,以便使其适合整数优化。这反过来又使我们能够利用量子计算技术找到最优解。

21.5.1 鸽笼划分

假设我们计算 K 单位资本在 N 资产之间的分配方式,其中我们假设 K > N。这等同于寻找非负整数解 x [1] + … + x [N] = K 的数量,该方程有一个很好的组合解 。这与数论中经典的整数划分问题相似,哈代和拉马努金(后来还有拉德马克)证明了一个渐近表达式(见约翰逊 [2012])。虽然在划分问题中顺序并不重要,但在我们面临的问题中,顺序非常相关。例如,如果 K = 6 且 N = 3,则划分 (1, 2, 3) 和 (3, 2, 1) 必须视为不同(显然 (2, 2, 2) 不需要排列)。 图 21.1 说明了在将 6 单位资本分配给 3 个不同资产时顺序的重要性。这意味着我们必须考虑每个划分的所有不同排列。尽管有一个很好的组合解来找到这些分配的数量,但随着 KN 的增大,计算可能仍然非常复杂。然而,我们可以使用斯特林近似法来轻松得到一个估算值。

图 21.1 划分 (1, 2, 3) 和 (3, 2, 1) 必须视为不同。

片段 21.1 提供了一种高效的算法来生成所有划分的集合,,其中 是包括零的自然数(整数)。

片段 21.1 将 K 个对象划分到 N 个槽位中

21.5.2 可行静态解

我们希望计算在任何给定时间点 h 的所有可行解的集合,记作 Ω。考虑将 K 单位划分为 N 资产的划分集合 p ^(K* , N)。对于每个划分 { p [i]* } [i = 1, …, N] ∈ p ^(K* , N),我们可以定义一个绝对权重向量,使得 ,其中 (全投资约束)。这个全投资(无杠杆)约束意味着每个权重可以是正数或负数,因此对于每个绝对权重向量 {|ω [i] |} [i* = 1, …, N],我们可以生成 2 ^(N) 个(有符号)权重向量。这是通过将 {|ω [i] |} [i = 1, …, N] 中的项目与 {−1, 1} 的笛卡尔积项目进行 N 次重复相乘来完成的。片段 21.2 展示了如何生成与所有划分相关的权重向量集合 Ω,

片段 21.2 与所有划分相关的所有向量集合 Ω

21.5.3 评估轨迹

给定所有向量 Ω 的集合,我们定义所有可能轨迹的集合 Φ 为 Ω 的笛卡尔积,重复 H 次。然后,对于每条轨迹,我们可以评估其交易成本和 SR,并选择在 Φ 中表现最优的轨迹。片段 21.3 实现了这一功能。对象 params 是一个包含 C、μ、V 值的字典列表。

片段 21.3 评估所有轨迹

请注意,该过程选择了一个全球最优轨迹,而不依赖于凸优化。即使协方差矩阵条件不良,交易成本函数不连续等,仍然会找到解决方案。我们为这种通用性付出的代价是计算解决方案极其耗费计算资源。实际上,评估所有轨迹类似于旅行推销员问题。数字计算机不适合这种 NP 完全或 NP 困难的问题;然而,量子计算机因线性叠加特性而能够同时评估多个解。

本章提出的方法为 Rosenberg 等人 [2016] 的研究奠定了基础,该研究利用量子退火器解决了最优交易轨迹问题。同样的逻辑可以应用于涉及路径依赖的大范围金融问题,如交易轨迹。难以处理的 ML 算法可以离散化并转化为针对量子计算机的暴力搜索。

21.6 数值示例

以下我们说明如何在实践中找到全局最优解,使用数字计算机。量子计算机将同时评估所有轨迹,而数字计算机则是顺序进行。

21.6.1 随机矩阵

代码片段 21.4 返回具有已知秩的高斯值随机矩阵,这在许多应用中很有用(见练习)。下次你想执行多变量蒙特卡罗实验或情景分析时,可以考虑使用这段代码。

代码片段 21.4 生成给定秩的随机矩阵

代码片段 21.5 生成H均值向量、协方差矩阵和交易成本因子C,μ,V。这些变量存储在params列表中。

代码片段 21.5 生成问题的参数

21.6.2 静态解决方案

代码片段 21.6 计算了由局部(静态)最优解产生的轨迹性能。

代码片段 21.6 计算和评估静态解决方案

21.6.3 动态解决方案

代码片段 21.7 计算与全局动态最优轨迹相关的性能,应用本章中解释的函数。

代码片段 21.7 计算和评估动态解决方案

练习

  1. 使用抽屉原则,证明! .

  2. 使用代码片段 21.4 生成大小为(1000, 10),sigma = 1的随机矩阵。

    1. rank = 1。绘制协方差矩阵的特征值。

    2. rank = 5。绘制协方差矩阵的特征值。

    3. rank = 10。绘制协方差矩阵的特征值。

    4. 你观察到了什么模式?你如何将其与马科维茨的诅咒(第十六章)联系起来?

  3. 在第 21.6 节运行数值示例:

    1. 使用 size = 3,并使用 timeit 计算运行时间。重复 10 批次的 100 次执行。花费了多长时间?

    2. 使用 size = 4timeit。重复 10 批次的 100 次执行。花费了多长时间?

  4. 审查本章中的所有代码片段。

    1. 有多少可以向量化?

    2. 有多少可以使用第二十章中的技术进行并行化?

    3. 如果你优化代码,你认为你能加快多少速度?

    4. 使用优化代码,在一年内可以解决的问题维度是什么?

  5. 在什么情况下,全局动态最优轨迹将与局部最优序列相匹配?

    1. 这是一组现实的假设吗?

    2. 如果不是,

      1. 这是否可以解释为什么简单的解决方案优于马科维茨的(第十六章)?

      2. 你认为为什么这么多公司在计算局部最优序列上花费如此多的精力?

参考文献

  1. Garleanu, N. 和 L. Pedersen (2012): “具有可预测回报和交易成本的动态交易。” 金融学期刊 ,第 68 卷,第 6 期,第 2309–2340 页。

  2. Johansson, F. (2012): “哈迪-拉马努金-拉德默赫公式的高效实现,” LMS 计算与数学期刊 ,第 15 卷,第 341–359 页。

  3. Rosenberg, G., P. Haghnegahdar, P. Goddard, P. Carr, K. Wu, 和 M. López de Prado (2016): “使用量子退火器解决最优交易轨迹问题。” IEEE 信号处理选刊 ,第 10 卷,第 6 期(9 月),第 1053–1060 页。

  4. 威廉姆斯,C.(2010):量子计算探索,第 2 版。施普林格。

  5. 沃根格,G.(2003): “NP-hard 问题的精确算法:一项调查。” 见于于永,M.,G. 雷因特和 G. 里纳尔迪:组合优化—奇迹,你变小了! 计算机科学讲义,卷 2570,施普林格,第 185–207 页。

第二十二章:高性能计算智能与预测技术

吴克生和霍斯特·D·西蒙

22.1 动机

本章介绍了劳伦斯伯克利国家实验室(LBNL)的计算智能与预测技术(CIFT)项目。CIFT 的主要目标是促进高性能计算(HPC)工具和技术在流数据分析中的应用。在注意到数据量被作为美国证券交易委员会(SEC)和商品期货交易委员会(CFTC)发布 2010 年闪电崩盘报告延迟五个月的解释后,LBNL 启动了 CIFT 项目,以应用 HPC 技术来管理和分析金融数据。及时处理流数据是许多商业应用的要求,例如避免电力网中的潜在故障或金融市场中的流动性危机。在所有这些情况下,HPC 工具在处理复杂数据依赖关系和提供及时解决方案方面都非常适合。多年来,CIFT 处理了多种形式的流数据,包括来自车辆交通、电力网、电力使用等的数据。以下部分将解释 HPC 系统的关键特性,介绍在这些系统上使用的一些特殊工具,并提供使用这些 HPC 工具进行流数据分析的示例。

22.2 对 2010 年闪电崩盘的监管响应

2010 年 5 月 6 日下午约 2:45(美国东部夏令时间),美国股市道琼斯工业平均指数经历了近 10%的下跌,但在几分钟后几乎恢复了所有损失。监管机构花了大约五个月时间才提出调查报告。在国会小组面前调查崩盘时,数据量(约 20TB)被认为是延迟的主要原因。由于高性能计算(HPC)系统,例如国家能源研究科学计算中心(NERSC),^(1)通常在几分钟内处理数百 TB 数据,我们应该能够轻松处理金融市场的数据。这促成了 CIFT 项目的建立,其使命是应用 HPC 技术和工具进行金融数据分析。

金融大数据的一个关键方面是它主要由时间序列组成。多年来,CIFT 团队及其众多合作者开发了分析多种形式的数据流和时间序列的技术。本章简要介绍了 HPC 系统,包括硬件(第 22.4 节)和软件(第 22.5 节),并讲述了一些成功的案例(第 22.6 节)。我们最后总结了迄今为止的愿景和工作,并为感兴趣的读者提供了联系方式。

22.3 背景

计算技术的进步使得寻找复杂模式变得相当容易。这种模式发现能力是近期若干科学突破的基础,例如希格斯粒子的发现(Aad et al. [2016])和引力波(Abbot et al. [2016])。这种能力同样是许多互联网公司的核心,例如,用于将用户与广告商匹配(Zeff and Aronson [1999], Yen et al. [2009])。然而,科学与商业中使用的硬件和软件有着明显的不同。HPC 工具在多种商业应用中具有一些重要优势。

科学家的工具通常围绕高性能计算(HPC)平台构建,而商业应用的工具则围绕云计算平台构建。为了从大量数据中筛选出有用模式,这两种方法都被证明效果良好。然而,HPC 系统的主要应用是大规模仿真,例如用于预测未来几天区域性风暴的天气模型(Asanovic et al. [2006])。相比之下,商业云最初是出于同时处理大量独立数据对象(数据并行任务)的需求而产生的。

在我们的工作中,我们主要关注流数据的分析。特别是来自传感器网络的高速复杂数据流,这些网络监测着我国的电力网和公路系统。这种流工作负载对 HPC 系统或云系统都不是理想的,如我们下面所讨论的,但我们认为 HPC 生态系统在处理流数据分析方面比云生态系统有更多的优势。

云系统最初是为并行数据任务设计的,在这些任务中,大量独立的数据对象可以同时处理。因此,该系统旨在实现高吞吐量,而不是产生实时响应。然而,许多商业应用需要实时或近实时的响应。例如,电力网中的不稳定事件可能在几分钟内发展并演变为灾难;快速找到明显的征兆可以避免灾难。同样,金融研究文献中也识别出了新出现的流动性不足事件的迹象;在活跃的市场交易时间内快速发现这些迹象可以提供防止市场冲击和避免闪崩的选项。在这些情况下,优先考虑快速周转时间的能力至关重要。

数据流按定义是逐步可用的;因此,可能没有大量的数据对象可以并行处理。通常,仅有固定数量的最新数据记录可用于分析。在这种情况下,有效利用许多中央处理单元(CPU)核心的计算能力的一种方式是将对单个数据对象(或单个时间步)的分析工作分配给多个 CPU 核心。HPC 生态系统在这类工作方面拥有比云生态系统更先进的工具。

这些是激励我们工作的主要点。关于 HPC 系统与云系统的更全面比较,我们建议感兴趣的读者参考 Asanovic 等人的[2006]文献。尤其是,Fox 等人[2015]为描述任何应用场景的相似性和差异性创建了一个详尽的分类法。

简而言之,我们认为 HPC 社区在推动流分析的最先进技术方面有很多可提供的帮助。CIFT 项目的使命是将 LBNL 的 HPC 专业知识转移到流业务应用中。我们通过合作、演示和工具开发来追求这一使命。

为了评估 HPC 技术的潜在用途,我们花费时间与各种应用进行合作。这一过程不仅使我们的 HPC 专家接触到多个领域,还使我们能够获得资金支持,以建立一个演示设施。

在众多早期支持者的慷慨捐赠下,我们建立了一个专门用于此工作的庞大计算集群。这个专用计算机(名为 dirac1)允许用户利用 HPC 系统,自行评估他们的应用。

我们还参与了一项工具开发工作,以提高高性能计算(HPC)系统在流数据分析中的可用性。在接下来的部分中,我们将描述专用 CIFT 机器的硬件和软件,以及一些演示和工具开发的努力。亮点包括将数据处理速度提高 21 倍,以及将早期预警指标的计算速度提高 720 倍。

22.4 HPC 硬件

传说第一代大数据系统是用从大学校园收集的闲置计算组件构建的。这可能是一个都市传说,但它强调了 HPC 系统和云系统之间差异的重要一点。理论上,HPC 系统是用定制的高成本组件构建的,而云系统则是用标准的低成本商品组件构建的。实际上,由于全球对 HPC 系统的投资远低于个人电脑,因此制造商不可能仅为 HPC 市场生产定制组件。事实是,HPC 系统在很大程度上是由商品组件组装而成,就像云系统一样。然而,由于它们的目标应用不同,组件选择上存在一些差异。

让我们依次描述计算元素、存储系统和网络系统。图 22.1 是一个高层次示意图,表示 2010 年左右的 Magellan 集群的关键组件(Jackson 等人[2010];Yelick 等人[2011])。计算元素包括 CPU 和图形处理单元(GPU)。这些 CPU 和 GPU 几乎都是商业产品。例如,dirac1 上的节点使用的是一个 24 核 2.2GHz 的 Intel 处理器,这在云计算系统中很常见。目前,dirac1 不包含 GPU。

图 22.1 Magellan 集群的示意图(约 2010 年),HPC 计算集群的一个例子

网络系统由两部分组成:连接集群内组件的 InfiniBand 网络和与外界的交换网络连接。在这个特定的例子中,外部连接标记为“ESNet”和“ANI”。InfiniBand 网络交换机在云计算系统中也很常见。

图 1 中的存储系统包括旋转硬盘和闪存存储。这种组合也很常见。不同之处在于,HPC 系统的存储系统通常集中在计算节点外,而典型的云计算系统的存储系统则分布在计算节点之间。这两种方法各有优缺点。例如,集中存储通常作为全球文件系统导出给所有计算节点,这使得处理存储在文件中的数据变得更容易。然而,这需要一个高效能的网络来连接 CPU 和磁盘。相比之下,分布式方法可以使用较低容量的网络,因为有一些存储靠近每个 CPU。通常,像谷歌文件系统(Ghemawat、Gobioff 和 Leung [2003])这样的分布式文件系统会在云计算系统之上层叠,使存储对所有 CPU 可访问。

简而言之,当前一代 HPC 系统和云系统使用的几乎都是相同的商业硬件组件。它们的区别主要在于存储系统和网络系统的布局。显然,存储系统设计的差异可能会影响应用性能。然而,云系统的虚拟化层可能是应用性能差异的更大原因。在下一节中,我们将讨论另一个可能有更大影响的因素,即软件工具和库。

虚拟化通常用于云计算环境,使同一硬件可供多个用户使用,并将一个软件环境与另一个环境隔离。这是区分云计算环境与 HPC 环境的更突出特点之一。在大多数情况下,计算机系统的三个基本组件——CPU、存储和网络——都是虚拟化的。这种虚拟化有很多好处。例如,现有应用可以在 CPU 芯片上运行而无需重新编译;许多用户可以共享相同的硬件;硬件故障可以通过虚拟化软件进行修复;失败计算节点上的应用可以更轻松地迁移到其他节点。然而,这一虚拟化层也会增加一些运行时开销,可能会降低应用性能。对于时间敏感的应用,这种性能降低可能成为一个关键问题。

测试表明,性能差异可能相当大。接下来,我们简要描述了 Jackson 等人于[2010]报告的一项性能研究。图 22.2 显示了使用不同计算机系统时的性能下降。横轴下方的名称是 NERSC 常用的不同软件包。左侧条形代表商业云,中间条形代表 Magellan,右侧(有时缺失)条形代表 EC2-Beta-Opt 系统。未优化的商业云实例运行这些软件包的速度比 NERSC 超级计算机慢 2 到 10 倍。即使在更昂贵的高性能实例上,也会有明显的减速。

图 22.2 云在运行科学应用时的速度明显慢于 HPC 系统(大约 2010 年)

图 22.3 显示了导致软件包 PARATEC 性能下降的主要因素的研究。在图 2 中,我们看到 PARATEC 在商业云上的完成时间比在 HPC 系统上长 53 倍。从图 3 中我们观察到,随着核心数量(横轴)的增加,测量性能(以 TFLOP/s 为单位)之间的差异变得更大。特别是,标记为 “10G-TCPoEth Vm” 的线在核心数量增加时几乎没有变化。这是网络实例使用虚拟化网络(TCP over Ethernet)的情况。它清楚地表明,网络虚拟化开销是显著的,以至于使云变得无用。

图 22.3 随着核心数量的增加(横轴),虚拟化开销变得更加显著(约 2010 年)。

虚拟化开销问题被广泛认可(Chen et al. [2015])。已经进行了大量研究,旨在解决 I/O 虚拟化开销(Gordon et al. [2012])以及网络虚拟化开销(Dong et al. [2012])。随着这些最先进的技术逐渐进入商业产品,我们预计未来开销将减少,但某些开销不可避免地会保留。

在本节的总结中,我们简要讨论 HPC 与云计算的经济学。通常,HPC 系统由非营利研究组织和大学运行,而云系统由商业公司提供。利润、客户保留以及许多其他因素影响云系统的成本(Armburst et al. [2010])。在 2011 年,Magellan 项目报告指出:“成本分析表明,与商业云提供商相比,DOE 中心的成本具有竞争力,通常便宜 3–7 倍”(Yelick et al. [2010])。

一组高能物理学家认为他们的用例非常适合云计算,并进行了详细的比较研究(Holzman et al. [2017])。他们的成本比较仍然表明,商业云服务在可比计算任务中大约比专用 HPC 系统贵 50%;然而,作者在数据进出方面面临严重限制,以避免可能的高额数据移动费用。对于复杂的工作负载,例如本书讨论的流数据分析,我们预计这种 HPC 成本优势在未来仍将存在。2016 年美国国家科学院的一项研究得出了同样的结论,即即使是亚马逊的长期租赁,其处理 NSF 预期科学工作负载的成本也可能是 HPC 系统的 2 到 3 倍(见国家科学院的第 6.2 节,[2016])。

22.5 HPC 软件

具有讽刺意味的是,超级计算机的真正力量在于其专门的软件。无论是 HPC 系统还是云系统,都有多种软件包可供选择。在大多数情况下,相同的软件包在这两个平台上均可用。因此,我们选择专注于独特于 HPC 系统的软件包,并且有潜力改善计算智能和预测技术。

HPC 软件生态系统的一个显著特征是,许多应用软件通过消息传递接口(MPI)执行自身的处理器间通信。事实上,大多数科学计算书籍的基石就是 MPI(Kumar 等 [1994], Gropp, Lusk, 和 Skjellum [1999])。因此,我们对 HPC 软件工具的讨论将从 MPI 开始。由于本书依赖于数据处理算法,我们将专注于数据管理工具(Shoshami 和 Rotem [2010])。

22.5.1 消息传递接口

消息传递接口是一种用于并行计算的通信协议(Gropp, Lusk, 和 Skjellum [1999], Snir 等 [1988])。它定义了一些点对点数据交换操作以及一些集体通信操作。MPI 标准的建立是基于几次早期尝试建立可移植通信库的基础上。来自阿贡国家实验室的早期实现,名为 MPICH,具有高性能、可扩展和可移植的特点。这帮助 MPI 在科学用户中获得了广泛的接受。

MPI 的成功部分归功于其将语言无关规范(LIS)与语言绑定的分离。这使得同一个核心功能可以为许多不同的编程语言提供,这也促进了其被广泛接受。第一个 MPI 标准同时指定了 ANSI C 和 Fortran-77 的绑定以及 LIS。草案规范在 1994 年超级计算会议上向用户社区进行了展示。

另一个促成 MPI 成功的关键因素是 MPICH 所使用的开源许可证。该许可证允许供应商获取源代码来生成他们自己的定制版本,这使得高性能计算(HPC)系统供应商能够快速生成自己的 MPI 库。直到今天,所有 HPC 系统都在其计算机上支持熟悉的 MPI。这种广泛的采用也确保了 MPI 将继续成为 HPC 系统用户喜爱的通信协议。

22.5.2 分层数据格式 5

在描述 HPC 硬件组件时,我们注意到 HPC 平台中的存储系统通常与云平台中的存储系统不同。因此,大多数用户用于访问存储系统的软件库也不同。这种差异可以追溯到数据概念模型的不同。通常,HPC 应用将数据视为多维数组,因此,HPC 系统上最流行的 I/O 库被设计为与多维数组配合使用。在这里,我们描述最广泛使用的数组格式库 HDF5(Folk 等人 [2011])。

HDF5 是由 HDF 集团推出的分层数据格式的第五个版本。^(2) HDF5 中的基本数据单位是数组及其相关信息,如属性、维度和数据类型。它们合在一起称为数据集。数据集可以被分组为称为组的大单元,组可以组织成高层次的组。这种灵活的层次组织使用户能够表达数据集之间复杂的关系。

除了将用户数据组织成文件的基本库外,HDF 集团还提供了一套工具以及针对不同应用的 HDF5 专业化。例如,HDF5 包括一个性能分析工具。NASA 为其地球观测系统(EOS)数据提供了 HDF5 的专业化版本,名为 HDF5-EOS;而下一代 DNA 序列社区则为其生物信息数据推出了一种名为 BioHDF 的专业化版本。

HDF5 为高性能计算(HPC)平台上的存储系统提供了一种高效的访问方式。在测试中,我们已经证明,使用 HDF5 存储股市数据显著加快了分析操作。这在很大程度上归功于其高效的压缩/解压缩算法,这些算法最小化了网络流量和 I/O 操作,这也引出了我们的下一个要点。

22.5.3 原位 处理

在过去几十年里,CPU 性能大约每 18 个月翻一番(摩尔定律),而磁盘性能每年增加不到 5%。这种差异导致将 CPU 内存内容写出所需的时间越来越长。为了解决这个问题,一些研究工作集中于原位分析能力(Ayachit 等人 [2016])。

在当前一代处理系统中,适应性 I/O 系统(ADIOS)是使用最广泛的系统(Liu et al. [2014])。它采用了多种数据传输引擎,使用户能够接入 I/O 流并执行分析操作。这是有用的,因为不相关的数据可以在传输过程中被丢弃,从而避免其缓慢且庞大的存储。同样的就地机制也使得它能够非常快速地完成写入操作。事实上,它最初引起关注是因为其写入速度。从那时起,ADIOS 开发者与许多大型团队合作,改进了他们的 I/O 管道和分析能力。

由于 ADIOS 支持流数据访问,因此它与 CIFT 的工作高度相关。在多个演示中,结合 ICEE 传输引擎的 ADIOS 能够实时完成分布式流数据分析(Choi et al. [2013])。我们将在下一节描述一个涉及融合等离子体中斑点的用例。

总结来说,就地数据处理能力是高性能计算(HPC)生态系统中的另一个非常有用的工具。

22.5.4 趋同

我们之前提到,HPC 硬件市场是整体计算机硬件市场中的一小部分。与整体软件市场相比,HPC 软件市场甚至更小。到目前为止,HPC 软件生态系统主要由一些小型供应商和一些开源贡献者维护。因此,HPC 系统用户面临着迁移到更好支持的云软件系统的巨大压力。这是 HPC 软件与云软件之间趋同的重要驱动因素(Fox et al. [2015])。

尽管趋同似乎是不可避免的,但我们主张选择一种趋同方案,以保留上述软件工具的优势。CIFT 项目的一个动机是寻求将上述工具转移到未来计算环境的方法。

22.6 用例

数据处理在现代科学研究中是如此重要,以至于一些研究人员将其称为科学的第四范式(Hey, Tansley, and Tolle [2009])。在经济学中,相同的数据驱动研究活动催生了广受欢迎的行为经济学(Camerer and Loewenstein [2011])。最近的数据驱动研究的许多进展基于机器学习应用(Qiu et al. [2016], Rudin and Wagstaff [2014])。它们在行星科学和生物信息学等广泛领域的成功引起了来自不同领域研究人员的极大兴趣。在本节的其余部分,我们将描述几个将先进数据分析技术应用于各个领域的示例,其中许多用例源自 CIFT 项目。

22.6.1 超新星搜寻

在天文学中,通过测量爆炸的 Ia 型超新星的光来确定许多重要事实,例如宇宙的膨胀速度(Bloom et al. [2012])。在夜空中寻找爆炸超新星的过程称为综合成像调查。帕洛马瞬态工厂(PTF)就是此类综合调查的一个例子(Nicholas et al. [2009])。PTF 望远镜每 45 分钟扫描一次夜空并生成一组图像。新的图像与之前对同一片天空的观察进行比较,以确定发生了什么变化并对这些变化进行分类。这类识别和分类任务过去是由天文学家手动完成的。然而,来自 PTF 望远镜的输入图像数量过于庞大,无法进行手动检查。为这些图像处理任务开发并部署了一种自动化工作流,在多个不同的计算中心运行。

图 22.4 显示了在爆炸过程中最早被识别的超新星。2011 年 8 月 23 日,天空的一片区域没有显示出这颗星星的迹象,但在 8 月 24 日出现了一道微弱的光。这一快速的变化使世界各地的天文学家能够进行详细的后续观察,这对确定与宇宙膨胀相关的参数至关重要。

图 22.4 超新星 SN 2011fe 是在首次发现爆炸证据后 11 小时被发现的,这得益于天文观测分类的广泛自动化。

这颗超新星的快速识别是自动化工作流机器学习能力的重要证明。该工作流处理输入图像,以提取自上次观察以来发生变化的对象。然后,它对变化的对象进行分类,以根据先前的训练确定初步类型。由于提取快速变化的瞬态新科学的后续资源非常宝贵,因此分类不仅需要指示假定的类型,还需要表明分类的可能性和置信度。使用在 PTF 数据上训练的分类算法,瞬态和变星的错误标记率为 3.8%。预计在即将进行的调查中,例如大视场巡天望远镜,将取得更高的准确率。

22.6.2 融合等离子体中的斑点

在物理学和气候学等领域的大规模科学探索中,涉及成千上万的科学家的国际合作项目。随着这些合作产生越来越多的数据,并且速度不断加快,现有的工作流程管理系统难以跟上。一个必要的解决方案是,在数据到达相对缓慢的磁盘存储系统之前,对其进行处理、分析、总结和缩减,这一过程称为在传输中处理(或飞行分析)。与 ADIOS 开发人员合作,我们实施了 ICEE 传输引擎,显著提升了协作工作流程系统的数据处理能力(Choi et al. [2013])。这一新功能显著改善了分布式工作流程的数据流管理。测试表明,ICEE 引擎使多个大型国际合作能够做出近实时的协作决策。这里,我们简要描述了涉及 KSTAR 的聚变合作。

KSTAR 是一个配备全超导磁体的核聚变反应堆。它位于韩国,但全球有许多相关研究团队。在聚变实验的运行期间,一些研究人员在 KSTAR 控制物理设备,而其他研究人员则可能希望通过对先前实验运行进行协作分析来参与,以提供如何配置设备以进行下一个运行的建议。在实验测量数据的分析过程中,科学家可能会运行模拟或检查之前的模拟以研究参数选择。通常,在两次连续运行之间可能会有 10 到 30 分钟的间隔,所有的协作分析需要在这个时间窗口内完成,以影响下一个运行。

我们展示了 ICEE 工作流程系统在两种不同数据类型下的功能:一种来自 KSTAR 测量的电子回旋辐射成像(ECEI)数据,另一种涉及来自 XGC 建模的合成诊断数据。分布式工作流程引擎需要收集这两个来源的数据,提取称为“blob”的特征,跟踪这些 blob 的运动,预测实验测量中 blob 的移动,并提供行动建议。图 22.5 展示了 ECEI 数据的处理方式。XGC 模拟数据的工作流程与图 22.5 中显示的类似,只是 XGC 数据位于 NERSC。

图 22.5 研究聚变等离子体动态的分布式工作流程

为了能够实时完成上述分析任务,使用 ADIOS 的 ICEE 传输引擎进行有效的数据管理只是部分解决方案。第二部分是高效检测数据块(Wu et al. [2016])。在这项工作中,我们需要通过仅选择必要的数据块来减少跨广域网传输的数据量。然后,我们识别所有位于数据块内的单元,并将这些单元分组为空间中的连接区域,每个连接区域形成一个数据块。我们开发的新算法通过充分利用 MPI 在节点之间的通信和同一节点上 CPU 核心之间的共享内存,将工作分配到不同的 CPU 核心。此外,我们还更新了连接组件标签算法,以正确识别边缘的数据块,而这些数据块在早期检测算法中经常被遗漏。总体而言,我们的算法能够在每个时间步中识别数据块,时间仅为几毫秒,充分利用了 HPC 系统中的并行性。

22.6.3 日内峰值电力使用

公用事业公司正在部署先进的计量基础设施(AMI),以捕捉前所未有的电力消费时空细节。这一庞大且快速增长的数据流为基于大数据分析平台的预测能力提供了重要的测试场(Kim et al. [2015])。这些尖端的数据科学技术结合行为理论,使得行为分析能够获得对电力消费模式及其潜在驱动因素的新见解(Todd et al. [2014])。

由于电力无法轻易储存,其生成必须与消费相匹配。当需求超过发电能力时,就会发生停电,通常发生在消费者最需要电力的时候。由于增加发电能力成本高昂且需要数年时间,监管机构和公用事业公司制定了一系列定价方案,旨在抑制高峰需求期间的不必要消费。

为了衡量定价政策对峰值需求的有效性,可以分析由 AMI 生成的电力使用数据。我们的工作专注于提取家庭电力使用的基线模型,以进行行为分析研究。基线模型理想上应捕捉家庭电力使用的模式,包括除新定价方案外的所有特征。建立这样的模型面临众多挑战。例如,有许多特征可能影响电力使用,但没有记录相关信息,如空调的设定温度或新设备的购买。其他特征,例如室外温度是已知的,但其影响很难用简单函数捕捉。

我们的工作开发了多种新的基线模型,以满足上述要求。目前,黄金标准基线是一个设计良好的随机对照组。我们展示了我们新的数据驱动基线能够准确预测对照组的平均电力使用量。为了进行此评估,我们使用了来自美国某地区的一个精心设计的研究,该地区在五月到八月的下午和晚上电力使用量最高。尽管这项工作集中于证明新的基线模型对群体的有效性,但我们相信这些新模型在未来研究个别家庭时也非常有用。

我们探索了多种标准的黑盒方法。在机器学习方法中,我们发现梯度树提升(GTB)比其他方法更有效。然而,最准确的 GTB 模型需要滞后变量作为特征(例如,前一天和前一周的电力使用量)。在我们的工作中,我们需要使用 T-1 年的数据来建立 T 年和 T+1 年的基线使用量。前一天和前一周的滞后变量将包含在 T-1 年中没有的最近信息。我们尝试修改预测程序,用最近的预测值替代前一天和前一周的实际测量值;然而,我们的测试表明,预测误差随着时间的推移而累积,导致在夏季进入一个月左右后产生不切实际的预测。这种预测误差的累积在时间序列的连续预测过程中很常见。

为了解决上述问题,我们设计了多种白盒方法,其中最有效的方法称为 LTAP,在此报告。LTAP 基于这样一个事实:每日的总变量电力使用量可以用平均每日温度的分段线性函数准确描述。这个事实使我们能够对每日的总电力使用量进行预测。通过进一步假设每个家庭的使用模式在研究期间保持不变,我们能够从每日的总使用量中分配出每小时的使用值。该方法被证明是自我一致的;即预测过程完全重现了 T-1 年的电力使用量,并且 T 年和 T+1 年对照组的预测值与实际测量值非常接近。两个处理组在峰值需求小时的电力使用量都有所减少,主动组的减少幅度大于被动组。这一观察结果与其他研究一致。

尽管新的数据驱动基线模型 LTAP 准确预测了控制组的平均使用情况,但对于旨在减少高峰需求时段使用的新时段定价的预测影响存在一些差异(见图 22.6)。例如,以控制组作为基线,活跃组在第一个年度新价格下的高峰需求时段平均减少使用量 0.277 kWh(约 2 kWh),在第二年减少 0.198 kWh。以 LTAP 作为基线,两年的平均减少量仅为 0.164 kWh。部分差异可能由于处理组中的自我选择偏差,尤其是活跃组,其中家庭必须明确选择参加试验。选择加入活跃组的家庭很可能适合利用新定价结构。我们认为 LTAP 基线是解决自我选择偏差的一种方法,并计划进行额外研究以进一步验证这一点。

图 22.6 梯度树提升(GBT)似乎过于紧密地跟随最近的使用情况,因此无法像新开发的名为 LTAP 的方法那样预测基线使用情况。(a) 控制组的 GTB。(b) 控制组的 LTAP。(c) 被动组的 GTB。(d) 被动组的 LTAP。(e) 活跃组的 GTB。(f) 活跃组的 LTAP。

22.6.4 2010 年闪电崩盘

美国证券交易委员会(SEC)和商品期货交易委员会(CFTC)调查 2010 年闪电崩盘所需的延长时间是 CIFT 工作的最初动机。联邦调查人员需要筛选数十 TB 的数据以寻找崩盘的根本原因。由于 CFTC 公开指责数据量是导致延误的原因,我们开始寻找能够轻松处理数十 TB 数据的高性能计算(HPC)工具。鉴于 HDF5 是最常用的 I/O 库,我们的工作始于将 HDF5 应用于组织大量的股票交易数据(Bethel et al. [2011])。

让我们快速回顾一下 2010 年闪电崩盘期间发生的事件。5 月 6 日,大约在下午 2:45(美国东部夏令时),道琼斯工业平均指数下跌近 10%,许多股票以每股一美分交易,这是任何可能交易的最低价格。图 22.7 展示了另一个极端案例,苹果公司(股票代码 AAPL)的股票以每股$100,000 的价格交易,这是交易所允许的最高价格。显然,这些都是不寻常的事件,削弱了投资者对我们金融市场的信心。投资者要求知道造成这些事件的原因。

图 22.7 2010 年 5 月 6 日苹果股票价格,以及在市场交易时段每 5 分钟计算的 HHI 和 VPIN 值。

为了使我们的工作与金融行业相关,我们寻求使用 HDF5 软件进行实验,并将其应用于计算早期预警指标的具体任务。基于一组机构投资者、监管机构和学术界的推荐,我们实现了两组指标,这些指标已被证明具有在闪电崩盘前的“早期预警”特性。它们分别是信息交易的量同步概率(VPIN)(Easley, Lopez de Prado, 和 O'Hara [2011])以及市场碎片化的赫芬达尔-赫希曼指数(HHI)的一个变体(Hirschman [1980])。我们在 C++语言中实现了这两个算法,同时使用 MPI 进行进程间通信,以充分利用高性能计算(HPC)系统。这一选择的理由是,如果这些早期预警指标中的任何一个被证明是成功的,高性能实现将使我们能够尽早提取警告信号,从而有时间采取纠正措施。我们的努力是展示能够快速计算早期警告信号的第一步之一。

对于我们的工作,我们实现了两个版本的程序:一个使用组织在 HDF5 文件中的数据,另一个从常用的 ASCII 文本文件中读取数据。图 22.8 显示了处理所有标准普尔 500 只股票在 10 年期间的交易记录所需的时间。由于 10 年交易数据的大小仍然相对较小,我们还将数据复制了 10 倍。在单个 CPU 核心上(在图 22.8 中标记为“串行”),使用 ASCII 数据大约需要 3.5 小时,但使用 HDF5 文件仅需 603.98 秒。当使用 512 个 CPU 核心时,这一时间使用 HDF5 文件减少到 2.58 秒,速度提升达到 234 倍。

图 22.8 处理存储在 HDF5 文件中的 10 年期 SP500 报价数据所需的时间,当相同数据存储在 ASCII 文件中时,所需时间要长 21 倍(603.98 秒与大约 3.5 小时相比)。

在更大的(复制的)数据集中,计算这些指标的 HPC 代码的优势更加明显。数据量增加 10 倍时,计算机完成任务所需的时间仅增加了约 2.3 倍,延迟增幅低于线性。使用更多 CPU 使得 HPC 更具可扩展性。

图 22.8 还显示,利用大量数据集,我们可以进一步利用 HDF5 中可用的索引技术来减少数据访问时间(这反过来又减少了整体计算时间)。当使用 512 个 CPU 核心时,总运行时间从 16.95 秒减少到 4.59 秒,得益于这一 HPC 索引技术,速度提升为 3.7 倍。

22.6.5 量同步信息交易概率校准

理解金融市场的波动性需要处理大量数据。我们应用数据密集型科学应用中的技术来完成这一任务,并通过在大量期货合约上计算称为成交量同步知情交易概率(VPIN)的早期预警指标来证明其有效性。测试数据包含了最常交易的百种期货合约的 67 个月交易记录。平均而言,处理一个合约的 67 个月数据大约需要 1.5 秒。在我们有这个 HPC 实现之前,完成同样的任务大约需要 18 分钟。我们的 HPC 实现实现了 720 倍的加速。

请注意,上述加速仅基于算法改进,未利用并行化的优势。HPC 代码可以在使用 MPI 的并行机器上运行,从而进一步减少计算时间。

我们工作中采用的软件技术包括上述通过 HDF5 实现的更快 I/O 访问,以及用于存储计算 VPIN 所需的柱状图和桶的更简化数据结构。更多详细信息可见于 Wu 等人[2013]。

借助更快的 VPIN 计算程序,我们也能更深入地探索参数选择。例如,我们能够识别出将 VPIN 的假阳性率从 100 多种合约的 20%降低到仅 7%的参数值,见图 22.9。实现这一性能的参数选择为:(1) 用交易的中位价格为成交量柱定价(而非通常分析中使用的收盘价),(2) 每天 200 个桶,(3) 每个桶 30 个柱,(4) 计算 VPIN 的支持窗口=1 天,事件持续时间=0.1 天,(5) 使用ν=0.1 的学生 t 分布进行大宗成交量分类,(6) VPIN 的 CDF 阈值=0.99。再次强调,这些参数在所有期货合约上提供了低假阳性率,而不是个别拟合的结果。

图 22.9不同类别的期货合约的平均假阳性率(α),按照其平均值排序。

在不同类别的期货合约中,可以选择不同的参数以实现更低的假阳性率。在某些情况下,假阳性率甚至可以显著低于 1%。基于图 22.9,利率和指数期货合约的假阳性率通常较低。商品期货合约,如能源和金属,通常假阳性率较高。

此外,更快的 VPIN 计算程序使我们能够验证 VPIN 识别的事件是“内在的”,因为诸如 VPIN CDF 阈值等参数的变化只会稍微改变检测到的事件数量。如果这些事件是随机的,将阈值从 0.9 更改为 0.99 将会使事件数量减少十倍。简而言之,更快的 VPIN 程序还使我们能够确认 VPIN 的实时有效性。

22.6.6 使用非均匀快速傅里叶变换揭示高频事件

高频交易在所有电子金融市场中普遍存在。随着算法取代人类以前执行的任务,类似于 2010 年闪电崩盘的级联效应可能变得更加可能。在我们的研究中(宋等人 [2014]),我们汇集了一些高性能信号处理工具,以提高对这些交易活动的理解。作为一个例证,我们总结了天然气期货交易价格的傅里叶分析。

通常,傅里叶分析应用于均匀间隔的数据。由于市场活动呈现爆发式,因此我们可能希望根据交易活动的指数来抽样金融时间序列。例如,VPIN 根据成交量对金融系列进行抽样。然而,对金融系列进行按时间顺序的傅里叶分析仍然可能是有启发的。为此,我们使用非均匀快速傅里叶变换(FFT)程序。

从天然气期货市场的傅里叶分析中,我们看到市场中存在强烈的高频交易证据。对应于高频的傅里叶成分在近年来(1)变得更加突出,且(2)远远强于市场结构所能预期的。此外,每分钟的第一秒发生了大量交易活动,这显然是由旨在达到时间加权平均价格(TWAP)的算法触发的交易迹象。

对交易数据的傅里叶分析表明,每分钟频率的活动明显高于邻近频率(见 图 22.10)。请注意,纵轴为对数刻度。每分钟频率的活动强度比邻近频率强十倍以上。此外,活动在每分钟的定义非常精确,这表明这些交易是由故意构建的自动事件触发的。我们将此视为 TWAP 算法在该市场中具有显著存在的强烈证据。

图 22.10 显示了 2012 年天然气期货合约交易价格的傅里叶频谱。非均匀快速傅里叶变换(FFT)识别出每日发生一次(频率= 366)、每日发生两次(频率= 732)和每分钟发生一次(频率= 527040 = 3662460)活动的强烈存在。

我们预期频率分析会显示出强烈的日常周期。在图 22.10 中,我们预计频率 365 的振幅会很大。然而,我们看到最高的振幅是频率 366。这可以解释为 2012 年是闰年。这验证了非均匀 FFT 捕捉到了预期信号。第二和第三高的振幅分别对应于频率 732 和 52,分别是一天两次和一周一次,这也并不令人意外。

我们还对交易量应用了非均匀 FFT,发现了更多算法交易的证据。此外,信号指向近年来算法交易的强劲存在。显然,非均匀 FFT 算法对于分析高度不规则的时间序列非常有用。

22.7 摘要与参与呼吁

目前,构建大规模计算平台有两种主要方式:HPC 方法和云方法。大多数科学计算工作使用 HPC 方法,而大多数商业计算需求则通过云方法满足。传统观点认为,HPC 方法只占据了一个小的、无关紧要的市场。这并不正确。HPC 系统对科学研究的进展至关重要。它们在一些激动人心的新科学发现中发挥了重要作用,包括希格斯粒子和引力波。它们还促进了新研究领域的开发,如行为经济学,以及通过互联网进行商业的新方式。极大规模 HPC 系统的实用性促成了 2015 年国家战略计算倡议。

还有一些努力使 HPC 工具变得更加有用,以加速它们在商业应用中的采用。HPC4Manufacturing ^(4)项目正在将这一知识转移到美国制造业,并引起了相当大的关注。现在是推动 HPC 以满足其他关键商业需求的更集中时刻。

最近几年,我们开发了 CIFT 作为一类广泛的商业应用,这些应用可以从 HPC 工具和技术中受益。在如何应对电力变压器的电压波动和即将发生的市场波动事件的早期预警信号等决策中,HPC 软件工具可以帮助决策者提前识别信号,为预测提供足够的信心,并在灾难性事件发生之前预测后果。这些应用具有复杂的计算需求,且通常对响应时间有严格要求。HPC 工具更适合满足这些需求,而不是基于云的工具。

在我们的工作中,我们已经证明 HPC I/O 库 HDF5 可以将数据访问速度加速 21 倍,而 HPC 技术可以将 Flash Crash 预警指标 VPIN 的计算加速 720 倍。我们开发了额外的算法,使我们能够预测未来数年的日峰电力使用情况。我们预计将 HPC 工具和技术应用于其他领域也能取得同样显著的成果。

除了上述提到的性能优势外,若干已发布的研究(Yelick 等 [2011],Holzman 等 [2017])还显示 HPC 系统在价格上也具有显著优势。根据工作负载对 CPU、存储和网络的需求,使用云系统的成本可能比使用 HPC 系统高 50%,在某些情况下甚至高达七倍。对于本书中描述的复杂分析任务,由于其对数据摄取的持续需求,我们预计成本优势将继续很大。

CIFT 正在扩大将 HPC 技术转移到私营公司的努力,以便他们也能享受到大型研究设施所享有的价格和性能优势。我们之前的合作伙伴提供了资金,以启动一个专用的 HPC 系统供我们使用。这个资源应该能让感兴趣的各方更容易地在 HPC 系统上尝试他们的应用程序。我们欢迎不同形式的合作。如需有关 CIFT 的更多信息,请访问 CIFT 的网页 crd.lbl.gov/cift/

22.8 致谢

CIFT 项目是大卫·莱因维伯博士的构想。霍斯特·西蒙博士于 2010 年将其引入 LBNL。E. W. 贝瑟尔博士和 D. 贝利博士领导了该项目四年。

CIFT 项目得到了多位捐赠者的慷慨支持。这项工作部分得到了美国能源部科学办公室高级科学计算研究办公室的支持,合同号为 DE-AC02-05CH11231。此项研究还使用了在同一合同下支持的国家能源研究科学计算中心的资源。

参考文献

  1. Aad, G. 等 (2016): “在 ATLAS 实验中使用 pp 碰撞数据测量希格斯玻色子的产生和衰变率及耦合强度。” 欧洲物理杂志 C,第 76 卷,第 1 期,第 6 页。

  2. Abbott, B.P. 等 (2016): “观察到来自双黑洞合并的引力波。” 物理评论快报,第 116 卷,第 6 期,第 061102 页。

  3. Armbrust, M. 等 (2010): “云计算的视角。” ACM 通讯,第 53 卷,第 4 期,第 50–58 页。

  4. Asanovic, K. 等 (2006): “并行计算研究的全景:来自伯克利的视角。” 技术报告 UCB/EECS-2006-183,加州大学伯克利分校 EECS 系。

  5. Ayachit, U. 等:“极大规模在线基础设施的性能分析、设计考虑和应用。”《国际高性能计算、网络、存储与分析会议论文集》。IEEE 出版社。

  6. Bethel, E. W. 等(2011):“闪电崩盘后时代的联邦市场信息技术:超级计算的角色。”《WHPCF'2011 会议论文集》。ACM。23–30 页。

  7. Bloom, J. S. 等(2012):“在综述调查时代自动发现和分类瞬态与变星。” 太平洋天文学会出版物 ,第 124 卷,第 921 期,1175 页。

  8. Camerer, C.F. 和 G. Loewenstein(2011):“行为经济学:过去、现在、未来。”载于 行为经济学进展 ,1–52 页。

  9. Chen, L. 等(2015):“云计算中虚拟化开销的剖析与理解。” 并行处理(ICPP) ,2015 年第 44 届国际会议。IEEE。

  10. Choi, J.Y. 等(2013):ICEE:“针对近实时科学应用的广域在线数据处理框架。”第 4 届 SC 大型(大)数据分析研讨会:与 SC13 相关的挑战与机遇。

  11. Dong, Y. 等(2012):“基于 SR-IOV 的高性能网络虚拟化。” 并行与分布计算杂志 ,第 72 卷,第 11 期,1471–1480 页。

  12. Easley, D.,M. Lopez de Prado 和 M. O'Hara(2011):“‘闪电崩盘’的微观结构:流动性毒性、流动性崩溃和知情交易的概率。” 投资组合管理杂志 ,第 37 卷,第 2 期,118–128 页。

  13. Folk, M. 等(2011):“HDF5 技术套件及其应用概述。”《EDBT/ICDT 2011 数组数据库研讨会论文集》。ACM。

  14. Fox, G. 等(2015):“大数据、模拟与 HPC 融合,iBig Data 基准测试”:第 6 届国际研讨会,WBDB 2015,2015 年 6 月 16–17 日,加拿大多伦多;第 7 届国际研讨会,WBDB 2015,2015 年 12 月 14–15 日,印度新德里,修订精选论文,由 T. Rabl 等编辑。2016,Springer 国际出版:Cham。3–17 页。DOI: 10.1007/978-3-319-49748-8_1。

  15. Ghemawat, S.,H. Gobioff 和 S.-T. Leung(2003):“谷歌文件系统,” SOSP '03:第十九届 ACM 操作系统原理研讨会论文集 。ACM。29–43 页。

  16. Gordon, A. 等(2012):“ELI:为 I/O 虚拟化提供裸金属性能。” SIGARCH 计算机架构新闻 ,第 40 卷,第 1 期,411–422 页。

  17. Gropp, W.,E. Lusk 和 A. Skjellum(1999):使用 MPI:基于消息传递接口的可移植并行编程 。MIT 出版社。

  18. Hey, T.,S. Tansley 和 K.M. Tolle(2009):第四范式:数据密集型科学发现 。第 1 卷。微软研究,华盛顿州雷德蒙德。

  19. Hirschman, A. O.(1980):国家力量与国际贸易结构 。第 105 卷。加州大学出版社。

  20. Holzman, B. 等(2017):“HEPCloud,HEP 设施的新范式:CMS 亚马逊网络服务调查。” 大科学的计算与软件,第 1 卷,第 1 期,第 1 页。

  21. Jackson, K. R. 等(2010):“在亚马逊网络服务云上高性能计算应用的性能分析。” 云计算技术与科学(CloudCom)。2010 年第二届国际会议。IEEE。

  22. Kim, T. 等(2015):“使用梯度树提升提取基线电力使用情况。” IEEE 智能城市/社会计算/可持续计算国际会议(SmartCity)。IEEE。

  23. Kumar, V. 等(1994):并行计算导论:算法的设计与分析。本杰明/卡明斯出版社。

  24. Liu, Q. 等(2014):“你好,ADIOS:开发领导级 I/O 框架的挑战和经验。” 并发与计算:实践与经验,第 26 卷,第 7 期,第 1453–1473 页。

  25. 国家科学院、工程院和医学研究院(2016):2017–2020 年支持美国科学和工程的国家科学基金会先进计算基础设施的未来方向。国家科学院出版社。

  26. Nicholas, M. L. 等(2009):“Palomar 瞬态工厂:系统概述、性能与初步结果。” 太平洋天文学会出版物,第 121 卷,第 886 期,第 1395 页。

  27. Qiu, J. 等(2016):“大数据处理的机器学习调查。” EURASIP 信号处理进展杂志,第 2016 卷,第 1 期,第 67 页。DOI: 10.1186/s13634-016-0355-x

  28. Rudin, C. 和 K. L. Wagstaff(2014)“科学与社会的机器学习。” 机器学习,第 95 卷,第 1 期,第 1–9 页。

  29. Shoshani, A. 和 D. Rotem(2010):“科学数据管理:挑战、技术与部署。” Chapman & Hall/CRC 计算科学系列。CRC 出版社。

  30. Snir, M. 等(1998):MPI:完整参考。第 1 卷,MPI-1 核心。麻省理工学院出版社。

  31. Song, J. H. 等(2014):“通过非均匀快速傅里叶变换探索不规则时间序列。”第 7 届高性能计算金融研讨会论文集,IEEE 出版社。

  32. Todd, A. 等(2014):“智能电表的见解:基于行为的项目在高峰时段节省潜力。”劳伦斯·伯克利国家实验室。可在www4.eere.energy.gov/seeaction/system/files/documents/smart_meters.pdf获取。

  33. Wu, K. 等(2013):“分析市场波动的大数据方法。” 算法金融。第 2 卷,第 3 期,第 241–267 页。

  34. Wu, L. 等(2016):“朝着实时检测和追踪时空特征:融合等离子体中的斑块-细丝。” IEEE 大数据学报,第 2 卷,第 3 期,第 262–275 页。

  35. Yan, J. 等(2009):“行为定向在在线广告中能提供多少帮助?”第 18 届国际万维网会议论文集。ACM。第 261–270 页。

  36. Yelick, K., 等 (2011): “关于科学的云计算的马格兰报告。” 美国能源部,科学办公室。

  37. Zeff, R.L. 和 B. Aronson (1999): 互联网广告 。约翰·威利与儿子公司。

笔记

^(1)    NERSC 是一个由美国能源部资助的国家用户设施,位于 LBNL。关于 NERSC 的更多信息可在 nersc.gov/ 找到。

^(2)    HDF Group 网站是 www.hdfgroup.org/

^(3)    国家战略计算计划可在线查看,网址为 www.whitehouse.gov/ sites/whitehouse.gov/files/images/NSCI%20Strategic%20Plan.pdf 。该主题的维基百科页面 (en.wikipedia.org/wiki/National_Strategic_Computing_Initiative ) 也有一些有用的额外信息链接。

^(4)    关于 HPC4Manufacturing 的信息可在线查看,网址为 hpc4mfg.llnl.gov/

posted @ 2024-11-03 11:41  绝不原创的飞龙  阅读(6)  评论(0编辑  收藏  举报