dagdiscovery
Description
L'action dagdiscovery permet d'effectuer l'apprentissage de la structure d'un graphe orienté acyclique (DAG) à partir de vos données, une étape cruciale de l'inférence causaleGemini said
L’inférence causale est une méthode statistique mesurant l’effet réel d’une variable sur une autre en isolant les corrélations trompeuses, afin d’établir des liens de cause à effet directs.. Contrairement aux simples corrélations, cet outil tente de déduire la directionnalité des relations (qui cause quoi) en utilisant des algorithmes avancés comme TOP ou MCV. C'est l'outil parfait pour transformer le fameux adage 'corrélation n'est pas causalité' en un véritable 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). mathématique ! Retrouvez tous les détails dans la documentation officielle.
Paramètres Clés
| Nom du paramètre | Description |
|---|---|
| table | Spécifie la table de données d'entrée contenant vos observations (paramètre obligatoire). |
| vars | La liste des variables à inclure dans le réseau causal (paramètre obligatoire). |
| algorithm | L'algorithme utilisé pour l'apprentissage du DAG : 'TOP' (Topological Order Permutation, par défaut) ou 'MCV' (Minimizing Conditional Variance). |
| alphas | Liste des seuils de significativité (p-values) pour sélectionner les parents ou arêtes. Plusieurs valeurs génèrent plusieurs DAGs. |
| gpu | Active l'utilisation de la carte graphique (GPU) si disponible, pour des calculs ultra-rapides. |
| initMethod | Définit l'ordre topologique de départ : 'VARIANCE' (par défaut), 'DATA' ou 'RANDOM'. |
| maxIter | Le nombre maximum d'itérations pour explorer l'espace des solutions (par défaut 200). Attention aux temps de calcul ! |
| out | Table de sortie contenant l'ordre topologique final et les estimations des paramètres du modèle. |
| outDag | Table de sortie qui stocke la structure brute du Graphe Orienté Acyclique (les liens détectés). |
| outIterHist | Table contenant l'historique complet des itérations de l'algorithme. |
| outPath | Table qui liste les relations de parenté, les enfants et les chemins de causalité. |
| parallel | Permet le multithreading pour booster la recherche (activé par défaut). |
| seed | La graine aléatoire pour garantir la reproductibilité (car on aime les découvertes, mais pas dans nos tests de validation !). |
Préparation des données
Simulation d'un écosystème de relations causales
Nous créons ici un jeu de données où la chaîne de causalité est explicitement connue : X influence Y, et Y influence Z.
| 1 | DATA casuser.causal_data; |
| 2 | call streaminit(42); |
| 3 | DO i = 1 to 2000; |
| 4 | X = rand('normal'); |
| 5 | Y = 2.5 * X + rand('normal'); |
| 6 | Z = -1.2 * Y + rand('normal'); |
| 7 | OUTPUT; |
| 8 | END; |
| 9 | RUN; |
Exemples d'utilisation
Apprentissage d'un DAG de base
Exécution classique avec l'algorithme TOP par défaut pour extraire la structure causale sous forme de table.
| 1 | PROC CAS; |
| 2 | causalDiscovery.dagdiscovery / |
| 3 | TABLE={name='causal_data', caslib='casuser'} |
| 4 | vars={'X', 'Y', 'Z'} |
| 5 | outDag={name='my_dag', caslib='casuser', replace=true}; |
| 6 | QUIT; |
Résultat Attendu :
Recherche causale exhaustive et paramétrée
Une analyse plus robuste exploitant l'algorithme MCV, la parallélisation, des seuils d'alpha multiples et exportant l'intégralité des rapports d'analyse possibles.
| 1 | PROC CAS; |
| 2 | causalDiscovery.dagdiscovery / |
| 3 | TABLE={name='causal_data', caslib='casuser'} |
| 4 | vars={'X', 'Y', 'Z'} |
| 5 | algorithm='MCV' |
| 6 | initMethod='VARIANCE' |
| 7 | alphas={0.05, 0.01} |
| 8 | maxIter=500 |
| 9 | parallel=true |
| 10 | seed=12345 |
| 11 | out={name='dag_stats', replace=true} |
| 12 | outDag={name='dag_structure', replace=true} |
| 13 | outIterHist={name='dag_history', replace=true} |
| 14 | outPath={name='dag_paths', replace=true}; |
| 15 | QUIT; |