在本文中,我们介绍了如何计算预测模型的基尼系数、累积准确度分布 (CAP) 和曲线下面积 (AUC)。这篇文章的目的就是用通俗的语言解释这些概念,让外行人能够理解其背后的数学原理。
这些方法测量预测模型的判别力。判别力意味着预测模型是否能够区分事件(预期结果)和非事件。在信用风险建模中,它评估违约概率模型是否能够区分好客户和坏客户。与其他领域相比,这两个指标累积准确度概况和基尼系数在信用风险分析中更为常见。
累积精度曲线 (CAP)
信用评级模型的累积准确度概况 (CAP) 在 x 轴上显示所有借款人(债务人)的百分比,在 y 轴上显示违约者(不良客户)的百分比。在营销分析中,它被称为
Gain Chart
. 它在其他一些领域也称为功率曲线。
解释
通过使用CAP,您可以将当前模型的曲线与“理想或完美”模型的曲线进行比较,也可以将其与随机模型的曲线进行比较。“完美模型”是指可以直接捕获所有不良客户(预期结果)的理想状态。“随机模型”是指不良客户比例平均分布的状态。“当前模型”是指您的默认模型(或您正在使用的任何其他模型)的概率。我们总是试图建立一个倾向于(更接近)完美模型曲线的模型。我们可以将当前模型解读为“在给定的十分位数级别覆盖的不良客户的百分比”。例如,仅根据模型选择前 30% 的债务人,就可以捕获 89% 的不良客户。
创建累积精度曲线的步骤
- 按降序对估计的违约概率进行排序,并将其分成 10 个部分(十分位数)。这意味着具有高 PD 的风险最高的借款人应位于前十分之一,而最安全的借款人应出现在底部十分之一。将分数分成 10 个部分不是拇指规则。相反,您可以使用评级等级。
- 计算每个十分位数的借款人(观察)数量
- 计算每个十分位数的坏客户数量
- 计算每个十分位数的累积坏客户数
- 计算每个十分位数中不良客户的百分比
- 计算每个十分位数中不良客户的累积百分比
到目前为止,我们已经完成了基于 PD 模型的计算(记住第一步是基于从 PD 模型获得的概率)。
下一步:基于完美模型,每个十分位数中的不良客户数量应该是多少?
- 在完美模型中,第一个十分位数应捕获所有不良客户,因为第一个十分位数是指最差的评级等级或违约可能性最高的借款人。在我们的案例中,第一个十分位数无法捕获所有不良客户,因为第一个十分位数中的借款人数量少于不良客户总数。
- 基于完美模型计算每个十分位数的累计不良客户数
- 基于完美模型计算每个十分位数中坏客户的累积百分比
下一步:基于随机模型计算每个十分位数中不良客户的累积百分比在随机模型中,每个十分位数应占 10%。当我们计算累积百分比时,十分位 1 为 10%,十分位 2 为 20%,依此类推,直到十分位 10 为 100%。
下一步:根据当前、随机和完美模型创建一个带有累积坏品百分比的图。在 x 轴上,它显示借款人(观察)的百分比,y 轴表示坏客户的百分比。
准确率
在 CAP(累积准确度分布)的情况下,准确率是您当前预测模型与对角线之间的面积与完美模型与对角线之间的面积之比。换句话说,它是当前模型相对于随机模型的性能改进与完美模型相对于随机模型的性能改进的比率。
如何计算准确率
第一步是计算当前模型与对角线之间的面积。我们可以使用梯形规则数值积分方法计算当前模型下方的面积(包括对角线下方的面积)。梯形的面积是
( x i+1 – x i ) * ( y i + y i+1 ) * 0.5
( x i+1 – x i ) 是子区间的宽度, (y i + y i+1 )*0.5 是平均高度。
在这种情况下,x是指不同十分位数级别借款人的累计比例值,y是指不同十分位数级别的不良客户累计比例值。x 0和 y 0 的值为 0。
完成上述步骤后,下一步是从上一步返回的区域中减去 0.5。您一定想知道 0.5 的相关性。它是对角线下方的区域。我们正在减去,因为我们只需要当前模型和对角线之间的区域(我们称之为
B
)。
现在我们需要分母,它是完美模型和对角线之间的区域,
A + B
。它相当于
0.5*(1 - Prob(Bad))
。查看下表中显示的所有计算步骤 -
AR 的分母也可以像我们计算分子一样计算。这意味着使用“借款人的累积百分比”和“坏账的累积百分比(完美模型)”计算面积,然后从中减去 0.5,因为我们不需要考虑对角线以下的面积。
上述计算准确率 (AR) 的方法是近似值,因为我们考虑了 10 个 bin(评级)中的数据,并且记住 bin 的数量不等于数据点的数量。无需挠头 - 计算步骤相同。只是我们需要将它们应用于原始值而不是评级(分箱/十分位数)以获得精确的 AR。请参阅下面的准确估计。
例如,在下面的 R 代码中,我们准备了示例数据。变量名称
pred
是指预测概率。变量
y
是指因变量(实际事件)。我们只需要这两个变量来计算准确率。
图书馆(magrittr)
图书馆(dplyr)
# 用于演示的示例数据
mydata = data.frame(pred = c(0.6,0.1,0.8,0.3,0.5,0.6,0.4,0.3,0.5),
y = c(1,0,1,0,1,1,0,1,0))
# 按预测概率的降序对数据进行排序。
mydata %<>% 排列(desc(pred))
# 累计借款人百分比
随机 = 1:长度(mydata$pred)/长度(mydata$pred)
# 不良品的累积百分比
cumpercentbad = cumsum(mydata$y)/sum(mydata$y)
# 计算AR
随机 = c(0,random)
cumpercentbad = c(0,cumpercentbad)
idx = 2:length(cumpercentbad)
testdf=data.frame(cumpercentpop = (random[idx] - random[idx-1]),
cumpercentbad = (cumpercentbad[idx] + cumpercentbad[idx-1]))
面积 = sum(testdf$cumpercentbad * testdf$cumpercentpop/2)
分子 = 面积 - 0.5
分母 = 0.5*(1-mean(mydata$y))
(AR = 分子/分母)
基尼系数
基尼系数与 CAP 非常相似,但它显示的是好客户的比例(累计),而不是所有客户。它显示了模型与随机模型相比具有更好分类能力的程度。它也被称为基尼指数。基尼系数可以取-1 到1 之间的值。负值对应于分数含义相反的模型。
基尼系数 = B / (A+B)。或者 Gini = 2B 因为 A + B 的面积是 0.5
下面看基尼系数的计算步骤:
通过拒绝 x% 的好客户,我们同时拒绝了多少百分比的坏客户。
基尼系数是 Somer's D 统计量的一个特例。如果您有一致性和不一致性百分比,则可以计算基尼系数。
Gini Coefficient = (Concordance percent - Discordance Percent)
一致性百分比是指违约者的预测概率高于好客户的配对比例。
不一致百分比是指违约者的预测概率低于好客户的配对比例。
另一种计算基尼系数的方法是使用一致性和不一致百分比(如上所述)。请参阅下面的 R 代码。
ModelPerformance <- 函数(实际值,预测分数){
拟合 <- data.frame (Actuals=actuals, PredictedScores=predictedScores) # 实际值和拟合
colnames(fitted) <- c('Actuals','PredictedScores') # 重命名列
一个 <- 拟合 [fitted$Actuals==1, ] # 子集
zeros <- fitted[fitted$Actuals==0, ] # Subsetzeros
totalPairs <- nrow (ones) * nrow (zeros) # 计算要检查的对的总数
# 如果 1(事件)的预测概率高于 0,则一对是一致的
conc <- sum (c(vapply(ones$PredictedScores, function(x) {((x > zeros$PredictedScores))}, FUN.VALUE=logical(nrow(zeros))), na.rm=T)
# 如果 1(事件)的预测概率低于 0,则一对是不一致的
disc <- sum(c(vapply(ones$PredictedScores, function(x) {((x < zeros$PredictedScores))}, FUN.VALUE = logical(nrow(zeros)))), na.rm = T)
# 计算一致性、不一致、关系和 AUC
一致性 <- conc/totalPairs
不一致 <- 盘/总对数
tiesPercent <- (1-concordance-discordance)
基尼系数 = (conc-disc)/totalPairs
AUC = 一致性 + 0.5*tiesPercent
返回(列表(“一致性”=一致性,“不一致”=不一致,
"并列"= tiesPercent, "Gini"= Gini,"AUC"=AUC))
}
模型性能(mydata$y,mydata$pred)
基尼系数和准确率相等吗?
是的,他们总是平等的。因此,基尼系数有时也称为准确率 (AR)。
是的,我知道 Gini 和 AR 中的轴是不同的。问题出现了它们如何仍然相同。如果你解这个方程,你会发现基尼系数中的面积 B 与准确率中的面积 B / Prob(Good) 相同(相当于 (1/2)*AR )。两边乘以 2,你会得到 Gini = 2*B 和 AR = Area B / (Area A + B)
ROC 曲线下面积 (AUC)
AUC 或 ROC 曲线显示了真阳性(违约者被正确归类为违约者)与假阳性(非违约者被错误归类为违约者)的比例。
AUC 分数是在评级等级或十分位数级别计算的所有单个值的总和。
4种数学计算AUC的方法
AUC与基尼系数的关系
基尼系数 = 2*AUC - 1。
你一定想知道它们是如何相关的。
如果您反转上面名为“基尼系数”的部分中显示的图表轴,您将得到类似于下面的图表。在这里
Gini = B / (A + B)
。A + B 的面积为 0.5,因此 Gini = B / 0.5 简化为
Gini = 2*B
。
AUC = B + 0.5
这进一步简化为 B = AUC - 0.5。把这个方程代入
Gini = 2*B
Gini = 2*(AUC - 0.5)
Gini = 2*AUC - 1
版权声明:文章来自公众号(python风控模型),未经许可,不得抄袭。遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
欢迎学习更多风控建模相关知识《python金融风控评分卡模型和数据分析微专业课》
https://edu.51cto.com/sd/f2e9b