机器学习案例——客户流失预测

本文介绍了如何使用Python进行机器学习,针对客户流失预测问题,进行了数据预处理,包括分类变量的顺序编码和连续变量的标准化。选择了BalancedRandomForestClassifier来解决样本不均衡的问题,并通过调整n_estimators和max_depth参数,优化模型性能,最终得到高查准率和召回率的模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、项目简介

1) 数据说明:
本数据集来自和鲸社区,共有7043条数据,共计21个字段数据包含以下字段:
- customerID :客户
- id gender : 性别
- SeniorCitizen : 是否为老年人,取值为0和1,0为否,1为是
- Partner : 是否拥有伴侣
- Dependents : 是否有家属
- tenure : 入网时长(月)
- PhoneService : 是否订阅电话服务
- MultipleLines: 是否有多条线路(是,否,没有电话服务)
- InternetService : 网络服务提供商(DSL,光纤,否)
- OnlineSecurity : 在线服务安全性(是,否,无网络服务)
- OnlineBackup : 在线备份服务(是,否,无网络服务)
- DeviceProtection :设备保护(是,否,无网络服务)
- TechSupport : 技术支持(是,否,无网络服务)
- StreamingTV :流媒体电视(是,否,无网络服务)
- StreamingMovies :流媒体电影(是,否,无网络服务)
- Contract :合同期限(每月,一年,两年)
- PaperlessBilling :是否无纸化账单(是,否)
- PaymentMethod :支付方式(电子支票,邮寄支票,银行自动转账,信用卡自动支付) - MonthlyCharges :每月收取费用
- TotalCharges :总收取费用
- Churn :是否流失
2)需求:
根据现有信息选择合适模型建模预测客户是否流失。

2、特征处理及选择

2.1、初步探索清洗

导入库并加载数据

# 导入常用库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings 
warnings.filterwarnings('ignore')
# 加载数据
data=pd.read_csv('tel_data.csv')

查看数据基本信息

data.info()

在这里插入图片描述
数据没有缺失值。
查看数据是否有重复值

# 查看数据是否有重复值
data.duplicated().value_counts()

在这里插入图片描述

# 对数据做描述性统计,查看特征情况
data.describe([0.1,0.25,0.5,0.75,0.9]).T

在这里插入图片描述
分离目标变量和特征变量

# 分离特征变量和目标变量
x = data.iloc[:, :-1]
y = data.iloc[:, -1]

删除customerID

# 特征变量中的customerID 对目标变量没有影响,将其删去
x.drop(columns='customerID',inplace=True)

2.2、特征处理

1)处理分类变量

考虑后续建模采用树模型,对类别变量进行顺序编码。

from sklearn.preprocessing import OrdinalEncoder
# 取出类别变量列名
category_list = x.columns[x.dtypes=='object'].tolist()
# 进行顺序编码
x_cate_rfc = OrdinalEncoder().fit_transform(x.loc[:,category_list])

2)处理连续型变量

对连续型变量进行标准化

# 取出连续型变量的列
qualitative_list = x.columns.tolist()
for i in category_list:
    qualitative_list.remove(i)
ss = StandardScaler()
x_qualitative = ss.fit_transform(x.loc[:,qualitative_list])

3)处理目标变量

# 对标签进行编码
from sklearn.preprocessing import LabelEncoder
L_en = LabelEncoder()
L_en.fit(y)
y = pd
### 构建客户流失预测模型 #### 数据准备 对于构建客户流失预测模型而言,数据集的质量至关重要。在给定的数据集中包含了诸如客户所使用的电信种类、年龄、服务开始时间、联系历史以及平均账单金额等特征[^2]。这些变量能够帮助理解哪些因素可能影响客户的忠诚度。 #### 特征工程 为了提高模型性能,在正式训练之前通常会对原始数据进行预处理和转换操作。这一步骤涉及缺失值填补、异常检测与清理、类别编码等工作。此外,还可以创建新的衍生特征来捕捉更多有用的信息,比如计算每位顾客的服务年限或最近一次交互的时间间隔。 #### 模型选择 针对二分类问题(即区分是否会流失),可以考虑多种算法: - **逻辑回归**:作为一种简单而有效的线性方法,适合用来作为基线比较对象。通过拟合Sigmoid函数将输入映射到概率空间内,并据此做出最终判定[^3]。 ```python from sklearn.linear_model import LogisticRegression lr = LogisticRegression() lr.fit(X_train, y_train) ``` - **决策树** 和 **随机森林**:前者基于一系列if-else语句形成分层结构;后者则是由多个弱学习器组合而成的强大工具。它们不仅易于解释而且具备较强的泛化能力,尤其适用于存在较多噪声的情况[^5]。 ```python from sklearn.ensemble import RandomForestClassifier rf = RandomForestClassifier(n_estimators=167, max_depth=None) # 参数调整后的配置 rf.fit(X_train, y_train) ``` #### 性能评估 完成上述步骤之后便进入了验证环节。常用指标有准确率(Accuracy)、精确度(Precision)、召回率(Recall),还有综合考量两者平衡性的F1分数(F1 Score)。另外,ROC曲线下面积(AUC-ROC)也是衡量分类效果好坏的重要标准之一。 ```python from sklearn.metrics import roc_auc_score y_pred_prob = model.predict_proba(X_test)[:, 1] print(f"AUC Value: {roc_auc_score(y_test, y_pred_prob)}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Z_PEIJIN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值