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

如何实现等行数十分位拆分并获取区间?解决重复值干扰

解决方案

可以通过先给概率添加唯一排名,再按排名分箱,最后分组统计概率区间的方式,同时实现等行分箱和获取对应概率范围,具体步骤如下:

1. 示例数据准备(可替换为你的真实数据)

import pandas as pd
import numpy as np

# 生成带重复概率的测试数据(模拟predict_proba的输出)
np.random.seed(42)
prob_data = np.concatenate([np.repeat(0.5, 20), np.random.uniform(0.1, 0.9, 80)])
test_df = pd.DataFrame({"VALIDATION_PROB_1": prob_data})

2. 实现等行分箱并获取概率区间

# 给概率列添加唯一排名(避免重复值导致qcut分箱不均)
test_df['unique_rank'] = test_df['VALIDATION_PROB_1'].rank(method='first')

# 按排名做10等分箱,同时获取分箱边界(retbins=True)
test_df['TOP_DECILE'], _ = pd.qcut(
    test_df['unique_rank'],
    q=10,
    retbins=True,
    labels=[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
)

# 分组统计每个分箱对应的概率最小值和最大值,生成区间
decile_prob_ranges = test_df.groupby('TOP_DECILE')['VALIDATION_PROB_1'].agg(
    min_prob='min',
    max_prob='max'
).reset_index()

# 格式化概率区间列
decile_prob_ranges['PROB_RANGE'] = decile_prob_ranges.apply(
    lambda row: f"[{row['min_prob']:.4f}, {row['max_prob']:.4f}]",
    axis=1
)

3. 查看结果

  • 查看分箱的统计结果(包含分箱标签和对应概率区间):
print(decile_prob_ranges)
  • 如果需要把区间合并到原DataFrame,可使用merge:
test_df = test_df.merge(decile_prob_ranges[['TOP_DECILE', 'PROB_RANGE']], on='TOP_DECILE', how='left')

说明

  • 用rank(method='first')给重复概率生成唯一排名,确保pd.qcut能将数据严格分成10个行数相等的分箱;
  • 通过groupby统计每个分箱的概率极值,即可得到对应分箱的概率范围,完全满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:01:24