开球到传球的时间 - (TimeHandoff-TimeSnap):我认为这一时间的长短一定程度上决定了战术的选择,而战术肯定是影响了进攻码数的;
比赛进行时间 - (15-GameClock+Quarter*15):比赛进行了多久对球员们的体力、战术选择等都有很大影响;
Position_XX:用于统计当前进攻中场上各个角色的人数组成,这也跟战术选择密切关系;
goal区:码线对方半场10码或10码内,此时距离达阵不到10码,一般这种情况下战术选择会变得与之前不太一样,不管是防守方还是进攻方;
首攻危险:这是我自己定义的,即当目前进攻方仅有一次进攻机会,而所需继续进攻的码数大于5时,我认为是有首攻危险的,此时很可能丢失球权,down为4,且distance大于5;
距离达阵还有多少码:一般距离的不同,防守方的防守策略会有不同,距离较远一般会较为保守,距离较近则会比较激进;
其余object特征做label encode处理;
聚合数据并整理聚体统计特征这里要注意,训练数据每一行表示的是一次进攻中一个球员的情况,我们预测的是每次进攻,因此需要把每22条数据聚合为1条,这个过程中会有一些数据统计特征的产生,下面简介整个流程:
延迟特征:即每个球员分别在之后0.5s,1s,2s,3s后的位置信息;
平均特征:分为进攻方和防守方,平均速度、平均加速度、平均身高、平均体重、平均年龄;
持球人为中心特征:当前、延迟0.5s,1s,2s,3s时,进攻方和防守方球员与他的平均距离;
持球人为中心特征2:当前、延迟0.5s,1s,2s,3s时,进攻方和防守方球员在持球人3码、5码内的人数估计;
一次进攻的成败,大部分情况下取决于四分卫的发挥,而对其发挥其重要作用的,除了他自己,就是他身边的队友以及对手的数量,这一定程度上影响了他的可选择空间大小;
这一段的处理代码较多,只截取了一部分,如下:
测试数据处理与训练数据保持一致即可;
建模到此,数据处理完毕,后续就是建模、调参、combine等优化处理了,这一步我没有花太多精力,模型选择ExtraTreesRegressor,由于其使用了oob,因此不需要CV,结果如下:
大家可以到我的Github上看看有没有其他需要的东西,目前主要是自己做的机器学习项目、Python各种脚本工具、数据分析挖掘项目以及Follow的大佬、Fork的项目等:
https://github.com/NemoHoHaloAi