【Python】分类模型,模型评估指标KS的画图中有交叉是否正确?

我再利用真正例率和假正例率计算KS的时候发现,这两跟曲线会交叉,平时看到别人的都没有交叉,是我的代码错了?还是我的数据表现就是这样的?
这个是我的图

【Python】分类模型,模型评估指标KS的画图中有交叉是否正确?

这是别人的图(两个用的数据不一样的,我的关键问题是我的图这种交叉正常吗?)
至于我的图和别人的图的方向不一样这个我可以理解。
【Python】分类模型,模型评估指标KS的画图中有交叉是否正确?

from process.unsup_bin import AssignGroup

def cal_ks(rel_y,pre_y,is_plt):

'''

:param rel_y: 真实的分类,数组或者系列

:param pre_y: 预测的分类 逻辑回归预测出来的概率值

:param cut_number: 需要将阈值划分的区间数目 针对0-1的区间进行性划分

:return: AUC ks

'''

bin = np.arange(0, 1.1, 0.1)

#计算0-1的个数

#组合成数据框方便计算

data = pd.DataFrame({'rel_y':rel_y,'pre_y':pre_y})

#split probabilt accout to the cut point

data['cut_point'] = data['pre_y'].map(lambda x: AssignGroup(x, bin))

crossfreq = pd.crosstab(data['cut_point'], data['rel_y'] )

god_ctn = crossfreq.sum()[0] #真实的好样本的数量

bad_ctn = crossfreq.sum()[1]#真实的坏样本的数量

crossdens =pd.DataFrame()

crossdens[1]= 1 - crossfreq[1].cumsum(axis=0)/bad_ctn #真正率

crossdens[0] =1 - crossfreq[0].cumsum(axis=0)/god_ctn #假正率

# crossdens = 1- crossfreq.cumsum(axis=0) / crossfreq.sum()

crossdens['gap'] = abs(crossdens[1] - crossdens[0])

ks = crossdens[crossdens['gap'] == crossdens['gap'].max()]

print([1] + crossdens[1].tolist())

print( [1] + crossdens[1].tolist()+[0])

print([0] + crossdens.index.tolist()+[1] )

if is_plt ==1:

plt.plot([0] + crossdens.index.tolist()+[1] , [1] + crossdens[1].tolist()+[0], label='真正例率TPR')

plt.plot([0] + crossdens.index.tolist()+[1], [1] + crossdens[0].tolist()+[0], label='假正例率FPR')

# 显示图例

plt.legend()

# 显示图形

plt.show()

return ks,crossdens

回答

以上是 【Python】分类模型,模型评估指标KS的画图中有交叉是否正确? 的全部内容, 来源链接: utcz.com/a/80768.html

回到顶部