2

我正在尝试使用pymatch包,但我不断收到错误消息Error: Perfect separation detected, results not available。我检查了多次,我的数据集不相等。它包含 260k 行用于控制和 50k 用于处理,并且具有不同的平均值。我只有 5 个变量,全部integersFloats四舍五入到 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

4

1 回答 1

3

我自己解决了这个问题。根据数据的性质,一个variable人受到治疗的影响。这意味着 in 中的任何数据点都was_treated== 1不能具有 a Miles_away >10,反之亦然, in 中的任何数据点都was_treated== 0不能具有Miles_away <10。这是完美的分离。variable从倾向评分中排除这一点解决了这个问题。


    m = Matcher(test, control, yvar="fast_delivery", exclude=['CUSTOMER_NUMBER','Miles_away'])
于 2019-06-27T13:07:21.317 回答