返回列表

8th place solution

500. Ubiquant Market Prediction | ubiquant-market-prediction

开始: 2022-01-18 结束: 2022-07-19 量化投资 数据算法赛
第8名解决方案

第8名解决方案

作者:kaggle doer
发布时间:2022年7月19日

首先,感谢所有组织和运营这次比赛的人,无论结果如何,这对来说都是一次有趣的经历。

我的模型是一个加权集成模型,由10个相同的LGBM、30个相同的神经网络(NN)和一个手工构建的模型组成。之所以采用这么多相同的模型,是为了尝试平均掉由初始条件引起的一些随机性。

神经网络和LGBM都使用了相同的特征,但由于Kaggle笔记本的16GB内存限制,我实际上不得不将数据集分成两部分。令人高兴的是,在较小的数据子集上进行测试时,这似乎对指标分数没有任何可辨别的影响,这种影响可以与随机概率区分开来。

特征工程

使用的特征包括:

  • Ubiquant提供的原始特征
  • 每个特征在每个时间ID(time id)下的平均值
  • 特定投资ID(investment id)随时间变化的少数手工筛选特征的滚动平均值,减去该特征的当前值

之所以取特征按时间ID的平均值,是为了建立一个表现池来与自己进行比较,如果按行业对其进行排序,可能会获得更好的结果。

手工筛选的特征如下:

  • 33, 120, 225, 242, 266, 293
  • 15, 31, 83, 157, 164, 189, 197, 215, 226, 231, 237, 239, 243, 250

特征筛选过程

寻找这些特征的过程是遍历每个特征,观察当特征值比该特征截至当时的滚动平均值高或低一定数值时,是否与目标值为正或负的概率较高相关。

具体来说,我寻找我认为是“好”属性的特征,这基本上意味着当数值上升一定幅度时,我希望目标值为负或正的概率也随之上升。任何“跳跃性”的特征,即不能持续遵循“数值越高/低 -> 概率越高”模式的特征,都被剔除了。我对每个特征在不同的投资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