Example #1
0
def calc_covariance(s, decisions, ips_weights):
    new_s = (2 * s) - 1

    if ips_weights is not None:
        mu_s = mean(new_s * ips_weights, axis=0)
        d = decisions * ips_weights
    else:
        mu_s = mean(new_s, axis=0)
        d = decisions

    covariance = (new_s - mu_s) * d
    return covariance
Example #2
0
def fairness_function(type=None, **fairness_kwargs):
    s = fairness_kwargs["s"]
    ips_weights = fairness_kwargs[
        "ips_weights"] if "ips_weights" in fairness_kwargs else None
    decisions = "decision_probabilities" not in fairness_kwargs or not args.policy_type == "NN"

    decisions = fairness_kwargs["decisions"] if decisions else fairness_kwargs[
        "decision_probabilities"]
    y = fairness_kwargs["y"]

    type = args.fairness_type if type is None else type

    if type == "BD_DP":
        benefit = calc_benefit(decisions, ips_weights)
        return mean_difference(benefit, s)
    elif type == "COV_DP":
        covariance = calc_covariance(s, decisions, ips_weights)
        return mean(covariance, axis=0)
    elif type == "BD_EOP":
        benefit = calc_benefit(decisions, ips_weights)
        y1_indices = np.where(y.squeeze() == 1)
        return mean_difference(benefit[y1_indices], s[y1_indices])
Example #3
0
def fairness_function_gradient(**fairness_kwargs):
    policy = fairness_kwargs["policy"]
    x = fairness_kwargs["x"]
    s = fairness_kwargs["s"]
    y = fairness_kwargs["y"]
    decisions = fairness_kwargs["decisions"]
    ips_weights = fairness_kwargs["ips_weights"]

    if args.fairness_type == "BD_DP" or args.fairness_type == "BD_EOP":
        result = calc_benefit(decisions, ips_weights)
    elif args.fairness_type == "COV_DP":
        result = calc_covariance(s, decisions, ips_weights)

    log_gradient = policy.log_policy_gradient(x, s)
    grad = log_gradient * result

    if args.fairness_type == "BD_DP":
        return mean_difference(grad, s)
    elif args.fairness_type == "COV_DP":
        return mean(grad, axis=0)
    elif args.fairness_type == "BD_EOP":
        y1_indices = np.where(y == 1)
        return mean_difference(grad[y1_indices], s[y1_indices])
 def mean(self):
     return mean(self._measure, axis=1)
def cost_utility_probability(cost_factor=0.5, **utility_parameters):
    utility = _utility_core(cost_factor, True, **utility_parameters)
    return mean(utility, axis=0)
def cost_utility_gradient(cost_factor=0.5, **utility_parameters):
    utility = _utility_core(cost_factor, False, **utility_parameters)
    log_policy_gradient = utility_parameters["policy"].log_policy_gradient(
        utility_parameters["x"], utility_parameters["s"])
    utility_grad = log_policy_gradient * utility
    return mean(utility_grad, axis=0)