目录

  • 前言
    • Shake up
    • 比赛历程
    • 评价标准
    • 独特的发现
    • 一些实验结论
      • xgboost训练轮数
      • 不同resp的训练收益曲线
      • 均值还是众数?
      • 最佳的交易阈值
      • 如何提升模型效果?
    • 最终模型

前言

比赛链接:Jane Street Market Prediction

作者本人是机器学习竞赛的爱好者,打过几次比赛,也有一点收获。参加这次比赛主要是因为它和炒股相关,股市相关的比赛一直都是非常具有挑战性的,这一场比赛也是如此。第一次接触机器学习我就想着怎么搞个模型来炒股,这一次终于圆了一个心愿了(并且’赚’得还不错),同时也希望读了这篇文章的同学也能有所收获日进斗金赚大钱。这个比赛的分享分为两个部分,第一部分偏经验介绍,第二部分则直接上代码。
之前写的文章更新有点慢,以后会慢慢补上的…

Shake up


先展示比赛分数的变化,纵坐标是取得的分数,横坐标是公榜分数,可以看出私榜的top存在两类模型,一类模型本身的公榜分数就不高,但是私榜分数不错。还有一类模型,公榜分数很高,私榜分数也不差 (例如我们的模型)。
有些人以为:这个比赛就是摸奖赛,大家都在过拟合,最后得奖肯定是随机的,这是很偷懒的想法,下面也会介绍一些结论,来揭露一些发现。
比赛中存在很严重的过拟合公榜的现象,很多人发布了针对公榜调参的模型,最终使用这些模型的人形成了右边中间的黑云。shape up还是比较严重的,但是可以看出公榜和私榜存在线性correlation,分高的模型偏向于取得高分,也希望之后的轮次我们的模型能越战越勇吧。

比赛历程

比赛的初期我通过xgb模型取得过排行榜前三,而后又通过模型融合当过几天第一,领先其它选手挺多的。也有了一些独特的发现,这个发现使得我可以很容易得在public kernel的基础上提升分数。

在那之后发生了一件改变比赛流向的事情,有人发现,在某个 public kernel中,如果只是把最后两折训练的模型取出来的话,可以取得比较好的线上分数。

这样做的弊端也很明显,只用到了少量的数据,很可能产生过拟合公榜的情况。这个过拟合模型的发现也对公榜排名造成了大混乱,虽然我可以稍微融合模型保持前几名的分数,但是这样做对于赢得比赛并没有好处。

这之后我选择了弃赛一个月,终于回国和女朋友到处玩。玩了一个多月回来,发现公榜大变天了,第一名都超过一万分了,然而模型方面,大部分人依然在使用之前公榜取得比较好分数的public kernel模型,并没有太多的进展。几天后有一个参赛者分享了一个调参好的模型,跑了200 epochs的MLP取得了线上8100分的成绩。我当时就用上了我的独特的发现,立马就取得了前排的成绩。之后这个分享者又把性能调到了9300,我再一次用上了我的独特的发现,成绩立马就进了前十,这个时候读者一定会疑惑了:

是什么发现这么神,不管什么模型用上都能稳定提分?

确实是不管什么模型加上都能稳定提分。

评价标准

我们先聊一下这场比赛的评价标准:utility score
计算公式如下:

pi=∑j(weightij∗respij∗actionij)p_i = \sum_j(weight_{ij} * resp_{ij} * action_{ij})pi​=j∑​(weightij​∗respij​∗actionij​)

t=∑pi∑pi2∗250∣i∣t = \frac{\sum p_i }{\sqrt{\sum p_i^2}} * \sqrt{\frac{250}{|i|}}t=∑pi2​​∑pi​​∗∣i∣250​​

where is the number of unique dates in the test set. The utility is then defined as:

u=min(max(t,0),6)∑piu = min(max(t,0), 6) \sum p_iu=min(max(t,0),6)∑pi​

pip_ipi​代表了每一天的收入,weight是购买stock的数量,resp是 未来交易时的价格浮动,action 则代表是否进行这次交易。

与收入 income 不同,utility score 还考察了模型收益的稳定性,即模型的最大回撤不能过大,不然的话就不是好模型,最终的 utility score 也会相对较低。可以看出:如果有某一天的收入为负的话,t 计算公式里的的分母会变小,分子会变大,utility score 也会被惩罚得很严重。

另一个可以看出的要点是,在 t 值大于6的时候,总收入决定了u值的大小,然而这往往是不可能(有可能)的。

在这里可以看出,最后取得第一名的模型,很可能要么是取得了比较高的t值,要么是取得了比较高的p值(我们的模型),这一点在第一轮的排行榜上有了很好的反映。有没有办法既取得很好的p值,又有很好的t值呢?

独特的发现

官方在数据中提供了5组收益指标,分别是 resp_1, resp_2, resp_3, resp_4 和 resp. 我们的最终受益是按照resp的值计算的。

这里先上结论,

  1. 根据 resp_1,resp_2 交易所取得的收益更加稳定,t值高
  2. 根据 resp_3 交易所取可能有较高的t值,p值也往往高
  3. 根据 resp, resp_4 交易可能取得很高的p值,但是t值往往很低

这里读者一定会有疑问,为什么resp和resp_4是归为一类的?他们之间有什么区别呢?
有兴趣的读者不妨下载数据集分析一下,可以发现不同的 resp 类别,具有的方差是不同的,浮动更大的类别在时间线上距离更远,更加不稳定,所以方差较大。有兴趣的读者不妨参考 Rough estimate of resp_i timeframes。

从以上结论我们发现了,利用resp_3,我们可以得到既稳定,又有高收益的模型,也就是说如果我们在预测和训练的时候直接使用resp_3,很可能得到比用resp预测更高的收益!

实验结论也很有说服力,当时我凭借单模xgb(resp_3)直接进入前五(7905),融合多个种子更取得了当时排行榜第一!

这也就是我上文中提到的独特的发现,不管什么模型,提交resp_3就能涨点! 这一先结论不管是线上线下大部分时候都是成立的。

一些实验结论

xgboost训练轮数

在线上提交了几次后,可以发现线上分数比线下分数要高出不少,将近有两倍的差距。线下多次实验,我们发现的结论是,xgboost训练100轮后就基本不会提升utility score了,但是在线上可能需要训练400轮才能取得最好的效果。最终提交的模型我们选择了训练了100轮的xgboost模型,线上的分数大概在6000~7000分这个区间内。XGBOOST的超参对于模型的性能影响很大,但是线下分数高的模型超参,线上成绩也往往很高。

不同resp的训练收益曲线


这是训练神经网络时得到的收入曲线,横坐标是epoch//5,纵坐标是utility score,对于不同resp所取得的收益,可以看出resp_1, resp_2 所取得的收益总是偏低,而resp_3, resp_4, resp取得的收益则更高。这里列出的曲线是模型收敛较为稳定时取得的曲线,实际上通过选择不同的验证集,还可以观察到不同的模式。数据分布完全不同的情况下,resp_2可以取得更好的收益!

均值还是众数?

实际上通过线下分析观察可以发现,在预测试,如果训练时使用了多目标,取均值和众数取得的收益其实是差不多的,但是对于某些特殊情况,均值或者众数往往有奇效。鉴于这里的严重不确定性,我们没有在这里做过多的研究。

最佳的交易阈值

线下经过实验得到的结论是 0.51~0.52 之间的阈值可以带来更高的收益,最后的提交的模型中有一个是用0.51作为阈值,也希望这一发现能在未来的六个月带来正向收益吧。

如何提升模型效果?

  1. 利用更多的数据(weight=0),这里是我们有所欠缺的地方,但是相信别的队伍也没有做得太好,不排除有队伍做了一些处理,取得了效果,但是做了处理并不代表他们利用上了这些数据。下结论前需要大量实验来验证才正确。
  2. 减少交易次数,鉴于评价标准的惩罚机制,放弃risky的交易机会可能会带来分数上的提升。但是这里也比较玄学,并没有发现令人信服且能提升分数的方法。
  3. 特征工程。更多的特征工程可以让模型更容易学习到数据中的pattern,但是随之而来的则是严重的过拟合。

最终模型

比赛的数据是匿名特征(130列),特征工程不是完全无用,但是往往会吃力不讨好。为了保持解决方案的简洁性,最后提交的模型没有加入特种工程。
实际上有一些特征工程可以在线下取得分数的提升,但是加入线上模型会降低分数,我们这里希望只保留线上线下都有提升的强结论。
读到这里的读者可能会发现,我们并没有用什么特别复杂的方法。实际上我大部分的精力都花在了观察数据和模型的表现上,复杂的模型或者方法也尝试过,但是往往效果不好,线上线下不一致,或者并没有显著性。相信大家也会有一种直觉,最终获胜的模型可能并不是那么复杂,这也是我们最终提交所遵循的原则。

我们最终模型是 AE+MLP + XGBOOST(100 round), 每种模型各针对三个种子进行了训练。取得的公榜分数分别是 99xx 和97xx, 私榜分数是 54xx和 52xx。

jane street market prediction 冠军方案 经验分享 (1/3)相关推荐

  1. jane street market prediction 冠军方案 奇巧淫技与topline链接整理(3/3)

    目录 前言 将income 作为loss(优化目标) 读取数据,定义优化目标 模型训练与微调 提交结果 多目标学习 Topline整理 AE+MLP (rank10) Current 17th sol ...

  2. 邀你来参会!冠军方案实战分享,2022高通人工智能开发者大会来了

    2022年12月2日,高通人工智能开发者大会即将在成都金牛区举行.大会将携手产业界各路技术大咖,聚焦探讨人工智能行业产业生态链的升级与挑战.本次活动由高通公司冠名赞助,成都市金牛城市建设投资经营集团有 ...

  3. 7次KDD CupKaggle冠军的经验分享:从多领域优化到AutoML框架

    本文结合笔者在7次Kaggle/KDD Cup中的冠军经验,围绕多领域建模优化.AutoML技术框架以及面对新问题如何分析建模等三个方面进行了介绍.希望能够帮更多同学了解比赛中通用的高效建模方法与问题 ...

  4. 支持实践教学:清华大数据能力提升项目举办CIKM AnalytiCup2017冠军团队经验分享会

    2017年11月29日,清华-青岛数据科学研究院(以下简称:数据院)报告厅举办了一场赛事经验分享讲座.数据院邀请到数据派研究部成员.清华大学工程力学系博士生姚易辰和清华热能系博士生李中杰前来分享他们在 ...

  5. 网络安全实战攻防演练丨防守方案经验分享

    2016年<网络安全法>颁布,出台网络安全演练相关规定:关键信息基础设施的运营者应"制定网络安全事件应急预案,并定期进行演练".网络安全实战化攻防演练作为国家层面促进各 ...

  6. Uni-appVue完成小程序DIY装修方案经验分享

    一.引言 最近有一个DIY小程序的需求,也就是小程序装修方案.首先查了一下主流DIY解决方案,对比后选择了有赞diy作为参考. 完成的功能:用户通过简单的拖拽可以实现对页面的编辑,可以自定义组件的样式 ...

  7. 直播 | DSTC 8“基于Schema的对话状态追踪”竞赛冠军方案解读

    「PW Live」是 PaperWeekly 的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和交流可能会让知识的传播更加有意义, ...

  8. 【实践】美团外卖图谱推荐比赛冠军经验分享:从多领域优化到AutoML框架

    猜你喜欢 0.[免费下载]2021年12月热门报告盘点1.如何搭建一套个性化推荐系统?2.快手推荐系统精排模型实践.pdf3.全民K歌推荐系统算法.架构及后台实现4.微博推荐算法实践与机器学习平台演进 ...

  9. Kaggle比赛冠军经验分享:如何用 RNN 预测维基百科网络流量

    Kaggle比赛冠军经验分享:如何用 RNN 预测维基百科网络流量 from:https://www.leiphone.com/news/201712/zbX22Ye5wD6CiwCJ.html 导语 ...

  10. 云计算架构师分享:容器云在金融企业的落地方案 | 周末送资料(原题:某保险公司容器云PaaS平台建设实践经验分享)

    [摘要]随着技术和社区的成熟,容器.Kubernetes.微服务等新事物不再只是概念,已在很多企业落地并发挥了生产力,对容器和PaaS的需求也从试探性转向规模化推广和纵深探索,建设企业级容器PaaS平 ...

最新文章

  1. Ruby中的设计模式
  2. log4j打印mybatis执行的sql
  3. python3 字典修改键(key)的方法
  4. 【Linux】一步一步学Linux——nl命令(43)
  5. 2010年安大计算机录取名单,2021安徽大学考研拟录取名单已公布
  6. rest spring_Spring REST:异常处理卷。 1个
  7. C4.5决策树生成算法完整版(Python),连续属性的离散化, 缺失样本的添加权重处理, 算法缺陷的修正, 代码等
  8. sqlyog同步mysql_大坑:用SQLyog连mysql的部分操作不能同步到从库
  9. php 数组重新打乱_PHP 将数组打乱 shuffle 函数
  10. 计算机集成项目经理 培训,计算机信息系统集成项目经理培训总结.doc
  11. stata学习笔记(三):计算五年内的ROA标准差所用到的一些知识
  12. Django Book 2.0 翻译
  13. Socket通讯之UDP
  14. HTML的Form和XFORM的区别,Xform是什么意思
  15. <C++>运算符重载完结,详解赋值,关系,函数调用运算符
  16. py文件编译为pyc(命令与脚本)
  17. MinIO入门-02 SpringBoot 整合MinIO并实现文件上传
  18. NET酒店宾馆客房管理系统源码
  19. matlab修改坐标轴刻度间隔大小
  20. 深度盘点:整理了32个Python图形化界面

热门文章

  1. 智能垃圾桶(七)——SG90舵机的介绍与使用(树莓派pico实现)
  2. windows下ruby安装环境配置
  3. matlab矩阵排序sort,Matlab 用sort函数排序
  4. 最全整理反面角色谁更适合饰演老大角色,你认识多少?(已收藏)
  5. 图像处理软件ImageJ介绍与下载链接
  6. RS485通信协议温湿度传感器探头
  7. 51单片机电路原理图_51单片机入门(第1篇):纯干货,单片机最小系统
  8. 操作系统原理第五章(资源分配与调度)
  9. MATLAB实现香农编码
  10. Python调用graphviz绘制结构化图形网络