基于机器学习算法的流失用户分析预测
简介
这是一个关于机器学习算法的项目,使用了python的pandas模块和机器学习库sklearn,建立流失预测模型,分析用户的历史数据和当前数据,提取辅助决策的关键性数据,发现隐藏关系和模式,并借助机器学习算法识别哪些用户可能流失。
操作步骤
-
数据准备:包括数据抽样、提取整合和数据清洗。
-
特征选择:采用根据特征对应频率直方图人工选择、使用决策树模型进行特征重要程度排序的两种方式,对数据进行降维。
-
模型训练、预测及评价:将划分好的数据集带入支持向量机模型、朴素贝叶斯模型、决策树模型进行预测,进行预测结果对比和评价。预测结果准确率较高。
具体实现
- 数据特征
数据抽样
对数据进行分层抽样原因有以下两条:
- 原始数据量较大,有90w条数据,如果对于原数据进行整合处理,处理时长太长,所以选择随机抽样,使用一部份数据代表原数据,降低处理时长。
- 由于原始数据流失与非流失用户的比例有严重差距,导致待处理数据集中流失用户与非流失用户的数量差别很大,使用不放回抽样会导致模型的误判率较高,所以选择分层抽样保证抽样后数据中流失用户和非流失用户所占比重相当,从而减低误判率。 抽样的过程为:获取原数据中所有的用户ID和其第三个月对应的流失标签,根据流失标签进行分层对用户ID进行抽样,再根据抽样的ID从原数据中选择。这样可以保证抽样后数据中流失用户和非流失用户所占比重相当,并且每个用户的三条数据都可以被整体抽出。
数据提取整合
在原始的建模数据中,每个用户有三行的数据,对应着同一个ID三个月的信息。这种数据格式不便于进行建模和分析。因此,本文对数据进行提取和整合,将每个用户信息处理为一行数据。具体的处理方式如下:
- 移动客户基本信息:由于同一个用户的基本信息在三个月内是相同的。因此,用户ID、性别、星座、年龄以及终端硬件类型只取1月的数据。
- 在网时长:由于每个月的在网时长等于上个月的在网时长加一(为零的除外),故第三个月的在网时长的数据就包含了这三个月在网时长的全部信息。因此,每个ID只提取第三个月的数据。
- 是否合约有效:将这三个月的合约有效的情况规整为一个数据,处理如下:当三个月不全为1时,用第三个月的值减去前两个的均值;当三个月的值都是为1时,取值为1.5。所有取值情况为-1、-0.5、0、0.5、1、1.5。
- 合约计划到期时间:取第三个月的数据作为合约计划到期时长,将空值赋值为-1,不是空值的到期时间以201603为基准0,每增加一个月,数据为1,例如日期为201607,那么该月份的到期时间为4,以此类推。
- 信用等级:取3个月的平均值。
- VIP等级:将空值赋值为0 ,同一个ID值,三个月的数值相等,则取第三个月的数值;三个月的数值都不相等,则第三个月的数据减去前两个月的均值。这样的处理可以突出用户在第三个月的变化情况。
- 本月费用:取三个月的平均值。
- 平均每次通话时长:将各种通话时长除以通话次数,得到各类的平均通话时长。
- 其余的变量处理方式相同:同一个ID下,取三个月的平均值。
数据清洗
- 重复值处理
对重复值直接进行删除。 - 缺失值处理
用python对新数据集进行缺失值查找,缺失值集中在用户的基本信息——星座、年龄和性别上。对缺失的数据进行赋值,性别缺失的赋值为3,年龄缺失的赋值为0,星座缺失的赋值为0。 - 异常值处理
对新数据集进行异常值的查找,查找出在网时长小于0的数据,费用大于4万元的数据。这些异常数据有很大的可能是因为人为录入时出现失误,直接利用异常数据建模会导致模型结果与实际情况出现严重的偏差。
分部进行特征选择
- 原始数据中有一大部分数据是数字,还有一小部分是字符串,同时进行特征选择操作复杂,故将这两部分分开进行特征选择。
- 数据为字符串的一部分包含特征列:用户ID、星座、手机品牌名称、手机型号名称、操作系统描述、终端硬件类型,对于这部分画出直方图根据图来判断这个特征对结果的影响程度,选择影响大的特征。
- 其余部份特征列数据均为数字,选择决策树中的随机森林模型对特征的重要程度进行排序,选择出重要程度高的特征。
- 第一部分数据特征选择
可以看出直方图中不同操作系统中流失用户与非流失用户所占比重有都较大差别,故可以得出终端硬件对用户流失与否有较大影响。
流失用户群体与非流失用户群体各个星座占所在群体的比例相当,因此星座的特征在流失用户群体以 及非流失用户群体不明显,认为星座与用户是否流失无重要关系。
- 第二部分数据特征选择
对于第二部分全是数字的数据,使用决策树中的随机森林模型来确定每个特征列的重要程度,并且以降序排列,以此画出特征重要程度,选择累计重要程度达到90%以上的特征。
数据降维
- 特征选择之后就可以进行数据的降维了,数据降维可以简化数据、去除噪声、避免过拟合并且可以减少计算量,加快预测速度。
- 根据前面两部分的特征选择,选择前数字特征列的前20个特征以及操作系统和终端硬件类型。
哑变量处理
- 数据降维之后,要把数据中的一些值为字符串的特征列进行哑变量处理,目的是将分类变量转换为数值变量,以便在之后的模型中使用。
- 在哑变量处理中,每个类别被转换为一个新的二进制特征。如果原始变量有n个不同的类别,则哑变量处理将创建n个新的二进制特征。对于每个样本,只有一个二进制特征会被设置为1,代表该样本属于对应的类别,其他特征都被设置为0。
数据集划分
在预处理完后的数据集中,随机抽取80%的数据作为训练集,20%的建模数据集作为测试集。为了消除各特征之间量纲和取值范围的差异,还需要对数据进行标准化处理。
模型训练、预测及评价
- 将划分好的数据集放入模型中训练,模型选择支持向量机模型、朴素贝叶斯模型以及决策树模型。
- 模型训练、预测之后利用模型评价函数评价三个模型,并且画出折线图。
模型评价折线图
从折线图可以看出,决策树模型对于用户是否流失的预测无论是准确率还是精确率都是很高的,F1指标和AUC值也是最高,他们都是1,这说明对于这个问题来说决策树模型综合性能最好,其次是支持向量机模型,最次是朴素贝叶斯模型。
总结
本README.md介绍了通信运营商客户流失分析与预测案例,其主要内容如下:
- 分析需求部分介绍了通信运营商的现状、分析需求、数据的基本状况和分析的步骤与流程;
- 数据准备部分对原始数据进行了抽样、整合、去重,并对数据中的缺失值和异常值进行了处理。数据清洗后的数据按照用户ID分组将3个月的记录合并为1条;
- 特征工程部分对数据的主要特征进行了提取,减少了数据维度,降低了数据复杂性;
- 客户流失预测部分首先划分了数据集,使用数据集训练三个有监督的机器学习模型--支持向量机模型、朴素贝叶斯模型和决策树模型,并且使用模型预测了测试数据集。
- 从三个模型预测结果以及模型评价来看,决策树模型对于运营商流失客户的预测十分精准,优先推荐使用决策树模型来对客户进行预测,其次是支持向量机模型。