R語言模擬保險模型中分類器的ROC曲線不良表現

原文鏈接:http://tecdat.cn/?p=13518


在課程中進行案例研究(使用真實數據)時,學生都會驚訝地發現很難獲得“好”模型,而當試圖對索賠的概率進行建模時,他們總是會驚訝地發現AUC較低。因爲保險中存在很多'隨機性'。

更具體地說,我決定進行一些模擬,並計算AUC以查看發生了什麼。而且由於我不想浪費時間進行擬合模型,因此我們假設每次都有一個完美的模型。因此,我想表明AUC的上限實際上很低!因此,這不是建模問題,而是保險業的基礎問題。

我們使用協變量(例如在汽車保險中的汽車駕駛員的年齡或在人壽保險中的保單持有人的年齡等)。然後我們使用它們來訓練模型。然後,我們使用從混淆矩陣獲得的ROC曲線來檢查我們的模型是否良好。在這裏,我不會嘗試構建模型。我會預測每次真實基礎概率超過閾值!

在這裏 p(\ omega_1)表示索賠損失,欺詐等的可能性。這裏存在異質性,這種異質性可以很小,也可以很大。請看下面的圖表來說明,

在這兩種情況下,平均有25%的機會要求賠償損失。但是在左邊,存在更多的異構性,更多的分散性。爲了說明這一點,我使用了箭頭。

考慮一些帶有伯努利變量的數據集 y,用這些概率得出p( omega),ω )。然後,我們假設我們能夠得到一個完美的模型:我不會基於某些協變量來估計模型,在這裏,我假設我完全知道概率。更具體地說,爲了生成概率向量,在這裏我使用具有給定均值和給定方差的Beta分佈(以捕獲上面提到的異質性).

 

a=m*(m*(1-m)/v-1)
b=(1-m)*(m*(1-m)/v-1)
p=rbeta(n,a,b)
 

從這些概率中,我模擬了索賠或死亡的發生,

 

Y=rbinom(n,size = 1,prob = p)
 

然後,我計算出“完美”模型的AUC

 

auc.tmp=performance(prediction(p,Y),"auc")
 

然後,我將生成許多樣本,以計算AUC的平均值。我們可以對Beta分佈的均值和方差的許多值執行此操作。這是代碼

Vm=seq(.025,.975,by=.025)
Vi=seq(.01,.5,by=.01)
V=outer(X = Vm,Y = Vi, Vectorize(function(x,y) 
Sim_AUC_mean_inter(x,y)$moy_AUC))
library("RColorBrewer")
image(Vm,Vi,V,
      xlab="Probability (Average)",
      ylab="Dispersion (Q95-Q5)",
      col=
        colorRampPalette(brewer.pal(n = 9, name = "YlGn"))(101))
contour(Vm,Vi,V,add=TRUE,lwd=2)

 

 

 

x軸上,我們有索賠的平均概率。當然,這裏是對稱的。在y軸上,我們具有分散性:投資組合中的異質性越低,其混合性就越小。例如,平均有30%的機會要求損失,分散度爲20%(這意味着在投資組合中,90%的被保險人有20%至40%的機會主張損失),我們平均有60%的AUC。

根據我的經驗,在汽車保險中,90%的被保險人有3%到20%的機會要求賠償,在那種情況下,即使(平均)概率很小,也期望AUC很難高於60%或65%。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章