mitigateBias
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 !
Paramètres Clés
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.
| 1 | DATA 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; |
| 10 | RUN; |
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.
| 1 | PROC 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; |
| 20 | QUIT; |
Résultat Attendu :
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`.
| 1 | PROC 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; |
| 29 | QUIT; |