python 画ks曲线_分类模型,模型评估指标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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我明白了。关于你的问题,计算KS和绘制KS曲线是大数据分析中常用的方法,Python也提供了相应的库来实现。下面是一些示例代码,可以用来计算KS和绘制KS曲线。 首先,我们需要导入相关的库: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt from scipy import stats ``` 接下来,我们需要读入数据,假设数据存在一个名为"data"的DataFrame中,其中包含了预测和真实两列: ```python pred = data['pred'] true = data['true'] ``` 然后,我们可以使用scipy库中的stats模块来计算KS: ```python ks = stats.ks_2samp(pred[true == 1], pred[true != 1]).statistic ``` 这里,我们使用了ks_2samp函数来计算KS,其中第一个参数是预测中真实为1的样本,第二个参数是预测中真实不为1的样本。函数返回的是KS。 最后,我们可以使用matplotlib库来绘制KS曲线: ```python fpr, tpr, thresholds = metrics.roc_curve(true, pred) ks = max(tpr-fpr) plt.plot(thresholds, 1.-fpr, label='False Positive Rate') plt.plot(thresholds, tpr, label='True Positive Rate') plt.plot(thresholds, tpr-fpr, label='KS curve (KS=%0.2f)' % ks) plt.xlabel('Threshold') plt.legend(loc='best') plt.show() ``` 这里,我们使用roc_curve函数来计算真正率和假正率,然后根据不同的阈绘制出KS曲线。函数返回的是三个数组,分别是假正率、真正率和阈。我们可以从中计算出KS。 这就是使用Python计算KS并绘制KS曲线的方法。希望能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值