您现在的位置:程序化交易>> 特别播报>> 古期心得>>正文内容

古期:一篇很棒的测试(回测)技术文章 外语翻译[古期心得]

网友Tianba提供了一篇网络上的测试简报,觉得很棒,先在此探讨此文的内容,有时间,再来谈交易上的应用与问题.

这是简报的原始网址:

http://research.cs.tamu.edu/prism/lectures/iss/iss_l13.pdf

这篇简报,名为测试(Validation),分为四个部分来讨论.

中文的测试,涵盖的相当广,容易造成误解.这篇简报的原文,叫做Validatation,指的是有效性的测试.一般计算机程序的测试,指的是Verification,专门测试与解决程序撰写时所产生的问题.Verify动作在前,Validate在后.

 

以下是用中文来整理这篇简报

 

 

 

    第一部分,谈到的是测试的动机(Motivation):

有效性测试,处理模式识别上(pattern recognition)的两个基本问题:

    模型选择(Model selection):

    几乎所有的模式识别技术,都会有一个或多个自由参数(free parameters),如

      kNN分类法(kNN Classification Rule)中的邻近数(Number of neighbors),

      MLPs方法的网络数(network size),学习参数(learning parameters)与加权(weights).

    要如何针对特定的分类问题(given classification problem)中,选择"最佳"参数或模型呢?  

    绩效估计(Performance estimation):

    一旦选择了模型,要怎样来估计绩效呢?传统上,绩效的测量是采用真实误差率(True Error Rate),采用的分类(Classifier)与要处理的真实母体之间,所存在的误差率.(X5super注: 此并非母体的绩效高低,而是估计准确度,如果100分,误差率0.2,那母体只有80分,如果90分,误差率0,那母体就是90分了.前者的分数虽然较高,但是误差率高,估计就过于乐观.若以程序交易为例,这只是评估回测的可靠度,不管策略本身的绩效好坏)

    假如我们没有取样数的限制,这些问题就有了直接的答案:取最低的母体误差率(Error Rate on Entire Population),当然,这时候就等于真实误差率(True Error Rate).( www.cxh99.com

    在实际的应用上,我们只能用有限的取样数,而且通常都比我们想要的还小.一种做法是,把所有的数据(trainning data),只当成一个分类(Classifier),并以此来估计误差率.这样,产生了两个主要问题:

    问题1) 最终选定的模型会过度匹配于我们使用的数据(trainning data),如果模型的参数越多,问题就更显着.

    问题2) 误差率的估计,会太过于乐观(低于True Error Rate).事实上,要取得学习资料(Trainning data)100%正确率的分类(classification),不是不寻常的事.(X5super注:这样的估计太过于乐观)

    另一个更好的做法是,holdout method:把学习数据(trainning data)分割为更多互不交集的区块(disjoint subsets).

 

 

    第二部分: holdout method

    切割后的区块(dataset),有两类:学习组(Trainning set),用来找分类(Classifier)的模型;另一类是测试组(Test set)用来评估这分类(classifier)的误差率.

    

    hold method 的典型应用,在反向传播误差(back propagation error)的停止点决策.

   

    这个方法有两个缺点:一是通常我们拥有的数据不多,无法在做这样奢华的切割后,还有测试的能力与价值;另一个是,只切割成为一组的学习与测试数据,一旦我们不幸选择了不具代表性的那个组合,结果的误差率计算就没有估计的意义与价值了.

    这样的限制,是有一些重复取样的方法族群(family of resampling methods)可以克服的,这些方法需要更多的计算过程.比如交互验证法(Cross Validation):随机子取样(random subsampling),K-Fold交互验证,Leave-One-Out交互验证.另外,还有BootStrap(引导)方法.

 

 

    第三部分: Re-sampling techniques

    A) Random subsampling:

       将数据分割为K组.首先,随机决定K个号码小于总样本数,这些号码不重复,每个号码代表每一个分割的最终样本数.在每一个分割中,学习数据组(trainning samples),带入模型参数,测试数据组(test samples)估计误差率.

     

       总共产生K组的估计,最后的误差估计值E=ΣEi/K,显着的比holdout method单组估计好很多.

    B) K-Fold Cross Validation:

       建立K格位的数据组,也就是把所有的测试数据等分成K组:第K次的试验(experiments),采用前面K-1组的数据来学习(trainning),第K组的数据来测试(testing)

        
       此法与random subsampling类似.K-Fold Cross Validataion的优点,是每一个取样数据,最后都扮演过学习(trainning)与测试(testing)的脚色.

       绩效估计如同前者,误差估计值E=ΣEi/K.

    C) Leave-One-Out Cross Validation:

       这是K-Fold Validation的一种退化变形,总数据样本数就是K个.

       当样本数N个,就采取N个试验(experiments).第N次试验,采用前面N-1个的样本数据来学习(trainning),第N个样本数数据来试验(testing).         

       

       同样的,真实误差的估计=E=ΣEi/N.

       有一个有意思的问题,到底数据要折迭多少个分割(folds)呢?

       A)当数量大:

          (+有利):真实误差估计的偏差会很小(估计会接近正确)

          (-不利):真实误差估计的变异会很大

          (-不利):计算时间长

       B)当数量小:

          (有利):计算时间短

          (有利):真实误差估计的变异小

          (不利):真实误差估计的偏差会很大

       实务上,Folds的数量取决于拥有的样本数据数.当资料数够多,即使3-Fold Cross Valiation,也能有相当正确的估计.当数据数少,最好使用Leave-One-Out Cross Validation,尽量让试验数够多.

       K-Fold Cross Valiation一般的用法是K=10.

    第四部份: 数据三类别切割法(Three-Way data split)

    假如模型的选定与真实误差率的估计要同时算出,那么数据需要分割成互不交集的三部分.

    学习区(Trainning set):模型形成(learning)之用,让模型的参数符合这个分类(classifier).前面提到的MLP方法,在使用back-prop rule时,这学习区可以去寻找"最佳"的权数(weights).

    修正区(Validation set):用来微调参数.MLP方法在使用back Propagation算法时,修正区可以用来寻找"最佳隐藏单元的数量(number of hidden units),或决定停止点(stopping point)

    测试区(test set):只用来评估完全学习结束后的分类(classifier)绩效.(真实误差率).MLP方法在此已经选定了最终模型后(MLP size与实际权重),将估计模型误差率.在最终模型绩效估计后,不可再修改参数值了.

    把修正区(validation set)从测试区(test set)分离出来,有两个理由:一是合并选定模型与估计绩效在同一区的话,会低估误差率;另一个就是前面提过的,在最终模型绩效估计后,不可再修改参数值了.

    步骤纲要:

    1) 将可用的数据,分成学习(trainning set),修正(validation set)与测试(test set)三部分.

    2) 选定架构(architecture)与参数

    3) 用学习区(tranning set)的数据,让模型学习形成.

    4) 用修正区(validation set)的数据,来评价(evaluate)模型.

    5) 用不同的架构与学习参数,重复步骤2~4.

    6) 选定模型,并且用学习区与修正区的数据来学习

    7) 用测试数据(test set),来评估(assess)最后的模型.

    以上的步骤是假设用holdout method.如果用的是Cross Validation或Bootstrap方法,对于K folds中的每一个,都要重复步骤3与4.

 

 

有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友

可联系技术人员 QQ: 1145508240  有需要帮忙请点击这里留言!!!进行 有偿 编写!不贵!点击查看价格!


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容