年度技术总结-MachineLearning篇

2015年参加了3次大数据/Machine Learning相关的比赛(天猫LBS/DataCastle职位预测/内网简历预测),特将问题和技巧汇总成文。

碰到的问题

  • 痛点1. 实验平台和环境不熟

ODPS和御膳房是天池比赛标配,目前通过SQL/XLab/PAI尚能适应,Datacastle外部赛数据量较小,可以使用任何单机版工具,就面临工具选择问题。但不论如何,最好能在比赛前,掌握比赛指定的平台和工具,减少编码错误导致的debug时间。2次天池比赛,在SQL联表的多记录冗余和NULL值misjoin上吃了多次亏,延误了比赛进度。

  • 痛点2. 线下表现与线上测评不一致

对线下优化的打击很大,即便线下优化的很好,提交后结果大失所望。

  • 痛点3. 特征选择以保证结果最优

不知道哪些特征是有效的,特征工程一抹黑,要么激进地加了一大堆特征,要么保守地不敢随意在最佳特征集上新增特征。

解决技巧

  1. 残缺样本的清洗

天猫LBS推荐大赛数据量千万级,个别列缺失样本众多,可以考虑保留数据质量较好的样本,同时节省一次试错流程的时间。而后面的2次简历预测大赛数据量刚上万级,样本数量比较少,尽可能对缺失值进行填补。

  1. 保留线下/线上分布一致的特征

线下表现OK,线上惨不忍睹,除了过拟合,数据量不足情况下未做交叉验证导致测试集不稳定之外,主要原因就是提取的特征在训练集和线上数据集表现不一致,导致模型训练无效,去除该类特征后,随不能保证成绩提升,但是至少线下和线上的提升方向很大概率上保持一致。

  1. 关注正负样本比例

天猫LBS推荐大赛,负样本比例远大于正样本不符合直观感觉,人为设置直观比例后,保证预测结果不偏向于选出较少正样本,也可以清洗一些不靠谱的负样本。

  1. 过拟合-欠拟合的平衡

某些特征加入后线下效果飙升,但是线上测评下降,可能利用了某些label的信息导致穿越和过拟合,果断杀掉,引入一些看似泛化类的特征。也可以绘出learning curve,观察train/test的error情况。

  1. 分析原始数据,进行特征组合

在简历比赛中,通过正样本分析,发现测试/产品岗位女性比例较其他岗位高,或者经验和学历都很高的资深人士应聘要求不高的岗位,等等。通过交错的特征组合,构造出比较拟合的特征。

  1. 先特征工程,后模型调参

避免刚稳定好一套最优参数,被新加的特征又破坏了平衡点。

  1. 均衡准确率和召回率

最终提交样本的比例可以通过一次成绩计算得知,提交合适的正样本比例可以拉平准确率和召回率,使得F1值最大化。

  1. 确立最佳方案原点

建议新的提升方案尝试之前,保留好当前最好成绩的版本镜像,试错尽量勿深,免得不知道成绩倒退的原因,加大寻找和最佳方案diff的困难。当然如果想从模型架构上动刀,就需要大刀阔斧地修改了。

  1. 多模型的比较

阿里简历大赛采用御膳房,可以多模型组件并行跑分,总体测评下来,bayes和svm自不堪当大任,线下比较RF>GBDT=XGBOOST>LR,但是线上测评效果GBDT一直占优,还未能研究RF过拟合的原因。

  1. 文本特征潜力较大

简历比赛涉及很多职位,个人的描述信息,从中进行归类和处理就能获得较好的特征,比如对职位等级的归类(高级职位,经理职位,总监职位),以及优秀公司的识别(比如有过百度/腾讯经历的人,应聘阿里成功概率会比其他公司高一筹)。

  1. 不要太迷信LR的p-value

虽然LR不是最优模型,但是经常用LR进行特征重要度打分,但是发现不少特征的重要性打分和直观感觉不一致,原因可能是特征之间本身无法保持独立,以及特征空间较大/各特征scale不同导致p-value的不准确。

未来可以尝试的点

  1. bad case分析(预测错误case的原始数据分析)

在特征工程进入瓶颈期后,可以针对分类错误的case单独分析,找出新的特征可以改善错误分类,case较多的典型对效果提升会大。

  1. 缺失值通过建立预测模型进行填补

对于某列缺失值比例较大的情况,一味的用默认值/均值填充已经失去了该列的显著性,可以直观地构建和该列相关的其他列作为特征,先进行一次预测补足。

  1. 负特征的使用

此前一直只直观分析正样本的数据共性,其实能够挑出负样本比例较大的规则,形成负特征,或许有效。

  1. 连续特征的分段

工作年限也许并非和成功线性相关,或许2头较高,或者分段较高,总之将明显的分段引入连续特征,使特征有效性增强。

  1. 交叉验证

之前样本量够的情况下,为了节省跑分时间,未做交叉验证,有可能会导致模型只是针对随机一次选出的验证集上的较优结果。

  1. 结果的ensemble
  2. 提交样本的选择

在比赛后期,针对不同大类的样本,比如简历预测中,技术类岗位预测效果较好,可以突击提交超过预估比例的技术类样本组合,拉高整体F1效果。

总结

三次投入较多的竞赛,从最早的top35%,到第二次top25%,第三次top20%,每次提升虽然不多,但限于个人赛精力、观点碰撞和试错机会有限,但都收获了很多经验。比赛成绩是由较强的理论功底和丰富的应用经验决定的,有目的地提升任意一方面实力,是未来长期的努力方向。

你可能感兴趣的:(年度技术总结-MachineLearning篇)