[原创,转载请注明]
原文连接:https://www.linkedin.com/feed/update/urn:li:activity:6827773122717065216
PBO probability ofbacktesting overfitting
PBO是在回测中衡量一个策略的过度拟合程度的度量,通过CSCV(combinatorialsymmetric cross validation)算法实现。
1. 假设一个交易策略对历史样本进行回测,时间点为1,2,…,T,通过调整参数和策略模型等方法得到N个收益时间序列。组建一个矩阵M,M的每一行代表时间t=1,2,…,T,每一列为回测n的收益时间序列,这里n=1,2,…,N。
2. 首先将M按行分割成S个子矩阵,每一个子矩阵Ms含有相同的行数,和N列。从S个子矩阵中随机抽取S/2个,将每一个子矩阵记为J。重复这样的随机抽取,并进行以下步骤计算:
3. 将子矩阵J的行和列作为样本内数据,子矩阵J在M中的补集作为样本外数据,记为Jtest。
对J中的每一列计算策略效益,这里假设为Sharpe Ratio。之前提过,M的每一列都是某个回测样本的收益序列,因此这里我们计算的是J矩阵也就是某个样本内的收益序列的收益。这样得到一个Sharpe ratio的序列,记为R=r1,r2,…,rN。
4. 在R中找到sharperatio最高的一列,将其序号记为n*。
5. 接下来计算样本外数据,即Jtest的每一列的收益,同样得到一个sharpe ratio序列,记为Rtest。然后找到之前的n*在Rtest中的相对排序,记为omega。Omega代表了在样本内数据中收益最好的回测序列在样本外数据中的相对排序。
6. 计算lambda_c = log(|omega /(1-omega)|)
对S的所有子矩阵重复以上步骤3-6的计算,我们得到一系列的lambda_c,可以画出一个分布曲线,而这个分布从负无穷到0的积分(即<0的立即密度函数)就是回测方法的过度拟合的度量。
以上取<0部分做积分,其意义在于计算样本内的收益小于样本为收益的累计概率。
值得注意的是,这个算法保持了时间的相对连贯性,因为在构造S的时候是将时间t=1,2,…,T做分块的切割,而不是按照每个t来做随机整合。也就是说,随机抽取是在相互不关联的子集之间进行的。
除了计算过度拟合指标,在以上的计算过程中,在每一步R和Rtest的计算中,可以计算得到R中收益最好的列的指标,和Rtest中收益最好的列的指标,将其画出散点图以后可以看出样本内和样本外的最佳收益的关系,一般来说,这个散点图显示下降的趋势,即样本内和样本外的收益是负相关的。