fairpy.metric

fairpy.metric.binary_dp(y_pred: Sequence[Sequence[Sequence[Sequence[Sequence[Any]]]]] | _SupportsArray[dtype] | Sequence[_SupportsArray[dtype]] | Sequence[Sequence[_SupportsArray[dtype]]] | Sequence[Sequence[Sequence[_SupportsArray[dtype]]]] | Sequence[Sequence[Sequence[Sequence[_SupportsArray[dtype]]]]] | bool | int | float | complex | str | bytes | Sequence[bool | int | float | complex | str | bytes] | Sequence[Sequence[bool | int | float | complex | str | bytes]] | Sequence[Sequence[Sequence[bool | int | float | complex | str | bytes]]] | Sequence[Sequence[Sequence[Sequence[bool | int | float | complex | str | bytes]]]], s: Sequence[Sequence[Sequence[Sequence[Sequence[Any]]]]] | _SupportsArray[dtype] | Sequence[_SupportsArray[dtype]] | Sequence[Sequence[_SupportsArray[dtype]]] | Sequence[Sequence[Sequence[_SupportsArray[dtype]]]] | Sequence[Sequence[Sequence[Sequence[_SupportsArray[dtype]]]]] | bool | int | float | complex | str | bytes | Sequence[bool | int | float | complex | str | bytes] | Sequence[Sequence[bool | int | float | complex | str | bytes]] | Sequence[Sequence[Sequence[bool | int | float | complex | str | bytes]]] | Sequence[Sequence[Sequence[Sequence[bool | int | float | complex | str | bytes]]]], abs: bool = True) float

Demographic parity for binary sensitive attribute and binary classification

Parameters

y_pred1d array-like

Predicted labels, as returned by a classifier.

s1d array-like

Sensitive attributes.

absbool, default=True

If True, return the absolute value of dp. Otherwise, treat sensitive attribute with value 0 as the privileged group

Returns

dpfloat

Return the gap in demographic parity between two sensitive groups. The ideal performance for fairness is 0.

Examples

fairpy.metric.binary_eop(y_true: Sequence[Sequence[Sequence[Sequence[Sequence[Any]]]]] | _SupportsArray[dtype] | Sequence[_SupportsArray[dtype]] | Sequence[Sequence[_SupportsArray[dtype]]] | Sequence[Sequence[Sequence[_SupportsArray[dtype]]]] | Sequence[Sequence[Sequence[Sequence[_SupportsArray[dtype]]]]] | bool | int | float | complex | str | bytes | Sequence[bool | int | float | complex | str | bytes] | Sequence[Sequence[bool | int | float | complex | str | bytes]] | Sequence[Sequence[Sequence[bool | int | float | complex | str | bytes]]] | Sequence[Sequence[Sequence[Sequence[bool | int | float | complex | str | bytes]]]], y_pred: Sequence[Sequence[Sequence[Sequence[Sequence[Any]]]]] | _SupportsArray[dtype] | Sequence[_SupportsArray[dtype]] | Sequence[Sequence[_SupportsArray[dtype]]] | Sequence[Sequence[Sequence[_SupportsArray[dtype]]]] | Sequence[Sequence[Sequence[Sequence[_SupportsArray[dtype]]]]] | bool | int | float | complex | str | bytes | Sequence[bool | int | float | complex | str | bytes] | Sequence[Sequence[bool | int | float | complex | str | bytes]] | Sequence[Sequence[Sequence[bool | int | float | complex | str | bytes]]] | Sequence[Sequence[Sequence[Sequence[bool | int | float | complex | str | bytes]]]], s: Sequence[Sequence[Sequence[Sequence[Sequence[Any]]]]] | _SupportsArray[dtype] | Sequence[_SupportsArray[dtype]] | Sequence[Sequence[_SupportsArray[dtype]]] | Sequence[Sequence[Sequence[_SupportsArray[dtype]]]] | Sequence[Sequence[Sequence[Sequence[_SupportsArray[dtype]]]]] | bool | int | float | complex | str | bytes | Sequence[bool | int | float | complex | str | bytes] | Sequence[Sequence[bool | int | float | complex | str | bytes]] | Sequence[Sequence[Sequence[bool | int | float | complex | str | bytes]]] | Sequence[Sequence[Sequence[Sequence[bool | int | float | complex | str | bytes]]]], abs: bool = True, labels: Sequence[Sequence[Sequence[Sequence[Sequence[Any]]]]] | _SupportsArray[dtype] | Sequence[_SupportsArray[dtype]] | Sequence[Sequence[_SupportsArray[dtype]]] | Sequence[Sequence[Sequence[_SupportsArray[dtype]]]] | Sequence[Sequence[Sequence[Sequence[_SupportsArray[dtype]]]]] | bool | int | float | complex | str | bytes | Sequence[bool | int | float | complex | str | bytes] | Sequence[Sequence[bool | int | float | complex | str | bytes]] | Sequence[Sequence[Sequence[bool | int | float | complex | str | bytes]]] | Sequence[Sequence[Sequence[Sequence[bool | int | float | complex | str | bytes]]]] | None = None) float

Equal Opportunity for binary sensitive attribute and binary classification

Parameters

y_true1d array-like

Ground truth (correct) labels.

y_pred1d array-like

Predicted labels, as returned by a classifier.

s1d array-like

Sensitive attributes.

absbool, default=True

If True, return the absolute value of dp. Otherwise, treat sensitive attribute with value 0 as the privileged group

labelsarray-like of shape (n_classes), default=None

List of labels to index the classes.

Returns

eopfloat

Return the gap in true positive rates between two sensitive groups. The ideal performance for fairness is 0.

Examples

fairpy.metric.dcg(ranking: List[int], rel_vec: Sequence[Sequence[Sequence[Sequence[Sequence[Any]]]]] | _SupportsArray[dtype] | Sequence[_SupportsArray[dtype]] | Sequence[Sequence[_SupportsArray[dtype]]] | Sequence[Sequence[Sequence[_SupportsArray[dtype]]]] | Sequence[Sequence[Sequence[Sequence[_SupportsArray[dtype]]]]] | bool | int | float | complex | str | bytes | Sequence[bool | int | float | complex | str | bytes] | Sequence[Sequence[bool | int | float | complex | str | bytes]] | Sequence[Sequence[Sequence[bool | int | float | complex | str | bytes]]] | Sequence[Sequence[Sequence[Sequence[bool | int | float | complex | str | bytes]]]], k: int = 0) Tuple[float, float]

Discounted cumulative gain (dcg) and normalized discounted cumulative gain (ndcg)

fairpy.metric.xAUC(y_true: Sequence[Sequence[Sequence[Sequence[Sequence[Any]]]]] | _SupportsArray[dtype] | Sequence[_SupportsArray[dtype]] | Sequence[Sequence[_SupportsArray[dtype]]] | Sequence[Sequence[Sequence[_SupportsArray[dtype]]]] | Sequence[Sequence[Sequence[Sequence[_SupportsArray[dtype]]]]] | bool | int | float | complex | str | bytes | Sequence[bool | int | float | complex | str | bytes] | Sequence[Sequence[bool | int | float | complex | str | bytes]] | Sequence[Sequence[Sequence[bool | int | float | complex | str | bytes]]] | Sequence[Sequence[Sequence[Sequence[bool | int | float | complex | str | bytes]]]], y_pred: Sequence[Sequence[Sequence[Sequence[Sequence[Any]]]]] | _SupportsArray[dtype] | Sequence[_SupportsArray[dtype]] | Sequence[Sequence[_SupportsArray[dtype]]] | Sequence[Sequence[Sequence[_SupportsArray[dtype]]]] | Sequence[Sequence[Sequence[Sequence[_SupportsArray[dtype]]]]] | bool | int | float | complex | str | bytes | Sequence[bool | int | float | complex | str | bytes] | Sequence[Sequence[bool | int | float | complex | str | bytes]] | Sequence[Sequence[Sequence[bool | int | float | complex | str | bytes]]] | Sequence[Sequence[Sequence[Sequence[bool | int | float | complex | str | bytes]]]], s: Sequence[Sequence[Sequence[Sequence[Sequence[Any]]]]] | _SupportsArray[dtype] | Sequence[_SupportsArray[dtype]] | Sequence[Sequence[_SupportsArray[dtype]]] | Sequence[Sequence[Sequence[_SupportsArray[dtype]]]] | Sequence[Sequence[Sequence[Sequence[_SupportsArray[dtype]]]]] | bool | int | float | complex | str | bytes | Sequence[bool | int | float | complex | str | bytes] | Sequence[Sequence[bool | int | float | complex | str | bytes]] | Sequence[Sequence[Sequence[bool | int | float | complex | str | bytes]]] | Sequence[Sequence[Sequence[Sequence[bool | int | float | complex | str | bytes]]]], abs: bool = False) float

The Fairness of Risk Scores Beyond Classification: Bipartite Ranking and the xAUC Metric

Parameters

y_true1d array-like

Ground truth (correct) labels.

y_pred1d array-like

Predicted labels, as returned by a classifier.

s1d array-like

Sensitive attributes.

absbool, default=True

If True, return the absolute value of dp. Otherwise, treat sensitive attribute with value 0 as the privileged group

Returns

xAUCfloat

Disparity in the probabilities of ranking a positive example from one group above a negative one from another group. The best performance is 0.

Examples

from fairpy.metric import xAUC

y_true = [0, 0, 1, 0, 1, 1, 0, 1] y_pred = [0.1, 0.2, 0.3, 0.8, 0.9, 1.5, 0, 1] s = [“male”, “female”, “male”, “female”, “male”, “male”, “male”, “female”]

xauc = xAUC(y_true, y_pred, s)