Kirill2017银行客户流失预测模型

摘要:

合集:AI案例-ML-泛金融业
AI问题:分类问题
数据集:银行客户流失预测的示例数据集
数据集价值:预测客户是否流失
解决方案:决策树、随机森林、逻辑回归建模和预测。

一、问题描述

客户流失指的是客户(玩家、订阅者、用户等)停止与公司之间的关系。客户流失发生在客户或订阅者停止与公司或服务进行业务往来时,也称为客户流失。它也被称作客户或客户的损失。

客户流失预测模型是一个工具,定义了客户流失的步骤和阶段,或者客户离开您的服务或产品。但是通过不断演变的流失模型,您可以通过在指标发生时采取行动来争取保留客户。

二、数据集内容

在 Kirill Eremenko 和 Hadelin de Ponteves 的 Udemy 课程“Deep Learning AZ™:Hands-On Artificial Neural Networks”中,使用的 Churn_Modelling.csv 数据集是一个用于银行客户流失预测的示例数据集。是一个专门设计用于教学目的的模拟数据集。该数据集并非来自真实世界的银行客户数据,而是由课程作者团队或相关人员生成,用于教学演示。数据集最早随课程发布,课程的初次发布日期为 2017年。以下是该数据集的数据结构和一些关键信息:

  • 文件名:Churn_Modelling.csv
  • 数据类型:CSV(逗号分隔值)
  • 数据内容:包含银行客户的特征和标签,用于预测客户是否会流失(即是否关闭账户)。

数据列

以下是 Churn_Modelling.csv 数据集的主要列及其含义:

1. RowNumber:行号,唯一标识每一行数据。
2. CustomerId:客户ID,唯一标识每个客户。
3. Surname:客户的姓氏。
4. CreditScore:客户的信用评分。
5. Geography:客户的地理位置(国家)。
   - England
   - Scotland
   - Wales
   - Northern Ireland
6. Gender:客户的性别。
   - Male
   - Female
7. Age:客户的年龄。
8. Tenure:客户在银行的年限。
9. Balance:客户的账户余额。
10. NumOfProducts:客户使用的银行产品数量。
11. HasCrCard:客户是否拥有信用卡(1 表示有,0 表示没有)。
12. IsActiveMember:客户是否是活跃会员(1 表示是,0 表示否)。
13. EstimatedSalary:客户的估计年薪。
14. Exited:客户是否流失(1 表示流失,0 表示未流失)。

三、预测模型

安装

导入开发库和数据

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('./Churn_Modelling.csv')
data.head(4)
# splitting the dataset into x(independent variables) and y(dependent variables)

x = data.iloc[:,0:10]
y = data.iloc[:,10]

数据预处理

在使用该数据集进行客户流失学习模型训练之前,通常需要进行一些预处理步骤:

处理分类变量:Geography 和 Gender 是分类变量,需要将其转换为数值形式,例如使用独热编码(One-Hot Encoding)。

特征缩放:数值特征(如 CreditScore、Age、Tenure、Balance、NumOfProducts、HasCrCard、IsActiveMember、EstimatedSalary)可能需要进行标准化或归一化处理,以确保不同特征的尺度一致。

# Feature Scaling 
# Only on Independent Variable to convert them into values ranging from -1 to +1

from sklearn.preprocessing import StandardScaler

sc = StandardScaler()
x_train = sc.fit_transform(x_train)
x_test = sc.fit_transform(x_test)

x_train = pd.DataFrame(x_train)
x_train.head()

处理缺失值:检查数据集中是否有缺失值,并采取适当的方法进行处理(如填充均值、中位数或删除缺失值的行)。

数据分割:将数据集分割为训练集、验证集和测试集,以便进行模型的训练、调优和评估。

# splitting the data into training and testing set

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.25, random_state = 0)

print(x_train.shape)
print(y_train.shape)
print(x_test.shape)
print(y_test.shape)

决策树建模和预测

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import confusion_matrix

model = DecisionTreeClassifier() 
model.fit(x_train, y_train)

y_pred = model.predict(x_test)

print("Training Accuracy :", model.score(x_train, y_train))
print("Testing Accuaracy :", model.score(x_test, y_test))

cm = confusion_matrix(y_test, y_pred)
print(cm)

输出:

Training Accuracy : 1.0
Testing Accuaracy : 0.8012
[[1710  281]
 [ 216  293]]

随机森林建模和预测

from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier()
model.fit(x_train, y_train)

y_pred = model.predict(x_test)

print("Training Accuracy :", model.score(x_train, y_train))
print("Testing Accuracy :", model.score(x_test, y_test))

cm = confusion_matrix(y_test, y_pred)
print(cm)

输出:

Training Accuracy : 1.0
Testing Accuracy : 0.868
[[1918   73]
 [ 257  252]]

逻辑回归建模和预测

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()
model.fit(x_train, y_train)

y_pred = model.predict(x_test)

print("Training Accuracy :", model.score(x_train, y_train))
print("Testing Accuracy :", model.score(x_test, y_test))

cm = confusion_matrix(y_test, y_pred)
print(cm)

输出:

Training Accuracy : 0.8096
Testing Accuracy : 0.8092
[[1916   75]
 [ 402  107]]

多层感知建模和预测

MLPClassifier 是 scikit-learn 库中的一个类,用于实现多层感知器(Multi-layer Perceptron)的神经网络分类器。多层感知器是一种前馈人工神经网络,它包含至少一个隐藏层,并使用非线性激活函数。

from sklearn.neural_network import MLPClassifier

model = MLPClassifier(hidden_layer_sizes = (100, 100), activation ='relu', 
                      solver = 'adam', max_iter = 50)
model.fit(x_train, y_train)

y_pred = model.predict(x_test)

print("Training Accuracy :", model.score(x_train, y_train))
print("Testing Accuracy :", model.score(x_test, y_test))

cm = confusion_matrix(y_test, y_pred)
print(cm)

输出:

Training Accuracy : 0.8937333333333334
Testing Accuracy : 0.8592
[[1874  117]
 [ 235  274]]

四、获取案例套件

需要登录后才允许下载文件包。登录

发表评论