银行用户流失分析与预测

一、项目背景与目的

数据来源于Kaggle某项目:Bank Customer Churn | Kaggle

本数据集包括10000条匿名跨国银行的客户数据。数据分析的目的是预测客户流失的概率,然后通过预测模型的建立,相应地去提高用户的活跃度,实现挽留客户,降低挽留关怀工作的成本。

二、明确问题

项目关键问题是用户流失,在数据集中有一个Exited字段是我们需要预测的目标变量,Exited=1代表客户流失,Exited=0代表客户未流失,明显这是个监督学习的分类预测问题。构建模型要达到的目的是在精确度尽可能高的情况下,召回率也要尽可能高。

三、数据理解

在下面图中可以清晰看到各特征值和其含义

其中CreditScore、Geography、Gender、Age、Tenure、Balance等指标对客户流失有一定影响。

四、EDA-数据探索性分析

数据总览

import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings("ignore")
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']= ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']= False #用来正常显示负号
import seaborn as sn
%matplotlib inline
pd.options.display.max_rows = None
pd.options.display.max_columns = None

df=pd.read_csv('C:/Users/koo/Desktop/archive/Customer_Churn.csv')
df.info()

我们可以看到有10000条样本数据,18个特征并无缺失值,4个类别变量,数据还比较干净。其中也存在无关特征,我们需要删除,以保证后面更好的训练模型。

剔除无关特征

#统计目标变量Exited列
df['Exited'].value_counts()
# 去掉RowNumber、CustomerId和Surname列
df = df.drop(["RowNumber", "CustomerId", "Surname"], axis = 1)
# 再一次检查数据
df.head()

上面的数据中,有些问题显露:

1. 数据并没有日期,没有对Banlance(余额)字段说明清楚;以及有些客户流失,余额也存在。

2. 其中IsActiveMember指的是客户是否活跃,我们只知道他/她是否活跃,这个变量的意义不明确,有没有信用卡对用户流失与否影响也不大。

数据有18个变量,其中RowNumber、CustomerId和Surname是无意义的变量,我们把这些变量  移除以便更好的分析数据。其中目标变量统计如下:

0    7962
1    2038
Name: Exited, dtype: int64

目标变量分析

目标变量占比:

labels = '流失', '维持'# 定义标签
sizes = [df.Exited[df['Exited']==1].count(), df.Exited[df['Exited']==0].count()]# 每一块的比例
colors = ['red', 'gold']
explode = (0.1, 0)# 突出显示
f, ax1 = plt.subplots(figsize=(7, 4))
ax1.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%',
        shadow=True, startangle=90)
ax1.axis('equal')# 显示为圆(避免比例压缩为椭圆)
plt.title("客户流失占比", size = 15)
plt.show()

扇形图中,流失的客户占比是20.4%,未流失的客户占比是79.6%。

目标变量与其他变量的关系:

f, axar = plt.subplots(2, 2, figsize=(20, 12))
sn.countplot(x=df['Geography'], hue =df['Exited'], ax=axar[0][0])
sn.countplot(x=df['Gender'], hue =df['Exited'],palette="Set1", ax=axar[0][1])
sn.countplot(x=df['HasCrCard'], hue =df['Exited'],palette="Set2", ax=axar[1][0])
sn.countplot(x=df['IsActiveMember'], hue 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值