Оптимизация распределений в корзинах в Python - PullRequest
0 голосов
/ 22 октября 2019

У меня есть проблема с корзиной, которую я хотел бы решить в Python, и мне интересно, есть ли у кого-нибудь идеи о лучших подходах (или существующих пакетах). У меня есть население, для которого я хотел бы создать 10 корзин. Население имеет оценку и было разделено на 5 групп.

Моя цель - создать ячейки на основе результатов, чтобы распределение каждой из 5 групп было как можно более детальным и плавным. Например, максимальное распределение для каждой корзины для группы А <20% И отличие от корзины 2 -> корзины 3 должно иметь изменение <+/- 10%. То же самое для группы B .... </p>

Моя идея оптимизации гранулярности заключается в минимизации остатков. Например, создайте равномерное распределение для каждой из групп (т. Е. 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. enter image description here

1 Ответ

0 голосов
/ 24 октября 2019

Я не уверен, что можно сделать гораздо больше:

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

, то есть выбрать равномерно распределенные значения (0.1, 0.2, …, 0.9), а затем использовать, чтобы получить квантили ваших оценок.

чтобы понять, почему мне было трудно добиться большего, полезно перейти к крайностям, например, к одному разделительному разрезу / точке останова. при оптимизации этого случая всегда будет компромисс между оранжевой группой и фиолетовой. если поставить точку разрыва в середине фиолетовой группы, например, на 0,6, все оранжевые группы (почти) поместятся в нижнюю группу, а в верхнюю - ни одной. добавление большего количества точек нарезки / прерывания не очень помогает, нижние квантили всегда будут содержать большую часть оранжевой группы и т. д.

...