fairAITools

mitigateBiasForest

##set_fairaitools

Description

L'action `mitigateBiasForest` permet d'atténuer les biais dans les modèles de type forêt aléatoireAlgorithme d'apprentissage supervisé combinant plusieurs arbres de décision indépendants pour améliorer la précision et réduire le surapprentissage par agrégation de leurs prédictions. (Random ForestAlgorithme d'apprentissage supervisé combinant plusieurs arbres de décision indépendants pour améliorer la précision et réduire le surapprentissage via le bagging et la sélection aléatoire.). Elle ajuste les prédictions du modèleReprésentation mathématique entraînée sur des données pour capturer des tendances, prédire des résultats ou classifier des observations via des algorithmes (Régression, Forêt aléatoire, Gradient Boosting). pour le rendre plus équitable vis-à-vis d'une variable sensible (comme le genre ou l'âge), tout en s'efforçant de préserver au maximum sa précision globale. C'est un peu comme donner des lunettes d'impartialité à votre algorithme, pour qu'il arrête de faire des favoris ! Vous pouvez choisir la métrique d'équité à optimiser, référencée dans la documentation officielle .

Syntaxe Officielle
proc cas;
fairAITools.mitigateBiasForest /
mitigateOptions={
biasMetric="DEMOGRAPHICPARITY" | "EQUALIZEDODDS" | "EQUALOPPORTUNITY" | "PREDICTIVEPARITY",
bound=double,
event="string",
learningRate=double,
logLevel=integer,
maxIters=integer,
predictedVariables={{name="string"}, {...}},
responseLevels={"string-1" <, "string-2", ...>},
seed=double,
sensitiveVariable={name="string"},
tolerance=double,
tuneBound=TRUE | FALSE
},
scoreOptions={key-1=value-1 <, key-2=value-2, ...>},
trainOptions={key-1=value-1 <, key-2=value-2, ...>}
;
run;
quit;

Paramètres Clés

Nom du paramètre Description
mitigateOptions Liste des paramètres (requis) permettant d'ajuster le comportement de l'algorithme d'atténuation. C'est ici que la magie opère !
mitigateOptions.biasMetric Type de mesure de biais à évaluer et corriger. Par défaut : PREDICTIVEPARITY.
mitigateOptions.bound Valeur limite pour l'algorithme de réduction du gradient exponentiel. Par défaut : 100.
mitigateOptions.event Valeur formatée de la variable cible qui représente l'événement d'intérêt (la classe positive).
mitigateOptions.learningRate Taille du pas (learning rate) pour la mise à jour de l'algorithme. Par défaut : 0.01.
mitigateOptions.logLevel Niveau de détail des informations imprimées dans le journal (0 à 7). Plus la valeur est élevée, plus le log est bavard. Par défaut : 1.
mitigateOptions.maxIters Nombre maximum d'itérations pour l'algorithme d'atténuation. Par défaut : 10.
mitigateOptions.predictedVariables Variables contenant les probabilités prédites par le modèle. L'ordre doit impérativement correspondre à celui de responseLevels.
mitigateOptions.responseLevels Liste des valeurs formatées de la variable cible. Si l'argument 'event' est omis, la première valeur est considérée comme l'événement.
mitigateOptions.seed Graine pour le générateur de nombres aléatoires. Fixez-la pour des résultats reproductibles.
mitigateOptions.sensitiveVariable Nom de la variable sensible (ex: âge, origine, sexe) sur laquelle le biais est mesuré et corrigé. REQUIS.
mitigateOptions.tolerance Tolérance pour la violation de la contrainte de parité. S'il est à 0, le modèle fera son maximum d'itérations. Par défaut : 0.005.
mitigateOptions.tuneBound Spécifie s'il faut ajuster automatiquement la valeur limite (bound). Vrai (True) ou Faux (False). Par défaut : False.
scoreOptions Options spécifiques passées à l'action de scoring (issue de l'action set 'astore').
trainOptions Options spécifiques (requises) passées à l'action 'forestTrain' (issue de l'action set 'decisionTree') pour l'entraînement du modèle initial.

Préparation des données

Création des données simulées

Nous générons une table CAS contenant des données d'approbation de prêt biaisées, avec une variable cible `Approved`, une variable sensible `Gender` et quelques prédicteurs.

1PROC CAS;
2 SESSION casauto;
3 dataStep.runCode /
4 code="data casuser.loan_data;
5 call streaminit(12345);
6 do i = 1 to 1000;
7 if rand('uniform') < 0.5 then Gender = 'Male'; else Gender = 'Female';
8 Income = round(rand('normal', 50000, 15000));
9 CreditScore = round(rand('normal', 650, 100));
10 /* Introduction d'un biais artificiel en faveur des 'Male' */
11 prob = 1 / (1 + exp(-(-10 + Income*0.0001 + CreditScore*0.01 + (Gender='Male')*1.5)));
12 IF rand('uniform') < prob THEN Approved = 'Yes'; ELSE Approved = 'No';
13 OUTPUT;
14 END;
15 RUN;";
16RUN;
17QUIT;

Exemples d'utilisation

Atténuation de biais simple (Parité Démographique)

Entraînement d'un modèle de forêt aléatoire et atténuation du biais de genre en ciblant la métrique de parité démographique.

1PROC CAS;
2 fairAITools.mitigateBiasForest /
3 mitigateOptions={
4 biasMetric="DEMOGRAPHICPARITY",
5 event="Yes",
6 predictedVariables={{name="P_ApprovedYes"}, {name="P_ApprovedNo"}},
7 responseLevels={"Yes", "No"},
8 sensitiveVariable={name="Gender"}
9 },
10 trainOptions={
11 TABLE={name="loan_data", caslib="casuser"},
12 target="Approved",
13 inputs={"Income", "CreditScore", "Gender"},
14 nominals={"Approved", "Gender"},
15 casOut={name="forest_model", replace=true}
16 },
17 scoreOptions={
18 TABLE={name="loan_data", caslib="casuser"},
19 casOut={name="scored_data", replace=true}
20 };
21RUN;
22QUIT;
Résultat Attendu :
Un modèle de forêt aléatoire est entraîné, puis ses prédictions sont ajustées itérativement pour minimiser les différences globales de taux d'approbation (Yes) entre les genres, générant un modèle 'forest_model' corrigé.
Contrôle avancé de l'atténuation (Equalized Odds)

Utilisation poussée avec ajustement de la limite (`tuneBound`), taux d'apprentissage personnalisé et exigence forte en matière de tolérance (0.001) pour équilibrer les chances (Vrais positifs et Faux positifs).

1PROC CAS;
2 fairAITools.mitigateBiasForest /
3 mitigateOptions={
4 biasMetric="EQUALIZEDODDS",
5 bound=50,
6 tuneBound=TRUE,
7 event="Yes",
8 learningRate=0.05,
9 logLevel=3,
10 maxIters=20,
11 predictedVariables={{name="P_ApprovedYes"}, {name="P_ApprovedNo"}},
12 responseLevels={"Yes", "No"},
13 seed=98765,
14 sensitiveVariable={name="Gender"},
15 tolerance=0.001
16 },
17 trainOptions={
18 TABLE={name="loan_data", caslib="casuser"},
19 target="Approved",
20 inputs={"Income", "CreditScore", "Gender"},
21 nominals={"Approved", "Gender"},
22 ntree=50,
23 casOut={name="forest_model_advanced", replace=true}
24 },
25 scoreOptions={
26 TABLE={name="loan_data", caslib="casuser"},
27 copyVars={"Gender", "Approved"},
28 casOut={name="scored_data_advanced", replace=true}
29 };
30RUN;
31QUIT;
Résultat Attendu :
L'algorithme de réduction du gradient exponentiel effectuera jusqu'à 20 itérations avec un pas de 0.05. Il équilibrera dynamiquement les prédictions pour s'assurer que les hommes et les femmes ont les mêmes probabilités de se voir approuver le prêt à la fois à juste titre et par erreur, stockant les prédictions corrigées dans 'scored_data_advanced'.