赞
踩
What,How,Why。首先要弄清楚自己要干什么,然后调研相关的技术确定怎么解决问题,最后反思自己为什么要用这个方案解决这个问题,有没有更好的思路方法。
以电商推荐系统中的点击率预估为例。首先明确我们的目标是优化线上的商品点击率,其次可以通过点击率预估算法来离线训练模型,线上进行预估,将点击率较高的商品推荐给用户,这样做的原因是点击率预估是目前业界比较成熟的解决方案,且能够取得不错的效果,如果在实践中遇到问题,也便于解决问题。当然也会有一些其他的方案,比如通过深度学习来做CTR,但是使用深度学习成本较大,所以从成熟的基于机器学习的CTR来做,并逐渐过渡到深度学习。
在明确问题之后,要选定用什么算法来解决,在相同的数据特征的前提下,不同的算法带来的效果是不一样的,而且应用的成本也是不一样的。因此选定适合自己业务的算法才是最重要的,而不是选择最高大上的。
同样以电商推荐为例,比如进行了综合考虑,选定了CTR预估中常用的树模型算法-XGBoost。
确定算法模型之后,则是结合业务特性明确模型所需要的训练数据。脱离业务的特征数据是没有灵魂的,比如电商业务中的商品和信息流产品中的新闻背景是不一样的,很多细节性的数据和特征需要去考虑和构造,因此要构造适合自己业务的数据,才能最大化的发挥算法模型的作用。
比如CTR预估场景中我们要构造的训练数据为 <features, label>,那么如何去确定label呢?不同的kpi指标对应的label是不一样的,比如追求点击率的我们的label可能是0,1;但如果追求的是GMV(商品成交额),制定的label可能是商品下单率。同样制定features的过程中也要结合用户在业务内的数据表现。
模型是基于基础数据进行更好的维度的问题抽象和解决,CTR模型旨在构建features和label之间的隐含关系,通过参数调整,特征优化以追求更好的效果表达。在构建好数据之后就是算法模型进行的舞台了,目前大数据环境下最普遍的则是基于Spark分布式平台进行模型训练和调优。
训练模型往往需要拟合的是一个目标函数,以追求最小的误差,最大的效果。CTR场景下常见的模型评估指标有:准确率、精确率、F值、AUC、NDCG等。同样是选择适合自己业务和算法模型的评估指标,通过评估指标来调整模型的参数以达到离线最优的效果,但具体的最终效果还是需要进行模型上线,进行ABTest验证模型的优劣。
在ABTest过程中,新上的模型往往由于其不确定性,会给予较小的流量进行效果的测试,如果效果优于base组模型,则会分配更多的流量,以追求线上整体效果的最优。
更多关于模型效果的评估可以关注后续章节内容。
模型优化的过程则是对模型和数据进行迭代升级的过程,但是这里需要明确的是影响模型的线上效果的因素有很多,从基础数据到构造的特征,从算法选择到实验策略的影响,从给出的排序结果到前端的位置展示,都可能产生影响。在应用算法模型的整个过程中,发生的每个动作或者做的每个修改都会影响模型的效果表达,因此算法工程师一定要注意的是切勿只重视算法和特征,在出现问题的时候往往要从多方面进行问题的定位和解释。
为了避免其他非数据算法方面的影响,要充分利用ABTest实验,即保证其他因素的一致性,通过实验效果的优劣验证实验改进点的有效性。
把模型搞定之后需要考虑的是怎么部署模型,当然不同作用的模型、不同类型的模型部署方式也是不同的。
比如用户离线计算的用户偏好模型,则不需要进行线上部署,训练好模型之后,保存一下,直接对数据集进行偏好预测,当然也可以不保存,直接进行预测。
对于线上使用的排序模型,机器学习和深度学习的主流部署方式也是不同的,比如排序的树模型,通常情况下会保存成obj文件,然后写入到固定的地方,线上使用时直接加载到内存进行线上实时的特征拼接和计算即可,对于DL类模型,当然也可以保存成固定格式的文件供线上使用,但更通用的做法是借助于框架本身封装的服务,比如基于Tensorflow的DL模型,可以借助tf-serving进行部署,线上使用时,直接调相应的API接口,传入需要的参数进行计算排序。
模型部署上线之后并不是终点,一个更重要的步骤则是对上线之后的效果进行追踪。
通常情况下,新上模型一般会进行白名单测试(一般是内部人员),测试是否能正常返回数据,返回的数据是否正常、是否可信服,确定没问题之后会进行小流量的测试(一般在5%左右),观察一天的效果,如果效果正向,则会扩大流量(一般扩到50%左右),经过一段时间的效果观察(主要是和base组模型进行效果对比)如果效果正向,则会考虑全扩或者扩充接近100%。
不要小看扩流流程,如果新上模型直接扩充到全量或者大部分流程,是会引起很严重的问题的,比如效果不好,性能不好等,所以要谨慎对待。
数据保存是指将线上使用的特征数据通过一定的方式进行保存,目的是方便后续模型的训练和优化,形成一个完整的数据闭环。
保存数据时需要注意的是每条数据的唯一性,即保证最后关联特征数据和label的时候保证是对应的,否则会引起样本误差,引起模型的训练效果。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。