def __init__(self): dataset = Dataset('config_compas.json') x, y = dataset.get_data(readable=True) # r = "Af_vs_all" r = "Af_vs_Caucasian" # r = "all" x, y = get_dataframe(x, y, requested=r) self.finder = RelationshipsFinder(pd.concat([x, y], axis=1))
def main(): dataset = Dataset('config_compas.json') x, y = dataset.get_data(readable=True) # r = "Af_vs_all" r = "Af_vs_Caucasian" # r = "all" x, y = get_dataframe(x, y, requested=r) x_encoded, y_encoded = dataset.encode_data(x_df=x, y_df=y) # experimental setup # sex _|_ race | priors count # modify this to our experiment cases conditional_variables = ['race'] sensitive_attributes = ['sex'] combos, train_dfs = get_conditional_distribution( pd.concat((x_encoded, y_encoded), axis=1), conditional_variables) m = Metrics() if not combos: y_train = train_dfs['is_recid'].copy() x_train = train_dfs.drop('is_recid', axis=1).copy() x_test, y_test, pred = classify(x_train, y_train) print(x_test, y_test) df = pd.concat((x_test, y_test), axis=1).dropna().reset_index() y_hat = pd.DataFrame(pred).rename({0: 'y_hat'}, axis=1) dp = m.demographic_parity(x=df, y_hat=y_hat, sensitive_attributes=sensitive_attributes) print(dp) pp = m.predictive_parity(x=x_test.reset_index(drop=True), y=y_test.reset_index(drop=True), y_hat=y_hat, sensitive_attributes=sensitive_attributes) eo = m.equalized_odds(x=x_test.reset_index(drop=True), y=y_test.reset_index(drop=True), y_hat=y_hat, sensitive_attributes=sensitive_attributes) print(pp) print(eo) for combo, strat_df in list(zip(combos, train_dfs)): combo, strat = list(zip(combos, train_dfs))[-1] print("Conditional Attributes : " + str(conditional_variables)) # print("Sensitive attributes : "+str(sensitive_attributes)) print(" Combination: " + str(vars) + " " + str(combo)) y_train = strat_df['is_recid'].copy() x_train = strat_df.drop('is_recid', axis=1).copy() x_test, y_test, pred = classify(x_train, y_train) df = pd.concat((x_test, y_test), axis=1).dropna().reset_index() y_hat = pd.DataFrame(pred).rename({0: 'y_hat'}, axis=1) y_test.name = 'y' dp = m.demographic_parity(x=df, y_hat=y_hat, sensitive_attributes=sensitive_attributes) pp = m.predictive_parity(x=x_test.reset_index(drop=True), y=y_test.reset_index(drop=True), y_hat=y_hat, sensitive_attributes=sensitive_attributes) eo = m.equalized_odds(x=x_test.reset_index(drop=True), y=y_test.reset_index(drop=True), y_hat=y_hat, sensitive_attributes=sensitive_attributes) print(" Demographic Pariy: ") print(dp)