分类模型,模型评估指标KS的画图中有交叉是否正确?
我再利用真正例率和假正例率计算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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论