用户召回建模和模型评测

这是一批电话卡用户的使用数据,包括不同时段的通话时长和是否流失的字段。

数据清洗

先导入数据清洗需要用到的包,读入数据并且观察一下数据大概情况。

数据类型为Int、float等的一些字段为通话时长的特征。还有一些为yes\no的离散分类特征,之后要对这些字符串类型的特征进行处理。Churn?字段为是否流失,true为流失。

首先要去除空值和无用特征。(无用特征中包括了结果字段)

因为数据集没有空值,所以跳过dropna()步骤。

于是得到了cleaned_churn。将特征值筛选出来。特征值的字段原来是字符串类型,‘True.’

和‘False’。所以用np.where将等于true.的替换为1,反之为0。(也可使用pd.Dataframe.replace函数)

将数据归一化,导入StandardScaler包。但Sklearn包只能处理数组形式,所以先将特征转换为ndarray格式,然后用进行归一化。

得到了清洗过后的特征,cleaned_churn。

建立模型

这里使用sklearn中的交叉验证的KFold和cross_val_predict,并且使用4种模型来评测每个模型的精度。

先定义两个函数和导入4个机器学习的模型支持向量机svm、随机森林、逻辑回归和k近邻模型。

第一个函数是建模函数,放入训练集x、测试集y和模型,进行交叉验证,并且得到了预测的结果,二分类的y_pred。

第二个函数是对精度进行计算,np.mean()来求得测试集和验证集相等占总数据的比重,也就是数据精度。

接下来就是带入四个模型进行输出。

可见随机森林模型的精度最高。

但是,用户召回率的模型好坏并不能单纯靠精度来判别,譬如一个模型是所有未流失客户你都预测对了,但是流失客户没有预测对。另一个模型是所有流失客户你都预测对了,但是未流失你预测错了。哪个模型好呢?显而易见是第二个。所以需要引入其他的概念来界定模型的好坏。

模型评估

用户流失模型是用来检测用户是否流失,挽回可能流失的用户。所以这个模型的检测标准应该是在N个流失用户中,检测出了多少个。所以需要被检测出的流失用户占比更大。

recall=被检测出的流失用户/(被检测出的流失用户+未被检测出的流失用户)

recall和精度两个指标都很重要,有一个指标叫mAP,是一个综合衡量recall和精度的指标。

所以求让曲线中的积分值,也就是面积最大的mAP值。

现在求4个模型的recall值。

可以知道随机森林的recall值也是最好的。

结果样本的选择

每个样本流失的概率不同,可以选用predict_proba函数来求得样本流失的概率。

然后对样本流失概率最大的样本进行召回。

定义一个求样本流失概率的函数。

这里用上面求得的最好的随机森林模型。

在0.6这个概率的时候,55个样本最终有百分之87的样本都流失了。

所以最后对流失率为0.6以上的样本进行召回。可以对用户发送优惠政策,或者发送召回短信等等。

你可能感兴趣的:(用户召回建模和模型评测)