逾期率_CI下限和逾期率_CI上限是逾期率的置信区间,我这里用的是95% Wilson 置信区间。
简单理解:
逾期率:当前样本里实际观察到的逾期比例逾期率_CI下限:考虑样本量波动后,逾期率可能的偏低估计逾期率_CI上限:考虑样本量波动后,逾期率可能的偏高估计
比如近三天:
| 窗口 | 样本量 | 逾期率 | CI下限 | CI上限 |
|---|---|---|---|---|
| 近三天 | 114 | 48.2% | 39.3% | 57.3% |
意思是:当前看到逾期率是48.2%,但因为只有 114 单,存在样本波动,所以真实风险水平大致可能落在39.3% 到 57.3%之间。
它不是历史最低/最高,也不是每天的最小/最大值。
这个字段主要用来避免过拟合:
- 样本量越小,CI 区间越宽,结论越不稳。
- 如果两个客群逾期率差很多,但 CI 大量重叠,要谨慎。
- 如果某客群的
CI下限都明显高于整体逾期率,说明高风险更可信。 - 如果某客群的
CI上限都低于整体逾期率,说明低风险更可信。
n = 样本量
x = 逾期数
p = x / n = 观察到的逾期率
z = 1.96 # 95%置信区间
center = (p + z² / (2n)) / (1 + z² / n)
margin = z * sqrt((p * (1 - p) + z² / (4n)) / n) / (1 + z² / n)
CI下限 = center - margin
CI上限 = center + margin
样本量 n = 114
逾期数 x = 55
逾期率 p = 55 / 114 = 48.2%
逾期率_CI下限 ≈ 39.3%
逾期率_CI上限 ≈ 57.3%
importmathdefwilson_ci(overdue_cnt,total_cnt,z=1.96):n=total_cnt x=overdue_cntifn==0:returnNone,Nonep=x/n center=(p+z**2/(2*n))/(1+z**2/n)margin=(z*math.sqrt((p*(1-p)+z**2/(4*n))/n)/(1+z**2/n))lower=max(0,center-margin)upper=min(1,center+margin)returnlower,upper lower,upper=wilson_ci(55,114)print(lower,upper)print(f"{lower:.1%}",f"{upper:.1%}")