在本文中,我們介紹了如何計算預測模型的基尼系數、累積準确度分布 (CAP) 和曲線下面積 (AUC)。這篇文章的目的就是用通俗的語言解釋這些概念,讓外行人能夠了解其背後的數學原理。
這些方法測量預測模型的判别力。判别力意味着預測模型是否能夠區分事件(預期結果)和非事件。在信用風險模組化中,它評估違約機率模型是否能夠區分好客戶和壞客戶。與其他領域相比,這兩個名額累積準确度概況和基尼系數在信用風險分析中更為常見。
累積精度曲線 (CAP)
信用評級模型的累積準确度概況 (CAP) 在 x 軸上顯示所有借款人(債務人)的百分比,在 y 軸上顯示違約者(不良客戶)的百分比。在營銷分析中,它被稱為
Gain Chart
. 它在其他一些領域也稱為功率曲線。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsAjMfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SOjBTO0cjY5YmNhNDNwQjM3ATO0EDOhNTOlVDN1ETNw8CXzIzLcdDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL4M3Lc9CX6MHc0RHaiojIsJye.png)
解釋
通過使用CAP,您可以将目前模型的曲線與“理想或完美”模型的曲線進行比較,也可以将其與随機模型的曲線進行比較。“完美模型”是指可以直接捕獲所有不良客戶(預期結果)的理想狀态。“随機模型”是指不良客戶比例平均分布的狀态。“目前模型”是指您的預設模型(或您正在使用的任何其他模型)的機率。我們總是試圖建立一個傾向于(更接近)完美模型曲線的模型。我們可以将目前模型解讀為“在給定的十分位數級别覆寫的不良客戶的百分比”。例如,僅根據模型選擇前 30% 的債務人,就可以捕獲 89% 的不良客戶。
建立累積精度曲線的步驟
- 按降序對估計的違約機率進行排序,并将其分成 10 個部分(十分位數)。這意味着具有高 PD 的風險最高的借款人應位于前十分之一,而最安全的借款人應出現在底部十分之一。将分數分成 10 個部分不是拇指規則。相反,您可以使用評級等級。
- 計算每個十分位數的借款人(觀察)數量
- 計算每個十分位數的壞客戶數量
- 計算每個十分位數的累積壞客戶數
- 計算每個十分位數中不良客戶的百分比
- 計算每個十分位數中不良客戶的累積百分比
到目前為止,我們已經完成了基于 PD 模型的計算(記住第一步是基于從 PD 模型獲得的機率)。
下一步:基于完美模型,每個十分位數中的不良客戶數量應該是多少?
- 在完美模型中,第一個十分位數應捕獲所有不良客戶,因為第一個十分位數是指最差的評級等級或違約可能性最高的借款人。在我們的案例中,第一個十分位數無法捕獲所有不良客戶,因為第一個十分位數中的借款人數量少于不良客戶總數。
- 基于完美模型計算每個十分位數的累計不良客戶數
- 基于完美模型計算每個十分位數中壞客戶的累積百分比
下一步:基于随機模型計算每個十分位數中不良客戶的累積百分比在随機模型中,每個十分位數應占 10%。當我們計算累積百分比時,十分位 1 為 10%,十分位 2 為 20%,依此類推,直到十分位 10 為 100%。
下一步:根據目前、随機和完美模型建立一個帶有累積壞品百分比的圖。在 x 軸上,它顯示借款人(觀察)的百分比,y 軸表示壞客戶的百分比。
準确率
在 CAP(累積準确度分布)的情況下,準确率是您目前預測模型與對角線之間的面積與完美模型與對角線之間的面積之比。換句話說,它是目前模型相對于随機模型的性能改進與完美模型相對于随機模型的性能改進的比率。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsAjMfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SOjBTO0cjY5YmNhNDNwQjM3ATO0EDOhNTOlVDN1ETNw8CXzIzLcdDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL4M3Lc9CX6MHc0RHaiojIsJye.png)
如何計算準确率
第一步是計算目前模型與對角線之間的面積。我們可以使用梯形規則數值積分方法計算目前模型下方的面積(包括對角線下方的面積)。梯形的面積是
( 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