首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >数据分析实战:基于 Python 的电商客户流失预测与洞察

数据分析实战:基于 Python 的电商客户流失预测与洞察

原创
作者头像
IT大佬 jzit-top
发布2026-08-17 14:34:12
发布2026-08-17 14:34:12
170
举报

客户流失是电商运营的核心痛点。本文以一份模拟的电商用户数据集为例,完整走一遍数据分析实战流程:从数据清洗、探索性分析,到特征工程、逻辑回归建模,再到模型评估与业务洞察。全程使用 Python 生态工具,代码可复现。


1. 数据加载与初步探查

数据集包含 5000 条用户记录,字段包括:user_id, age, gender, signup_days(注册天数), avg_order_value, purchase_frequency(月均购买次数), complaint_count(投诉次数), last_purchase_days(距上次购买天数), is_churned(目标变量:1 表示已流失)。

代码语言:javascript
复制
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler, LabelEncoder
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, roc_auc_score, confusion_matrix

df = pd.read_csv('ecommerce_churn.csv')
print(df.info())
print(df.head())

运行结果显示无缺失值,数据类型合理。但 gender 为分类文本,需要后续编码。


2. 数据清洗与异常值处理

检查异常值:对数值列使用箱线图法,定义超出 Q1-1.5IQR 或 Q3+1.5IQR 的为异常。我们发现 avg_order_valuepurchase_frequency 存在少量极端值(可能为测试数据或录入错误)。

代码语言:javascript
复制
def cap_outliers(df, col):
    Q1 = df[col].quantile(0.25)
    Q3 = df[col].quantile(0.75)
    IQR = Q3 - Q1
    lower = Q1 - 1.5 * IQR
    upper = Q3 + 1.5 * IQR
    df[col] = df[col].clip(lower, upper)

for col in ['avg_order_value', 'purchase_frequency']:
    cap_outliers(df, col)

采用截尾法(Cap)而非删除,保留样本量。


3. 探索性数据分析(EDA)

对比流失与非流失客户在各指标上的分布差异:

代码语言:javascript
复制
fig, axes = plt.subplots(2, 3, figsize=(15, 10))
features = ['age', 'signup_days', 'avg_order_value', 'purchase_frequency', 'complaint_count', 'last_purchase_days']
for ax, col in zip(axes.flatten(), features):
    sns.boxplot(data=df, x='is_churned', y=col, ax=ax)
plt.tight_layout()
plt.show()

观察发现:

  • 流失用户的 last_purchase_days 明显更长(均值 > 60 天 vs 未流失 < 20 天),这是强预测信号。
  • 流失用户的 purchase_frequencyavg_order_value 显著较低。
  • complaint_count 在流失群体中略高,但差异不大。

进一步计算相关性矩阵:

代码语言:javascript
复制
plt.figure(figsize=(10, 8))
sns.heatmap(df.corr(), annot=True, cmap='coolwarm', fmt='.2f')
plt.title('Correlation Matrix')
plt.show()

last_purchase_days 与目标变量相关性高达 0.72,purchase_frequency 为 -0.58,说明低频、最近未购买是流失的主因。


4. 特征工程

  • gender 进行标签编码(Male→0, Female→1)。
  • 将数值特征标准化(逻辑回归对尺度敏感)。

代码语言:javascript
复制
le = LabelEncoder()
df['gender_enc'] = le.fit_transform(df['gender'])

X = df[['age', 'signup_days', 'avg_order_value', 'purchase_frequency', 
        'complaint_count', 'last_purchase_days', 'gender_enc']]
y = df['is_churned']

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

5. 逻辑回归建模与评估

划分训练集(80%)和测试集(20%),训练逻辑回归模型:

代码语言:javascript
复制
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
model = LogisticRegression(class_weight='balanced', random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
y_proba = model.predict_proba(X_test)[:, 1]

print(classification_report(y_test, y_pred))
print('AUC-ROC:', roc_auc_score(y_test, y_proba))

输出结果:

代码语言:javascript
复制
              precision    recall  f1-score   support
           0       0.91      0.88      0.89       612
           1       0.76      0.82      0.79       388
    accuracy                           0.86      1000
   macro avg       0.83      0.85      0.84      1000
AUC-ROC: 0.92

召回率(0.82)表明模型能识别出大部分流失客户,对运营干预有价值。


6. 特征重要性分析

逻辑回归系数绝对值反映特征影响方向与强度:

代码语言:javascript
复制
coef_df = pd.DataFrame({
    'feature': ['age', 'signup_days', 'avg_order_value', 'purchase_frequency', 
                'complaint_count', 'last_purchase_days', 'gender_enc'],
    'coef': model.coef_[0]
})
coef_df['importance'] = coef_df['coef'].abs()
coef_df.sort_values('importance', ascending=False, inplace=True)
print(coef_df)

结果:

  • last_purchase_days 系数最大(正相关,距上次购买越久越易流失)
  • purchase_frequency 次之(负相关,购买频繁越不易流失)
  • avg_order_valuecomplaint_count 影响较小

据此可制定策略:对超过 30 天未购买且月均购买少于 2 次的用户,发送定向优惠券或唤醒邮件。


7. 模型优化与业务落地建议

  • 可尝试 XGBoost 进一步提升 AUC,但逻辑回归的可解释性更受业务欢迎。
  • 结合 SHAP 值可向运营团队解释每个用户的流失风险因素。
  • 部署为实时评分服务:用户登录时计算风险分,动态触发挽留动作。

结语

本文完整演示了从原始数据到流失预测模型的全过程,涵盖了数据清洗、EDA、特征工程、建模评估和业务洞察。整个代码量约 80 行,却凝练了数据分析的核心思维——以业务问题为导向,用数据驱动决策。在实际工作中,你还可以加入 A/B 测试验证干预效果,形成“预测→行动→反馈”的闭环。希望这篇实战能够成为你数据分析路上的实用参考。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 客户流失是电商运营的核心痛点。本文以一份模拟的电商用户数据集为例,完整走一遍数据分析实战流程:从数据清洗、探索性分析,到特征工程、逻辑回归建模,再到模型评估与业务洞察。全程使用 Python 生态工具,代码可复现。
    • 1. 数据加载与初步探查
    • 2. 数据清洗与异常值处理
    • 3. 探索性数据分析(EDA)
    • 4. 特征工程
    • 5. 逻辑回归建模与评估
    • 6. 特征重要性分析
    • 7. 模型优化与业务落地建议
    • 结语
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档