掘金 人工智能 04月27日 12:28
Day 5:实战!用Scikit-learn完成你的第一个分类模型
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本教程全面介绍了如何通过Python构建一个银行客户流失预测项目。内容涵盖数据探索、清洗、特征工程、模型训练与调参、模型解释以及部署准备。通过Kaggle数据集,逐步演示了缺失值处理、异常值检测、类别编码、数值标准化、模型比较、网格搜索调参、SHAP值可视化等关键步骤,并最终实现Pipeline封装与模型持久化,为读者提供了完整的项目实践经验。

📊 数据探索与清洗是项目的基础。首先,通过分析数据集的特征分布,识别并处理缺失值,例如使用中位数填充'TotalCharges'。同时,通过箱线图检测数值型字段的异常值,并使用IQR方法进行处理,确保数据的质量。

⚙️ 特征工程是提升模型性能的关键。教程展示了三大核心技术:类别变量编码,使用OneHotEncoder对'gender'和'Partner'等低基数类别变量进行编码;数值变量标准化,使用StandardScaler对'tenure'和'MonthlyCharges'进行标准化;以及特征组合,通过创建'AvgMonthlySpend'特征,增强模型的预测能力。

🚀 模型训练与调参是核心环节。教程比较了随机森林和XGBoost两种模型,通过交叉验证评估其性能。此外,还演示了使用GridSearchCV进行网格搜索调参,找到最佳模型参数,从而提升模型的预测精度。

💡 模型解释与业务应用提供了洞察。通过SHAP值可视化,可以识别出影响客户流失的关键特征,例如高月费客户更容易流失,签订长期合约的客户更稳定。这些洞察有助于业务决策。

📦 部署准备与自动化Pipeline是项目的最终目标。教程展示了如何创建完整的Pipeline,将数据预处理和模型训练封装在一起。同时,使用joblib进行模型持久化,方便后续部署和应用。

摘要

本教程将完整实现一个分类项目:

    数据探索:分析特征分布与缺失值特征工程:处理离散变量与数值标准化模型训练:比较随机森林/XGBoost性能模型解释:SHAP值可视化关键特征部署准备:生成Pipelines与模型持久化
    数据集:银行客户流失预测(Kaggle数据集

目录

    项目背景与数据理解数据清洗的五个关键步骤特征工程的三大武器模型训练与调参实战模型解释与业务应用部署准备与自动化Pipeline

1. 项目背景与数据理解

数据集概览

import pandas as pddf = pd.read_csv('telco_churn.csv')print(df.shape)  # (7043, 21)print(df.columns.tolist()[:5])  # ['customerID', 'gender', 'SeniorCitizen', 'Partner', 'Dependents']

关键字段说明

字段名类型说明
tenure数值客户在网月数
Contract类别合约类型(Month-to-month等)
TotalCharges数值总消费金额
Churn布尔是否流失(目标变量)

2. 数据清洗的五个关键步骤

(1)处理缺失值

# 检查缺失值print(df.isnull().sum())# 填充数值型缺失值df['TotalCharges'] = df['TotalCharges'].replace(' ', np.nan).astype(float)df['TotalCharges'].fillna(df['TotalCharges'].median(), inplace=True)

(2)处理异常值

# 检测数值字段异常值sns.boxplot(x=df['tenure'])plt.show()# 使用IQR方法处理Q1 = df['tenure'].quantile(0.25)Q3 = df['tenure'].quantile(0.75)IQR = Q3 - Q1df = df[~((df['tenure'] < (Q1 - 1.5*IQR)) | (df['tenure'] > (Q3 + 1.5*IQR)))]

3. 特征工程的三大武器

(1)类别变量编码

from sklearn.preprocessing import OneHotEncoder# 对低基数类别变量做One-Hotencoder = OneHotEncoder(sparse=False, handle_unknown='ignore')encoded_features = encoder.fit_transform(df[['gender', 'Partner']])

(2)数值变量标准化

from sklearn.preprocessing import StandardScalerscaler = StandardScaler()scaled_features = scaler.fit_transform(df[['tenure', 'MonthlyCharges']])

(3)特征组合

# 创建新特征:平均每月消费df['AvgMonthlySpend'] = df['TotalCharges'] / df['tenure']

4. 模型训练与调参实战

(1)基准模型比较

from sklearn.ensemble import RandomForestClassifierfrom xgboost import XGBClassifierfrom sklearn.model_selection import cross_val_scoremodels = {    "RandomForest": RandomForestClassifier(),    "XGBoost": XGBClassifier()}for name, model in models.items():    scores = cross_val_score(model, X_train, y_train, cv=5, scoring='f1')    print(f"{name}平均F1分数:{scores.mean():.3f}")

(2)网格搜索调参

from sklearn.model_selection import GridSearchCVparam_grid = {    'n_estimators': [100, 200],    'max_depth': [3, 5, None]}grid = GridSearchCV(RandomForestClassifier(), param_grid, cv=3)grid.fit(X_train, y_train)print("最佳参数:", grid.best_params_)

5. 模型解释与业务应用

SHAP值可视化

import shapexplainer = shap.TreeExplainer(grid.best_estimator_)shap_values = explainer.shap_values(X_test)shap.summary_plot(shap_values, X_test)

业务洞察


6. 部署准备与自动化Pipeline

创建完整Pipeline

from sklearn.pipeline import Pipelinefrom sklearn.compose import ColumnTransformerpreprocessor = ColumnTransformer(    transformers=[        ('num', StandardScaler(), ['tenure', 'MonthlyCharges']),        ('cat', OneHotEncoder(), ['gender', 'Partner'])    ])pipeline = Pipeline(steps=[    ('preprocessor', preprocessor),    ('classifier', XGBClassifier())])# 模型持久化import joblibjoblib.dump(pipeline, 'churn_model.pkl')

下一篇预告

Day 6:深度学习入门——神经网络基本原理
"抛开复杂公式!用Keras搭建你的第一个神经网络!"


关键检查清单

✅ 数据探索:缺失值/异常值/分布分析
✅ 特征工程:编码/缩放/特征创造
✅ 模型选择:多算法对比验证
✅ 模型解释:SHAP/LIME可解释性分析
✅ 部署准备:Pipeline封装与持久化

需要补充模型监控部分的实现吗?或者增加Flask部署的示例代码?

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

客户流失预测 数据分析 机器学习 特征工程 模型部署
相关文章