前言
在完善随机森林模型的过程中遇到了大佬的指点,指出模型中需要关注一个叫“特征穿越”的问题,特别搜了一下,把内容码在这里,有机会细细整理。
这篇文章将会介绍一下量化建模时常见的数据穿越问题。
何为数据穿越?对于t时刻训练得到的模型必须用t时刻之前的数据训练,如果t时刻用到t时刻以后的数据则会产生数据穿越问题。我碰到比较多的数据穿越问题主要有三种:1.训练集和测试集有交叉;2. 特征穿越;3. 数据筛选穿越。
- 训练集和测试集有交叉
即训练集中混入了部分测试集。排除代码写错的情况下,有时候也会很容易犯这种错误。那为什么会出现这种情况的?
举个例子,我的预测目标为20天后的收益率。回测时,我每30天滚动训练一次模型。假设一开始的训练集是从第1天到第100天,测试集是101天到130天。这个训练集与测试集看起来是没有交集的,其实还是存在了交集。因为我们的预测目标是20天后的收益率,所以第81天到100天的数据会用到101天到120天的收益率,这无形之中就出现了数据穿越的问题。而这也会导致每次滚动回测时,前20天的回测效果非常好。
- 特征穿越
即所用到的特征用到了未来的信息导致回测结果异常的好。这个问题相信大家会经常碰到,很多时候都是代码写错造成的问题,那如何快速的查验这个问题呢?
第一种方法就是查看数据最后的一天的特征是否完善,如果最后一天某列特征全部丢失的话,那那个特征基本就是穿越了。
第二种方法可以借助lightgbm的feature_importance来查验。如果有特征穿越问题的话,很多时候那个特征的重要性会异常的高。当发现这个特征重要性很高再回过头来定位代码,这样就能很快的找到问题所在。
3.数据筛选穿越
这里所说数据筛选穿越主要是指测试集的数据筛选穿越。比如用当天的换手率来筛选股票,但是当天的换手率是属于未来数据。如果回测对股票进行了规则筛选的话,需要注意规则是否用到了未来信息。
结语
以上三种是比较常见的数据穿越。实际中可能会碰到其他数据穿越问题,比如高频交易中数据获取的延迟以及下单延迟等问题。
上文链接:https://zhuanlan.zhihu.com/p/355299840
从三个角度来回答这个问题1.数据穿越。首先我们想一下为什么开会员的用户当天刚好都有购买行为。生活中一般决定要买东西了,才会去开会员享受优惠。所以其实开会员应该是发生在买东西这个行为后的,换句话说这个是后验特征,并不应该使用后验特征来预测购买行为。如果使用开会员这一行为作为特征,就涉及到数据穿越的问题。2.特征稀疏。其实这不算特征稀疏,特征稀疏一般是指数据中某个特征有值的样本很少。比如年龄,正常是数字,可能很多用户没有填这个特征,这叫特征稀疏。而这个问题中,特征就两个值,买会员和没买会员,只能说特征值分布不均衡。3.相信数据。题主认为这个开通会员是个很重要的特征,所以应该加大权重。如果这个特征真的非常重要,那么模型自然会学到。模型都是从数据中学到,要相信数据包含的规律。另外,这个问题是预测购买行为,还有很大部分用户没有开通会员,也购买了,单纯加大开通会员这个特征的权重,是不是对于这大部分用户就存在问题了。
作者:朱勇椿
链接:https://www.zhihu.com/question/434545810/answer/1646685305
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
!!!要想避免时间维度的穿越,应该在划分训练和测试样本时要将时间维度加以考虑。
https://blog.csdn.net/phrmgb/article/details/79997057