做Customer Churn预测时,我发现很多同学第一反应都是:模型是不是越复杂越好?Random Forest不够就XGBoost,XGBoost还不够就上Neural Network,再不行就Transformer。先别急着把模型“武装到牙齿”。遇到只有几千条记录的Retail E-commerce数据,真正影响结果的可能不是模型够不够高级,而是哪些Features值得留下。这项研究比较了9种Feature Selection方法以及多种Machine Learning、Deep Learning模型,最后一个很有意思的结果是:L1-based Logistic Regression负责挑Features,再让XGBoost负责分类,Macro F1达到95.25%。所以这篇案例我们不背模型名字,重点看看小样本Customer Churn到底应该怎么建模。

客户流失预测,真正难在哪里?
Customer Churn说白了,就是判断一个客户接下来会不会离开。
电商平台可以掌握登录设备、订单类别、满意度、投诉情况、优惠券使用、配送距离等数据。理论上数据不少,但问题是:字段多,不等于每个字段都有预测价值。
这项研究的数据集有5630条Customer Records,其中4682人为Non-churn,948人为Churn;一共有19个Features和1个Target。数据规模不算大,而且类别明显不平衡。
| 数据特点 | 研究情况 | 建模影响 |
|---|---|---|
| 样本量 | 5630 | 复杂模型容易过拟合 |
| Churn | 948 | 存在Class Imbalance |
| Non-churn | 4682 | Accuracy容易产生误导 |
| Independent Variables | 18 | 需要判断哪些真正有贡献 |
更麻烦的是,多数单独Feature与Churn之间的Mutual Information都低于0.13。也就是说,很难找到一个“看到它就知道客户肯定要走”的神奇变量。
但这并不意味着数据没用。一个Feature单独看关系弱,和其他Features组合以后却可能产生很强的预测能力。这也正是Feature Selection有意思的地方。
Feature Selection不是简单“删除几个Columns”
第一次做机器学习时,很容易把Feature Selection理解成:相关性低的删掉,相关性高的留下。
实际上没这么简单。
这项研究一口气比较了9种方法,因为不同方法观察Features的角度完全不同。
| 类别 | 方法 | 可以怎么理解 |
|---|---|---|
| Filter | Chi-square、MI、mRMR、ReliefF | 先从统计关系判断Feature价值 |
| Wrapper | RFECV、Boruta | 结合模型表现反复筛选 |
| Embedded | L1 Logistic Regression、RF-BS | 模型训练过程中完成筛选 |
| Model-agnostic | PFI-BS | 观察打乱Feature后模型掉多少性能 |
这里最值得记住的不是9个缩写,而是一句话:
没有一种Feature Selection方法天生适合所有模型。
这项研究最后也验证了这一点。有些Feature Selection + Classifier组合明显提升结果,有些反而下降。所以论文里千万别写一句“Feature Selection可以提高模型Accuracy”就结束,真正应该研究的是:什么Feature Selection和什么Classifier更匹配?
为什么最后是L1 + XGBoost赢了?
数据经过清洗、缺失值处理、Encoding和Scaling以后,单独使用XGBoost已经得到93.05%的Macro F1,说明模型本身并不差。
进一步加入Feature Selection后,表现最好的组合变成:
L1 Logistic Regression → Feature Selection → XGBoost
Macro F1 = 95.25%
L1 Regularization有一个很好理解的特点:它会把贡献很小的Features系数不断压缩,部分最终压到0,相当于自动把噪声变量请出会议室。
留下更干净的Feature Space以后,再让XGBoost去学习非线性关系和复杂Feature Interaction,两者就形成了一个挺自然的分工。
不过别看到95.25%就立刻宣布“L1 + XGBoost天下第一”。研究中MI + XGBoost与它只差约0.6个百分点,Boruta + XGBoost也非常接近。换一个Dataset,冠军完全可能换人。
哪些客户最容易出现Churn信号?
相比单纯讨论模型分数,我觉得这部分对Business Analytics学生反而更有意思。
多种Feature Selection方法反复选中的变量包括Tenure、Number of Address、Marital Status、Complaint、Warehouse to Home、Preferred Order Category。
| Feature | 可以怎样解释 |
|---|---|
| Tenure | 客户关系持续时间,可反映黏性与忠诚度 |
| Complaint | 投诉可能反映服务体验和不满 |
| Warehouse to Home | 配送距离可能关联Delivery效率和体验 |
| Preferred Order Category | 不同产品类别面临的竞争和转换成本不同 |
| Satisfaction Score | 满意度与Customer Loyalty存在直观业务联系 |
| Coupon Used | 可能帮助观察客户对促销和价格的敏感程度 |
但这里有个科研写作中特别容易犯的错误:Predictive Importance不等于Causality。
例如模型发现投诉客户更容易Churn,只能说明Complaint具有预测信息,不能仅凭这个模型就证明“投诉导致客户流失”。如果论文Discussion直接从Correlation跳到Causation,导师看到这里通常就要拿起红笔了。
这篇实验最值得学习的,其实是Data Leakage控制
机器学习论文有时候最可怕的不是模型跑不出来,而是模型跑得太好了。
研究先按照80%/20%划分Train和Test,再让需要估计参数的Preprocessing只在Training Set上拟合,然后应用到Test Set。Random Oversampling也只发生在Training Data中。
Feature Selection同样只在Training Set执行,而且发生在Oversampling之前,避免复制出来的样本影响Feature Importance判断。
Split Data → Fit Preprocessing on Train → Feature Selection on Train → Oversampling Train → Model Training → Unseen Test Evaluation
Hyperparameter Tuning使用5-fold Cross-validation时,Oversampling也只应用于每一个Fold的Training Portion,而没有碰Validation Portion。
这个细节比“用了多少种模型”重要得多。因为一旦Test信息提前进入Imputation、Scaling、Feature Selection或Oversampling,最后那个漂亮的95%可能只是Leakage制造出来的幻觉。
Accuracy很高,为什么研究偏偏看Macro F1?
因为948个Churn对4682个Non-churn,本身就不是平衡数据。
假设一个模型特别偏爱预测“不会流失”,Accuracy看起来可能还挺开心,可真正要找的Churn Customer却漏掉一大片。
Macro F1分别计算两个Class的F1,再给予相同权重,因此更适合观察模型有没有只讨好多数类。
| Metric | 主要回答什么问题 |
|---|---|
| Precision | 预测要流失的人里面,多少真的流失 |
| Recall | 真正会流失的人,有多少被找出来 |
| F1 | Precision与Recall的平衡 |
| Macro F1 | 让Churn与Non-churn两个Class获得同等重视 |
这也是写Machine Learning Results时很实用的一条经验:不要先选一个看起来数字最大的Metric,再给它找理由;应该根据Dataset和Business Problem决定Metric。
最后带走三个结论:
第一,Customer Churn不是把全部Features扔给一个最复杂的模型就结束,Feature Quality往往比Feature Quantity更重要。
第二,L1 + XGBoost在这个Dataset上取得95.25%的Macro F1,但这只能说明它适合当前数据,不能推导成所有Churn任务的通用最优解。
第三,一篇靠谱的Machine Learning研究,除了比较Performance,还应该交代Class Imbalance、Feature Selection、Cross-validation和Data Leakage控制。模型分数是结果,实验设计才是可信度的来源。
FAQ
Q:Customer Churn Prediction是什么?
利用客户历史行为、属性和交互数据,预测哪些客户未来更可能停止购买或停止使用服务,从而帮助企业提前制定Customer Retention策略。
Q:Feature Selection和Feature Engineering有什么区别?
Feature Selection主要从已有变量中选择更有价值的Features;Feature Engineering则可能通过已有数据构造新的变量。两者可以同时存在。
Q:为什么Customer Churn经常使用XGBoost?
XGBoost对结构化Tabular Data、非线性关系和Feature Interaction有较强建模能力,但是否最优仍需要通过实际Dataset比较。
Q:Deep Learning一定比Machine Learning好吗?
不一定。这项研究中最好的组合来自L1 Feature Selection与XGBoost。mRMR + MLP虽然表现不错,但仍略低于最好的XGBoost组合。
Q:Feature Selection一定能提高结果吗?
不能保证。研究发现不同Feature Selection与Classifier组合效果不同,部分组合甚至导致性能下降,因此必须通过Validation验证。
Q:为什么不能只看Accuracy?
在Churn与Non-churn数量明显不平衡的数据中,Accuracy可能掩盖少数类预测不佳的问题,因此Precision、Recall、F1以及Macro F1通常更值得同时观察。
本文结合公开发表的Retail E-commerce Customer Churn研究进行方法案例解析,研究数据用于说明Feature Selection、Class Imbalance与Machine Learning模型评价方法。