很多人其实非常好奇BAT里机器学习算法工程师平时工作内容是怎样?其实大部分人都是在跑数据,各种map-reduce,hive SQL,数据仓库搬砖,数据清洗、数据清洗、数据清洗,业务分析、分析case、找特征、找特征…而复杂的模型都是极少数的数据科学家在做。例如在阿里,算法工程师要挖掘业务场景,根据业务找出高效的特征,2周内可以完成一次特征迭代,一个月左右可以完成模型的小优化,来提升auc。因此特征很关键,腾讯、阿里他们得模型效果那么好多半归功于特征工程。
特征迭代的意思是把新造的、组合的、修正的特征加入模型中并且优化结果,这就是一次特征迭代。
工作中特征工程的流程一般是以下几点:
1. 数据采集
2. 数据清洗
3. 数据采样
4. 特征处理
5. 特征选择
而这篇总结核心主要在特征处理和特征选择上,特别是特征处理,除了对不同类型特征进行数据处理外,还有如何找到和构建组合特征。
数据采集
数据采集前需要明确采集哪些数据,一般的思路为:哪些数据对最后的结果预测有帮助?数据我们能够采集到吗?线上实时计算的时候获取是否快捷?
比如我要给用户做商品推荐,那我需要采集什么信息呢?
-店家:店铺的评分、店铺类别……
-商品:商品评分、购买人数、颜色、材质、领子形状……
-用户:历史信息(购买商品的最低价最高价)、消费能力、商品停留时间……
数据清洗
数据清洗在工作中也是很重要一步。数据清洗就是要去除脏数据。
那么如何判定脏数据呢?
- 简单属性判定:一个人身高3米+的人;一个人一个月买了10w的发卡。
- 组合或统计属性判定:号称在米国却ip一直都是大陆的新闻阅读用户?你要判定一个人是否会买篮球鞋,样本中女性用户85%?
- 补齐可对应的缺省值:不可信的样本丢掉,缺省值极多的字段考虑不用。
数据采样
采集、清洗过数据以后,正负样本是不均衡的,要进行数据采样。
既然总体中样本比例过低,很自然的思路就是从总体中重新抽样,提高建模样本中正样本的比例。
所谓正样本(positive samples)、负样本(negative samples),对于某一环境下的人脸识别应用来说,比如教室中学生的人脸识别,则教室的墙壁,窗户,身体,衣服等等便属于负样本的范畴。
过采样和欠采样是比较常用的方法,前者是增加正样本的数量,后者是减少负样本的数量。如果总体中正样本的绝对数量过少,可以将所有正样本全部纳入,再抽取部分负样本构建建模样本,这种思路其实就是过采样和欠采样的结合。
如果正样本量都很大,那么可以欠采样,也叫下采样
如果正样本数量不大就用采集更多的方法,比如