【机器学习】推荐算法正负样本选择方法调研总结

余生颓废 提交于 2019-11-28 01:28:59

1. 正负样本构造常规方法

       推荐算法更多是有监督的学习,一般情况下将有行为的用户作为正样本,但是不绝对,取决于目标是什么。因此需要首先充分了解需求,比如目标的群体是什么,事件或推荐的物品是什么,最终以什么样的形式落地,以及诉求的目标和期望的效果。

(1)正负样本的比例方面

       正样本是少数:比如活动的参与、游戏的点击等场景,这类情况正样本相比于负样本一般是极少的,所以需要在充分保留正样本基础上选择负样本。这类情况建议保留全部正样本,在按照1:X的比例选择负样本,X可根据数量适当决定,一般建议4、5比较合适。

       正样本是多数:比如流失预警,负样本是少数。则需要对正样本做抽样,再按照1:X的方式选择负样本。

(2)框定群体范围

       取什么样本?取的样本中对正负样本的条件需要是公平的。例如,如果是流失预警,那就需要取还在活跃的用户群体;如果是某个活动,那就需要取在这个活动中有曝光的用户群体。

       取多长周期?按照需求、频率、数据量确定。

(3)搭建特征

       样本好坏决定方向正不正,特征的好坏决定了效果大致高低水平。

       如果使用的是LR这类线性模型,想要刻画好非线性问题,就需要把特征做的足够复杂和准确,从而引入足够的非线性来弥补算法本身的局限,使其能够拟合复杂问题。

       如果对现在的业务与不够熟悉对数据不够敏感,可以使用一些非线性的算法(FM, GBDT, xgboost, NN),一定程度上可以减少人工提取组合特征的工作。

 

2. feed流场景下如何构造样本

       (feed流:可以理解为信息流,解决的是信息生产者与信息消费者之间的信息传递问题。常见的feed流场景有——手淘等提供给消费者的首页商品信息,用户关注店铺的新消息等;微信朋友圈及时获取朋友分享的信息;微博粉丝获取关注的明星信息;头条用户获取系统推荐的新闻、评论等)

(1)使用曝光日志时,应该选择埋点日志;而不是服务器Web接口返回的日志,因为Web接口返回的日志中的接种是会增加很多无效负样本

(2)为了避免高度活跃用户对loss的影响,在训练集中每个用户提取相同数量的训练样本;

(3)保留有行为的用户的负样本,其他的负样本(没有过对应的正样本),进行随机负采样(优于只保留有行为的用户的负样本);

(4)与上一个方式对立的,可以考虑去除只有曝光但没有点击操作的用户的样本,不过去除的话,模型就只能够学习到活跃用户或者有意向用户的行为习惯,这就导致线下数据与线上数据分布有偏差,所以需要根据线上的abtest测试效果来决定最终是否去除。

 

3. 解决样本不均衡问题具体方法:

(1)采样处理——过采样,欠采样;

(2)类别权重——通过正负样本的惩罚权重解决样本不均衡的问题。在算法实现过程中,对于分类中不同样本数量的类别分别赋予不同的权重;

(3)集成方法——

       使用所有分类中的小样本量,同时从分类中的大样本量中随机抽取数据来与小样本量合并构成训练集,这样反复多次会得到很多训练集,从而训练出多个模型。

       例如,在数据集中的正、负样本分别为100和10000条,比例为1:100,此时可以将负样本随机切分为100份,每份100条数据,然后每次形成训练集时使用所有的正样本(100条)和随机抽取的负样本(100条)形成新的训练数据集。如此反复可以得到100个模型。然后继续集成表决。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!