You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OptBinning自定义分箱生成统计表格时缺失首箱的问题解决

问题:基于optbinning自定义分箱生成完整统计表格

希望用optbinning库基于已有的自定义分箱生成包含所有指标的统计表格,无需执行分箱优化操作。但使用user_splits参数指定分箱后,生成的表格缺失首箱(-inf,28];添加user_splits_fixed参数后效果更差。

模拟数据集代码

import random
import pandas as pd
from datetime import datetime, timedelta
from optbinning import OptimalBinning

# 设置随机种子确保可复现
random.seed(42)

# 生成模拟数据
data = {
    'GB': [random.choice([0, 1]) for _ in range(2000)],
    'Period': [(datetime(2021, 1, 1) + timedelta(days=random.randint(0, 731))).strftime("%m/%Y") for _ in range(2000)],
    'Age': [random.randint(18, 80) if random.random() > 0.2 else None for _ in range(2000)],
    'L6ag': [random.randint(0, 9) if random.random() > 0.2 else None for _ in range(2000)],
    'L_3M': [chr(random.randint(65, 90)) if random.random() > 0.2 else None for _ in range(2000)],
    'M36m': [random.randint(0, 1000) for _ in range(2000)],
    'Balance': [random.randint(0, 100000) for _ in range(2000)]
}

df = pd.DataFrame(data)

正确解决方案代码

核心是添加skip_optimal_binning=True参数,强制跳过optbinning的优化分箱逻辑,严格保留用户指定的分箱分割点:

# 定义自定义分箱分割点
custom_bins = [28, 37, 63, 67]

# 初始化分箱对象,跳过优化流程
optb = OptimalBinning(
    name="Age", 
    dtype="numerical", 
    user_splits=custom_bins,
    skip_optimal_binning=True  # 关键参数:关闭分箱优化,完全使用自定义分箱
)

# 拟合数据
optb.fit(df["Age"], df["GB"])

# 生成并查看完整统计表格
binning_table = optb.binning_table
binning_table.build()

# 打印统计表格(包含样本量、坏样本率、WOE等指标)
print(binning_table.table)

# 可选:可视化分箱结果
binning_table.plot(metric="woe")

补充方案:直接指定分箱区间

如果需要更精确控制每个分箱的上下限,可以在拟合后手动设置分箱:

# 明确指定所有分箱区间
custom_bin_intervals = [
    (-float('inf'), 28),
    (28, 37),
    (37, 63),
    (63, 67),
    (67, float('inf'))
]

# 初始化并拟合分箱对象
optb = OptimalBinning(name="Age", dtype="numerical")
optb.fit(df["Age"], df["GB"])

# 设置自定义分箱并构建表格
optb.binning_table.set_bins(custom_bin_intervals)
optb.binning_table.build()

print(optb.binning_table.table)

问题原因说明

默认情况下,OptimalBinning会执行分箱优化逻辑(比如合并样本量过少的分箱、调整分箱满足单调性要求),即使设置了user_splits也可能被调整。skip_optimal_binning=True会完全跳过这一流程,严格按照用户指定的分割点生成分箱,确保所有自定义分箱都被保留。

内容的提问来源于stack exchange,提问作者TomasLeon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 04:47:41