今天跟大家分享的是:K-s曲线,直接上干货。
一、K-s曲线是什么
K-s全称:Kolmogorov-Smirnov,中文名叫做洛伦兹曲线,Ks经常被用于模型风险区分能力进行评估, 指标衡量的是好坏样本累计分部之间的差值。好坏样本累计差异越大,Ks指标越大,那么模型的风险区分能力越强。
K-s曲线的数据来源和本质是与ROC曲线是一致的,只不过ROC曲线是将真正类率和假正类率作为横纵轴,K-s曲线则是把真正率和假正率都当作是纵轴,横轴为选定的阈值。
简单来理解就是:K-s曲线是两条线,横轴是阈值,纵轴是TPR与FPR的值,值范围[0.1] 。TPR与FPR这两条曲线之间相距最远的地方对应的阈值,为最能划分模型的阈值。
下面来解释以下TPR与FPR:
TPR:真正类率(true positive rate), 计算公式为TPR=TP/ (TP+ FN),刻画的是分类器所识别出的 正实例占所有正实例的比例。
FPR:假正类率(false positive rate),计算公式为FPR= FP / (FP + TN),计算的是分类器错认为正类的负实例占所有负实例的比例。
其中:
TP:真实为1且预测为1的数目
FN:真实为1且预测为0的数目
FP:真实为0的且预测为1的数目
TN:真实为0的且预测为0的数目
K-S值计算公式:K-S=max(TPR-FPR)
K-S值<0.2.一般认为模型没有区分能力。
K-S值[0.2.0.3],模型具有一定区分能力,勉强可以接受
K-S值[0.3.0.5],模型具有较强的区分能力。
K-S值大于0.75.往往表示模型有异常。
二、K-s曲线绘制
import matplotlib.pyplot as plt
#第一个参数是模型的预测值,第二个参数是模型的真实值
def draw_ks_curve(predict_result,true_result):
tpr_list = [] #存放真正率数据
fpr_list = [] #存放假正率数据
dif_list = [] #存放真假正率差值
max_ks_dot = []
for i in np.arange(0,1.1,0.1):
tpr = 0
fpr = 0
for j in range(len(predict_result)):
if list(predict_result[j])[0]>i and true_result[j]==1:
tpr = tpr+1
tpr_list.append(tpr)
if list(predict_result[j])[0]>i and true_result[j]==0:
fpr = fpr+1
fpr_list.append(fpr)
tpr = tpr/sum(true_result)
fpr = fpr/(len(true_result)-sum(true_result))
fig = plt.figure(num=1, figsize=(15, 8),dpi=80) #开启一个窗口,同时设置大小,分辨率
plt.plot(np.arange(0,1,0.1),tpr_list)
plt.plot(np.arange(0,1,0.1),fpr_list)