コード例 #1
0
 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))
コード例 #2
0
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)