使用机器学习中的决策树,logistics,SVM以及随机森林4种方式处理客户丢失的问题(实际为分类问题)
本文介绍使用机器学习中的四种用以处理分类问题的模型来解决手机卡用户丢失情况进行分析,目的在于达到预知某些客户的丢失概率,对丢失概率大的客户进行保留决策。
文章从决策树为主线随后实现其他三种模型,并象征性对比各模型预测‘结果’,该结果不具有严谨性和决策性仅作为模型结果对比的直观性指标。
一、读取数据
数据源为cvs格式数据,使用pandas套件可以很容易的读取数据内容,代码如下:
import pandas
# 读取csv数据,并指定第0列为索引,第0行为栏位
df = pandas.read_csv('customer_churn.csv', index_col=0, header = 0)
# 打印前几行数据
print(df.head())
# 打印栏位
print(df.columns)
运行结果如下:
- state 州信息
- account_length 账户长度
- area_code 地域代码
- international_plan 是否有国际计划
- ...略
二、数据清理
从上面的栏位信息中可知前三个栏位对于客户流失问题的影响可忽略不计,既可以从数据中删除state,account_length和area_code,另外international_plan等三个栏位中的yes和no可以替换为1和0,以便于计算。代码如下:
# 提取从第4列开始到最后一列的所有行的数据并附给新变量
df = df.iloc[:,3:]
# 打印前几行数据
print(df.head())
# 使用循环加匿名函数的方式,简单的将yes和no替换为1和0,df.get_dummies()的方式只不过该方式较为繁琐
cat_var = ['international_plan','voice_mail_plan', 'churn']
for var in cat_var:
df[var] = df[var].map(lambda e: 1 if e == 'yes' else 0)
# 打印前几行数据
print(df.head())
运行结果如下:
往往很多时候数据清理会占用数据分析中5成以上的时间和经历,因为机器学习的准确度很依赖于数据的完美度和相关度,同时一些影响低的变量我们可以选择性的舍去,这里也有各种公式去决定该变量对整体的影响度,例如Entory(熵乱度)公式:
三、使用机器学习建立分类模型
- 3.1使用决策树建立分类模型
- 3.1.1 模型建立
代码如下:
from sklearn import tree
# 将预测值(因变量)和影响参数列(自变量)分离开来。
y = df.iloc[:,-1]
X = df.iloc[:,:-1]
# max_depth指树的深度,一般来说深度越大准确度越高
clf1 = tree.DecisionTreeClassifier(max_depth=3)
# 将整理好的数据喂进去
clf1.fit(X, y)
运行结果如下:
- 3.1.2 模型可视化
代码如下:
# 将决策树输出为.dot文件,进而通过在命令行上使用dot tree.dot -Tpng -o tree.png 输出为.png图片,使用dot命令需安装graphviz软件,linux下直接apt-get install graphviz即可
tree.export_graphviz(clf0, out_file='tree.dot')
# 启用jupyter行内画
%pylab inline
from IPython.display import Image
Image('tree.png')
运行结果如下:
上图中X[n] n标识为第n个栏位例如X[3] 等价于 X.columns[3] 其值为 total_day_minutes,越上层表示对结果的影响越大,那么这里一整天的通话时间对客户的是否流失有很大的影响。
- 3.1.3 模型结果
代码如下:
import numpy
# '假性'成功预测的概率率
numpy.sum(y== clf1.predict(X)) / len(y)
运行结果如下:
- 3.2使用逻辑式回归建立分类模型
- 3.3使用SVM建立分类模型
- 3.4使用随机森林建立分类模型
555