python 曲线分析_大数据分析之Python计算KS值并绘制KS曲线
本篇教程探討了大數據分析之Python計算KS值并繪制KS曲線,希望閱讀本篇文章以后大家有所收獲,幫助大家對相關內容的理解更加深入。
python實現KS曲線,相關使用方法請參考上篇博客-R語言實現KS曲線
代碼如下:#######################?PlotKS?##########################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?=?DataFrame({'bad':?bad,?'pred':?pred})????ksds['good']?=?1?-?ksds.bad????if?asc?==?1:????????ksds1?=?ksds.sort_values(by=['pred',?'bad'],?ascending=[True,?True])????elif?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])????elif?asc?==?0:????????ksds2?=?ksds.sort_values(by=['pred',?'bad'],?ascending=[False,?False])????ksds2.index?=?range(len(ksds2.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']?=?(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']?=?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?=?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='gray',?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#######################?over?##########################
本文由職坐標整理發布,學習更多的相關知識,請關注職坐標IT知識庫!
總結
以上是生活随笔為你收集整理的python 曲线分析_大数据分析之Python计算KS值并绘制KS曲线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python常用内置函数可以操作字符串_
- 下一篇: 爱python网_Python