500. Ubiquant Market Prediction | ubiquant-market-prediction
首先,感谢所有组织和运营这次比赛的人,无论结果如何,这对来说都是一次有趣的经历。
我的模型是一个加权集成模型,由10个相同的LGBM、30个相同的神经网络(NN)和一个手工构建的模型组成。之所以采用这么多相同的模型,是为了尝试平均掉由初始条件引起的一些随机性。
神经网络和LGBM都使用了相同的特征,但由于Kaggle笔记本的16GB内存限制,我实际上不得不将数据集分成两部分。令人高兴的是,在较小的数据子集上进行测试时,这似乎对指标分数没有任何可辨别的影响,这种影响可以与随机概率区分开来。
使用的特征包括:
之所以取特征按时间ID的平均值,是为了建立一个表现池来与自己进行比较,如果按行业对其进行排序,可能会获得更好的结果。
手工筛选的特征如下:
寻找这些特征的过程是遍历每个特征,观察当特征值比该特征截至当时的滚动平均值高或低一定数值时,是否与目标值为正或负的概率较高相关。
具体来说,我寻找我认为是“好”属性的特征,这基本上意味着当数值上升一定幅度时,我希望目标值为负或正的概率也随之上升。任何“跳跃性”的特征,即不能持续遵循“数值越高/低 -> 概率越高”模式的特征,都被剔除了。我对每个特征在不同的投资ID组合上进行了此操作,当在任何批次中丢失了“好”属性时,我就剔除该特征。
仅使用这些手工制作的滚动平均差值特征并将它们相加,“好”属性当然得到了保留,我可以以大约70%的准确率预测目标的符号……尽管此时出现这种情况的机会不到1%。考虑到我们试图预测未来的市场结果,这对于一个运行良好的模型来说似乎是一个完全合理的数字。
对我个人而言,这本该是我的最终模型,因为我认为对于纯匿名特征,你确实无法做得更好。但这仅转化为约0.08的指标分数,远低于直接将数据放入你喜欢的机器学习模型所能达到的水平。
然而,对于这些机器学习模型,一些“好”属性丢失了!一种思考方式是,当机器学习模型的输出上升时,应该转化为目标值为正的概率更高,反之亦然。问题在于它徘徊在50-57%之间,甚至没有突破60%,更不用说接近我手工模型能达到的70%了。好在机器学习模型的皮尔逊相关指标要高得多。为了解决这个问题,当我的手工模型达到某个阈值(如60%概率)时,我将其叠加在机器学习模型之上。
所以我的最终模型变成了:
((10xLGBM)/2 + (30xNN)/2) x 0.92 + (手工模型) x 0.08
手工模型的权重较低,因为预测值往往绝对值较大。这至少使其能够突破60%的概率标记。
为了验证,我使用了最后25%的数据,这给了我大约0.17的交叉验证(CV)分数。
对于最终提交,我使用了整个数据集,这转化为大约0.15的公共排行榜(LB)分数。
最后,为了利用给定的两次提交机会,我使用一次提交针对熊市(将所有负预测乘以1.4,将所有正预测除以1.4),反之亦然针对牛市。
选择1.4这个值的原因是遍历从1到2的一系列不同数值,观察其对CV的影响。虽然有一段时间了,但我记得平均值大概是这样的:
| 乘数 | CV提升 |
|---|---|
| 1.1 | +0.001 |
| 1.2 | +0.002 |
| 1.3 | +0.003 |
| 1.4 | +0.0035 |
| 1.5 | +0.003 |