Kaggle Ubiquant Market Prediction 公榜前4(私榜目前1000+)方案 (慢更)

前言

UPDATE:近期股指行情有点变化,变得容易预测了,这些模型反而预测表现差了(不排除代码bug的锅)。

距离上次拿到kaggle比赛冠军也有一段时间了,这次集中精力在最后几周冲刺了一下九坤举办的这个量化比赛,目前比赛的公榜排名为第四名(first rerun 第11名)。

这次比赛的比赛方是九坤。九坤投资(北京)有限公司是国内成立最早、投资管理经验丰富的多策略量化私募基金管理人之一,现资产管理规模超过100亿人民币。 公司创始人自2011年开始研究中国A股量化交易策略,2012年成立公司,2014年获得“私募证券投资基金管理人”资格。

这次比赛由于比赛方使用了可以公开获得的Ashare历史数据,特征纬度为300维,包含5年内的训练数据,id作为特征给了出来。有不少选手通过匹配历史走势可以获得很高的分数。这一次的比赛方使用了time-series api,防止时序信息泄漏的发生,因而很多专注于挖掘泄漏的选手没有参加比赛。

我参加这个比赛的原因主要有以下:

  1. 参加optiver比赛的时候,有选手发现并使用了时序上的泄露信息,这导致比赛失去了意义。而G-search比赛的主办方好像对中国人不是很友好,所以只是最后几天做了下,最后成绩也不是很好。这次九坤的比赛使用了防止使用时间泄露的api,尽可能得保证了比赛的公平性,虽然允许额外数据是在意料之外的情况,但是总体而言还是有很高的参赛价值。
  2. 九坤的比赛和jane street 的比赛形式上比较像(虽然场景不同)。上一次比赛中有人抱怨,说没有人做出什么fancy的模型,我个人的感受上,js比赛里面,大部分的模型其实没有什么用,主要还是靠某个种子或者结构过拟合到了私榜上;当然摸奖提交也是一门学问,我去年摸了一年奖,也就js比赛的提交摸中了,运气算是很差吧。
    这次比赛我的目标之一,就是通过fancy的模型来赢得比赛,从目前的公私榜分数来看,模型确实是有效的,抖动较小。我了解到许多人尝试过和我类似的思路,但是他们做出来的效果都很差,这说明想把一个idea做到实际有效是一个很困难的过程,最后我能做出效果,也是靠着大量实验失败的积累。
  3. 想再拿个冠军耍耍,前几名的奖金还挺多的。我参赛时其实偷懒了,虽然内存管理做到位了,但还是留了一些漏洞没补上,希望不要遭到偷懒的报应…

不得不说这个比赛的参赛门槛很高。这个额外数据集在读取后会占用接近一半的内存,再读取原有的训练数据,还剩下2~3GB的内存拿来训练模型,确实很考验内存管理的功底…:
在这里插入图片描述

数据说明

比赛数据为2014-2018年的交易数据,数据集共有1220个time_id,而从2014-2018年,A股各有245,244,244,244,243个交易日,共计1220个交易日。比赛数据包含time_id,investment_id,feature_j(0<=j<=299)。

investment_id的具体含义参考这里:如何做特征工程。这里匹配到的走势correlation大概在0.7左右,说明这里的target不是单纯的走势涨跌,比赛方可能对数据做了一定的预处理。匹配这些id并不复杂,因为比赛数据就是a股所有的数据。

一些数据分析

有一些选手也不注意到了,九坤提供的特征存在两种,且两种特征采取了不同的计算方式,这使得他们在统计分布上存在差异。另一方面,主办方提供的特征每一列的含义都是相同的,我们猜测,这类特征可能是在不同的市场环境下或者状态下,采用了不同的计算方式。比赛的时候尝试过使用两个不同的模型来处理,效果并不是很理想。
每列特征的unique数值个数

评价指标

比赛的评价指标为 Pearson correlation coefficient,这个评价指标有一个特征,那就是它的计算结果与数据的 均值 与 方差 无关。这个特性导致使用pearson correlation作为损失函数的模型,非常容易出现问题,因为它存在无数个局部最小值,梯度的方向不稳定,好处是这个损失函数自身就会带来较大的噪音,防止过拟合。相较之下,mse作为损失函数,使用的效果更为稳定。

另一方面,通过实验发现,将每一天的target减去均值、除以方差用于训练,对于最终模型的效果没有太大的影响。

关于其他选手的方案

从一些选手的私聊里面,可以大概猜到其他拿到0.16以上公榜分数的选手的方案。他们可能是通过重新构建target,再利用target去做一些时序上的特征。有个别选手甚至衍生了上千个额外特征,不得不说是很勤劳,最后这位衍生太多特征的选手,notebook似乎是遇到了内存问题,没有取得成绩 … 目前公榜的数据较少,不好判断其他选手的模型是不是可能在之后逆袭。

本地实验

公榜更新后,大家的分数都集中在 0.09附近,最高的成绩达到了 0.104。这个分数分布和我线下实验的结果是相近的,比较符合预期。在线下实验中发现,本次的比赛还是存在 『lucky model』取胜的可能性,目前排名前十的的选手中,有7名的公榜分数很低,属于是连公榜都拟合不好,但是碰巧能够在私榜取得高分。希望我在之后的rerun里也能取得较好的成绩吧,目前的公榜分数占了总分数不到 1/6的成绩,虽然不能代表最后的成绩,但是在最开始取得领先的分数也是很重要的。

比赛方案

最近一段时间,我参加比赛的目的只有一个,那就是学习怎么使用transformer模型,我也基本上只使用了transformer。虽然初学的时候,仅仅使用LSTM、MLP、DCN这种baseline级别的模型,就能取得挺好的效果,拿过不少top名次,但是同时也意识到了这些模型的缺点,它们虽然不需要复杂的调参,但是模型的容量相对较低。而transformer作为后起之秀已经被大量用于各种领域,得到了普遍的认可,因此我也想蹭一下这个迟到的热度。

我们的方案的模型只使用了九坤提供的特征作为输入,。。。

这次比赛的方案使用了两种模型,分别为 baoziformer v1 与 baoziformer v2,融合两种模型,可以得到公榜0.1628的分数。

model nameperformance / corr
baoziformer v10.1560
baoziformer v20.1603
ensemble of v1 v20.1628

总结

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无敌叉烧包z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值