最近在做一点点风控的东西,想把toad中的ks_bucket改修正下,原码里面是按得分的最大最小值划分的bucket,但我在实际的应用中想更个性化的划分节点去统计。
首先需要解决的一个问题是把0~1上的概率给划分到不同的区间,然后分别统计即可。
之前一直用groupby,分组后想count, sum,后变成df。在网上找了好几种方法,都没有成功,最后还是英文文档解决了我的问题。
bin_00 = [0, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 1] # 要分组的切割点
OOT['bucket'] = pd.cut(OOT['probi_1'], bin_00) # OOT['probi_1'] 是 我要划分的列
image.png
这是划分好后的各列情况 , 第一列:概率,第二列:所属的区间, 第三列: 实际的label
我主要是 想把这三列 , 按第二列分组,统计各区间的总数,和label为1的数
用NamedAgg 即可把原来的分组变为数据框。
OOT_groupby = OOT.groupby("bucket", as_index=False).agg(
total=pd.NamedAgg(column="probi_1", aggfunc="count"),
bads=pd.NamedAgg(column="label", aggfunc="sum"))
image.png
网友评论