in causalml/match.py [0:0]
def check_table_one(self, tableone, matched, score_cols, pihat_threshold,
caliper):
# check if better than past runs
smd_values = np.abs(tableone[tableone.index != 'n']['SMD'].astype(float))
num_cols_over_smd = (smd_values >= self.max_smd).sum()
self.cols_to_fix = smd_values[smd_values >= self.max_smd].sort_values(ascending=False).index.values
if self.user_col is None:
num_users_per_group = matched.reset_index().groupby(self.treatment_col)['index'].count().min()
else:
num_users_per_group = matched.groupby(self.treatment_col)[self.user_col].count().min()
deviations = [np.abs(self.original_stats[col] / matched[matched[self.treatment_col] == 1][col].mean() - 1)
for col in self.dev_cols_transformations.keys()]
score = num_cols_over_smd
score += len([col for col in self.smd_cols if smd_values.loc[col] >= self.max_smd])
score += np.sum([dev*10*self.dev_factor for dev in deviations])
# check if can be considered as best score
if score < self.best_score and num_users_per_group > self.min_users_per_group:
self.best_score = score
self.best_params = {'score_cols': score_cols.copy(), 'pihat': pihat_threshold, 'caliper': caliper}
self.best_matched = matched.copy()
if self.verbose:
logger.info('\tScore: {:.03f} (Best Score: {:.03f})\n'.format(score, self.best_score))
# check if passes all criteria
self.pass_all = ((num_users_per_group > self.min_users_per_group) and (num_cols_over_smd == 0) and
all([dev < self.max_deviation for dev in deviations]))