Стратифицированная выборка с заданным объемом и разбиением на 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: test-4 человека и control-50% от test (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']
})