fairAITools

mitigateBias

##set_fairaitools

Description

L'action mitigateBias permet d'atténuer les biais lors de l'entraînement de modèles prédictifsAlgorithmes entraînés sur SAS Viya pour analyser des données historiques et estimer la probabilité de résultats futurs, facilitant ainsi la prise de décision proactive et automatisée.. C'est un peu l'arbitre d'impartialité de votre code : elle s'assure que vos modèles restent neutres envers vos variablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage. sensibles (comme le genre, l'âge ou l'origine) en ajustant les poids pendant l'apprentissage itératif grâce à l'algorithme de réduction de gradient exponentiel (exponentiated gradient reduction). Fini la discrimination cachée dans vos données d'entraînement !

Syntaxe Officielle
proc cas;
fairAITools.mitigateBias /
table={name="nom_table"}
response={name="cible"}
sensitiveVariable={name="variable_sensible"}
trainProgram="code_casl"
biasMetric="PREDICTIVEPARITY"
maxIters=10;
quit;

Paramètres Clés

Nom du paramètre Description
table Spécifie la table d'entrée contenant les données d'entraînement (obligatoire).
response Spécifie la variable cible (variable à prédire) pour l'apprentissage supervisé (obligatoire).
sensitiveVariable Spécifie la variable sensible (par exemple: sexe, origine) à utiliser pour les calculs de biais (obligatoire).
trainProgram Spécifie le code CASL d'entraînement du modèle sous forme de chaîne de caractères . L'action l'exécutera de façon itérative.
biasMetric Définit le type de mesure de biais à atténuer. Les valeurs possibles sont 'DEMOGRAPHICPARITY', 'EQUALIZEDODDS', 'EQUALOPPORTUNITY' ou 'PREDICTIVEPARITY' (valeur par défaut).
learningRate Taille du pas (learning rate) pour la mise à jour de l'algorithme de réduction de gradient (par défaut 0.01).
maxIters Nombre maximum d'itérations de l'algorithme (par défaut 10).
tolerance Tolérance de violation de la contrainte de parité (par défaut 0.005). Si définie à 0, l'action tourne jusqu'à atteindre maxIters.
tableSaveList Spécifie une liste de tables à sauvegarder uniquement si la mesure du biais s'améliore lors d'une itération spécifique.

Préparation des données

Création de données simulées avec un biais intrinsèque

Nous générons une table avec une variable cible `Y`, une variable explicative `X`, et une variable sensible `S` influençant injustement la probabilité de succès.

1DATA casuser.data_biais;
2 call streaminit(123);
3 DO i = 1 to 1000;
4 X = rand('normal');
5 S = ifc(rand('uniform') > 0.5, 'A', 'B');
6 p = logistic(X + (S='A')*1.5);
7 Y = ifc(rand('uniform') < p, 1, 0);
8 OUTPUT;
9 END;
10RUN;

Exemples d'utilisation

Atténuation de biais simple avec une régression logistique

Cet exemple illustre comment utiliser l'action en injectant un programme CASL qui entraîne un modèle logistique. L'action boucle sur ce code en ajustant les poids dynamiquement à chaque itération.

1PROC CAS;
2 pgm = "
3 regression.logistic /
4 table=table
5 weight=weight
6 target='Y'
7 inputs={'X'}
8 casout=casout
9 copyvars=copyVars;
10 ";
11 fairAITools.mitigateBias /
12 TABLE={name="data_biais", caslib="casuser"}
13 response={name="Y"}
14 sensitiveVariable={name="S"}
15 event="1"
16 predictedVariables={{name="_PRED_"}}
17 trainProgram=pgm
18 biasMetric="DEMOGRAPHICPARITY"
19 maxIters=5;
20QUIT;
Résultat Attendu :
L'action exécute la régression logistique jusqu'à 5 fois. Elle ajuste continuellement une variable de poids (définie dynamiquement en arrière-plan) pour minimiser la disparité démographique (Demographic Parity) entre les groupes 'A' et 'B' de la variable `S`.
Configuration avancée : modèle d'arbre avec sauvegarde conditionnelle

Ici, nous visons à optimiser les 'Equalized Odds' (chances égales) avec un arbre de décision. L'option `tableSaveList` est utilisée pour sauvegarder le modèle optimal (le moins biaisé) dans une table `best_dt_model`.

1PROC CAS;
2 train_pgm = "
3 decisionTree.dtreeTrain /
4 table=table
5 weight=weight
6 target='Y'
7 inputs={'X'}
8 casOut={name='dt_model', replace=true};
9 decisionTree.dtreeScore /
10 table=table
11 model={name='dt_model'}
12 casout=casout
13 copyVars=copyVars;
14 ";
15 fairAITools.mitigateBias RESULT=r STATUS=rc /
16 TABLE={name="data_biais", caslib="casuser"}
17 response={name="Y"}
18 responseLevels={"1", "0"}
19 event="1"
20 sensitiveVariable={name="S"}
21 trainProgram=train_pgm
22 predictedVariables={{name="_DT_PredP_"}}
23 biasMetric="EQUALIZEDODDS"
24 learningRate=0.05
25 tolerance=0.001
26 maxIters=10
27 tableSaveList={{key="dt_model", casout={name="best_dt_model", replace=true}}};
28 PRINT r;
29QUIT;
Résultat Attendu :
Un dictionnaire de résultats contenant l'historique des itérations est renvoyé et imprimé. À l'itération où la métrique EQUALIZEDODDS atteint son optimum, la table 'dt_model' est sauvegardée définitivement sous le nom 'best_dt_model' dans le CASlib actif.