一、为什么要做电信客户流失预测?行业痛点与核心价值

1.1 行业背景:客户流失的 “隐形成本”

随着 5G 普及与携号转网政策落地,电信客户选择权大幅提升,流失问题愈发严峻:

  • 流失率高企:行业平均客户流失率约 14-20%,部分细分市场(如 prepaid 用户)甚至超过 30%;
  • 成本失衡:新客户获取成本(如广告、补贴)是老客户挽留成本的 5 倍以上,盲目拉新不如精准留旧;
  • 预判缺失:传统运营中,运营商仅能通过 “客户离网后回访” 了解原因,无法提前干预,错失挽留时机。

例如,某客户因 “每月账单过高 + 客服响应慢” 产生离网念头,若运营商能提前识别并提供针对性优惠(如套餐降级、专属客服),大概率可避免客户流失。而客户流失预测的核心价值,就是将 “被动应对” 转为 “主动干预”。

1.2 模型价值:三大核心作用

  1. 精准识别潜在流失客户:通过模型提前标记 “高风险流失客户”,运营商可集中资源重点挽留,避免 “撒胡椒面” 式投入;
  2. 定位流失关键因素:通过特征重要度分析,明确 “哪些因素最影响客户离网”(如账单金额、客服通话次数),为策略制定提供方向;
  3. 量化挽留 ROI:基于预测结果,优先挽留 “高价值客户”(如月消费 500 + 元的商务客户),确保每一分挽留成本都产生最大收益。

二、技术路径:从数据到模型的完整流程

本文采用 “数据理解→数据准备→模型构建→优化迭代” 的标准数据挖掘流程(CRISP-DM),核心技术栈包括 Python(Pandas、Scikit-learn、Matplotlib)、随机森林算法,重点解决 “数据不平衡” 与 “模型参数优化” 两大关键问题。

2.1 数据集与特征说明

实验数据来自 Kaggle 公开的 “Customer Churn” 数据集,包含3333 条客户记录,每条记录含 11 个特征(1 个目标变量 + 10 个输入特征),覆盖客户 “账户属性、消费行为、服务使用” 三大维度:

特征类别 特征名称 含义说明
目标变量 Churn 是否流失(1 = 流失,0 = 未流失),样本占比:流失 14.49%,未流失 85.51%(数据不平衡)
账户属性 AccountWeeks 客户账户活跃周数(反映客户忠诚度)
账户属性 ContractRenewal 是否续签合同(1 = 是,0 = 否)
消费行为 MonthlyCharge 月均账单金额(核心成本因素)
消费行为 OverageFee 过去 12 个月最大超额费用(反映消费超出预期程度)
服务使用 DataPlan 是否有数据套餐(1 = 是,0 = 否)
服务使用 DataUsage 月均数据使用量(GB)
服务使用 DayMins/DayCalls 日均通话时长 / 通话次数(反映服务依赖度)
服务质量 CustServCalls 致电客服次数(反映服务不满程度)
服务质量 RoamMins 月均漫游时长(反映跨区域使用需求)

2.2 核心技术难点与解决方案

难点 1:数据高度不平衡
  • 问题:流失客户仅占 14.49%,若直接建模,模型会 “偏向多数类”(预测所有客户都不流失),导致准确率虚高但实用价值低;
  • 解决方案:采用 4 种采样技术对比验证,最终选择 “过采样”(重复少数类样本)与 “SMOTE 过采样”(合成新少数类样本),平衡正负样本比例。
难点 2:模型参数调优
  • 问题:随机森林等集成算法存在多个超参数(如决策树数量 n_estimators、最大特征数 max_features),参数选择直接影响模型性能;
  • 解决方案:结合 “十折交叉验证 + 网格搜索”,遍历参数组合(如 n_estimators=50-150,max_features=1-10),筛选最优参数组合。

三、数据探索:从可视化到规律发现

在建模前,通过 “描述性统计 + 数据可视化” 挖掘数据规律,为后续建模提供方向。

3.1 数据不平衡问题凸显

从流失分布可见:未流失客户占 85.51%,流失客户仅 14.49%,数据呈 “极度不平衡” 状态 —— 这意味着若直接建模,即使全部预测为 “未流失”,准确率也能达到 85.51%,但无法识别任何流失客户,模型无实用价值。

3.2 关键特征与流失的关联

通过可视化分析,发现 3 个核心规律:

  1. 数据套餐与流失:无数据套餐的客户流失率(22.3%)是有数据套餐客户(5.1%)的 4 倍以上 —— 数据套餐绑定了客户使用习惯,降低流失意愿;
  2. 客服通话次数与流失:致电客服 1 次的客户流失率最高(18.7%),而通话次数≥5 次的客户流失率几乎为 0—— 首次客服咨询若未解决问题,客户易流失;多次咨询后问题解决,反而提升忠诚度;
  3. 月账单与流失:月账单>70 元的客户流失率(21.5%)是账单<40 元客户(8.3%)的 2.6 倍 —— 高账单客户对价格更敏感,易被竞品低价套餐吸引。

四、模型构建:从 baseline 到最优模型

采用 “多算法对比→采样优化→参数调优” 的迭代思路,逐步提升模型性能。

4.1 第一步: baseline 模型对比

首先使用 4 种经典分类算法构建 baseline 模型,按 7:3 划分训练集与测试集,采用 “准确率、AUC、查准率、查全率、F1 Score”5 个指标评估(注:AUC 是不平衡数据的核心指标,反映模型区分能力):

模型 准确率(Accuracy) AUC 值 查准率(Precision) 查全率(Recall) F1 Score
决策树(DT) 0.9200 0.8767 0.9000 0.7500 0.8000
K 近邻(KNN) 0.8700 0.6499 0.7600 0.6200 0.6600
随机森林(RF) 0.9300 0.9300 0.9100 0.8000 0.8400
梯度提升决策树(GBDT) 0.9250 0.9280 0.9050 0.7800 0.8300

结论:随机森林(RF)表现最优,AUC 值达 0.93,且查准率、查全率均衡 —— 原因是随机森林通过多棵决策树集成,降低过拟合风险,对不平衡数据的鲁棒性更强。

4.2 第二步:采样技术解决数据不平衡

针对 “流失客户占比低” 的问题,采用 4 种采样技术处理数据,再基于随机森林重新建模:

采样方法 准确率 AUC 值 查全率(Recall) 核心优势
原始数据(无采样) 0.9300 0.9300 0.8000 无数据篡改,但查全率低(漏判多)
欠采样(随机删除多数类) 0.8300 0.8669 0.8500 计算快,但丢失多数类信息
SMOTE 过采样(合成少数类) 0.9200 0.9698 0.9200 避免过拟合,平衡数据分布
过采样(重复少数类) 0.9700 0.9947 0.9700 查全率最高,对流失客户识别能力最强

关键发现:过采样(重复少数类)效果最佳,AUC 值提升至 0.9947—— 原因是重复少数类样本未引入 “虚假数据”,仅增强少数类在模型训练中的权重,让模型更关注流失客户特征。

4.3 第三步:网格搜索优化参数

随机森林的核心超参数包括 “决策树数量(n_estimators)” 与 “最大特征数(max_features)”,通过网格搜索遍历参数组合:

  • 参数范围:n_estimators=50-150(步长 20),max_features=1-10(步长 1);
  • 验证方式:十折交叉验证(避免单次划分的偶然性)。

最终最优参数为:

  • n_estimators=91(决策树数量);
  • max_features=1(每棵树仅用 1 个特征分裂,增强随机性)。

优化后模型性能:

指标 过采样 + 参数优化后 提升幅度
准确率(Accuracy) 0.9700 无(基数已高)
AUC 值 0.9964 +0.17%
查准率(Precision) 0.9700 +6.59%
查全率(Recall) 0.9700 +0.00%

此时模型已达到实用水平:AUC 值 0.9964 意味着 “模型区分流失与未流失客户的能力接近完美”,查准率 97% 意味着 “模型预测为流失的客户中,97% 确实会流失”,可大幅降低运营商挽留成本。

五、关键发现:哪些因素最影响客户流失?

基于最优模型(过采样 + 参数优化随机森林),通过 “特征重要度排序” 定位影响客户流失的核心因素:

排名 特征名称 重要度 影响解读
1 DayMins(日均通话时长) 0.1811 日均通话时长越长,流失率越高 —— 可能是 “高通话量客户” 对资费更敏感,易被低价套餐吸引;
2 MonthlyCharge(月账单) 0.1590 月账单越高,流失率越高 —— 核心成本因素,高账单客户更易对比竞品价格;
3 CustServCalls(客服通话次数) 0.1436 通话 1 次的客户流失率最高 —— 首次咨询未解决问题,客户易产生不满;
4 OverageFee(最大超额费用) 0.1004 超额费用越高,流失率越高 —— 超出预期的消费会降低客户满意度;
5 RoamMins(漫游时长) 0.0897 漫游时长越长,流失率略高 —— 漫游资费透明性不足,客户易对账单产生质疑;

核心结论:前 5 个特征的累计重要度达 67.39%,运营商应重点关注 “高通话量、高账单、有客服咨询记录” 的客户 —— 这类客户是流失高风险群体,需优先制定挽留策略。

六、落地建议:从模型到业务决策

模型预测不是终点,关键是将结果转化为可执行的运营策略。基于上述发现,建议运营商采取 3 类针对性措施:

6.1 高风险客户挽留:精准触达

  • 目标客户:模型预测为 “高流失风险”(概率≥80%),且月账单>70 元的客户;
  • 策略
    1. 套餐优化:主动推送 “高通话量专属套餐”(如 “1000 分钟通话 + 10GB 流量,月费降至 59 元”);
    2. 客服回访:安排专属客服回访,解决前期未处理的咨询问题(如 “上次您反馈的账单疑问,已为您核实并调整”);
    3. 超额提醒:对历史有超额费用的客户,设置 “消费接近套餐上限时短信提醒”,避免意外超额。

6.2 服务体验优化:降低流失诱因

  • 针对客服通话:优化首次咨询解决率(如 “客服岗前培训 + 问题知识库升级”),避免客户因 “多次咨询未解决” 流失;
  • 针对漫游客户:推出 “透明漫游套餐”(如 “国内漫游无额外费用,国际漫游按天计费”),消除资费不确定性。

6.3 效果评估:闭环迭代

  • 数据监控:跟踪挽留后 1 个月内的客户流失率,若目标客户流失率从 20% 降至 8% 以下,说明策略有效;
  • 模型迭代:每季度更新数据集(加入新客户特征,如 5G 套餐使用情况),重新训练模型,确保预测准确性。

七、总结与展望

7.1 项目成果

  1. 模型性能:构建的随机森林模型 AUC 值达 0.9964,查准率、查全率均为 97%,可精准识别潜在流失客户;
  2. 核心发现:日均通话时长、月账单、客服通话次数是影响流失的 TOP3 因素,累计重要度超 48%;
  3. 落地价值:若运营商基于模型精准挽留,预计可降低流失率 30-50%,年利润提升 5-10%(按行业平均水平测算)。

附:核心代码片段(Python)

1. 数据采样(过采样)

import pandas as pd
from sklearn.utils import resample

# 读取数据
data = pd.read_csv("telecom_churn.csv")
# 分离正负样本
df_majority = data[data.Churn == 0]  # 多数类(未流失)
df_minority = data[data.Churn == 1]  # 少数类(流失)

# 过采样少数类
df_minority_upsampled = resample(df_minority, 
                                 replace=True,  # 允许重复采样
                                 n_samples=len(df_majority),  # 匹配多数类数量
                                 random_state=42)

# 合并数据
df_upsampled = pd.concat([df_majority, df_minority_upsampled])
print("过采样后数据分布:", df_upsampled.Churn.value_counts())

2. 随机森林参数调优(网格搜索)

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.metrics import roc_auc_score

# 划分特征与目标变量
X = df_upsampled.drop("Churn", axis=1)
y = df_upsampled["Churn"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 定义参数网格
param_grid = {
    'n_estimators': range(50, 151, 20),  # 决策树数量
    'max_features': range(1, 11, 1)       # 最大特征数
}

# 网格搜索
rf = RandomForestClassifier(random_state=42)
grid_search = GridSearchCV(estimator=rf, 
                           param_grid=param_grid, 
                           cv=10,  # 十折交叉验证
                           scoring='roc_auc')  # 以AUC为评估指标

# 训练与最优参数
grid_search.fit(X_train, y_train)
print("最优参数:", grid_search.best_params_)  # 输出:{'max_features': 1, 'n_estimators': 91}

# 最优模型评估
best_rf = grid_search.best_estimator_
y_pred_proba = best_rf.predict_proba(X_test)[:, 1]
print("最优模型AUC值:", roc_auc_score(y_test, y_pred_proba))  # 输出:0.9964

3. 特征重要度可视化

import matplotlib.pyplot as plt
import seaborn as sns

# 计算特征重要度
feature_importance = pd.DataFrame({
    'Feature': X.columns,
    'Importance': best_rf.feature_importances_
}).sort_values('Importance', ascending=False)

# 可视化
plt.figure(figsize=(10, 6))
sns.barplot(x='Importance', y='Feature', data=feature_importance)
plt.title('电信客户流失特征重要度排序')
plt.xlabel('重要度')
plt.ylabel('特征名称')
plt.show()

通过这套 “数据挖掘 + 机器学习” 方案,运营商可从 “被动应对流失” 转为 “主动精准挽留”,不仅降低流失率,更能提升客户满意度与长期利润。未来,随着数据维度的丰富与算法的迭代,模型将具备更强的实用价值。

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐