经典机器学习 – 如何做到预流失与流失挽回?

导语:预流失用户,即有流失倾向,但还没有开始真正流失的用户。相较于流失用户而言,预流失用户处于观望阶段,或许对现有产品有所顾虑,或许对于潜在的流向(竞品)有所顾虑,或许是在等待些什么;流失用户,即已经流失了的用户,或许是因为游戏弃坑,或许选择了其他产品,用户肯定还在玩些什么,只是不再来你这儿了。文章介绍了如何通过经典的机器学习(Machine Learning, ML)方法来寻找那些流失可能性比较高的用户、寻找那些回流意愿比较大的用户。运营同学针对这些用户就可以重点干预,降低预流失用户比例,拉高用户的回流比例。
来源:腾讯技术工程微信号

背景

在日常游戏运营中,我们常常需要提高目标用户的留存率、提高流失用户的回流率、精准运营、节约运营资源。基于以上的述求,我们将经典机器学习实践于预流失和流失挽回两个场景。        

模型整体设计流程图如下:

预流失与流失挽回概述

1. 预流失

预流失用户,即有流失倾向,但还没有开始真正流失的用户。相较于流失用户而言,预流失用户处于观望阶段,或许对现有产品有所顾虑,或许对于潜在的流向(竞品)有所顾虑,或许是在等待些什么。

2. 流失挽回

流失用户,即已经流失了的用户,或许是因为游戏弃坑,或许选择了其他产品,用户肯定还在玩些什么,只是不再来你这儿了。

获得训练数据

1. 基础数据

基础数据是最基础也是最重要的第一步,需要我们去寻找、清洗各种原始数据,原始数据包括用户的登录数据、充值数据和用户数据几个模块。

模型训练自然是数据越多越好的。

2. 给用户打标签

预流失,判断用户是否会流失,如果上上周活跃,上周不活跃则是流失用户,label=1;反之上周活跃,则label=0。我们可以以周为单位,读取过去四周、八周或者更多的原始数据。

在流失挽回场景,label的判断逻辑正好相反,如下图所示

准备训练测试数据

1. 训练测试数据划分

根据自己的数据集大小合理的划分出三种数据,验证集在训练的时候用于模型调参,测试集在最后的最后模型所有参数设定后用于验证模型效果。

2. 正负样本均衡

如果实际数据中正负样本的比例严重不均衡,则有必要处理一下。处理办法是有放回的随机采样,code 示例如下:

# 正负样本均衡

(左滑可查看完整代码,下同)

特征工程

1. 特征选取

这里只简单的截取了一些常用到的特征,大家可以根据自己的场景增加各种简单特征、组合特征。日期特征需要注意一下,不同的游戏上线时间不一样、日期格式的数据也不方便运算,比如20181231,20190101,20190102其实都只差一天,但是数值上却差了很大,这里我们直接将日期转换成距今天天数,日期数据数值化,很方便后续的计算处理。        

2. 特征处理

2.1 缺失值填充

在预流失场景中,我们针对登录数据、充值数据做了填0处理,针对日期时间数据做填最大值处理。

2.2 zscore标准化

不同特征的取值范围对模型训练的影响不言而喻,我们有必要对许多特征做一次标准化,比如登陆次数、充值金额等等。

2.3 onehot处理

对于枚举类型的特征,最常用的编码就是OneHot,比如性别。

训练模型

1. 模型选择**

预测流失Score和回流Score有许许多多的模型可以选择,本文以LR为例,早点介绍如何在生产过程中实践经典机器学习算法。LR详细介绍参考以下两个链接

Logistic regression Docs[](https://spark.apache.org/docs…

pyspark.ml.classification.LogisticRegression APIs[](https://spark.apache.org/docs…

2. 模型调参

使用验证集数据对模型进行调参,以下是LR的可配置参数

aggregationDepth: suggested depth for treeAggregate (>= 2). (default: 2)

其中常用的参数如最大迭代次数maxIter=1000、正则项regParam=0.03,阈值threshold=0.6

离线模型评估

1. 评估指标

离线评估的指标有AUC、准确率、召回率、F1值

AUC的介绍可以查看博客AUC,ROC我看到的最透彻的讲解,AUC用来衡量一个模型的性能。准确率指的是预测为正样本中有多少是预测对了,召回率指的是有多少正样本被预测出来了。F1值是权衡准确率和召回率的一个数值。准确率、召回率、F1值随阈值的改变而改变,根据产品的实际场景合理的选择阈值。

实现demo,提供三种计算AUC的办法

'''模型评估'''

2. 学习曲线

通过分析学习曲线,可以诊断高偏差、高方差问题

高偏差,欠拟合,随着训练样本数量增加,最后测试集、验证集的误差都停在高位,彼此很接近。

尝试解决办法:获得更多的特征、增加多项式特征、减少正则化程度λ。

高方差,过拟合,测试集和验证集的误差逐渐接近,但还是有一定的距离,随着样本数的增加误差正在逐渐趋于稳定。

尝试解决办法:更多的训练样本、减少特征的数量、增加正则化程度λ。

预测数据*

1. 获得预测数据

预流失场景中预测数据为本周活跃的用户,预测其是否会在下一周流失;流失场景中预测数据为本周流失用户,预测其是否会在下周回流。

2. 预测数据分组

首先,将预测数据分成模型预测、随机两组,模型预测组用模型预测Score值,随机预测组用rand的方法输出Score值,再比较Score值与阈值的大小来判断当前样本为正或者负;

然后,将预测后的数据分成2*2组,一个是线上干预组,另一组是线上不干预的对照组,用于对比线上干预的效果。

3. 上线效果分析

如上图所示,效果分析分为模型效果和干预效果两个维度

3.1 模型效果

分析模型效果时我们需要控制变量,排除干预、不干预的影响。预期模型预测的准确率普遍要好于随机预测的准确率。

同干预的情况下,对比A组和C组的准确率;同不干预的情况下,对比B组和D组的准确率

3.2 干预效果

同样需要排除不同策略预测的影响,预期干预组的留存率或者回流率要普遍好于对照组的留存率或回流率。

同模型预测情况下,对比A组和B组的留存率;同随机预测模型情况下,对比C组和D组的留存率

小结

将全流程串起来,给出如下demo

from pyspark.sql import SparkSession

推荐阅读:

  • 机器学习模型可解释性的详尽介绍
  • 打破两项世界纪录,腾讯优图开源视频动作检测算法DBG
  • 如何从零到一地开始机器学习?

更多腾讯AI相关技术干货,请关注专栏腾讯技术工程

发表评论

邮箱地址不会被公开。 必填项已用*标注