模型构建
枚举方法
在机器学习领域,解决分类问题的算法很多,比如经典的逻辑回归、支持向量机、随机森林、GBDT、神经网络等等,不同模型适用的数据分布不同。
在实际场景中,不同事件的数据分布不同。如果用同一种方法训练,大部分事件的训练效果会很差,因此需要一种方法为不同事件量身订制最合适的模型。
从统计学角度,对同一种事件分别用不同算法计算出分类结果,对比预测出的分类结果与真实分类结果,选出平均表现最好的模型作为该事件的线上模型。
除了确定模型,还需要确定训练参数与训练方法,我们枚举了不同训练方法与训练参数组合。
比如当前模型是基于梯度学习的,分别用Trust Region、LBFGS、SGD三种方法学习,并且枚举训练集、验证集比例,Learning Rate等训练参数,选出最佳学习方法与参数组合。
这里我们在Spark分布式计算框架实现了分布式训练,加速了训练速度。
L1/L2正则化:用L1筛选稀疏特征,当训练数据/全量数据比例大,用L2防止模型过拟合。
枚举这种方法的缺点是需要事先定义好训练方法与训练参数候选集,完全凭经验来训练,因此需要更好的办法优化模型筛选过程。
在线强化学习筛选模型
对于一个新注册事件,没有训练样本,我们选择用在线学习与强化学习思路解决该问题。强化学习在每次迭代中不仅仅趋向局部最优解,而是在探索(Exploration)与利用(Exploitation)中做出抉择。如果选择探索,则按照某种相对随机策略选择一种解法;如果选择利用,则在候选集内选择最优解法。
1.首先初始化一些基础模型,比如逻辑回归模型、SVM、随机森林等等,基本模型的参数使用某种分布进行初始化,将这些基础模型加入到模型空间;
2.当收到一个新的预估请求,根据Epsilon-greedy策略决定选择哪个模型进行预估,也就是图中的Action过程;
3.定义预估值与实际表现之间差距绝对值为Reward,表示当前估计的偏差,实际表现的定义是:事件发生为1,事件未发生为0;
4.根据Reward信息,利用FTRL在线学习算法,更新相应模型参数,也就是Policy过程;
5.同时定义模型的收敛条件是在模型处理一定数量预估请求条件下一段时间内Reward变化率,Reward变化趋于稳定时,认为模型收敛;
6.模型收敛之后,通过平均Reward表现筛选出最优模型。
除了新注册事件,已经积累训练数据的事件也可以按照该方法优化模型筛选过程。
相对于传统有监督学习方法,强化学习思路并不给模型强加很多假设,比如我们之前提前设定的先验模型参数,而是根据真实系统的实时反馈调整Agent的策略,这也是强化学习方法能够很好地应用在围棋算法,无人车驾驶等不能用规则囊括所有先验知识场景的原因之一。
这里用数学推导简单描述下我们的算法,首先有n个基础模型:
1.当进行到时间t的迭代时,根据时间与平均Reward计算Epsilon,用Epsilon来决定探索还是利用,Epsilon代表探索发生概率,随着时间而变,Threshold是不变的;
2.通过公式可知,探索发生概率与时间成反比,和平均Reward成正比。也就是说在初始阶段更希望去探索而不是在模型集合中找局部最优解。当Agent逐渐收敛时,更希望用最优解去预测;
3.当平均Reward较大时,模型表现比较差,我们希望多去探索。当Reward较小时,模型表现比较好,我们希望多去利用;
4.探索发生时,我们利用一种概率分布来筛选模型。在统计学中这个分布叫做Boltzman分布,p(m(t)(i))表示在时间t第i个模型被选中的概率,r(avg)(i)表示到当前为止i模型的平均Reward, Lambda一般较大,用来突出模型筛选随机性。
Reward比较大的模型被选中的概率会比较小,但通过指数函数,实际上削弱了平均收益的作用,使模型筛选过程更加随机。
通过对比离线有监督学习与在线强化学习,不同场景下Impression事件预估有了不同程度的提升。
对比不同参数下Agent的收敛情况,抽取了前2000次迭代。最上青色的曲线是Lambda为100时的仅探索过程,表现最差,因为是仅探索,并且Lambda很大,这种方法接近随机;下面的绿色曲线是仅利用;蓝色曲线是Lambda为1时Agent的表现,当Lambda为1时,效果与仅利用差不多,因为这时只考虑了平均Reward,相当于每次迭代都选择最优解;红色曲线是Lambda为100时Agent的收敛情况,表现最好,因为它同时考虑了探索与利用两条路,并且在探索中可以做到一定的随机性。
正负样本比例不均衡
模型训练部分还有一个问题,即在不同事件中训练数据的正负样本分布不均衡问题,这个问题其实很直观:出现在视频播放结束的广告能够获得Impression的数量很少,出现在视频播放开始的广告能够获得较多的Impression。
从数学角度来解释这个问题:假设正负样本的特征分布均符合高斯分布,高斯分布方差的最大似然估计是有偏的。为了得到方差的无偏估计,需要将样本数目减1来计算方差,而这一偏差导致的后果是对方差有所低估,并且样本数目越少低估越严重。从图形上分析,方差变小后,图像变窄,导致的结果是更多的样本被分到大样本量所在Label集合中。
一些论文证明,在二分类问题中,当两类样本的比例小于等于1:35时,大部分分类算法基本上就无效了,所以说正负样本比例不均衡这个问题对于模型伤害还是很大的。
我们主要通过采样与重定义权重方法来解决正负样本比例不均衡问题。采样主要有两种策略,第一种是有偏采样,即小样本量数据全部采样,大样本量数据抽样采样;第二种策略为分层采样,这种采样方法不是根据样本直接采样,而是根据特征来采样,采样的原则是使样本尽量覆盖特征空间,即在一个特征维度中使取值尽量多样化。还有另一种思路是Re-weighting,通过修改损失函数来突出小样本数据对模型的贡献,原理是当小样本数据被误分时,在损失函数中的惩罚更大。
用数学公式来解释,当我们发现训练样本中正样本很少负样本很多时,定义Alpha为大于1的实数,当正样本被分错时给它的惩罚更大,以此来减少将正样本误分到负样本的概率。
通过分层采样方法与Re-weighting方法,分类模型的AUC在不同场景中都有所提高。