Courses
在您训练好一个逻辑回归模型后,如何确信可以信任其中的系数?
逻辑回归以简单著称。用 scikit-learn 调用 .fit(),读出比值比,然后差不多就结束了。但多数初学者不知道,这个模型也有自己的假设;当您不遵循它们时,系数会误导您,而预测也会以各种测试指标无法揭示的方式出现偏差。
实话说,逻辑回归的假设比线性回归更少,而且也更容易检查。只要在解读输出之前运行合适的诊断,您就能知道模型的哪些部分可以信任。
本文将带您逐一了解逻辑回归的全部假设,如何在 Python 和 R 中进行检验、违背时会发生什么,以及当假设无法满足时应采取哪些替代方案。
如果您是数据科学和机器学习新手,请先阅读我们的博文 简单线性回归,了解其假设与诊断。
什么是逻辑回归?
逻辑回归是一种分类模型,用于预测分类结果的概率。您提供自变量,它返回 0 到 1 之间的数,可解读为属于某一类别的概率。
多数人将其用于二分类,如流失/未流失、垃圾邮件/非垃圾邮件。多项逻辑回归与有序逻辑回归等变体可处理两类以上的情形,但当人们说“逻辑回归”时,通常指的是二分类。
在表面之下,模型对自变量的线性组合进行拟合,并将结果传入逻辑函数。输出是概率,系数告诉您每个自变量如何改变对数几率。
值得注意的是,逻辑回归不同于线性回归。后者有诸如残差正态性、同方差性、自变量与目标之间线性关系等熟悉的假设。逻辑回归不作这些假设。它有自己的列表,而且差异足够大——沿用线性回归的假设会带来误导性的结果。
更多逻辑回归细节,请阅读我们的博文,展示其在 Python 中的实现。
逻辑回归假设为何重要
这些假设之所以重要,是因为它们直接关系到您如何使用模型。
如果您遵循假设,系数就能按您理解的含义来解读。读到的比值比是有效的,模型的概率与真实结果能很好匹配。当假设不被遵循时,这些都会变得摇摆不定,而混淆矩阵或其他任何指标都不会告诉您问题所在。
好在,违背并非非黑即白。比如对“对数几率线性性”假设的轻微偏离,并不会让模型变得无用。它只意味着您的比值比会有些偏差,预测也可能比应有的更差。许多生产环境中的模型都在假设检查不完美的情况下运行,这没问题。
您绝对不该做的是跳过检查。没有诊断,您无法在预测出错之前判断自己面对的是小问题还是大问题。
逻辑回归假设概览
在展开每条假设之前,先给出需要检查的完整清单。
| 假设 | 要求 | 常用诊断 |
|---|---|---|
| 观测相互独立 | 任一记录不影响另一记录 | 研究设计、类内相关系数 |
| 合适的因变量 | 二元,或用合适的变体建模 | 检查目标变量 |
| 对数几率的线性性 | 自变量在对数几率上线性 | Box-Tidwell 检验、样条 |
| 无严重多重共线性 | 自变量不过度相关 | VIF、相关矩阵 |
| 样本量充足 | 每变量有足够事件数 | EPV 经验法则 |
| 无高影响力离群点 | 不存在单条记录扭曲拟合 | Cook 距离、杠杆值 |
逻辑回归假设一览表
以上就是完整清单。接下来,我将结合 Python 与 R 的诊断方法,逐一讲解每条假设、违背时的表现,以及出问题后应如何处理。
逻辑回归的主要假设
假设 1:因变量是二元(或以合适方式建模)
标准逻辑回归适用于二元结局。目标变量应恰好有两个类别,模型正是围绕这一情形设计的。
经典示例是流失/未流失、患病/未患病。凡是可以表述为“是/否”的问题,都很适合。
当结局有两个以上类别时,需要不同的变体。多项逻辑回归适用于无序类别,如客户分群或产品类型;有序逻辑回归适用于有序类别,如 1 到 5 的满意度评分,其中层级之间的顺序有意义。
强行将多类别结局塞入二元模型,通常意味着合并了不该合并的类别。如果满意度有五个等级而您将其压缩为“满意/不满意”,就会丢失本可帮助模型的信息。请选择与目标形态相匹配的变体。
假设 2:观测独立
数据集中的每一行都应为模型提供其他行未提供的信息。如果两条记录存在违背该假设的关联,标准误和 p 值将不再具有应有的含义。
任何共享但未建模结构的观测都会破坏该假设。典型例子是同一患者的重复测量(共享患者的生理特征);或同一教室内的学生(共享同一教师与教室)。
若忽略这一点并拟合普通逻辑回归,模型会把每一行都当作新的信息,导致标准误被过度缩小。系数在表面上仍可能“好看”,但 p 值与置信区间会过度自信。
标准替代方法是混合效应逻辑回归和 GEE。混合效应模型为分组(患者、教室)添加随机效应,从而考虑组内相关;GEE(广义估计方程)提供经过校正标准误的人群平均效应,而无需随机效应机制。
当您关注组内差异时选混合效应;当您需要全体的边际效应时选 GEE。
假设 3:对数几率的线性性
这是多数人对逻辑回归最容易误解的一点。
模型并不假定自变量与结局之间存在线性关系;它假定自变量与结局的对数几率之间存在线性关系。这是不同的表述,也改变了您应当检查的内容。
什么是 logit(对数几率)
logit 是几率的自然对数。对于概率 p,几率为 p / (1 - p),logit 是该比值的对数:

对数几率
随后,逻辑回归在这一尺度上拟合线性方程:

逻辑回归公式
右侧对自变量是线性的;左侧是对数几率,而不是概率。我们真正关心的概率,是将该线性组合通过逻辑函数(非线性)得到的。
因此,任一自变量与概率之间的关系是非线性的;而任一自变量与对数几率之间的关系才应是线性的。
为何在实践中重要
当对数几率线性性不成立时,该自变量的系数实际上是在用一条直线概括一条曲线。模型仍会给出一个数,而且可能仍显著,但这个数并不能描述数据中的真实关系。
例如,age 可能对某疾病的对数几率呈 U 形影响,两端风险更高,中间更低。如果仅将 age 作为单一线性项,系数可能接近 0,您会得出年龄无关紧要的结论。其实并非如此,是模型设定错了。
检查对数几率线性性
您有几种方法可检查该假设。
最快的方法是可视化检查。将每个连续自变量分箱为十分位,在每个箱内计算经验对数几率,并将结果与自变量作图。近似直线表示假设成立,明显曲线则表示不成立。该检查不算正式,但当每个箱内数据足够时效果很好。
Box-Tidwell 检验为每个连续自变量与其自然对数添加交互项。若交互项显著,说明该自变量的对数几率线性性被违背。该检验仅适用于严格正值的自变量(因为不能对 0 或负数取对数),且像任何显著性检验一样对样本量敏感。
样条也是一个选择。与其检查线性性是否成立,不如用受限三次样条等灵活的基函数替代线性项,让模型自行拟合需要的形状。如果样条相比线性项拟合显著更好(用似然比或 AIC 判断),就有证据表明线性设定过于严格。样条同时也是修复手段;当线性性不成立时,将其保留在最终模型中往往是最佳答案。
当线性性不成立时怎么办
若某个自变量未满足该假设,您可以:
- 对自变量做变换(对数或平方根等),直到与对数几率的关系看起来线性
- 使用样条,接受略复杂的模型
两种方法都让您留在逻辑回归家族内,也都优于排除一个其实很有信息量的自变量。
假设 4:无严重多重共线性
逻辑回归能在一定程度上处理相关自变量。但超过某个程度后,模型会以测试指标难以察觉的方式表现异常。
当两个或以上自变量包含相同(或非常相似)的信息时,就会发生多重共线性。比如在同一模型中既有英寸身高又有厘米身高;或既有总收入又有每位客户收入还同时包含客户数量。
出现多重共线性时会有两点问题:
- 系数不稳定: 增减一行数据,某个共线自变量的系数可能大幅波动或改变符号。模型仍能工作,但单个系数不再有意义。
- 标准误膨胀: 每个自变量的独立信息更少,模型对各系数的不确定性更大。p 值上升,真实效应可能显示为不显著。
预测通常问题不大。如果您只关心预测概率,轻度到中度的多重共线性很少会造成麻烦。“损害”主要集中在系数及其推断上。
两种检查方法是相关矩阵与方差膨胀因子(VIF)。相关矩阵是首选,尤其关注绝对相关系数高于 0.8 或 0.9 的自变量对。其局限在于它只能捕捉成对共线性,无法发现三者或以上共同冗余的多向情形。
VIF 用于多向情形。对每个自变量,VIF 衡量其系数方差因与其他自变量共线而被放大的程度。VIF 为 1 表示无共线;不超过 5 通常没问题;超过 10 强烈提示该变量与模型中其他变量冗余。
当 VIF 发出警报时,最简单的修复是删除一个共线变量,或将它们组合为一个特征(如求和或比值)。若您更愿意保留全部变量,正则化(岭回归或弹性网)能在不做取舍的情况下稳定系数。
假设 5:样本量足够
逻辑回归可在小样本下工作,但会有一定不可靠性。系数的波动大于应有,稀有类别的效应几乎无法估计。
对逻辑回归而言,重要的样本量不是总行数,而是事件数(少数类观测)。一个有 100,000 行但仅有 50 条欺诈案例的数据集,仍是小样本问题,因为模型只有 50 个它真正要学习的例子。
这就是“每变量事件数”(EPV)的用武之地。EPV 等于少数类观测数除以模型中的自变量个数。若您有 50 条欺诈案例和 10 个自变量,EPV 为 5。
旧的经验法则是 EPV 至少为 10。较新的仿真研究显示,合适的数值取决于数据中的效应大小和您使用的正则化程度。在某些场景下 EPV 低至 5 也可以,而在另一些场景中可能需要 20 或更多。
要点是将 EPV 视为预警信息。低于 10 时,预期估计不稳定,并考虑 Firth 逻辑回归或岭回归等惩罚方法;低于 5 时,在信任任何单个系数之前要么获取更多数据,要么简化模型。
类别不平衡是相关但不同的问题。
一个 99% 属于同一类别的数据集,在绝对意义上仍然可能有充足的每变量事件数。变化的是结局的底层发生率,而非 EPV。不平衡数据往往产生保守的概率估计,准确率也不再有用。应对方法是用对数损失或 Brier 分数而非准确率进行评估;若需要平衡决策,可考虑类别权重或阈值调优。
假设 6:不存在高影响力离群点
逻辑回归并不假定自变量服从正态分布。偏态自变量和计数变量本身都可以。模型在意的是是否存在任何单个观测对拟合产生过大的影响。
“有影响力的观测”指的是:若将其移除,模型会发生实质性改变的点。这不同于残差离群点。某点可能有很大的残差(模型预测很差)却并不具影响力;某点也可能高度有影响力(模型严重依赖它)却没有大残差。
您需要几种从不同角度评估影响力的诊断:
- 杠杆值衡量某观测的自变量取值相对于整体数据有多异常。仅有高杠杆并不意味着该点有影响力;这表示如果其结果与自变量所暗示的不一致,它有可能具有影响力
- Cook 距离将杠杆值与残差组合成单一数值,用于估计若删除该观测,拟合系数会改变多少。较大的 Cook 距离值会标记值得深入检查的点。常用约定是阈值 4/n(n 为样本量),或直接查看数据集中最大的几个 Cook 距离值
- 残差诊断适用于杠杆值与 Cook 距离未捕捉到的情况。偏差残差与皮尔逊残差可标记模型难以拟合的观测。即便杠杆值一般,只要残差很大,也值得关注,因为模型在告诉您它无法利用其他自变量来解释该案例
当您发现有影响力的点时,问题在于该点是真实还是错误。数据录入错误需要修正或移除;真实但不寻常的案例应保留,并注明您的结论依赖于它。不要仅因某点有影响力就将其排除,否则最终会得到一个只适合训练数据、无法泛化的模型。
关于逻辑回归假设的常见误解
多数混淆来自套用了线性回归的检查表。线性回归的假设广为人知、处处教授,但它们不适用于逻辑回归。这里澄清四个最常见的误解。
逻辑回归要求变量正态分布
错误。逻辑回归对模型中的任何变量都不作正态性假设。
因变量应为二元而非正态,我们已在假设 1 中讨论。自变量也不要求正态,可以呈现数据本来的形状。重要的是自变量与对数几率之间的关系,而非任一变量自身的边际分布。
逻辑回归要求同方差性
这也不对。同方差性(预测值范围内残差方差恒定)是线性回归的假设,不适用于逻辑回归。
在逻辑回归中,结局的方差取决于预测概率本身。对伯努利结局,方差等于 p(1 - p),在 p = 0.5 附近最高,靠近 0 和 1 最低。方差并非常数,模型通过最大化的似然函数来处理这一点。
因此,在拟合逻辑回归时,预测概率对应不同方差并不违反任何假设——这正是模型应有之义。
自变量必须正态分布
错误。逻辑回归对自变量不作任何分布假设。
您可以在同一模型中混合连续、二元、计数和分类型自变量。偏态、重尾的自变量都没问题。模型不关心边际形状;唯一关心的是对数几率的线性性(见假设 3),这是关于关系形状而非分布形状的假设。
若某自变量的偏态引发问题,通常是因为对数几率线性性或高影响力离群点所致。
残差必须正态分布
错误。逻辑回归的残差没有正态性假设。
线性回归假定残差在零附近正态分布,因为其推断方法依赖此点。逻辑回归使用二项分布的极大似然估计,其残差分布由结局(0 或 1)和拟合概率决定;它们不是正态的,也不应是正态的。
因此,在进行逻辑回归的残差诊断(见假设 6)时,您是在寻找有影响力的观测与模型无法解释的点,而不是在寻找钟形曲线。
如何在 Python 中检查逻辑回归假设
我将使用 statsmodels 进行诊断。Scikit-learn 虽能拟合逻辑回归,但并不自带 VIF、影响力统计或残差诊断。
示例搭建
我将生成一个合成的流失数据集,包含三个自变量(年龄、收入和消费评分),并有意让年龄与收入相关,以便让多重共线性有所体现。
import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
np.random.seed(42)
n = 1000
age = np.random.normal(40, 12, n).clip(18, 80)
income = 30000 + 1500 * age + np.random.normal(0, 8000, n)
spending_score = np.random.uniform(1, 100, n)
logit_p = -3 + 0.04 * age + 0.02 * spending_score
p = 1 / (1 + np.exp(-logit_p))
y = np.random.binomial(1, p)
df = pd.DataFrame({
"churned": y,
"age": age,
"income": income,
"spending_score": spending_score,
})
model = smf.glm(
"churned ~ age + income + spending_score",
data=df, family=sm.families.Binomial()
).fit()
print(model.summary())

模型摘要
摘要提供系数、标准误、z 统计量和 p 值。age 与 spending_score 显示为有意义的自变量。income 的系数很小,因为结局并不直接依赖收入;其表面效应被年龄吸收了。
用 VIF 检查多重共线性
statsmodels 计算起来非常方便:
from statsmodels.stats.outliers_influence import variance_inflation_factor
X = sm.add_constant(df[["age", "income", "spending_score"]])
vif = pd.DataFrame({
"feature": X.columns,
"VIF": [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
})
print(vif[vif["feature"] != "const"])

VIF 输出
age 与 income 的 VIF 约为 5.5,显示轻度多重共线性。spending_score 接近 1,这是理想的,说明其方差未被与其他变量的共线性放大。VIF 超过 5 为轻度提示;超过 10 是需要立即解决的严重问题。此时的做法是要么删除 age 或 income 之一,要么将二者组合为单一特征。
用 Box-Tidwell 检查对数几率线性性
Box-Tidwell 检验为每个连续自变量与其自然对数添加交互项。交互项显著提示该自变量的对数几率关系为非线性。
df_bt = df.copy()
for col in ["age", "income", "spending_score"]:
df_bt[f"{col}_logx"] = df_bt[col] * np.log(df_bt[col])
bt_formula = (
"churned ~ age + income + spending_score + "
"age_logx + income_logx + spending_score_logx"
)
bt_model = smf.glm(
bt_formula, data=df_bt, family=sm.families.Binomial()
).fit()
interactions = ["age_logx", "income_logx", "spending_score_logx"]
print(bt_model.pvalues[interactions])

Box-Tidwell 输出
若这些 p 值有任何低于 0.05,说明该自变量的对数几率线性性存疑。此处对数几率是按线性生成的,因此交互项不应显著。在真实数据中,将显著结果视为提示,去绘制该自变量的经验对数几率图,并决定采用变换还是样条作为修复。
影响力诊断
statsmodels 通过 get_influence() 提供 Cook 距离和杠杆值。
influence = model.get_influence()
cooks_d = influence.cooks_distance[0]
leverage = influence.hat_matrix_diag
flagged = pd.DataFrame({
"cooks_d": cooks_d,
"leverage": leverage,
}).sort_values("cooks_d", ascending=False).head(10)
print(flagged)

影响力诊断输出
值得关注的 Cook 距离阈值大约是 4/n。样本量 1000 时为 0.004。远高于该值的点需要进一步查看。在该数据集中,最大的 Cook 距离在绝对值上仍然很小——这是您通常希望看到的“平淡但良好”的结果。
下面用可视化让分布更易阅读:

影响力诊断可视化
明显高于虚线阈值的点值得调查。有一些,但不算多。
残差诊断
偏差残差能告诉您模型在哪些观测上拟合困难。
deviance_resid = model.resid_deviance
fitted = model.fittedvalues
resid_df = pd.DataFrame({
"fitted": fitted,
"deviance": deviance_resid,
}).sort_values("deviance", key=abs, ascending=False).head(10)
print(resid_df)

残差诊断输出
较大的正偏差残差对应模型赋予低概率但实际为正的样本;较大的负残差则相反。您应将高残差观测与上面的影响力诊断交叉参考。既难以预测又具有高影响力的案例最值得深入调查。
如何在 R 中检查逻辑回归假设
R 对这些诊断有更完善的内置支持。大多数所需功能来自基 R 的 glm() 加上 car 包。
示例搭建
我将生成与 Python 示例相同类型的合成数据集,并让年龄与收入有意相关。
set.seed(42)
n <- 1000
age <- pmin(pmax(rnorm(n, mean = 40, sd = 12), 18), 80)
income <- 30000 + 1500 * age + rnorm(n, sd = 8000)
spending_score <- runif(n, min = 1, max = 100)
logit_p <- -3 + 0.04 * age + 0.02 * spending_score
p <- 1 / (1 + exp(-logit_p))
churned <- rbinom(n, size = 1, prob = p)
df <- data.frame(churned, age, income, spending_score)
model <- glm(churned ~ age + income + spending_score,
data = df, family = binomial)
summary(model)

模型摘要输出
summary(model) 输出提供系数、标准误、z 统计量和 p 值。age 与 spending_score 应该显得有意义,而 income 的效应会被 age 吸收。
用 VIF 检查多重共线性
car 包为任意 glm 提供 vif():
library(car)
vif(model)

R 中的 VIF 输出
age 与 income 的 VIF 均约为 5.7,反映数据内置的共线性。spending_score 接近 1。与 Python 类似,超过 5 需引起注意,超过 10 则问题明确。
用 Box-Tidwell 检查对数几率线性性
car::boxTidwell 为线性回归设计,因此在逻辑回归中,最佳方法是手动添加交互项并重新拟合:
df_bt <- df
df_bt$age_logx <- df_bt$age * log(df_bt$age)
df_bt$income_logx <- df_bt$income * log(df_bt$income)
df_bt$spending_score_logx <- df_bt$spending_score * log(df_bt$spending_score)
bt_model <- glm(
churned ~ age + income + spending_score +
age_logx + income_logx + spending_score_logx,
data = df_bt, family = binomial
)
interactions <- c("age_logx", "income_logx", "spending_score_logx")
summary(bt_model)$coefficients[interactions, ]

R 中的 Box-Tidwell 输出
输出显示每个交互项的系数与 p 值。显著的 p 值提示该自变量的对数几率线性性被违背。对于此处合成数据,检验不应拒绝线性性;在真实数据中,请对被检验标记的自变量绘制经验对数几率图,或用(来自 splines 包的)样条拟合。
影响力诊断
R 在基函数中提供 cooks.distance() 与 hatvalues(),无需第三方包:
cooks_d <- cooks.distance(model)
leverage <- hatvalues(model)
influence_df <- data.frame(
index = seq_along(cooks_d),
cooks_d = cooks_d,
leverage = leverage
)
head(influence_df[order(-influence_df$cooks_d), ], 10)

R 中的影响力诊断
Cook 距离阈值与 Python 相同:4/n,对于 1000 行数据即 0.004。明显高于该值的点值得调查。快速可视化可用基 R 的 plot(model, which = 4) 一行画出 Cook 距离图。

R 中的影响力诊断可视化
残差诊断
R 的 residuals() 可从 glm 中获取偏差残差:
deviance_resid <- residuals(model, type = "deviance")
fitted_vals <- fitted(model)
resid_df <- data.frame(
fitted = fitted_vals,
deviance = deviance_resid
)
head(resid_df[order(-abs(resid_df$deviance)), ], 10)

R 中的残差诊断
偏差残差绝对值大的案例,是模型预测偏差较大的样本。您应将这些与上面的 Cook 距离一并参考,以找出既拟合较差又具有影响力的观测。
若想一站式查看所有内容,influence.measures(model) 会返回一张表,将 Cook 距离、杠杆值、DFBETAs 及其他若干影响力统计集中呈现。这是快速扫描已拟合 glm 的标准诊断的最快方式。
当假设被违背会发生什么?
大多数假设违背并不会让模型“失效”。它们会以微妙的方式让模型表现异常,只有当您知道该看什么时才会注意到。
最常见的四个后果:
- 系数不稳定: 数据的细微变化(增删几行、略改特征工程)可能使系数大幅变化或符号翻转。这是多重共线性的表现,也是当样本量相对自变量数过小时发生的情况
- 校准较差: 模型的预测概率不再匹配数据中的实际发生率。模型预测某组流失率为 30%,实际观察为 15%。准确率也许仍看起来不错,但概率偏差很大。对数几率线性性违背与高影响力离群点都会导致这一点
- 误导性推断: 这点最难发现,因为模型仍会产出看似正常的标准误与 p 值。相关的观测会使标准误被低估,而错误的自变量设定会使其被高估。无论哪种,得到的 p 值都不再如您所想
- 预测质量下降: 这通常是最明显的症状,尽管在实践中往往影响最小。预测通常比系数更能“扛”,这也是只关注准确率的团队常常错过预警信号的原因。
但说实话,违背很少会让模型一无是处。它会让模型的某些部分不可靠,而不可靠的部分取决于哪条假设被破坏。这也是诊断之所以重要的原因。
当逻辑回归假设不成立时的替代方案
如果诊断指出的问题无法在逻辑回归内修复,下一步应考虑不作这些假设的模型。
广义加性模型(GAM)是首先考虑的选择。GAM 保留逻辑链接函数和可解释的加性结构,但用每个自变量的平滑函数替代线性项。您得到的是“带形状的系数”而非单个数值,从而解决对数几率线性性问题。GAM 仍足够参数化,便于检查与解释,是在线性性无法成立时从逻辑回归升级的良好选择。
基于树的模型更为灵活。随机森林和梯度提升不对自变量分布或关系形态作任何假设。它们能处理多重共线性,甚至捕捉非线性。虽然缺少逻辑回归那样易于解读的系数,但当数据存在非线性结构或您未纳入模型的交互时,它们往往在预测指标上表现更好。
在 GAM 与基于树的模型之间的选择,取决于您对模型的需求。
- 当以可解释性为优先、希望看到各自变量如何影响对数几率时,选择 GAM
- 当以预测质量为优先、能接受较不透明的模型时,选择梯度提升树
值得一提的是,逻辑回归的假设更易检查而非忽视。如果可以通过变换、样条、正则化或更好的样本来修复,逻辑回归的可解释性和推断输出通常优于转向更灵活模型的结果。
因此,只有当诊断确实表明假设无法成立时,才转向 GAM 或树模型,而不是因为逻辑回归不是“最前沿”的算法。
逻辑回归建模的最佳实践
最后,遵循这份简短清单,确保您始终得到值得信赖的模型:
- 在解读之前检查假设: 在读取系数前运行 VIF、Box-Tidwell 检验与影响力诊断。若先解读后检查,您会陷入为未经验证的数字辩护的境地。您不想在会议上成为那样的人
- 样本量较小时使用正则化: 当 EPV 低或自变量相关时,岭回归或弹性网能稳定系数。代价是引入小偏差换取大方差降低,通常很划算
- 在未见过的数据上验证: 留出测试集或使用交叉验证。只要模型有过拟合空间(当自变量多或事件稀少时逻辑回归也会如此),训练集指标就会高估性能
- 评估校准: 准确率会掩盖预测概率是否映射到实际发生率。用对数损失或 Brier 分数进行评估,且在概率影响业务决策时查看校准图
结论
说实话,逻辑回归是您能拟合的更为宽容的模型之一。
它能容忍偏态自变量与不平衡结局,也不在乎残差长什么样。它无法容忍的是与对数几率的关系设定错误,或一组自变量传达着相同的信息。
这就是为何“对数几率线性性”和“多重共线性”这两条假设检查值得视为必做。它们会以任何测试指标都无法捕捉的方式扭曲模型。其他四条假设同样重要,但这两条是您应当真正聚焦的。
为安全起见,请在评估的同时进行诊断,而不是事后补做。一个既预测良好又通过假设检查的模型,才是您可以坚定支持的模型。除此之外的任何情况,都只是一个您已训练但尚未真正验证的模型。
如果这听起来很复杂,那是因为确实复杂。要成为一名出色的机器学习工程师需要很多积累,因此我们建议您报名我们的 Python 机器学习科学家学习路径。85 小时的课程将助您在 2026 年胜任相关工作。
FAQs
逻辑回归有假设吗?
有的。逻辑回归的假设比线性回归更少,但并非没有。主要包括因变量的形态、观测的独立性、对数几率的线性性,以及不存在高度多重共线性或高影响力点。
逻辑回归最重要的假设有哪些?
最重要的是对数几率的线性性与不存在高度多重共线性。对数几率的线性性最易被误解,因为逻辑回归并不假设自变量与结局线性相关,但假设自变量与对数几率线性相关。多重共线性之所以重要,是因为它会在不影响准确率的情况下扭曲系数并膨胀标准误,因此仅看预测性能的检查很难发现它。
如果逻辑回归的假设被违背,会怎样?
取决于哪条假设被破坏。对数几率线性性违背或强多重共线性会在不改变准确率的情况下悄然损害系数,这也是它们容易被忽视的原因。独立性破坏会放大或缩小标准误,使 p 值不可靠。多数违背不会让模型无用,但会让某些部分不可信,而仅凭准确率无法看出。
逻辑回归要求自变量正态分布吗?
不需要。逻辑回归对自变量不作任何分布假设。您可以在同一模型中混合连续、分类型、偏态与重尾的自变量。重要的是每个自变量与对数几率之间的关系,而不是自变量本身的边际形状。
逻辑回归的 VIF 阈值多少算好?
VIF 不超过 5 通常没问题;5 到 10 表示值得调查的中度共线性;超过 10 则提示一个或多个自变量冗余。阈值并非硬性规定,而是经验约定,因为 VIF 的解读依赖样本量与您所需的精度。如果某个自变量的 VIF 很高,且其标准误在不同数据子集间不稳定,您就有证据表明共线性在造成麻烦。