fairAITools

mitigateBiasSVM

##set_fairaitools

Description

L'action `mitigateBiasSVM` permet d'atténuer et de corriger les biais algorithmiques spécifiquement pour les modèles de Machines à Vecteurs de Support (SVMAlgorithme d'apprentissage supervisé cherchant l'hyperplan optimal pour séparer les classes en maximisant la marge entre les points de données les plus proches (vecteurs supports).). Parce que oui, même les mathématiques peuvent parfois manquer d'objectivité ! Elle ajuste les pondérations de votre 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 qu'il devienne aussi juste qu'un arbitre impartial en utilisant un algorithme de réduction de gradient exponentiel.

Syntaxe Officielle
proc cas;
fairAITools.mitigateBiasSVM /
mitigateOptions={
biasMetric="PREDICTIVEPARITY",
bound=100,
event="1",
learningRate=0.01,
logLevel=1,
maxIters=10,
predictedVariables={{name="P_Target"}},
responseLevels={"1", "0"},
seed=12345,
sensitiveVariable={name="Genre"},
tolerance=0.005,
tuneBound=TRUE
}
scoreOptions={...}
trainOptions={...};
run;

Paramètres Clés

Nom du paramètre Description
mitigateOptions Liste d'options (obligatoire) pour ajuster le comportement de l'algorithme d'atténuation. C'est ici que la magie de l'équité opère.
biasMetric Type de mesure de biais à atténuer : DEMOGRAPHICPARITY, EQUALIZEDODDS, EQUALOPPORTUNITY ou PREDICTIVEPARITY (valeur par défaut).
bound Valeur limite (bound) pour l'algorithme de réduction de gradient exponentiel. Par défaut : 100.
event Valeur formatée de la variable cible qui représente l'événement d'intérêt.
learningRate Taux d'apprentissage (ou taille de pas) pour la mise à jour de l'algorithme. Par défaut : 0.01.
logLevel Niveau de détail des logs imprimés, de 0 à 7. Par défaut : 1. Plus le chiffre est grand, plus SAS sera bavard.
maxIters Nombre maximum d'itérations pour l'algorithme. Par défaut : 10.
predictedVariables Liste des variables contenant les prédictions du modèle. L'ordre doit correspondre à celui de responseLevels.
responseLevels Liste des valeurs formatées de la variable cible (ex: {"1", "0"}).
seed Graine aléatoire pour la reproductibilité. Si <= 0, l'horloge système est utilisée.
sensitiveVariable Variable sensible (obligatoire) utilisée pour les calculs de biais (ex: genre, origine).
tolerance Tolérance de violation de la contrainte de parité. Par défaut : 0.005.
tuneBound Booléen indiquant s'il faut ajuster automatiquement la valeur limite (bound). Par défaut : FALSE.
scoreOptions Paramètres à passer à l'action de scoring (dans l'action set astore) pour évaluer le modèle.
trainOptions Paramètres (obligatoire) à passer à l'action svmTrain (dans l'action set svm) pour entraîner le modèle initial.

Préparation des données

Création d'un jeu de données factice avec un biais structurel

Nous générons une table où la variable sensible 'genre' influence de manière disproportionnée la probabilité de faire un 'defaut' de paiement.

1DATA casuser.credit_data; call streaminit(12345); DO i=1 to 1000; genre = ifc(rand('uniform')>0.5, 'F', 'M'); revenu = rand('normal', 50000, 15000); IF genre='M' THEN revenu = revenu + 5000; defaut = ifc((revenu < 45000) or (genre='F' and rand('uniform')>0.7), 'Oui', 'Non'); OUTPUT; END; RUN;

Exemples d'utilisation

Atténuation de biais simple sur un SVM

Entraînement d'un modèle SVM classique combiné à une atténuation du biais basée sur la parité démographique.

1PROC CAS; fairAITools.mitigateBiasSVM / mitigateOptions={biasMetric="DEMOGRAPHICPARITY", sensitiveVariable={name="genre"}, predictedVariables={{name="P_defautOui"}, {name="P_defautNon"}}, responseLevels={"Oui", "Non"}, event="Oui"}, trainOptions={TABLE={name="credit_data", caslib="casuser"}, target="defaut", inputs={"revenu", "genre"}, nominals={"defaut", "genre"}, savestate={name="svm_model", caslib="casuser", replace=true}}; RUN;
Résultat Attendu :
Le modèle SVM est entraîné en interne et ses pondérations sont ajustées pour garantir que la parité démographique entre les modalités de la variable sensible (genre) est respectée autant que possible.
Atténuation avancée avec réglage dynamique des limites et scoring

Ici, on demande à l'algorithme d'ajuster dynamiquement la limite (`tuneBound=TRUE`) pour l'équité des chances (Equalized Odds), en augmentant les itérations et en sortant une table scorée.

1PROC CAS; fairAITools.mitigateBiasSVM / mitigateOptions={biasMetric="EQUALIZEDODDS", bound=50, tuneBound=TRUE, learningRate=0.05, maxIters=20, tolerance=0.001, seed=42, sensitiveVariable={name="genre"}, predictedVariables={{name="P_defautOui"}, {name="P_defautNon"}}, responseLevels={"Oui", "Non"}, event="Oui"}, trainOptions={TABLE={name="credit_data", caslib="casuser"}, target="defaut", inputs={"revenu"}, nominals={"defaut", "genre"}, savestate={name="svm_model_fair", caslib="casuser", replace=true}}, scoreOptions={TABLE={name="credit_data", caslib="casuser"}, out={name="scored_data", caslib="casuser", replace=true}}; RUN;
Résultat Attendu :
Une exécution sur mesure : l'algorithme d'atténuation trouve la borne optimale pour limiter les biais, entraîne le SVM de manière équitable et fournit directement une table (`scored_data`) avec les nouvelles prédictions réajustées.