Fairness Tensor

Introduction

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.FairTensorType
FairTensor{C}

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]].

source
Fairness.fair_tensorFunction
fair_tensor(ŷ, y, grp)

Computes the fairness tensor, where ŷ 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̂, y and grp are all categorical arrays

source

Example

julia> using Fairness
julia> ŷ = 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̂, 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"