业务问题,如何用算法模型来解决
关注并将「人人都是产品经理」设为 ★ 星标
每天早上更新,与你一起成长
算法模型解决业务问题整体上可以分为如下几步,接下来我将分别讲一下每一步具体做点什么。
问题定义
不能为了上模型而使用模型。
所以首先,我们需要明确我们要解决的问题是什么?
问题可以是具体的用户需求,比如:用户希望看到自己感兴趣的商品排到前面;也可以是目前业务面临的问题,比如:目前平台GMV渗透率高的品类曝光流量不足,这些其实都是问题。但是对于使用算法模型来解决的话,关键点在于如何把这个问题变成算法模型能理解,能解决的问题。
因此这里面必然涉及到一个如何从感性的问题描述转变为一个可以让模型去理解和预测的问题。
这就到了第二个环节:问题建模。
问题建模
问题建模的关键其实就两个:业务指标定义和模型预测目标定义。
业务指标定义即根据当前业务核心场景去定义核心业务指标,这块涉及到一些数据指标体系搭建。
模型预测目标主要用于根据该目标去设定模型的收敛目标,也就是模型要预测什么,输出什么值。典型的比如ctr预估,实际上就是输出了ctr这个值。
在问题建模阶段,还有两个重要的事情:样本选择和交叉验证。
简言之,我们从原始数据(日志)当中选择跟当前模型预估指标相关的样本,然后把这些样本分为训练集和测试集,然后通过交叉验证的方法对模型进行训练和评估。
这块不得不提一下关于模型评估的指标。指标的分类有很多,最常见的其实就是准确率、召回率、AUC曲线等,包括常见的NDCG是对排序模型的衡量关键指标。
特征工程
完成了问题定义和问题建模,接下来就进入了很关键的特征工程,从大量的数据当中进行特征抽取,核心目的是为了将特征输入给模型,让模型从数据中学习规律。
最为关键的是下面这张图:
第一点好理解,特征是为目标服务的,因此选择出来的特征必须能够表征目标;
第二点的意思是这个特征要在不同的物品之间有相当明显的差异。比如销量,有的高,有的低;评价,有的是100%好评,有的是80%好评,这些都可以称之为特征。
但是,如果你们业务的基本上99%的物品好评率都在100%,那基本上这个特征就不用加了。
有差异才有区别,有区别才能作为一个决策的因素。
什么情况下我们需要进行特征选择?
训练数据包含许多冗余或无用的特征,移除这些特征并不会导致丢失信息。其中冗余是指一个本身很有用的特征与另外一个有用的特征强相关,或它包含的信息能从其它特征推演出来;
特征很多但样本相对较少,也就是某一个维度的信息数据量太少,覆盖度较低。
关于特征选择的4个步骤:
以下是模型特征选择的4个步骤,策略产品经理以了解为主:
产生过程:产生特征或特征子集候选集合;
评价函数:衡量特征或特征子集的重要性或者好坏程度,即量化特征变量和目标变量之间的联系以及特征之间的相互联系。为了避免过拟合,可用交叉验证的方式来评估特征的好坏;
停止准则:为了减少计算复杂度,需设定一个阈值,当评价函数值达到阈值后搜索停止;
验证过程:在验证数据集上验证选出来的特征子集的有效性。
模型选择
当我们把上面的事情确定之后,接下来就到了关键的模型选型的环节。大家都知道,具体的算法模型其实有很多种,不同的模型有很大差别,使用场景不同,能够处理的特征也有很大差异。
比如对于协同过滤,常见的usercf和itemcf两种,还有一些基于两个基本的协同过滤模型的变种,比如i2i,频繁二项集等。那我们就需要思考什么样的场景比较适合usercf,什么样的场景比较适合itemcf。
另外,虽然这些模型都能做到根据用户行为数据去进行个性化推荐的目标,但是具体的落地过程其实是大相径庭的。当我们经过特征工程得到一份高质量的特征之后,还需要考虑哪个模型能够更准确地从数据中学习到相应规律,从众多模型中选择最佳的模型。
模型融合
正如上面说的,其实不同的模型有不同的应用场景,所以一般线上通常是含有多个模型,最大化利用每个模型的优势,进而达到目标收益最大化,而模型融合以后得结果其实就是线上最终展示出来的结果。
以上就是关于算法是如何解决业务问题的介绍,希望大家能够明白一点,不要为了用算法而用算法,也不要认为算法就一定能更好的解决问题,关键点不在这,而是基于业务的实际情况去决定到底使用算法还是规则,使用什么样的算法。
题图来自 Unsplash ,基于 CC0 协议
微信扫码关注该文公众号作者