项目描述:客户流失是所有与消费者挂钩行业都会关注的点。因为发展一个新客户是需要一定成本的,一旦客户流失,除了浪费拉新成本,还需要花费更多的用户召回成本。 所以,电信行业在竞争日益激烈当下,如何挽留更多用户成为一项关键业务指标。为了更好运营用户,这就要求要了解流失用户的特征,分析流失原因,确定挽留目标用户并制定有效方案。
数据集:本案例所使用数据集来自Kaggle平台,数据集一共提供了7043条用户样本,每条数据包含21个属性,由多维度的客户信息和流失与否的标签组成。
分析方法:
根据现有数据,对数据进行拆分,从基本信息,服务信息,签约信息,三个方面进行用户画像分析
数据总共有21个列标签,除了最后一列Churn表示客户的流失标签外,其他20列数据可以分为三类特征:客户的基本信息,开通的服务信息,签订的合约信息。
各个数据标签的解释:
标签名称 | 字段解释 | 特征类型 |
---|---|---|
customerID | 用户ID | 基本信息 |
gender | 性别(male 男/female 女) | 基本信息 |
SeniorCitizen | 老年人 | 基本信息 |
Partner | 婚姻情况(yes/no) | 基本信息 |
Dependents | 是否经济独立(yes/no) | 基本信息 |
tenure | 入网时间 | 基本信息 |
PhoneService | 是否开通电话服务(yes/no) | 服务信息 |
MultipleLines | 是否开通多线业务(yes/no) | 服务信息 |
InternetService | 是否开通网络服务(yes/no) | 服务信息 |
OnlineSecurity | 是否开通网络安全服务(yes/no) | 服务信息 |
OnlineBackup | 是否开通在线备份服务(yes/no) | 服务信息 |
DeviceProtection | 是否开通设备保护业务(yes/no) | 服务信息 |
TechSupport | 是否开通技术支持服务(yes/no) | 服务信息 |
StreamingTV | 是否开通网络电视业务(yes/no) | 服务信息 |
StreamingMovies | 是否开通在线电影业务(yes/no) | 服务信息 |
Contract | 签订合同的方式(月,一年,两年) | 签约信息 |
PaperlessBilling | 是否开通电子账单(yes/no) | 签约信息 |
PaymentMethod | 付款方式(Bank transfer/Credit card/Electronic check/Mailed check) | 签约信息 |
MonthlyCharges | 每月的费用 | 签约信息 |
TotalCharges | 总费用 | 签约信息 |
Churn | 用户是否流失(yes/no) | 流失标签 |
TotalCharges有11个缺失值,对于缺失值的处理一般分为删除和填充缺失值两种方式,
进一步查看缺失值的详细情况,然后确定如何处理缺失值
缺失的为TotalCharges(总费用),而MonthlyCharges(月费用)并没有缺失,而且都是流失的客户群体,根据情况分析,这些缺失值对应的用户应该在交完当月的费用后就流失了,因此,可以采用MonthlyCharges(月费用)来填充TotalCharges(总费用)的缺失值
#性别
plt.figure(figsize=(14,10))
plt.subplot(2,2,1)
gender = sns.countplot(x='gender',hue='Churn',data=data,palette='hls')
plt.xlabel('性别',size=20)
#SeniorCitizen 老年人对流失率的影响
plt.subplot(2,2,2)
SeniorCitizen = sns.countplot(x='SeniorCitizen',hue='Churn',data=data,palette='hls')
plt.xlabel('老年人(0为年轻人,1为老年人)',size=20)
#婚姻
plt.subplot(2,2,3)
SeniorCitizen = sns.countplot(x='Partner',hue='Churn',data=data,palette='hls')
plt.xlabel('婚姻',size=20)
#非经济独立
plt.subplot(2,2,4)
SeniorCitizen = sns.countplot(x='Dependents',hue='Churn',data=data,palette='hls')
plt.xlabel('非经济独立(No为独立,Yes为未独立)',size=20)
由上图可知:
性别对客户流失情况基本没有影响,
年龄对客户流失情况有影响,老年人的流失率要远高于年轻人的流失率,
婚姻情况对客户的流失有影响,未婚客户的流失率要高于已婚的客户,
经济能力对客户流失有影响,经济为独立的客户流失率要高于以独立的客户
#入网时间的流失比例
tenure = data[['tenure','Churn']]
#把Churn(是,否),替换为数值(1,0)方面计算比率
tenure['Churn'] = tenure['Churn'].map({'Yes':1,'No':0})
tenure = tenure.groupby('tenure').sum()/tenure.groupby('tenure').count()
tenure = tenure.reset_index()
#画图
plt.figure(figsize=(14,6))
plt.plot(tenure['tenure'],tenure['Churn'],c='g')
plt.title('入网时间的流失情况',size=18,color='black')
plt.show()
由上图可知:除了入网时间为0的刚入网客户,流失率是随着入网时间成下降趋势的
服务属性对客户流失的影响
column = ['OnlineSecurity', 'OnlineBackup', 'DeviceProtection', 'TechSupport', 'StreamingTV', 'StreamingMovies']
for i in column:
plt.figure(figsize=(15,5))
plt.subplot(1,3,1)
plt.pie(data[data[i]=='Yes']['Churn'].value_counts(),
labels=['No','Yes'],
explode=(0.08,0),
autopct='%0.2f%%',
shadow=True,
textprops={'fontsize':15,'color':'w'})
plt.title('{} = Yes'.format(i),c='w',size='15')
plt.subplot(1,3,2)
plt.pie(data[data[i]=='No']['Churn'].value_counts(),
labels=['No','Yes'],
explode=(0.08,0),
autopct='%0.2f%%',
shadow=True,
textprops={'fontsize':15,'color':'w'})
plt.title('{} = No'.format(i),c='w',size='15')
plt.subplot(1,3,3)
plt.pie(data[data[i]=='No internet service']['Churn'].value_counts(),
labels=['No','Yes'],
explode=(0.08,0),
autopct='%0.2f%%',
shadow=True,
textprops={'fontsize':15,'color':'w'})
plt.title('{} = No internet service'.format(i),c='w',size='15')
plt.show()
(此处省略部分图片)
由上图可以推测出:
PhoneService 电话业务
# PhoneService 电话业务
plt.figure(figsize=(14,7))
plt.subplot(1,2,1)
plt.pie(data[data['PhoneService']=='Yes']['Churn'].value_counts(),
labels=['No','Yes'],
explode=(0.08,0),
autopct='%0.2f%%',
shadow=True,
textprops={'fontsize':20,'color':'w'})
plt.subplot(1,2,2)
plt.pie(data[data['PhoneService']=='No']['Churn'].value_counts(),
labels=['No','Yes'],
explode=(0.08,0),
autopct='%0.2f%%',
shadow=True,
textprops={'fontsize':20,'color':'w'})
plt.show()
plt.figure(figsize=(15,5))
plt.subplot(1,3,1)
plt.pie(data[data['MultipleLines']=='Yes']['Churn'].value_counts(),
labels=['No','Yes'],
explode=(0.08,0),
autopct='%0.2f%%',
shadow=True,
textprops={'fontsize':15,'color':'w'})
plt.title('MultipleLines = Yes',c='w',size=20)
plt.subplot(1,3,2)
plt.pie(data[data['MultipleLines']=='No']['Churn'].value_counts(),
labels=['No','Yes'],
explode=(0.08,0),
autopct='%0.2f%%',
shadow=True,
textprops={'fontsize':15,'color':'w'})
plt.title('MultipleLines = No',c='w',size=20)
plt.subplot(1,3,3)
plt.pie(data[data['MultipleLines']=='No phone service']['Churn'].value_counts(),
labels=['No','Yes'],
explode=(0.08,0),
autopct='%0.2f%%',
shadow=True,
textprops={'fontsize':15,'color':'w'})
plt.title('MultipleLines = No phone service',c='w',size=20)
plt.show()
由上面的图可推断出:
PhoneService ,MultipleLines 对客户流失情况影响都很小。
plt.figure(figsize=(15,5))
plt.subplot(1,3,1)
plt.pie(data[data['InternetService']=='Fiber optic']['Churn'].value_counts(),
labels=['No','Yes'],
explode=(0.08,0),
autopct='%0.2f%%',
shadow=True,
textprops={'fontsize':15,'color':'w'})
plt.title('InternetService = Fiber optic',c='w',size='15')
plt.subplot(1,3,2)
plt.pie(data[data['InternetService']=='DSL']['Churn'].value_counts(),
labels=['No','Yes'],
explode=(0.08,0),
autopct='%0.2f%%',
shadow=True,
textprops={'fontsize':15,'color':'w'})
plt.title('InternetService = DSL',c='w',size='15')
plt.subplot(1,3,3)
plt.pie(data[data['InternetService']=='No']['Churn'].value_counts(),
labels=['No','Yes'],
explode=(0.08,0),
autopct='%0.2f%%',
shadow=True,
textprops={'fontsize':15,'color':'w'})
plt.title('InternetService = No',c='w',size='15')
plt.show()
(图略)
由图可知:
InternetService = Fiber optic的用户数量最多,但流失率也最高41.89%,InternetService = DSL 流失率为18.96%,InternetService = No 的流失率为7.4%。
相比较开通DSL能更好的降低流失率
签订的合约信息对用户流失的影响
#签订合同方式 与 客户流失率的 影响
plt.figure(figsize=(10,8))
sns.barplot(x='Contract',y='Churn',data=data,palette='pastel',)
plt.title('Contract',size=15)
# 付款方式对客户流失率的影响
plt.figure(figsize=(10,8))
sns.barplot(x='PaymentMethod',y='Churn',data=data,palette='Set2')
plt.title('PaymentMethod',size=15)
由图可知:在四中支付方式中,使用Electronic check的用户流失率最高
#PaperlessBilling
PaperlessBilling = data[['PaperlessBilling','Churn']]
PaperlessBilling['Churn'] = PaperlessBilling['Churn'].map({'Yes':1,'No':0})
plt.figure(figsize=(10,8))
sns.barplot(x='PaperlessBilling',y='Churn',data=PaperlessBilling,palette='pastel',)
plt.title('PaperlessBilling',size=15)
由上图可知:使用PaperlessBilling的客户流失率较高,因为使用PaperlessBilling的客户大多数为月付费用户,所以推测可能是按月付费对用户的流失影响比较大
费用对流失情况的影响
#TotalCharges 总费用
plt.figure(figsize=(16,4))
plt.subplot(1,2,1)
plt.hist(data[data.Churn=='Yes']['TotalCharges'],bins=500)
plt.title('Churn = Yes')
plt.subplot(1,2,2)
plt.hist(data[data.Churn=='No']['TotalCharges'],bins=500)
plt.title('Churn = No')
plt.show()
# MonthlyCharges 月费用
plt.figure(figsize=(16,4))
plt.subplot(1,2,1)
plt.hist(data[data.Churn=='Yes']['MonthlyCharges'],bins=500)
plt.title('Churn = Yes')
plt.xticks(range(0,130,10))
plt.subplot(1,2,2)
plt.hist(data[data.Churn=='No']['MonthlyCharges'],bins=500)
plt.title('Churn = No')
plt.xticks(range(0,130,10))
plt.show()
通过对费用的分析可知:
总费用:客户的流失趋势是随着付费的总费用越多而流失率越低,客户就越稳定。
月付费:每月的费用越高客户的流失率就越高,主要集中在每月费用70-105之间流失率较高
用户画像
通过以上的分析,可以发现容易流失的客户的用户画像为:
建议: