目录
1.项目背景
激烈的市场竞争下,客户一旦发生流失,就很难在成功挽回,特别是现在的人口红利已经见顶,获取一个新客户的成本远高于维系一个老客户,而老客户的流失意味着收益的流失和市场占有率的下降,对于企业的生存发展来说是个危险的信号。然而客户的流失,是无法避免的,但是我们可以通过有效的手段来减少客户的流失,提高客户的留存率。
目的:
通过数据分析找出customerID影响客户流失的因素,并提出针对性的决策建议,为电信运营商提出优化业务决策,减少客户流失的决策建议。
思路:
首先通过合理的纬度拆解方法对用户数据进行拆解,利用数据探索和可视化等方法研究对各个维度的字段与客户流失的相关性,找出影响客户流失的因素;筛选出这些数据进行特征工程的处理,建立决策树模型对特征重要性进行排序,结合以上分析结果,从业务角度为电信公司增强客户留存率、减少客户流失提出具体的决策建议。
2.数据探索(EDA)
2.1数据集信息
部分字段含义解释
customerID:顾客ID
gender: 性别
SeniorCitizen: 是否为老人
Partner:是否有伴侣
Dependents:是否有孩子
tenure:上网时长(月)
PhoneService:是否有电话服务
MultipleLines:是否使用
InternetService:是否使用网络服务
Contract:合同期限
PaperlessBilling:是否开通电子支付
PaymentMethod:账单类型
MonthlyCharges:月消费
TotalCharges:总消费
Churn:流失情况
总共有21个字段。
接下来通过info()了解数据类型,查看数据类型是否合理,以及nan值的情况。
通过数据类型检查发现,TotalCharges总消费的数据类型应该为float,而不是object,需要修改。
user_info['TotalCharges'] = user_info['TotalCharges'].replace(' ', np.nan, regex=True)
user_info['TotalCharges'] = pd.to_numeric(user_info['TotalCharges'])
修改完毕。
接着通过describe 查看数据集的统计量,主要了解数据的大概范围以及每个特征的异常值判断。
用户最高上网市场是72个月,最高月消费118.75,最高总消费是8684.8。这里没有发现什么异常值。下一步看看看异常值和缺失值的情况。
2.2 异常值分析
通过上一步,我们并没有发现异常值,但并不代表没有,为了进一步确认,我们使用箱型图查看tenure、MonthlyCharges、TotalCharges是否存在异常。
可以看到tenure、MonthlyCharges、TotalCharges并不存在异常值。
2.3 缺失值分析
查看缺失值情况:
TotalCharges存在11条缺失值,量比较小,这选择直接删除
user_info.dropna(inplace=True)
print(user_info.isnull().sum())
已经成功删除。
查看数据纬度
一共有7032行。
查看流失情况
查看流失率
流失率为1869/7032=26.5%,这个流失率很夸张了,但是电信行业的流失率多少算正常没有找到准确的资料。
3.数据预览
我们把用户数据根据人-货-场三个纬度进行拆分:
3.1 人
3.1.1 用户属性
3.1.1.1 性别
sns.countplot(x='gender',hue='Churn',data=user_info)
plt.xlabel('性别')
plt.ylabel('数量')
plt.title('性别与客户流失情况图')
plt.show()
可以看到男性与女性用户的人数基本一致,流失率也基本相同,故判断性别不会影响客户的流失。
3.1.1.2 是否老年人
sns.countplot(x='SeniorCitizen',hue='Churn',data=user_info,order=[0,1],hue_order=['Yes','No'])
plt.xlabel('是否为老年人')
plt.ylabel('数量')
plt.title('是否为老年人与流失情况图')
plt.show()