mitigateBiasSVM
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.
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.
| 1 | DATA 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.
| 1 | PROC 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 :
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.
| 1 | PROC 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; |