Ошибка «идеального разделения» при использовании Matcher из pymatch (сопоставление баллов склонности) - PullRequest
1 голос
/ 27 июня 2019

Я пытаюсь использовать пакет pymatch , но получаю сообщение об ошибке Error: Perfect separation detected, results not available. Я проверял несколько раз, мой набор данных не равен. Он содержит 260 тыс. Строк для контроля и 50 тыс. Для лечения и имеет различные средние значения. У меня только 5 переменных, все integers или Floats округлены до 2 десятичных знаков.

Моя цель состоит в том, чтобы сопоставить некоторых обработанных клиентов с необработанными для дальнейшего анализа на основе сопоставления баллов склонности.

Я уже убрал выбросы, так как, очевидно, он не может справиться с ними хорошо. Я также округлил десятичные дроби до 2 позиций после запятой. Я попытался использовать только 2 переменные из всего набора данных. Ничего не сработало.

d = {'Customer': ['A','B','C','D'], 'Basket_Size': [30, 40,25,30], 'Miles_away': [5.2, 15.4,16.3,7.2], 'was_treated': [1, 0,0,1]}
df = pd.DataFrame(data=d)
df

test = df[df.was_treated== 1]
control = df[df.was_treated== 0]

m = Matcher(test, control, yvar="was_treated", exclude=['Customer'])
## until here it runs perfectly fine

# output:

#Formula:
#was_treated~ Basket_Size+Miles_away
#n majority: 2
#n minority: 2


## this now throws the error
np.random.seed(20170925)
m.fit_scores(balance=True, nmodels=20)

# output: 
# Error: Perfect separation detected, results not available
# Fitting Models on Balanced Samples: 1\20

Я ожидаю вывод типа Average Accuracy: 78%, но получаю Average Accuracy: nan% и ошибку Error: Perfect separation detected, results not available

1 Ответ

1 голос
/ 27 июня 2019

Я решил проблему сам.По характеру данных, один variable был затронут лечением.Это означает, что ни у одной точки данных в was_treated== 1 не может быть Miles_away >10, и наоборот, ни у одной точки данных в was_treated== 0 не может быть Miles_away <10.Это было идеальное разделение.Исключение этого variable из оценки склонности решило проблему.


    m = Matcher(test, control, yvar="fast_delivery", exclude=['CUSTOMER_NUMBER','Miles_away'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...