链接:https://pan.baidu.com/s/15r0rLWkJlcecUvBPKZo_MQ?pwd=mnsj提取码:mnsj
https://www.mizhushare.com/docs/
在二元Logistic回归分析中,常常只关注单一阈值(如,默认值0.5)下的准确率、灵敏度或特异度等指标。然而,这种评估方法往往带有片面性,容易导致对模型判别能力的高估或低估。因为,这种做法隐含了一个前提假设——阈值是唯一且合理的。但在实际研究和业务应用中,这个前提往往并不成立。
单一阈值的局限性:
在二元Logistic回归分析中,模型输出的并不是「是 / 否」的最终判断,而是每个个案属于事件发生的预测概率(如,违约概率)。当我们人为设定一个阈值(如,0.5)时:
预测概率 ≥ 0.5 → 判定为“正类”,即“违约”;
预测概率 < 0.5 → 判定为“负类”,即“未违约”。
此时计算得到的灵敏度、特异性、分类正确率等指标都只对应于这一单一阈值下的结果。但如果阈值改为0.4/0.7,灵敏度与特异性等指标都会发生变化、模型“好不好”的结论也可能随之改变。因此,仅依赖单一阈值下的分类指标,可能对模型整体判别能力形成片面认识。
ROC 曲线与 AUC:更稳健的模型评估视角
为避免阈值选择带来的主观性,更合理的做法是:「在所有可能的判别阈值下,系统考察模型对正负样本的区分能力」。这正是ROC曲线的思想核心。
1)、真阳性率和假阳性率:
真阳性率和假阳性率是构建ROC曲线的两个核心指标。它们分别从「正确识别正例的能力」和「错误将负例判为正例的风险」两个角度衡量模型性能。
下面结合信用违约预测的例子来解释。假设我们有一个信用风险模型,用于预测客户是否会违约:
正类(Positive):违约(default = 1) 负类(Negative):未违约(default = 0)
预测为违约(阳性) | 预测为未违约(阴性) | |
实际违约 | 真阳性(TP) | 假阴性(FN) |
实际未违约 | 假阳性(FP) | 真阴性(TN) |
真阳性率(True Positive Rate, TPR)

衡量模型「抓坏人」的能力。TPR越高,说明漏掉的违约客户越少(假阴性少)。例如,100个真实违约者中,模型找出了85个,则TPR = 85%。
假阳性率(False Positive Rate, FPR)
表示在所有实际未违约的客户中,被模型错误标记为违约的比例。也可称为「1 - 特异性(1 - Specificity)」。计算公式:

衡量模型「误伤好人」的风险。FPR越低越好,说明把优质客户错判为高风险的情况越少。例如,100个优质客户中,有5个被误判为会违约,则FPR=5%。
2)、AUC值:
AUC值(Area Under Curve)是ROC曲线下的面积,取值范围为0.5到1之间,用于量化模型的整体分类性能。AUC值越接近1,说明模型的区分能力越强;AUC=0.5表示模型性能等同于随机猜测。

一、加载数据:
default:因变量,0 = 未违约(no),1 = 违约(yes); PRE_1:模型对每个个案预测的违约概率(由Logistic回归生成); validate:数据集标识,1 = 训练集,0 = 验证集。
需要注意的是,模型评估应基于验证集(或测试集),而非训练集。因此本次将使用验证集预测结果绘制ROC曲线。
二、筛选验证集数据:
由于我们只关心模型在未参与训练的数据(验证集)上的表现,因此需先筛选出「validate = 0」的样本。步骤如下:
点击顶部菜单栏的【数据→选择个案】,打开选择个案对话框;
选择「如果条件满足」,点击「如果...」按钮;
输入条件:validate = 0;

完成设置后,点击确定,SPSS会根据设置的条件进行抽样,并选择相应的个案。

三、绘制ROC曲线:
点击顶部菜单栏的【分析→分类→ROC分析】,在打开的对话框进行相应设置:
检验变量:模型对每个个案输出的连续型预测概率值,用于判断该个案属于正类的可能性大小。它是ROC曲线的核心输入,SPSS将根据这个变量的数值,在不同阈值下计算灵敏度和特异性。本次选择「PRE_1变量(即预测概率)」;
状态变量:原数据集中的真实标签变量,即因变量,表示每个个案的实际分类结果。SPSS根据该数据识别哪个类别是“正类”(即我们关心的目标事件)。本次选择「default变量」;
状态变量值:指定哪一个值代表「正类/事件发生」的类别。在二分类问题中,SPSS默认以该值作为「阳性结果」来计算ROC曲线。本次输入1(ROC曲线评估的是“预测违约”的能力,因为我们关注的是“违约=1”的正类);
分组变量:用于在同一次ROC分析中,对不同子样本分别绘制ROC曲线并进行比较。如果之前不筛选验证集数据,而在此处将数据集标识变量「validate」设为分组变量,则会分别绘制训练集和验证集的ROC曲线。

在ROC分析对话框中,点击「显示」按钮后会弹出「ROC分析:显示」对话框,用于设置图表和统计表格等输出内容。
ROC 曲线 | 生成标准的ROC曲线图 |
带对角参考线 | 在ROC图中添加一条从左下到右上的对角线(即 AUC = 0.5 的随机分类基准线) |
精确率召回率曲线 | 绘制精确率 vs 召回率的曲线。与ROC不同,PR曲线更适合类别不平衡数据 |
总体模型质量 | 输出一个综合性的模型性能指标 |
标准误差和置信区间 | 输出AUC的标准误和95%置信区间。有助于判断AUC估计的稳定性。 |
ROC 曲线的坐标点 | 列出所有阈值下的(FPR, TPR)组合。 |
约登指数(Youden 指数)是用于确定最优分类阈值的经典统计指标,目标是在灵敏度与特异性之间取得最佳平衡。 该选项为SPSS 29之后版本新增,旧版本的话可以通过生成的曲线坐标点手动计算该指数(本文第五部分会介绍)。 | |
精确率召回率曲线的坐标点 | 类似于ROC坐标点,但展示的是召回率和精确率 |
分类器评估度量 | 输出一系列常用的分类指标(如准确率、精确率、特异性等) |


设置完成,点击确定,在输出窗口会生成ROC曲线图以及相应指标信息。
输出结果一:个案处理摘要
该表反映了当前分析所用数据集中真实事件分布情况。

输出结果二:ROC曲线
ROC曲线图中蓝色折线为实际的ROC曲线,由模型预测概率(PRE_1)生成,绿色对角线为参考线(随机分类基准)。
当前蓝色的ROC曲线明显高于45°参考线,并且在较小的假阳性率区间内,灵敏度已经快速提升。这表明,在大多数判别阈值下,模型都能以较低的“误判未违约为违约”的代价,识别出较多的真实违约客户。
虽然ROC曲线提供了直观的图形信息,但还需通过一个定量指标AUC(曲线下面积)来量化模型整体区分能力。

输出结果三:ROC曲线下的区域
ROC曲线下的区域(Area Under the Curve, AUC)是评估二分类模型整体判别能力的最关键指标。
表示预测模型在所有可能分类阈值下的判别能力。这一解释不依赖任何固定阈值,直接反映模型的整体区分能力。取值范围为0~1,当前AUC=0.821,说明模型具有较强的判别能力。 | |
反映的是在重复抽样的意义下,AUC估计值的波动程度。值越小,说明 AUC 的估计越稳定、可靠。 | |
渐近显著性 | 当前显著性水平p<0.001,因此可以拒绝原假设(见表下注释b),说明模型在统计意义上显著优于随机分类器,具备有效的判别能力。 |
95% 置信区间 | 表示在95%的置信水平下,模型真实的区分能力区间。当前整个区间完全高于0.5,下限已达到0.76,进一步表明模型的判别能力不仅显著,而且具有较高的稳定性。 |

输出结果四:总体模型质量
总体模型质量是对模型区分能力的图形化近似展示,用于快速判断模型的整体判别能力。当前模型的总体质量评分为0.76,显著高于随机预测的基准线(0.5),表明该模型具备良好的区分能力。
需要注意的是,总体模型质量评分只是一个概览性指标,SPSS输出的AUC指标更精确。

输出结果五:ROC曲线的坐标
ROC曲线的坐标表格列出了在不同预测概率阈值下对应的「灵敏度(真阳性率,TPR) 」和「 1 - 特异性(假阳性率,FPR)」以及「约登指数」。是理解ROC曲线生成机制、寻找最优分类阈值的关键数据。
可以看到随着阈值升高,FPR逐渐下降,意味着越来越少的正常客户被误判;当阈值继续上升,最终会出现敏感度开始下降的情况(即漏掉一些高风险客户);与之对应,约登指数也是先上升后下降。


后续主要是利用该表寻找最优分类阈值,主要有以下两种方法:
方法一:约登指数法。约登指数最大值所对应的阈值就是在灵敏度与特异性之间权衡最优的判别点; 方法二:根据业务需求设定阈值。在实际应用中,不同错误的代价往往并不对称。例如,漏判一个违约客户(假阴性)可能导致直接的资金损失,而误判一个正常客户为违约(假阳性)可能带来审核成本或客户体验下降。因此,很多时候阈值的选择不是统计问题,而是业务决策问题。
五、手动计算约登指数:
在29版本之前,ROC分析只会生成不同预测概率阈值下对应的「灵敏度(真阳性率,TPR) 」和「 1 - 特异性(假阳性率,FPR)」。本次主要介绍下如何计算约登指数。
约登指数计算公式如下:Youden 指数 = 敏感度 + 特异性 - 1# 等价于:Youden 指数 =敏感度 - (1 - 特异性)
将生成的表格复制到EXCEL文件中,通过上述公式即可计算约登指数:

然后可以通过以下函数获取约登指数最大值所在的行(将公式中的A列替换为约登指数所在的列):
=MATCH(MAX(A:A), A:A, 0)


夜雨聆风