AFML读书笔记--The Dangers of Backtesting

Advance Finance Machine Learning读书笔记

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

因为年初疫情影响,书剩在别的地方无法出门取,所以断更了很久,现在持续更新中……
之前有搜到大神weixin_38753422的AFML系列。写得很详细并且有代码和图片解释,链接在此
此系列从Part 1 Chapter 3开始写起,Chapter3之前内容可以在上面的链接里看到。(注意并不是所有内容的整理,而是我个人觉得需要整理的内容)

本文讲的时Part 3 Chapter 11 The Dangers of Backtesting (回测的坑)

回测你真的做的好吗?

首先作者批判了一通大家使用Backtesting的时候,有很多错误。引用了**Seven Sins of Quantitative Investing” (Luo et al. [2014])**文章里提到的7大错误:

  • 幸存者偏差:执行回测时,没考虑到被退市的公司和股票。
  • 前视偏差:在回测的时候用到了回测时间段之后的信息,导致信息泄露
  • 讲故事:对回测时遇到的随机规律强行编故事解释
  • 数据挖掘:在测试集上训练
  • 交易成本:在回测时,很难考虑全所有的交易费用(很难吗??)
  • 异常值:异常值对最后模型影响过大
  • 做空:做空需要向第三方融券,如何保证回测时百分百实现能够融到券进行做空?
  • ……
    但是就算你绕开了这些错误,但是这个回测可能还是错的。
The maddening thing about backtesting is that, the better you become at it, the more likely false discoveries will pop up.
不要将回测作为一个研究工具,Feature Importance 才是
生成feature Importance 是在历史数据进入之前就
回测的目的是判别差模型,而不是对模型进行调优。如果回测结果不佳那就从头开始再建一次模型。在运行多次回测之后就会发生选择性偏差,从而导致模型在回测数据集上出现过拟合

说的直白一点:前期数据处理、分析、建模都花这么大力气走过来了,是个人都想在之前的数据上多回测几次。可能第一第二次回测结果都不好,那可能就换其他时间段去回测,直到回测到一次结果很好的,就以此为准了。(选择性偏差)
下面是几个Tips去防止在回测阶段Overfitting:

  • 资产分散化,别对单一资产做策略,错误出现在多个资产上的可能性会小很多
  • 使用Bagging方法
  • 在你数据探索真的完成之后再做回测
  • 将每一次回测都记录下来,过拟合的可能性可以在最后结果得出(过程在另一本书上,我也没懂为啥)
  • 自己生成的数据可能比历史数据更好,尽量把回测放到多种不同的Dataset
  • 回测失败,从头来啦。别修正

如何选择策略

在之前文章中提到,普通的K-fold CV会把互相冗余的信息分散到Train set 和Test set中,导致CV结果不可信。所以一个正确的验证过程应该做到训练模型和验证模型的数据互不(At least not)相关/冗余
虽然sklearn里面有前向K-fold CV方法,但是这个方法还是存在很多弊端

  1. 在时间序列存在长范围的序列相关,那就很难避免信息泄露
  2. 前向CV并没有随机抽样,所以在一个时间轴上不断前向CV,假正例就很容易出现
介绍一种选择策略的CV方式(根据回测过拟合的概率probability of backtest overfitting (PBO).操作的CV)

CV名字叫combinatorially symmetric cross-validation (CSCV) method

第一步、 创建一个 M M M的矩阵(TxN), N N N个列,每一列代表在时间点 t = 1 … … T t=1……T t=1T的策略逐日盯市的PNL(收益或亏损)的向量。 T T T行,每一行代表一个时间点

这个矩阵有两个特性:

  1. 每一列(trail)是具有同时性的,每一行发生的Pnl都是同时的
  2. 优化策略的评价指标同样可以放在子样本空间的列上,因为我们认为这些trail都是服从IID正态分布(如果trail在不同的时间跨度上进行的,记得放入到矩阵前,将他们聚合到相同的 T T T上)
第二步、沿着行方向将 M M M矩阵分成 T S \frac{T}{S} ST(S是偶数)等分的小矩阵 M s , s = 1 … … S M_s, s=1……S Ms,s=1S
第三步、从创建所有的矩阵大小为 s 2 \frac{s}{2} 2s的组合 C s C_s Cs
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值