基于 Spark ML 的用户 churn 预测:特征工程与逻辑回归模型调优实践
·
基于 Spark ML 的用户流失预测:特征工程与逻辑回归模型调优实践
一、问题定义与数据准备
用户流失(Churn)预测是典型的二分类问题,目标函数为: $$ P(y=1|\mathbf{x}) = \frac{1}{1 + e^{-\mathbf{w}^T \mathbf{x}}} $$ 其中 $y=1$ 表示流失,$\mathbf{x}$ 为特征向量,$\mathbf{w}$ 为权重参数。
数据预处理步骤:
- 缺失值处理:填充均值或中位数
- 异常值处理:IQR 过滤
- 时间窗口划分:定义观察期(特征提取)与表现期(标签生成)
二、特征工程实践
采用 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"
)
关键特征类型:
- 行为特征:登录频率 $f_{login} = \frac{\sum I_{login}}{T}$
- 消费特征:ARPU 值 $arpu = \frac{\sum payment}{active_days}$
- 时序特征:滑动窗口统计量 $\mu_{7d} = \frac{1}{7}\sum_{t-6}^t x_t$
- 交叉特征:投诉率 $\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$
部署方案:
- 使用 PipelineModel 保存特征工程+模型流水线
- 定期增量训练更新模型
- 监控特征漂移:计算 PSI $= \sum (new_dist - base_dist) \ln\frac{new_dist}{base_dist}$
实践建议:优先提升特征质量,组合 RFM 模型(Recency, Frequency, Monetary)与行为序列特征,正则化参数建议从 $\lambda=0.1$ 开始网格搜索。
更多推荐
所有评论(0)