首页 > 其他分享 >画ks曲线能得到阈值和精确ks

画ks曲线能得到阈值和精确ks

时间:2023-12-09 14:34:16浏览次数:25  
标签:ksds 阈值 曲线 ks bad ksds2 ksds1 cumsum

尝试模型代码
1、画出p值

实现ks计算

from sklearn.metrics import roc_curve
from sklearn.pipeline import make_pipeline
import matplotlib
import matplotlib.pyplot as plt
matplotlib.rcParams['font.family']='SimHei'

实现ks计算

from sklearn.metrics import roc_curve
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif'] = ['SimHei']#中文字体设置-黑体
plt.rcParams['axes.unicode_minus'] = False #解决保存图像是负号'-'显示为方块的问题
sns.set(font='SimHei') #解决Seaborn中文显示的问题
import pandas as pd
from pandas import Series
def PlotKS(preds,labels,n,asc):
#preds is score:asc=1
#preds is prob:asc=0
pred=preds #预测值
bad=labels #1为bad,0为good
ksds=pd.DataFrame({'bad':bad,'pred':pred})
ksds['good']=1-ksds.bad

if asc==1:
    ksds1=ksds.sort_values(by=['pred','bad'],ascending=[True,True])
if asc==0:
    ksds1=ksds.sort_values(by=['pred','bad'],ascending=[False,True])
ksds1.index=range(len(ksds1.pred))
ksds1['cumsum_good1']=1.0*ksds1.good.cumsum()/sum(ksds1.good)
ksds1['cumsum_bad1']=1.0*ksds1.bad.cumsum()/sum(ksds1.bad)

if asc==1:
    ksds2=ksds.sort_values(by=['pred','bad'],ascending=[True,False])
if asc==0:
    ksds2=ksds.sort_values(by=['pred','bad'],ascending=[False,False])
ksds2.index=range(len(ksds1.pred))
ksds2['cumsum_good2']=1.0*ksds2.good.cumsum()/sum(ksds2.good)
ksds2['cumsum_bad2']=1.0*ksds2.bad.cumsum()/sum(ksds2.bad) 

#ksds1,ksds2->average
ksds=ksds1[['cumsum_good1','cumsum_bad1']]
ksds['cumsum_good2']=ksds2['cumsum_good2']
ksds['cumsum_bad2']=ksds2['cumsum_bad2']
ksds['cumsum_good']=(ksds1['cumsum_good1']+ksds2['cumsum_good2'])/2
ksds['cumsum_bad']=(ksds1['cumsum_bad1']+ksds2['cumsum_bad2'])/2

#ks
ksds['ks']=ksds['cumsum_bad']-ksds['cumsum_good']
ksds['tile0']=range(1,len(ksds.ks)+1)
ksds['tile']=1.0*ksds['tile0']/len(ksds['tile0'])

qe=list(np.arange(0,1,1.0/n))
qe.append(1)
qe=qe[1:]

ks_index=Series(ksds.index)
ks_index=ks_index.quantile(q=qe)
ks_index=np.ceil(ks_index).astype(int)
ks_index=list(ks_index)

ksds=ksds.loc[ks_index]
ksds=ksds[['tile','cumsum_good','cumsum_bad','ks']]
ksds0=np.array([[0,0,0,0]])
ksds=np.concatenate([ksds0,ksds],axis=0)
ksds=pd.DataFrame(ksds,columns=['tile','cumsum_good','cumsum_bad','ks'])

ks_value=ksds.ks.max()
ks_pop=ksds.tile[ksds.ks.idxmax()]
print('ks_value is '+ str(np.round(ks_value,4))+' + at pop = '+ str(np.round(ks_pop,4)))

#chart
plt.plot(ksds.tile,ksds.cumsum_good,label='cum_good',color='blue', linestyle='-',linewidth=2)
plt.plot(ksds.tile,ksds.cumsum_bad,label='cum_bad',color='red', linestyle='-',linewidth=2)
plt.plot(ksds.tile,ksds.ks,label='ks',color='green', linestyle='-',linewidth=2)

plt.axvline(ks_pop,color='grey',linestyle='--')
plt.axhline(ks_value,color='green',linestyle='--')
plt.axhline(ksds.loc[ksds.ks.idxmax(),'cumsum_good'],color='blue',linestyle='--')
plt.axhline(ksds.loc[ksds.ks.idxmax(),'cumsum_bad'],color='red',linestyle='--')
plt.title('KS=%s' %np.round(ks_value,4)+
         'at Pop=%s' %np.round(ks_pop,4),fontsize=15)
return ksds

PlotKS(train_out2[:,1], train_date['y'],20,0)
plt.show()

标签:ksds,阈值,曲线,ks,bad,ksds2,ksds1,cumsum
From: https://www.cnblogs.com/chenqianguan/p/17890907.html

相关文章

  • 详解十大经典排序算法(六):快速排序(QuickSort)
    算法原理分区(Partition):选择一个基准元素,将数组分为两个子数组,小于基准的放在左边,大于基2准的放在右边。递归排序:对左右两个子数组分别进行快速排序。合并:不需要实际的合并操作,因为在分解和递归排序阶段已经完成了排序。算法描述快速排序是一种基于分治思想的高效排序算法,由英国......
  • CV常用Tricks
    训练CV比赛常用Tips&Tricks目录引言1.图像增强颜色增强RGBNormBlackandWhiteBenGraham:Grayscale+GaussianBlurHue,Saturation,BrightnessLUVColorSpaceAlphaChannelYZColorSpaceLumaChromaCIELabYUVColorSpaceCenterCropFlippingsRandom......
  • 圆锥曲线
    圆锥曲线椭圆椭圆及其标准方程把细绳的两端拉开一段距离,笔尖移动的过程中,细绳的长度保持不变,即笔尖到两个定点的距离的和等于常数。我们把平面内与两个定点\(F_1\),\(F_2\)的距离的和等于常数的(大于\(|F_1F_2|\))点的轨迹叫做椭圆。这两个定点叫做椭圆的焦点,两焦点间的距离叫......
  • R语言逻辑回归logistic对ST股票风险建模分类分析混淆矩阵、ROC曲线可视化
    全文链接:https://tecdat.cn/?p=34506原文出处:拓端数据部落公众号信用风险建模是金融领域的重要课题,通过建立合理的信用风险模型,可以帮助金融机构更好地评估借款人的信用状况,从而有效降低信贷风险。本文使用了R语言中的逻辑回归(logistic)模型,利用国泰安数据库中的103个上市公司......
  • 股票软件具有AI智能学习报警阈值功能
    一.报警阈值自动学习功能软件中有很多的报警阈值参数需要去设置,增长速度的报警阈值。例如大单交易量的报警阈值、分时量比的报警阈值。阈值设置为多少才是合适呢?以前都是人们根据经验去设置,很难设置准确,而且没有办法根据最新的数据实时的调整阈值大小。所以这次开发了报警阈值参......
  • VMware Workstation虚拟机的安装
    VMwareWorkstation虚拟机的安装,这个可算是把我搞得头疼,首先就是去网上找下载资源,我记着下了很久很久,下了两个小时左右才安装完成。然而当我觉得安装完成,可以好好地休息的时候,我准备试着打开VMwareWorkstation,看能否顺利启动时,结果出现了蓝屏重启问题,然后我又重新试了一遍,再一次......
  • SOLIDWORKS参数化工具如何设置部分提取
    编制参数表是参数化设置必不可少的一环,提取零部件参数又是生成参数表所必须的步骤,然而很多时候,模型的量级很大,需要变化的零部件只有三分之一,那如果全部提取出来,将耗费大量的时间,因此部分提取的设置就显得尤其重要。在软件的设置中,会定义<Type>属性名,比如属性名定义为零件类型,那我......
  • SOLIDWORKS参数化设计之修改新零件颜色
    SOLIDWORKS参数化设计完成之后,可能会涉及到很对零件的修改,有时我们想很直观的看到哪些零件是发生变化了的,那通过颜色的区分就很容易观察。为了适应这部分工程师的需求,SolidKits.AutoWorks软件中增加了修改新零件颜色的功能,软件能够自动识别修改的零件,即新生成的零件,双击颜色框即......
  • A novel essential protein identification method based on PPI networks and gene e
    AnovelessentialproteinidentificationmethodbasedonPPInetworksandgeneexpressiondataJianchengZhong 1 2, ChaoTang 1, WeiPeng 3, MinzhuXie 1, YusuiSun 1, QiangTang 4, QiuXiao 5, JiahongYang 6Affiliations expandPMID:......
  • Predicting gene expression from histone modifications with self-attention based
    Predictinggeneexpressionfromhistonemodificationswithself-attentionbasedneuralnetworksandtransferlearningYuchiChen 1, MinzhuXie 1, JieWen 1Affiliations expandPMID: 36588793 PMCID: PMC9797047 DOI: 10.3389/fgene.2022.1081......