title: 机器器学习算法系列列(20):项⽬目模型优化四要素date: 2017-06-16 23:14:45categories: 机器器学习tags:- 业务- 特征- 数据- 模型
mathjax2: true
本⽂文转载⾃自美团点评技术团队博客,该⽂文以业界视⻆角介绍了了机器器学习如何发挥其实际价值。作者胡淏,⽬目前是美团算法⼯工程师,毕业于哥伦⽐比亚⼤大学。先后在携程、⽀支付宝、美团从事算法开发⼯工作。了了解⻛风控、基因、旅游、即时物流相关问题的⾏行行业领先算法⽅方案与流程。
⼀一、机器器学习⼯工程师的知识图谱
图1 机器器学习⼯工程师的知识图谱
上图列列出了了我认为⼀一个成功的机器器学习⼯工程师需要关注和积累的点。机器器学习实践中,我们平时
都在积累⾃自⼰己的“弹药库”:分类、回归、⽆无监督模型、Kaggle上特征变换的⿊黑魔法、样本失衡的处理理办法、缺失值填充......这些⼤大概可以归类成模型和特征两个点。我们需要参考成熟的做法、论⽂文,并⾃自⼰己实现,此外还需要多反思⾃自⼰己⽅方法上是否还可以改进。如果模型和特征这俩个点都已经做的很好了了,你就拥有了了⼀一张绿卡,能跨过在数据相关⾏行行业发挥模型技术价值的准⼊入⻔门槛。在这个时候,⽐比较关键的⼀一步,就是搞笑的技术变现能⼒力力。
所谓⾼高效,就是解决业务核⼼心问题的专业能⼒力力。本⽂文将描述这些专业能⼒力力,也就是模型优化的四个要素:模型、数据、特征、业务,还有更更重要的,就是他们在模型项⽬目中的优先级。
⼆二、模型项⽬目推进的四要素
项⽬目推进过程中,四个要素相互之间的优先级⼤大致是:业务>特征>数据>模型。
图2 四要素解决问题细分+优先级
2.1 业务
⼀一个模型项⽬目有好的技术选型、完备的特征体系、⾼高质量量的数据⼀一定是很加分的,不不过真正决定项⽬目好与坏还有⼀一个⼤大前提,就是在这个项⽬目的技术⽬目标是否在解决当下核⼼心业务问题。业务问题包含两个⽅方⾯面:业务KPI和Deadline。举个例例⼦子,业务问题在两周之内降低⽬目前⼿手机丢失带来的⽀支付宝销赃⻛风险。这时如果你的⽅方案是研发⼿手机丢失的核⼼心特征,⽐比如改密是否合理理,基本上就死的很惨,因为两周根本完不不成,改密合理理性也未必是模型优化好的切⼊入点;反之,如果你的⽅方案是和运营同学看bad case,梳理理现阶段的作案通⽤用⼿手段,并通过分析上线⼀一个简单模型或者业务规则的补丁,就明智很多。如果上线之后,案件量量真掉下来了了,就算你的⽅方案准确率很糟糕、⽅方法很low,但你解决了了业务问题,这才是最重要的。
虽然业务⽬目标很关键,不不过⼀一般讲,业务运营同学真的不不太懂得如何和技术有效的沟通业务⽬目
标,⽐比如:我们想做⼀一个线下⻔门店⻛风险评级的项⽬目,希望运营通过反作弊模型⻆角度帮我们给⻔门店打个分,这个分数包含的问题有:⻛风险是怎么定义的、为什什么要做⻛风险评级、更更⼤大的业务⽬目标是什什么、怎么排期的、这个⻛风险和我们反作弊模型之间的腋窝你是怎么看的?做⼀一个区域未来10min的配送时间预估模型。我们想通过运营的模型衡量量在恶劣天⽓气的时候每个区域的运⼒力力是否被击穿(业务现状和排期?运⼒力力被击穿可以扫下盲吗?运⼒力力击穿和配送时间之间是个什什么业务逻辑、时间预估是刻画运⼒力力紧张度的最有效⼿手段么?业务的关键场景是恶劣天⽓气的话,我们仅仅训练恶劣天⽓气场景的时间预估模型是否就好了了?)为了了保证整个技术项⽬目没有做偏,项⽬目⼀一开始⼀一定要和业务聊清楚三件事情:1. 业务核⼼心问题、关键场景是什什么。2. 如何评估该项⽬目的成功,指标是什什么。3. 通过项⽬目输出什什么关键信息给到业务,业务如何运营这个信息从⽽而达到业务⽬目标。项⽬目过程中,也要时刻回到业务,检查项⽬目的健康度。2.2 数据与特征要说正确的业务理理解和切⼊入,在为技术项⽬目保驾护航,数据、特征便便是⼀一个模型项⽬目性能⽅方⾯面的天花板。garbage in, garbage out 就在说这个问题。这两天有位听众微信问我⼀一个很难回答的问题,⼤大概意思是,数据是特征拼起来构成的集合嘛,所以这不不是两个要素。从逻辑上⾯面讲,数据的确是⼀一列列⼀一列列的特征,不不过数据与特征在概念层⾯面是不不同的:数据是已经采集的信息,特征是以兼容模型、最优化为⽬目标对数据进⾏行行加⼯工。就⽐比如通过word2vec将⾮非结构化数据结构化,就是将数据转化为特征的过程。所以,我更更认为特征⼯工程是基于数据的⼀一个⾮非常精细、刻意的加⼯工过程。从传统的特征转换、交互,到embedding、word2vec、⾼高维分类变量量数值化,最终⽬目的都是更更好的去利利⽤用现有的数据。之前有聊到的将推荐算法引⼊入有监督学习模型优化中的做法,就是在把两个本不不可⽤用的⾼高维ID类变量量变成可⽤用的数值变量量。观察到⾃自⼰己和童鞋们在特征⼯工程中会遇到⼀一些普遍问题,⽐比如,特征设计不不全⾯面,没有耐⼼心把现有特征做得细致……也整理理出来⼀一套⽅方法论,仅供参考:图3 变量量体系、研发流程
在特征设计的时候,有两个点可以帮助我们把特征想的更更全⾯面:1. 现有的基础数据2. 业务“⼆二维图”
这两个⽅方⾯面的整合,就是⼀一个变量量的体系。变量量(特征),从技术层⾯面是加⼯工数据,⽽而从业务层⾯面实际在反应RD的业务理理解和数据刻画业务能⼒力力。“⼆二维图”,实际上未必是⼆二维的,更更重要的是我们需要把业务整个流程抽象成⼏几个核⼼心的维度,举⼏几个例例⼦子:
这两个⽅方⾯面的整合,就是⼀一个变量量的体系。变量量(特征),从技术层⾯面是加⼯工数据,⽽而从业务层⾯面实际在反应RD的业务理理解和数据刻画业务能⼒力力。“⼆二维图”,实际上未必是⼆二维的,更更重要的是我们需要把业务整个流程抽象成⼏几个核⼼心的维度,举⼏几个例例⼦子:
外卖配送时间业务(维度甲:配送的环节,骑⼿手到点、商家出餐、骑⼿手配送、交付⽤用户;维度⼄乙:颗粒度,订单粒度、商家粒度、区域城市粒度;维度丙:配送类型,众包、⾃自营……)。反作弊变量量体系(维度甲:作弊环节,登录、注册、实名、转账、交易易、参与营销活动、改密……;维度⼄乙:作弊介质,账户、设备、IP、WiFi、银⾏行行卡……)。
通过这些维度,你就可以展开⼀一个“⼆二维图”,把现有你可以想到的特征填上去,你⼀一定会发现很多空⽩白,⽐比如下图,那么哪⾥里里还是特征设计的盲点就⼀一⽬目了了然:
图4 账户维度在转账、红包⽅方⾯面的特征很少;没有考虑WiFi这个媒介;客满与事件数据没考虑数据和特征决定了了模型性能的天花板。deep learning当下在图像、语⾳音、机器器翻译、⾃自动驾驶等领域⾮非常⽕火,但是 deep learning在⽣生物信息、基因学这个领域就不不是热词:这背后是因为在前者,我们已经知道数据从哪⾥里里来,怎么采集,这些数据带来的信息基本满⾜足了了模型做⾮非常准确的识别;⽽而后者,即便便有了了上亿个⼈人体碱基构成的基因编码,技术选型还是不不能⻓长驱直⼊入——超⾼高的数据采集成本,⼈人后天的⾏行行为数据的获取壁垒等⼀一系列列的问题,注定当下这个阶段在⽣生物信息领域,⼈人⼯工智能能发出的声⾳音很微弱,更更⼤大的舞台留留给了了⽣生物学、临床医学、统计学。
2.3 模型
图5 满房开房的技术选型、特征⼯工程roadmap
模型这件事⼉儿,许多时候追求的不不仅仅是准确率,通常还有业务这⼀一层更更⼤大的约束。如果你在做⼀一些需要强业务可解释的模型,⽐比如定价和反作弊,那实在没必要上⼀一个⿊黑箱模型来为难业务。这时候,统计学习模型就很有⽤用。
这种情况下,⽐比拼性能的话,我觉得下⾯面这个不不等式通常成
⽴立:Glmnet>LASSO>=Ridge>LR/Logistic。相⽐比最基本的LR/Logistic,ridge通过正则化约束缓解了了LR在过拟合⽅方⾯面的问题,lasso更更是通过L1约束做类似变量量选择的⼯工作。
不不过两个算法的痛点是很难决定最优的约束强度,Glmnet是Stanford给出的⼀一套⾮非常⾼高效的解决⽅方案。所以⽬目前,我认为线性结构的模型,Glmnet的痛点是最少的,⽽而且在R、Python、Spark上⾯面都开源了了。
如果我们开发复杂模型,通常成⽴立第⼆二个不不等式 RF(RandomForest,随机森林林)<=GBDT<=
XGBoost 。拿数据说话,29个Kaggle公开的winner solution⾥里里⾯面,17个使⽤用了了类似GBDT这样的
Boosting框架,其次是 DNN(Deep Neural Network,深度神经⽹网络),RF的做法在Kaggle⾥里里
⾯面⾮非常少⻅见。
RF和GBDT两个算法的雏形是CART(Classification And Regression Trees),由L Breiman和JFriedman两位作者在1984年年合作推出。但是在90年年代在发展模型集成思想the ensemble的时候,两位作者代表着两个⾄至今也很主流的派系:stacking/ Bagging & Boosting。
⼀一种是把相互独⽴立的CART(randomized variables,bootstrap samples)⽔水平铺开,⼀一种是深耕的Boosting,在拟合完整体后更更有在局部⻓长尾精细刻画的能⼒力力。同时,GBDT模型相⽐比RF更更加简单,内存占⽤用⼩小,这都是业界喜欢的性质。XGBoost在模型的轻量量化和快速训练上⼜又做了了进⼀一步的⼯工作,也是⽬目前我们⽐比较喜欢尝试的模型。
因篇幅问题不能全部显示,请点此查看更多更全内容