【如何检验过拟合?】学会这招减少你实盘踩坑的概率
由woshisilvio创建,最终由woshisilvio 被浏览 557 用户
如何检测过拟合or 欠拟合?
首先祝大家五一快乐。
趁着假期没事,虫哥给大家唠嗑唠嗑实盘中踩的那些坑。
4月不易,且行且珍惜,跑的最好的一个小账户只有一点安慰奖(别笑,差不多一个月工资了…………)。平均下来 每个账户只有5-7%的平均收益,可以看到最近的行情真的不是很好赚钱。
做数据分析和建模的过程中很多时候,我们最害怕和担心的就是为了优化模型,会不自觉引入一些过于复杂的条件拟合我们模型选股的样本,导致模型的选股能力在样本外的泛化能力不强。(也就是过拟合或者欠拟合)
这里简单介绍一种思路,我们可以通过对比训练集和测试集的IC_mean数据值和 IC方向来判断 模型的综合选股能力是否存在过拟合。
→ 源码可以联系小Q领取
我这里先抛出 我对 一个 “健康的” ,“不容易过拟合的模型”的理解。
IC误差率不过大,同时训练集和测试集样本差异不能过大。通过这些数据我们可以简单评价模型是否欠拟合或者过拟合。
1.首先数据上要保持一致性。
很多小伙伴 做回测的时候,喜欢去优化曲线 ,不断去拟合测试集的数据,做出一条45°向上的曲线,但是这样的方法,
其实在一定程度上已经是违背了我们当初划分训练集和测试集的初衷。
我们做一个完整的策略 ,应该是处于一个闭环的空间中,用一个静态的视角去观察市场,训练模型。
那训练集和测试集的划分 一般来说 是一开始就应该确定下来的。(训练集可以先不确定,但是测试集最好先定下来)
我们 最理想的模型应该是,在一段区间内的股票样本中,模型学习到了规律,在未来的一段时间中,通过这样的规律,预测到了股价的波动,我们从中赚到模式内的钱。 对,要赚模式内的钱,保持一致性。
所以 这里训练集 和测试集 的样本,我们不能让它差别太大,最好保持一致性。
比如说: 我在训练集里面 没有要求 模型去学习 追涨停的规律,
但是我知道这段时间行情做涨停的龙头股票比较好,接着为了曲线好看,我就在测试集里面,疯狂拟合涨停板的股票,
得到了一个收益为正向上的曲线。 那这样的方法的出来的模型,大部分情况都是过拟合的。
2.其次,训练集和测试集检测的IC和IR方向要具有一致性。
我这边看到很多小伙伴会说 一个模型 改变了训练时间之后 ,回测的结果就变了,得到的模型预测结果不可靠,由此得出了一个模型过拟合的结论。
那这个说法就有点绝对了。因为 改变训练时间这一点,在第一点上,就已经与我们的一致性原则相违背。
原因具体可以参考 之前的meetup 探索训练时间的长短。
https://bigquant.com/wiki/doc/celve-shijian-YNns2TC2iH
训练集和测试集检测的IC和IR方向我们需要对其保持一致性,例如模板策略
详细方法可以参考 知识库另外一篇文章。
如何做过拟合检测。→ 源码可以联系小Q领取
https://bigquant.com/wiki/doc/celve-3JphBBq5kb
为了检验 我们模型预测score信号的稳定性。
我们可以通过 求 出 score 和 return_0 未来五天的相关性,看一下我们模型合成的因子score ,
针对这个score每天选出来的股票信号
是否对未来收益具有一定的预测能力,我们把这个指标 简单定义为IC值。
如果 这个 IC相关性越高,则证明模型预测能力越明显。
若是相关性IC为负数,证明模型预测的是做空方向,为正数 就是 预测做多。
方法如下:
训练集 05年-16年,验证 训练集 14年-16年,
我们取离测试集最靠近的一段时间做检测,这里用我们的模板策略来进行举例说明。
我们可以简单对 我们模型的预测信号 score 看成是一个因子,对这个score的值进行 收益率检测。
训练集 的 score信号 对 未来5天收益 的ic 值 箱型图
我们可以看到 我们训练出来的模型, 5天后预测的ic 为负数,整体预测方向是偏向做空的,
ps:这里要先插一句, 单看训练集 的状况我们是没有办法判断 模型是否是过拟合的,最多只能看出它欠拟合。
因为如果我们把回测的开始时间参入训练集的数据(由于包含自动标注的未来数据),不管怎么样,它的曲线至少是45°向上的。所以单单看收益率我们是看不出来 模型是不是过拟合的。
而如果训练集得出来的收益很低,或者说IC的均值 和IC值 很接近0 ,则证明 其实我们训练出来的模型,并没有太强的预测能力。
至少表面上的线性规律 ,并没有很好的拟合到。
因此在这里看IC 和mean_IC的意义,是为了看到 模型信号预测的方向。一般预测方向越明显越好。
回归到我们的数据
比如 现在 的 模型预测信号score得分 ,5天的IC‘ 和10天的IC,
我们可以看到 训练集 检测出来的信号 IC为负数,同时 测试集的信号 也是负数,两边的方向是一致的,
证明我们的模型在样本外的测试并没有过度的拟合和扭曲,泛化能力还是比较强的。很好的遵循了在训练集中学习到的模式。 这才是一个健康的模型。
3.实盘效果较好
实盘绩效肯定要以赚钱效应为第一指标。
从过去大部分的样本训练和模拟实盘检验中可以看到,但凡是遵循了 SCORE-检测训练集IC 与 测试集IC方向一致性的模型,
未来实盘的效果都比较好。 较为成功的案例典型 可以参考《天蝎座0.6》 做资金流数据的动量追涨策略
就是遵循了这一种模式。
https://bigquant.com/wiki/doc/06-tianti-NO-celve-yuanma-VgHM3NV3md 源码可以联系小Q领取
https://bigquant.com/live/shared/strategy?id=27843
感叹一下,画图太容易,实盘两行泪。
最后总结一下,前人诚不欺我,知行合一,不忘初心,方得始终。
不要过度迷信 回测曲线, 曲线是静态的,市场是动态的,别扯什么基本面,技术面,资金面,除非你想面面俱到。
赚钱才是最硬的逻辑。不管是数据上,还是实盘上。回测再美丽,实盘亏成🐕一样也是不行的。
探索量化策略的过程并不总是一帆风顺的,但一朝悟道,或者有哪天做出好的策略 ,中间的成就感是无与伦比的。
衷心祝愿大家 在新的一年里,身体健康,工作顺利,账户长红,量化有成。
\