?>
L'action `caEffect` est un outil d'analyse causale qui estime l'effet d'un traitement sur un résultat. Elle est dite "agnostique au modèle" car elle n'entraîne pas de modèle elle-même, mais utilise les prédictions de modèles que vous avez préalablement entraînés. Concrètement, elle permet de répondre à des questions comme : "Quel aurait été le taux d'achat si tous les clients avaient reçu la campagne marketing ?" (résultat potentiel) ou "Quelle est la différence de taux d'achat entre les clients ayant reçu la campagne et ceux qui ne l'ont pas reçue ?" (effet causal). Elle implémente plusieurs méthodes statistiques robustes comme l'IPW (pondération par l'inverse de la probabilité), le REGADJ (ajustement par régression), l'AIPW (doublement robuste) et le TMLE (estimation par maximum de vraisemblance ciblée).
| Parameter | Beschreibung |
|---|---|
| alpha | Spécifie le niveau de significativité (alpha) pour la construction des intervalles de confiance. La valeur par défaut est 0.05, ce qui correspond à des intervalles de confiance à 95%. |
| difference | Définit les effets causaux à estimer en calculant la différence entre les résultats potentiels de deux niveaux de traitement. Chaque élément de la liste spécifie un niveau 'événement' (evtLev) et un niveau 'référence' (refLev). |
| display | Permet de sélectionner les tables de résultats à afficher côté client. |
| freq | Spécifie la variable numérique contenant la fréquence d'occurrence pour chaque observation. |
| inference | Si TRUE, l'action calcule les erreurs standard et les intervalles de confiance pour les estimations, permettant une inférence statistique sur les résultats. |
| method | Spécifie la méthode d'estimation : 'IPW' (pondération par l'inverse de la probabilité), 'REGADJ' (ajustement par régression), 'AIPW' (pondération par l'inverse de la probabilité augmentée, doublement robuste), ou 'TMLE' (estimation par maximum de vraisemblance ciblée). |
| outcomeModel | Spécifie le modèle de résultat pré-entraîné (via un `store`) à utiliser pour prédire les résultats contrefactuels. Nécessaire pour les méthodes REGADJ, AIPW et TMLE. |
| outcomeVar | Définit la variable de résultat (dépendante) dont on cherche à estimer l'effet du traitement. |
| outputTables | Permet de sauvegarder les tables de résultats en tant que tables CAS sur le serveur. |
| pom | Paramètre obligatoire qui spécifie les résultats potentiels moyens (Potential Outcome Means) à estimer. Pour chaque niveau de traitement, vous devez fournir les informations nécessaires à la méthode choisie (ex: probabilité de traitement pour IPW, résultat prédit pour REGADJ, ou les deux pour AIPW/TMLE). |
| pomCov | Si TRUE, affiche la matrice de covariance des estimations des résultats potentiels moyens. |
| pomInfo | Si TRUE, génère une table qui résume les spécifications des résultats potentiels. |
| scaledIPWFlag | Définit un seuil pour identifier les observations avec des poids de pondération (IPW) anormalement élevés, qui pourraient influencer indûment les résultats. |
| table | Paramètre obligatoire spécifiant la table CAS d'entrée. Cette table doit contenir la variable de traitement, la variable de résultat, et toutes les variables pré-calculées nécessaires (probabilités de traitement, résultats contrefactuels prédits). |
| treatVar | Paramètre obligatoire qui spécifie la variable de traitement (catégorielle). |
| weight | Spécifie une variable de pondération pour effectuer une analyse pondérée. |
Pour utiliser `caEffect`, nous avons besoin d'une table contenant non seulement les données brutes (traitement, résultat, covariables), mais aussi des valeurs pré-calculées. Le code ci-dessous simule ce processus en 3 étapes :
1. Création d'une table de base `CausalData` avec des informations sur des clients.
2. Entraînement de deux modèles : un pour prédire la probabilité de recevoir le traitement (`propensity model`) et un pour prédire le résultat (`outcome model`).
3. Scoring de la table de base avec ces modèles pour générer les probabilités de traitement (`prop_Test`, `prop_Control`) et les résultats contrefactuels prédits (`p_Test`, `p_Control`).
La table finale `FinalInput` contient toutes les colonnes requises pour les exemples.
1 DATA casuser.CausalData; 2 DO CustomerID = 1 to 1000; 3 Age = 20 + floor(rand('uniform')*50); 4 Income = 30000 + floor(rand('uniform')*70000); 5 IF rand('uniform') < 0.4 + 0.005*(Age-45) - 0.00001*(Income-65000) THEN Campaign = 'Test'; 6 ELSE Campaign = 'Control'; 7 IF Campaign = 'Test' THEN Purchase = (rand('uniform') < 0.6 + 0.002*(Age-20)); 8 ELSE Purchase = (rand('uniform') < 0.3 - 0.001*(Income-30000)/10000); 9 OUTPUT; 10 END; 11 RUN; 12 13 PROC logistic DATA=casuser.CausalData outest=casuser.psmodel_est noprint; 14 model Campaign(event='Test') = Age Income; 15 OUTPUT out=casuser.PropScores p=prop_Test; 16 RUN; 17 18 DATA casuser.PropScores; 19 SET casuser.PropScores; 20 prop_Control = 1 - prop_Test; 21 RUN; 22 23 PROC logistic DATA=casuser.CausalData outest=casuser.outcomemodel_est noprint; 24 class Campaign; 25 model Purchase(event='1') = Age Income Campaign; 26 store casuser.OutcomeModel; 27 RUN; 28 29 DATA casuser.ScoringData_Test; 30 SET casuser.CausalData; 31 Campaign = 'Test'; 32 RUN; 33 34 DATA casuser.ScoringData_Control; 35 SET casuser.CausalData; 36 Campaign = 'Control'; 37 RUN; 38 39 PROC plm restore=casuser.OutcomeModel; 40 score DATA=casuser.ScoringData_Test out=casuser.Pred_Test predicted=p_Test; 41 RUN; 42 43 PROC plm restore=casuser.OutcomeModel; 44 score DATA=casuser.ScoringData_Control out=casuser.Pred_Control predicted=p_Control; 45 RUN; 46 47 DATA casuser.FinalInput; 48 MERGE casuser.PropScores(in=a) 49 casuser.Pred_Test(keep=CustomerID p_Test) 50 casuser.Pred_Control(keep=CustomerID p_Control); 51 BY CustomerID; 52 IF a; 53 RUN;
L'Inverse Probability Weighting (IPW) est une méthode simple qui ne nécessite que les probabilités de traitement (scores de propension). Elle pondère chaque observation par l'inverse de sa probabilité de recevoir le traitement qu'elle a effectivement reçu, afin de créer une pseudo-population où les covariables sont équilibrées entre les groupes de traitement. Cet exemple estime le résultat moyen pour chaque groupe et l'effet causal (la différence entre eux).
| 1 | PROC CAS; |
| 2 | causalanalysis.caEffect / |
| 3 | TABLE={name='FinalInput'}, |
| 4 | method='IPW', |
| 5 | treatVar={name='Campaign'}, |
| 6 | outcomeVar={name='Purchase', type='CATEGORICAL', event='1'}, |
| 7 | pom={{trtLev='Test', trtProb='prop_Test'}, |
| 8 | {trtLev='Control', trtProb='prop_Control'}}, |
| 9 | difference={{evtLev='Test', refLev='Control'}}; |
| 10 | RUN; |
L'Augmented Inverse Probability Weighting (AIPW) est une méthode 'doublement robuste'. Elle est plus précise que l'IPW ou le REGADJ car elle reste non biaisée si au moins un des deux modèles (modèle de propension OU modèle de résultat) est correctement spécifié. Elle nécessite à la fois les probabilités de traitement et les résultats contrefactuels prédits. Nous activons également `inference=TRUE` pour obtenir les erreurs standard et les intervalles de confiance.
| 1 | PROC CAS; |
| 2 | causalanalysis.caEffect / |
| 3 | TABLE={name='FinalInput'}, |
| 4 | method='AIPW', |
| 5 | inference=TRUE, |
| 6 | treatVar={name='Campaign'}, |
| 7 | outcomeVar={name='Purchase', type='CATEGORICAL', event='1'}, |
| 8 | pom={{trtLev='Test', trtProb='prop_Test', predOut='p_Test'}, |
| 9 | {trtLev='Control', trtProb='prop_Control', predOut='p_Control'}}, |
| 10 | difference={{evtLev='Test', refLev='Control'}}; |
| 11 | RUN; |
Cet exemple compare les méthodes REGADJ (qui n'utilise que le modèle de résultat) et TMLE (une autre méthode doublement robuste). Nous changeons également le niveau de confiance à 90% avec `alpha=0.1` et demandons la matrice de covariance des estimations avec `pomCov=TRUE`. La méthode TMLE est une amélioration de l'AIPW qui s'assure que les prédictions restent dans les bornes valides (ex: [0,1] pour une probabilité).
| 1 | PROC CAS; |
| 2 | ACTION causalanalysis.caEffect / |
| 3 | TABLE={name='FinalInput'}, |
| 4 | method='REGADJ', |
| 5 | alpha=0.1, |
| 6 | inference=TRUE, |
| 7 | pomCov=TRUE, |
| 8 | treatVar={name='Campaign'}, |
| 9 | outcomeVar={name='Purchase', type='CATEGORICAL', event='1'}, |
| 10 | pom={{trtLev='Test', predOut='p_Test'}, |
| 11 | {trtLev='Control', predOut='p_Control'}}, |
| 12 | difference={{evtLev='Test', refLev='Control'}}; |
| 13 | |
| 14 | ACTION causalanalysis.caEffect / |
| 15 | TABLE={name='FinalInput'}, |
| 16 | method='TMLE', |
| 17 | alpha=0.1, |
| 18 | inference=TRUE, |
| 19 | pomCov=TRUE, |
| 20 | treatVar={name='Campaign'}, |
| 21 | outcomeVar={name='Purchase', type='CATEGORICAL', event='1'}, |
| 22 | pom={{trtLev='Test', trtProb='prop_Test', predOut='p_Test'}, |
| 23 | {trtLev='Control', trtProb='prop_Control', predOut='p_Control'}}, |
| 24 | difference={{evtLev='Test', refLev='Control'}}; |
| 25 | RUN; |