【问题标题】:Optimize distributions in bucketing bins in python在 python 中优化分桶箱中的分布
【发布时间】:2019-10-22 13:37:33
【问题描述】:

我有一个桶问题,我想用 Python 解决,并且好奇是否有人对最佳方法(或现有包)有想法。我有一个人群,我想为其创建 10 个垃圾箱。人口有一个分数,并被分成5组。

我的目标是根据分数创建分箱,以便 5 组中的每一个的分布尽可能细化和平滑。例如。 A 组人口的每个箱的最大分布 箱 3 的差异必须具有

我对粒度优化的想法是最小化残差。例如。为每个组创建一个均匀分布(即每组 10%),并尝试一系列不同的削减,以最小化 (Actual Bucket% - 10%) 的总和,并设置上面的约束。但真的不知道如何开始。

这是数据集的一个示例。

# intialise data of lists. 
data = {'ID':['1111', '1112', '1113', '1114',....],
        'Group':[A, A, B, B,....],
        'Score':[0.02123,0.03243,0.43543,0.12213,...]}

以下是 5 个组的分布情况,x 轴为分数,y 轴为频率占组总数的百分比。

【问题讨论】:

  • “分数”在“组”中的分布是否大致相同?例如data.groupby('Group')['Score'].describe() 说什么
  • 没有。 A 组的得分偏低,B 组的得分偏高,C-E 组的分布更正态。
  • 只是为了确认:您正在尝试选择一组值来指定直方图箱之间的中断,这些值应该进行优化,以便每个组的直方图(使用这个共享的中断集)尽可能统一。如果是这样,我不确定你能做多少。我会尝试在答案中解释,但认为stats.stackexchange.com 可能是一个更好的论坛
  • 是的,没错。谢谢山姆!

标签: python optimization bucket bins


【解决方案1】:

我不确定您是否可以做更多事情:

p = np.arange(1, 10) / 10
q = np.quantile(data['Score'], p)

即选择均匀间隔的值 (0.1, 0.2, …, 0.9) 然后使用 获取分数的分位数。

要了解为什么我发现很难做得更好,走极端是有帮助的,例如单个分割点/断点。在优化这种情况时,总是会在橙色组和紫色组之间进行权衡。将断点放在紫色组的中间,例如在 0.6 时,将(几乎)所有橙色组放入下组,而没有放入上组。添加更多的切割/断点并没有多大帮助,较低的分位数将始终包含大部分橙色组,等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 2017-07-31
    • 2022-01-06
    • 2016-07-24
    • 2013-04-19
    • 2018-04-15
    • 1970-01-01
    相关资源
    最近更新 更多