10.1 逻辑回归:从分数到决策
第 9 章预测的是连续配送时长。本章仍保留全部安全护栏:特征必须在决策时刻已经存在,预处理只在训练折内拟合,候选模型只使用开发数据选择,最终测试集保持封存。变化的是目标:现在要预测订单能否在派单后 45 分钟内完成。令 late=1 表示延迟正类,on_time=0 表示准时负类,这就是二元分类(binary classification)。
预测契约不能只写“判断是否延迟”。我们要在派单时估计 ,再由运营团队根据调度成本选择行动阈值。概率估计与行动彼此相关,却不是同一件事。
把线性分数转换成概率
逻辑回归(logistic regression)先把特征组合成线性分数:
分数范围是 到 ,还不能直接叫概率。模型会让它通过 Sigmoid 函数:
时,;正分数对应 0.5 以上,负分数对应 0.5 以下。曲线在 0 和 1 附近逐渐变平,所以相同的一单位分数变化,在中间区域造成的概率变化最大。
反向理解也很重要。胜算(odds)是 ,对数胜算(log-odds,也叫 logit)与特征保持线性:
其他特征不变时, 增加一单位会让胜算乘以 。这只是条件预测关联,不是因果效应。缩放会改变系数所代表的单位,相关特征也会像回归中一样重新分配权重。
第一个实验把这个转换过程画出来。移动 、 和 ,追踪一个点怎样从线性分数落到 Sigmoid 曲线上;再移动橙色阈值,观察概率保持不变而行动发生改变。
模型通过最小化对数损失(log loss,也叫二元交叉熵)学习系数。单个样本的损失为:
自信且正确的概率损失很小,自信但错误的概率损失会非常大。因此,即使两个模型在阈值 0.5 下产生完全相同的硬分类,概率质量仍可能相差很大。还要与 DummyClassifier(strategy="prior") 比较:它只预测训练折中的类别比例,用来检验特征是否真正增加信息。
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
classifier = Pipeline([
("preprocess", preprocess),
("model", LogisticRegression(max_iter=1000)),
])
classifier.fit(X_train, y_train)
classes = classifier.named_steps["model"].classes_
positive_column = list(classes).index(1)
validation_probability = classifier.predict_proba(X_valid)[:, positive_column]通过 classes_ 定位概率列,可以把正类契约写得清清楚楚。盲目假设第二列永远是业务所关心的事件,是一种脆弱做法。
LogisticRegression 默认带正则化。参数 C 是正则化强度的倒数:C 越小,收缩越强。把数值缩放放进 Pipeline,能让惩罚作用在可比坐标上。C 必须和其他模型选择一样在开发折上调优,不能让最终测试集参与选择。
读懂决策边界,不把它误当概率
概率只有经过阈值 才会变成硬预测:
采用常见的 时,两个特征的边界是:
这是一条直线。线的一侧预测为正类,另一侧预测为负类。边界周围的概率色带揭示了直线本身隐藏的信息:模型置信程度在空间中连续变化。
换成其他阈值后,边界成为:
修改 会平移行动边界,但不会重新拟合模型,也不会改变概率排序。如果配送团队认为漏掉延迟订单远比多发一次警报昂贵,就可能选择 。第 10.4 节会用明确成本和折外概率调优这个决策。
第二个实验会画出边界背后的完整概率地形。旋转权重、移动阈值,然后把真实类别切换为 XOR 结构。任何一条直线都无法同时覆盖对角线上的两个正类区域;这是模型几何能力的限制,不是继续旋转直线就能解决的问题。
交互项或多项式特征可以让逻辑回归产生弯曲边界:
from sklearn.preprocessing import PolynomialFeatures
nonlinear_logistic = Pipeline([
("preprocess", preprocess),
("basis", PolynomialFeatures(degree=2, include_bias=False)),
("model", LogisticRegression(C=0.5, max_iter=1000)),
])增加的容量必须有依据并经过验证。训练图上漂亮的边界也可能只是在描摹噪声。对于多分类目标,逻辑回归会估计多个类别分数,predict_proba 会为每个类别返回一列概率;类别顺序仍由 classes_ 决定。本节保持二分类,是为了让几何、正类定义和错误成本始终清晰可见。
逻辑回归给出了平滑、全局的概率表面。下一节将研究决策树:它用嵌套 if/then 区域取代全局方程;随后再看集成模型怎样组合许多树以提高稳定性或继续修正误差。