数据挖掘大赛内部赛赛后总结(上)

2019/8/18 23:54 下午 posted in  随记 comments

最近参与了单位内举办的数据挖掘大赛内部赛,参与后感触良多,现就此进行简单总结。总结分为两篇:一篇为经验与经历总结,另一篇偏向于挖掘中真实技术技巧的。本篇为第一篇,经验与经历总结。

比赛详情

本次比赛为内部赛,从7月15日10:00开始到8月15日15:00结束,主要共分为两个阶段,7月15日 10:00-8月12日 10:00为内部赛A榜,8月12日15:00-8月15日15:00为内部赛B榜。共有3个题目供选择,在7月25日17:00前各队伍可随机做题,但必须在此之前选定题目。每支队伍每天有3次提交预测结果的机会。

前几天我队对题目一、题目二进行了试做与总结,并在经过前期试做选题后,我们选定题一作为比赛题目。经过两轮较量,截止8月15日15:00,AB榜全部结束,题一AB榜均有效提交共147支队伍(题二74支、题三50支),我队在榜单前十。但与等第区、奖金区失之交臂,同奖金区最后一名分值只相差0.0000673。

比赛经验与教训

本次比赛是我首次参加数据挖掘类竞赛,比较新鲜也比较紧张。主要还是跟随团队大佬学习的过程。本次比赛学到了几点经验,也踩了不少教训的坑,现总结如下:

  1. 特征工程一定要做好,否则后面的再多的模型上分也难。特征工程犹如地基一样,牢固则历经风雨,不牢则风雨飘摇。
  2. 分类问题、回归问题等监督学习类问题一定要做好本地模型训练后的交叉验证,这样可以在本地就能判断训练情况的好坏。本地交叉验证不仅可以提高准确度,减少不必要的提交次数,也可以增加自己对模型的信心与认知度。
  3. 无论如何不能怀疑自己已经建立好的有效的交叉验证结果。本地有效的交叉验证一旦建立完成,一切的一切都以本地交叉验证结果为基准,其升降代表了训练结果的升降,毋庸置疑。虽然可能本地交叉验证与远程提交的交叉验证结果有些许差距,但是这样的差距也是线性相关的,因此本地交叉验证仍然是有效的。
  4. 对于远端排行榜上的分数应该有一个清醒的认识,尤其是A榜,分高不一定真高,有可能是过拟合。对A榜过拟合虽然是可以的,但是一定要自己清醒的认识到过拟合的情况是存在的,并在A榜就给出相关对策例如调整模型训练参数、调整优化特征工程、添加新特征、增加模型融合等方法来解决这些问题。同时应给自己心里对B榜或者Private可能会出现的分数差距做准备。
  5. 榜单出现黑马不要自乱阵脚,一定要对自己的建模思路有一定的信心和定力。机器智能类比赛榜单不同于ACM榜单那样精准性极高,也不同于数学建模那种事后评分的情况。榜单只是给予一个人追赶目标的方向,如果建模思路正确、特征工程充足,按部就班来也是没问题的。当然出现黑马也可以激发自己去想是否有自己以为做的很好但是仍然有改进的地方。
  6. 模型融合或单一模型有可能都能取得高分,需要看实际情况适时处理。本次比赛涉及到的均为实际业务上的问题,因此在没有高超的自动化特征工程的能力的情况下的话,自动特征工程+根据业务特性手工挖掘特征工程才是应该走的正途。而这样扎实的特征工程情况下,对模型是否做融合,需要自己根据比赛时间和参赛队伍的实际情况做判断。一般来说模型融合的效果要比单一模型要好,毕竟多模型融合对于问题的泛化能力一定是提高的,但是如果确实没有时间的情况下,应该着重对某一或某几个模型进行重点攻克,这样才能够把握比赛重点。
  7. 在特征工程无法通过流水线或者纯数学理论来做到完美的情况下,通过对题目业务本身去手工生成特征,尤其是多表间的特征生成,可能是极为关键的。这次比赛虽然特征工程做到了比绝大部分队伍好一点,但是表间特征这块是欠缺的,直观上感觉表间特征去创造的时候一定要贴合业务,但是由于我们队伍是纯技术队伍,没人懂得业务,因此从这些地方来看特征工程做的并不完美。
  8. 在A榜的时候,每个人都应该去做一个模型,同时在榜上验证模型情况。无论模型是何种表现,在B榜时,只要是交叉验证有效的模型,都可以通过模型融合提升大模型泛化能力,以求B榜高分。这次我们在B榜遗憾跌出奖金区也是因为前期没能考虑模型泛化的情况,对模型融合前的模型准备十分不足导致B榜没有时间去做模型的融合。当然,模型也不是越多越好,基本上一个三人队伍一个人专攻一种模型最后融合的结果才是最好的。
  9. 调参要仔细!B榜关闭后,我们发现最后一天B榜提交的模型中有个参数有点问题,小改之后本地交叉验证有所提高……虽然具体情况无法在远端结果得知,但是仍然是有一线希望的。当然这与上一条的教训息息相关了。因为时间不够,精神紧绷的情况下就有些地方注意不到了。所以还是要吸取上面的教训,把前期工作做好。

比赛感悟

这次比赛是我第一次参加正式的规模的数据挖掘比赛,有些东西真的都是现学现卖。当然主要还是靠团队内大佬同事的炮火猛攻才能拿到这个名次,我这个打酱油的就是膜拜和学习了。

不过这次比赛让我看到了传统机器学习与神经网络和深度网络成熟发展的当下的机器学习之间的差异,确实在此次比赛之中,通过程序手段而不是传统的人工去处理机器学习的一些流程,尽量降低人为主观因素的干预。通过公认的、有算法理论支撑的流水线机器学习手段,确实是未来机器学习的主流方向。

反正趁此机会恶补了从特征工程到机器学习的一系列知识,顺便抓紧了神经网络深度学习的学习进程,对自己来说这是一种历练和经历吧。

未来展望

从此比赛开始我大体也知道了此类机器学习数据类比赛该怎么打了,下一步就是移步Kaggle和天池之类的地方,去实打实的搞一搞比赛,以赛促学吧。希望一年以后能够有个某比赛第一的收获。