模型评估方法-K-S值-附R实现代码

2019-01-18修改,新增ks值的R语言实现

风控模型中计算K-S值方法:

K-S值主要验证风控模型对违约对象的区分能力,通常是在风控模型预测完全体样本的风控评分后,将全体样本按是否违约分为两部分,然后用K-S值检验两组样本的风控评分是否有显著差异

将全体样本按风控评分从低到高排序均分成十组,分别计算每组的实际好样本数、实际坏样本数、累计好样本数、累计坏样本数、累计好样本数占比(总好样本数)、累计坏样本数占比(总坏样本数)、abs(累计好样本数占比-累计坏样本数占比)

K-S值=max(abs(累计好样本数占比-累计坏样本数占比)),K-S值只能反映出哪个分段是区分最大的

全体样本被分为十等份,每份样本风控评分的最大值可视为阈值(小于阈值则预测为好样本),则累计好样本数占比为真阳性率,累计坏客户占比为假阳性率。K-S曲线的横座标是等分值,纵座标分别是TPR+FRP累计值

 K-S值>0.2即可认为模型具有比较好的预测准确性,值越大表示模型的区分度越好

ks_value=function(result,pre_prob,true_label){
	TPR <- NULL
	FPR <- NULL
	#预测概率从小到大排序
	for(i in seq(from=0,to=1,by=0.1)){
		#判为正类实际也为正类
		TP <- sum((result$pre_prob <= i) * (result$true_label == 1)) 
		#判为正类实际为负类
		FP <- sum((result$pre_prob <= i) * (result$true_label == 0))
		#判为负类实际为负类
		TN <- sum((result$pre_prob > i) * (result$true_label == 0)) 
		#判为负类实际为正类
		FN <- sum((result$pre_prob > i) * (result$true_label == 1))
		#真阳性率
		TPR <- c(TPR,round(TP/(TP+FN),3))
		#伪阳性率
		FPR <- c(FPR,round(FP/(FP+TN),3))
	}

	max(TPR-FPR)	
}

 

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