3、线性模型的可解释性:线性回归与逻辑回归的系数解读,特征重要性排序,置信区间与p值的作用
说到机器学习模型的可解释性,线性模型绝对是最容易上手、也最直观的。我刚开始做评分卡模型那会儿,业务方天天追着问:「你这个分数是怎么算出来的?凭什么给这个人打低分?」——你看,这就是可解释性的刚需。线性回归和逻辑回归,说白了就是「权重乘以特征再加个偏置」,每一步都能讲清楚。
3.1 线性回归的系数解读
线性回归的公式很简单:y = w₁x₁ + w₂x₂ + ... + wₙxₙ + b。每个系数 wᵢ 的含义是:在其他特征不变的情况下,xᵢ 每增加一个单位,y 平均变化 wᵢ 个单位。
举个例子。我在做房价预测项目时,模型里有个「房间数量」的特征,系数是 8.5 万。这意味着:其他条件相同,多一个房间,房价平均高 8.5 万。业务方一听就懂了。
但这里有个坑——特征量纲不同,系数不能直接比大小。比如「房屋面积」的单位是平方米,系数可能是 0.5 万;「房间数量」的单位是个,系数是 8.5 万。你能说房间数量比面积重要 17 倍吗?不能。因为面积变动 10 平米,影响是 5 万,而房间数量变动 1 个,影响是 8.5 万。所以比较重要性前,得先标准化。
3.2 逻辑回归的系数解读
逻辑回归稍微绕一点。它输出的是概率,但系数是在 log-odds(对数几率)尺度上的。公式是:
log(p/(1-p)) = w₁x₁ + w₂x₂ + ... + wₙxₙ + b
系数 wᵢ 的含义:xᵢ 每增加一个单位,log-odds 增加 wᵢ。但业务方听不懂 log-odds 啊。所以我一般会转换成 odds ratio(优势比):OR = exp(wᵢ)。
比如信用评分模型里,「近 3 个月逾期次数」的系数是 0.8,那 OR = exp(0.8) ≈ 2.23。意思是:每多一次逾期,违约的 odds 变成原来的 2.23 倍。这样讲,业务方就明白了。
3.3 特征重要性排序
线性模型的特征重要性,最直接的方法就是看标准化后的系数绝对值。绝对值越大,特征越重要。
具体步骤:
- 对所有特征做标准化(减去均值,除以标准差)
- 重新训练模型
- 按 |wᵢ| 从大到小排序
代码示例:
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
model = LogisticRegression()
model.fit(X_scaled, y)
# 特征重要性
importance = pd.DataFrame({
'feature': feature_names,
'coef': model.coef_[0],
'abs_coef': np.abs(model.coef_[0])
}).sort_values('abs_coef', ascending=False)
我曾经在一个风控项目里,用这个方法发现「收入」的系数绝对值竟然比「负债率」还小。一开始觉得不合理,后来一查数据——收入字段有大量缺失值被填充了中位数,导致信息量下降。嗯,数据质量直接影响特征重要性排序,这个坑大家要注意。
3.4 置信区间与 p 值的作用
光看系数大小还不够,还得看这个系数靠不靠谱。置信区间和 p 值就是干这个的。
置信区间:系数 wᵢ 的 95% 置信区间表示:如果我们重复采样 100 次,有 95 次这个区间会包含真实的 wᵢ。区间越窄,说明估计越精确。
p 值:原假设是 wᵢ = 0(即该特征对目标无影响)。p 值越小,越有理由拒绝原假设。通常 p < 0.05 就认为显著。
用 statsmodels 可以很方便地拿到这些信息:
import statsmodels.api as sm
X_with_const = sm.add_constant(X_scaled)
model_sm = sm.Logit(y, X_with_const)
result = model_sm.fit()
# 查看系数、p值、置信区间
print(result.summary())
# 或者单独提取
coef_df = pd.DataFrame({
'coef': result.params,
'p_value': result.pvalues,
'ci_lower': result.conf_int()[0],
'ci_upper': result.conf_int()[1]
})
输出示例:
| 特征 | 系数 | p 值 | 95% CI 下限 | 95% CI 上限 |
|---|---|---|---|---|
| 收入 | 0.35 | 0.001 | 0.15 | 0.55 |
| 年龄 | -0.02 | 0.450 | -0.08 | 0.04 |
| 负债率 | 0.78 | 0.000 | 0.52 | 1.04 |
你看,「年龄」的 p 值是 0.45,远大于 0.05,而且置信区间跨过了 0(从 -0.08 到 0.04)。这说明年龄这个特征在模型里其实没啥贡献。我一般会把它剔除掉,或者考虑加个平方项试试。
3.5 知识体系总览
下面这张图把本章的核心逻辑串起来了。你可以看到,线性模型的可解释性从系数解读出发,延伸到特征重要性排序,再到统计显著性检验,层层递进。
这张图里,左边是系数解读,中间是特征重要性,右边是统计检验。三者结合,才能对模型有一个完整的理解。我每次做模型汇报,都会把这三块内容放在一页 PPT 上,业务方和技术方都能看懂。
好了,线性模型的可解释性就聊到这儿。说白了就是三件事:系数怎么看、重要性怎么排、统计上靠不靠谱。你想想看,是不是比那些黑盒模型好解释多了?