Fairness Tensor


Fairness.jl uses the concept of Fairness Tensor to compute metrics and speed up the computation. In Fairness.jl, FairTensor is a struct with a 3D matrix and an array of strings for the class names in protected attribute. For a FairTensor ft, the 3D matrix can be accessed using ft.mat and the array of strings can be accessed using ft.labels.

ft.mat is a 3-dimensional Array. For a dataset with C number of classes in the sensitive attribute, a fairness tensor with matrix of size size C x 2 x 2 is constructed.

It is a stack of C 2-dimensional arrays of size 2 x 2 arrays. Each 2 x 2 array represents [[TP, FP], [FN, TN]]. Here TP corresponds to True Positives, FP to False Positives, FN to False Negatives and TN to True Negatives for each class in the protected attribute.

Using Fairness Tensor


Fairness Tensor with C classes. It consists of C 2 x 2 matrices stacked up to form a Matrix of size C x 2 x 2. Each 2 x 2 matrix contains values [[TP, FP], [FN, TN]].

fair_tensor(ŷ, y, grp)

Computes the fairness tensor, where ŷ are the predicted classes, y are the ground truth values, grp are the group values. The ordering follows that of levels(y).

Note that ŷ, y and grp are all categorical arrays



julia> using Fairness
julia> ŷ = categorical([1, 0, 1, 1, 0]);
julia> y = categorical([0, 0, 1, 1, 1]);
julia> grp = categorical(["Asian", "African", "Asian", "American", "African"]);
julia> ft = fair_tensor(ŷ, y, grp);
julia> ft.mat3×2×2 Array{Int64, 3}: [:, :, 1] = 0 1 1 0 1 0 [:, :, 2] = 0 1 0 0 1 0
julia> ft.labels3-element Vector{String}: "African" "American" "Asian"