机器学习被广泛的应用于推荐、风控等场景。经典的机器学习建模数据是由特征列和单一目标列构成的,比如要做广告的CTR预测,其实模型关心的是一个广告曝光后是否会被点击,这是一个单一目标场景的建模过程。但是在实际应用场景中,往往有时候会出现“既要也要”的情况,比如推荐一个视频给客户,推荐引擎不光希望客户可以点击这个视频,更希望客户可以长时间光看,这就成了一个多目标建模的情况。
单目标建模在很多情况下是有局限的,以新闻推荐为例,如果只通过新闻是否点击来评估模型好坏,那么推送一些吸引眼球的没有内涵的新闻往往可以提升点击,比如推送《八旬老汉偷窥儿媳妇洗澡》,但是这种推荐是没有灵魂的。多目标推荐会更好的帮助模型去理解用户。比如在美拍视频中,需要考虑点击率、播放、关注、时长等四个因素。
那么多目标推荐要怎么做呢?目前在中文网站上很难找到相关文献,于是我去到国外的网站看了下Multi-label Classification相关的介绍,大体可以通过以下方法去做实现多目标建模。为了更好地说明,这里模拟一份数据:
用户 |
特征1 |
特征2 |
特征3 |
目标1 |
目标2 |
A |
32 |
523 |
234 |
0 |
1 |
B |
124 |
463 |
46 |
1 |
0 |
C |
42 |
352 |
64 |
1 |
1 |
方法一:将多目标问题转化成单目标问题
以上面的问题为例,假设目标1和目标2的正例都是“1”,则转化成单目标建模逻辑的时候可以把目标1和目标2都是“1”的情况标为“1”,其它情况标为“0”。案例数据变为下面的形式:
用户 |
特征1 |
特征2 |
特征3 |
目标 |
A |
32 |
523 |
234 |
0 |
B |
124 |
463 |
46 |
0 |
C |
42 |
352 |
64 |
1 |
这种方法比较暴力并且好实现,但是问题就是减少了很多数据间的信息。
方法二:将多目标问题转化成多分类问题
转化成多分类问题的好处是可以保留所有的信息,给业务系统更多选择。比如一个系统有两个推荐评估目标分别是点击和时长,但是某用户没有匹配到点击和时长都不错的内容。这时候转换成多分类问题的好处就体现出来了,在没有两个目标都符合的方案情况下,可以从其它符合的类别中选择一个推送给客户。
转化成多分类问题后,样例数据变为下面的形式:
用户 |
特征1 |
特征2 |
特征3 |
目标 |
A |
32 |
523 |
234 |
0 |
B |
124 |
463 |
46 |
1 |
C |
42 |
352 |
64 |
2 |
目标值为0对应原始目标1=“0”,目标2=“1”
目标值为1对应原始目标1=“1”,目标2=“0”
目标值2对应原始目标1=“1”,目标2=“1”
方法三:将多目标问题转化成多组模型的形式
多组模型的模式是最精确地模式,但是也是计算量最大的模式。比如样例数据有两个评估指标,可以分别对两个评估指标进行建模。
训练数据1:
用户 |
特征1 |
特征2 |
特征3 |
目标1 |
A |
32 |
523 |
234 |
0 |
B |
124 |
463 |
46 |
1 |
C |
42 |
352 |
64 |
1 |
训练数据2:
用户 |
特征1 |
特征2 |
特征3 |
目标2 |
A |
32 |
523 |
234 |
1 |
B |
124 |
463 |
46 |
0 |
C |
42 |
352 |
64 |
1 |
这样的话会分别针对目标1和目标2生成两个分类模型。实际预测的时候,每个样本需要调用两次模型分别拿到对应两个目标的分类结果,假如样本1对应的两份结果分别是“0.65”和”0.21”,把这两个结果组合起来就是最终的预测结果,是向量[0.65,0.21]。以此类推,计算所有样本的预测向量,再通过向量具体判断用户的意向。
总结
随着推荐系统的普及,多目标建模一定会变成业内普遍的需求,希望这篇文章可以给有需要的同学更多地帮助。
参考:https://en.wikipedia.org/wiki/Multi-label_classification