基于 Spark ML 的用户流失预测:特征工程与逻辑回归模型调优实践

一、问题定义与数据准备

用户流失(Churn)预测是典型的二分类问题,目标函数为: $$ P(y=1|\mathbf{x}) = \frac{1}{1 + e^{-\mathbf{w}^T \mathbf{x}}} $$ 其中 $y=1$ 表示流失,$\mathbf{x}$ 为特征向量,$\mathbf{w}$ 为权重参数。

数据预处理步骤

  1. 缺失值处理:填充均值或中位数
  2. 异常值处理:IQR 过滤
  3. 时间窗口划分:定义观察期(特征提取)与表现期(标签生成)
二、特征工程实践

采用 Spark ML 的转换器构建特征流水线:

from pyspark.ml.feature import VectorAssembler, StringIndexer, OneHotEncoder, StandardScaler

# 类别特征处理
cat_indexer = StringIndexer(inputCol="subscription_type", outputCol="sub_index")
cat_encoder = OneHotEncoder(inputCol="sub_index", outputCol="sub_vec")

# 数值特征标准化
num_cols = ["usage_frequency", "session_duration", "payment_delay"]
num_assembler = VectorAssembler(inputCols=num_cols, outputCol="num_features")
scaler = StandardScaler(inputCol="num_features", outputCol="scaled_features")

# 特征组合
final_assembler = VectorAssembler(
    inputCols=["sub_vec", "scaled_features", "complaint_count"],
    outputCol="features"
)

关键特征类型

  1. 行为特征:登录频率 $f_{login} = \frac{\sum I_{login}}{T}$
  2. 消费特征:ARPU 值 $arpu = \frac{\sum payment}{active_days}$
  3. 时序特征:滑动窗口统计量 $\mu_{7d} = \frac{1}{7}\sum_{t-6}^t x_t$
  4. 交叉特征:投诉率 $\times$ 支付延迟
三、逻辑回归模型调优

Spark ML 的 LogisticRegression 支持 L1/L2 正则化: $$ \min_\mathbf{w} \frac{1}{n} \sum_{i=1}^n \log(1 + e^{-y_i \mathbf{w}^T \mathbf{x}_i}) + \lambda |\mathbf{w}|_p $$

调优策略

from pyspark.ml.tuning import ParamGridBuilder, CrossValidator

param_grid = (ParamGridBuilder()
  .addGrid(lr.regParam, [0.01, 0.1, 1.0])  # 正则化强度 $\lambda$
  .addGrid(lr.elasticNetParam, [0, 0.5, 1])  # L1/L2混合比 $\alpha$
  .addGrid(lr.maxIter, [50, 100])
  .build())

evaluator = BinaryClassificationEvaluator(metricName="areaUnderROC")
cv = CrossValidator(estimator=lr, estimatorParamMaps=param_grid, evaluator=evaluator)

关键超参数影响

参数优化方向数学表达
regParam控制模型复杂度$\lambda \uparrow \Rightarrow |\mathbf{w}| \downarrow$
elasticNetParam特征选择能力$\alpha=1$ (Lasso) 产生稀疏解
threshold调整分类阈值优化 $F_\beta = (1+\beta^2) \frac{precision \cdot recall}{\beta^2 \cdot precision + recall}$
四、模型评估与部署

评估指标矩阵

混淆矩阵:
          预测流失    预测留存
实际流失    TP         FN
实际留存    FP         TN

核心指标

  • AUC: 0.82
  • 召回率:$recall = \frac{TP}{TP+FN} = 0.75$
  • 精确率:$precision = \frac{TP}{TP+FP} = 0.68$

部署方案

  1. 使用 PipelineModel 保存特征工程+模型流水线
  2. 定期增量训练更新模型
  3. 监控特征漂移:计算 PSI $= \sum (new_dist - base_dist) \ln\frac{new_dist}{base_dist}$

实践建议:优先提升特征质量,组合 RFM 模型(Recency, Frequency, Monetary)与行为序列特征,正则化参数建议从 $\lambda=0.1$ 开始网格搜索。

更多推荐