fairness_check_regression {fairmodels} | R Documentation |
Fairness check regression
Description
This is an experimental approach. Please have it in mind when using it. Fairness_check_regression enables to check fairness in regression models. It uses so-called probabilistic classification to approximate fairness measures. The metrics in use are independence, separation, and sufficiency. The intuition behind this method is that the closer to 1 the metrics are the better. When all metrics are close to 1 then it means that from the perspective of a predictive model there are no meaningful differences between subgroups.
Usage
fairness_check_regression(
x,
...,
protected = NULL,
privileged = NULL,
label = NULL,
epsilon = NULL,
verbose = TRUE,
colorize = TRUE
)
Arguments
x |
object created with |
... |
possibly more objects created with |
protected |
factor, protected variable (also called sensitive attribute), containing privileged and unprivileged groups |
privileged |
factor/character, one value of |
label |
character, vector of labels to be assigned for explainers, default is explainer label. |
epsilon |
numeric, boundary for fairness checking, lowest/maximal acceptable metric values for unprivileged. Default value is 0.8. |
verbose |
logical, whether to print information about creation of fairness object |
colorize |
logical, whether to print information in color |
Details
Sometimes during metric calculation faze approximation algorithms (logistic regression models) might not coverage properly. This might indicate that the membership to subgroups has strong predictive power.
References
Steinberg, Daniel & Reid, Alistair & O'Callaghan, Simon. (2020). Fairness Measures for Regression via Probabilistic Classification. - https://arxiv.org/pdf/2001.06089.pdf
Examples
set.seed(123)
data <- data.frame(
x = c(rnorm(500, 500, 100), rnorm(500, 400, 200)),
pop = c(rep("A", 500), rep("B", 500))
)
data$y <- rnorm(length(data$x), 1.5 * data$x, 100)
# create model
model <- lm(y ~ ., data = data)
# create explainer
exp <- DALEX::explain(model, data = data, y = data$y)
# create fobject
fobject <- fairness_check_regression(exp, protected = data$pop, privileged = "A")
# results
fobject
plot(fobject)
model_ranger <- ranger::ranger(y ~ ., data = data, seed = 123)
exp2 <- DALEX::explain(model_ranger, data = data, y = data$y)
fobject <- fairness_check_regression(exp2, fobject)
# results
fobject
plot(fobject)