Стратифицированная выборка с заданным объемом и разбиением на test/control

Python, Jupyter notebook

Имеется таблица вида:

df = pd.DataFrame({'id': ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20'], 
                       'segment':['1','1','1','1','1','1','2','2','2','2','1','1','1','1','1','1','2','2','2','2'],
                       'region':['MSK','SPB','SPB','SPB','SPB','SPB','SPB','MSK','MSK','MSK','MSK','SPB','SPB','SPB','SPB','SPB','SPB','MSK','MSK','MSK'],
                       'age':['20','40','40','20','20','20','20','40','40','40','20','40','40','20','20','20','20','40','40','40']                   
                      }) 

id - это уникальные идентификаторы клиентов. Необходимо сделать стратифицированные случайные выборки id для каждого segment. В результате нужно добавить в таблицу столбец "sample" со значениями: test/control/others(для id, которые не попадут в выборку)

Выборки по каждому сегменту должны соответствовать распределению region и age в данном сегменте. Для каждого сегмента требуется свой размер выборок и своя доля контрольной выборки от тестовой.

Размер выборок:

  1. по сегменту 1: test-4 человека и control-50% от test (2 человека)
  2. по сегменту 2: test-3 человека и control-100% от test (3 человека)
sample = pd.DataFrame({'segment':['1','2'],
                   'test_size':['4','3'],
                   'share_control_size':['0.5','1.0']                   
                  }) 

Ответы (0 шт):