Python计算KS值并绘制KS曲线

  

<强> 更多大数据分析,建模等内容请关注公众号《bigdatamodeling》

  

python实现KS曲线,相关使用方法请参考上篇博客- r语言实现KS曲线

  

代码如下:

  
 <代码> # # # # # # # # # # # # # # # # # # # # # # # PlotKS # # # # # # # # # # # # # # # # # # # # # # # # # #
  def PlotKS(仅仅,标签,n, asc):
  
  #仅仅是分数:asc=1
  #仅仅是概率:asc=0
  
  pred=仅仅#预测值
  坏=标签#取1为坏,0为好
  ksds=DataFrame({“坏”:糟糕,“pred”: pred})
  ksds(“好”)=1 - ksds.bad
  
  如果asc==1:
  ksds1=ksds。sort_values (=皃red”,“坏”,提升=(真的,真的))
  elif asc==0:
  ksds1=ksds。sort_values (=皃red”,“坏”,提升=[假,真])
  ksds1。指数=范围(len (ksds1.pred))
  ksds1 [' cumsum_good1 ')=1.0 * ksds1.good.cumsum()/笔(ksds1.good)
  ksds1 [' cumsum_bad1 ')=1.0 * ksds1.bad.cumsum()/笔(ksds1.bad)
  
  如果asc==1:
  ksds2=ksds。sort_values (=皃red”,“坏”,提升=[真,假])
  elif asc==0:
  ksds2=ksds。sort_values (=皃red”,“坏”,提升=[假,假])
  ksds2。指数=范围(len (ksds2.pred))
  ksds2 [' cumsum_good2 ')=1.0 * ksds2.good.cumsum()/笔(ksds2.good)
  ksds2 [' cumsum_bad2 ')=1.0 * ksds2.bad.cumsum()/笔(ksds2.bad)
  
  # ksds1 ksds2→平均
  ksds=ksds1 [[‘cumsum_good1’,‘cumsum_bad1]]
  ksds [' cumsum_good2 ']=ksds2 (“cumsum_good2”)
  ksds [' cumsum_bad2 ']=ksds2 (“cumsum_bad2”)
  ksds [' cumsum_good ')=(ksds [' cumsum_good1 '] + ksds [' cumsum_good2 '])/2
  ksds [' cumsum_bad ')=(ksds [' cumsum_bad1 '] + ksds [' cumsum_bad2 '])/2
  
  # ks
  ksds [“ks”]=ksds [' cumsum_bad '] - ksds (“cumsum_good”)
  ksds [' tile0 ']=范围(1,len (ksds.ks) + 1)
  ksds(“瓷砖”)=1.0 * ksds [' tile0 ']/len (ksds [' tile0 '])
  
  量化宽松政策=列表(np。不等(1.0 0 1/n))
  qe.append (1)
  量化宽松政策=量化宽松(1:)
  
  ks_index=系列(ksds.index)
  ks_index=ks_index。分位数(q=qe)
  ks_index=np.ceil (ks_index) .astype (int)
  ks_index=列表(ks_index)
  
  ksds=ksds.loc [ks_index]
  ksds=ksds[[“瓷砖”,“cumsum_good”,“cumsum_bad”、“ks”]]
  ksds0=np。数组([[0,0,0,0]])
  ksds=np。连接([ksds0, ksds],轴=0)
  ksds=DataFrame (ksds列=[“瓷砖”,“cumsum_good”,“cumsum_bad”、“ks”))
  
  ks_value=https://www.yisu.com/zixun/ksds.ks.max ()
  ks_pop=ksds.tile [ksds.ks.idxmax ())
  打印(ks_value是' + str (np。轮(ks_value, 4)) + + str (np流行=B?ks_pop, 4)))
  
  #图
  plt.plot (ksds。瓷砖,ksds。cumsum_good标签=癱um_good”,
  颜色=袄丁?线型=?”,线宽=2)
  
  plt.plot (ksds。瓷砖,ksds。cumsum_bad标签=癱um_bad”,
  颜色='红',线型=?”,线宽=2)
  
  plt.plot (ksds。瓷砖,ksds。ks,标签=発s”,
  颜色=奥躺?线型=?”,线宽=2)
  
  plt。axvline (ks_pop,颜色=盎疑?线型=?”)
  plt。axhline (ks_value颜色=奥躺?线型=?”)
  plt.axhline (ksds.loc [ksds.ks.idxmax (), ' cumsum_good '],颜色=袄丁?线型=?”)
  plt.axhline (ksds.loc [ksds.ks.idxmax (), ' cumsum_bad '],颜色=臁?线型=?”)
  plt。标题(KS=% s % np。(ks_value 4) +
  在流行=% s % np。轮(ks_pop 4)字形大?15)
  
  返回ksds
  # # # # # # # # # # # # # # # # # # # # # # #在# # # # # # # # # # # # # # # # # # # # # # # # # #  
  

作图效果如下:
 Python计算KS值并绘制KS曲线

Python计算KS值并绘制KS曲线