?> caEffect - WeAreCAS
causalanalysis

caEffect

Beschreibung

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).

causalanalysis.caEffect <result=results> <status=rc> / alpha=double, difference={{evtLev={"string-1" <, "string-2", ...>}, refLev={"string-1" <, "string-2", ...>}}, {...}}, display={caseSensitive=TRUE | FALSE, exclude=TRUE | FALSE, excludeAll=TRUE | FALSE, keyIsPath=TRUE | FALSE, names={"string-1" <, "string-2", ...>}, pathType="LABEL" | "NAME", traceNames=TRUE | FALSE}, freq="variable-name", inference=TRUE | FALSE, method="AIPW" | "IPW" | "REGADJ" | "TMLE", outcomeModel={predName="string", restore={caslib="string", dataSourceOptions={key-1=any-list-or-data-type-1 <, key-2=any-list-or-data-type-2, ...>}, name="table-name", whereTable={casLib="string", dataSourceOptions={...}, importOptions={...}, name="table-name", vars={{...}}, where="where-expression"}}}, outcomeVar={countMissing=TRUE | FALSE, event="string" | double, levelizeRaw=TRUE | FALSE, maxLev=integer, name="variable-name", trial="variable-name", type="BINOMIAL" | "CATEGORICAL" | "CONTINUOUS"}, outputTables={groupByVarsRaw=TRUE | FALSE, includeAll=TRUE | FALSE, names={"string-1" <, "string-2", ...>}, repeated=TRUE | FALSE, replace=TRUE | FALSE}, pom={{predOut="variable-name", trtLev="string" | double, trtProb="variable-name"}, {...}}, pomCov=TRUE | FALSE, pomInfo=TRUE | FALSE, scaledIPWFlag=double, table={caslib="string", computedOnDemand=TRUE | FALSE, computedVars={{...}}, computedVarsProgram="string", dataSourceOptions={...}, groupBy={{...}}, groupByMode="NOSORT" | "REDISTRIBUTE", importOptions={...}, name="table-name", onDemand=TRUE | FALSE, orderBy={{...}}, singlePass=TRUE | FALSE, vars={{...}}, where="where-expression", whereTable={...}}, treatVar={condEvent="string" | double, countMissing=TRUE | FALSE, levelizeRaw=TRUE | FALSE, maxLev=integer, name="variable-name"}, weight="variable-name";
Einstellungen
ParameterBeschreibung
alphaSpé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%.
differenceDé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).
displayPermet de sélectionner les tables de résultats à afficher côté client.
freqSpécifie la variable numérique contenant la fréquence d'occurrence pour chaque observation.
inferenceSi TRUE, l'action calcule les erreurs standard et les intervalles de confiance pour les estimations, permettant une inférence statistique sur les résultats.
methodSpé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).
outcomeModelSpé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.
outcomeVarDéfinit la variable de résultat (dépendante) dont on cherche à estimer l'effet du traitement.
outputTablesPermet de sauvegarder les tables de résultats en tant que tables CAS sur le serveur.
pomParamè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).
pomCovSi TRUE, affiche la matrice de covariance des estimations des résultats potentiels moyens.
pomInfoSi TRUE, génère une table qui résume les spécifications des résultats potentiels.
scaledIPWFlagDé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.
tableParamè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).
treatVarParamètre obligatoire qui spécifie la variable de traitement (catégorielle).
weightSpécifie une variable de pondération pour effectuer une analyse pondérée.
Datenaufbereitung
Création d'un jeu de données pour l'analyse causale

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.

1DATA casuser.CausalData;
2DO 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;
10END;
11RUN;
12 
13PROC logistic DATA=casuser.CausalData outest=casuser.psmodel_est noprint;
14 model Campaign(event='Test') = Age Income;
15 OUTPUT out=casuser.PropScores p=prop_Test;
16RUN;
17 
18DATA casuser.PropScores;
19 SET casuser.PropScores;
20 prop_Control = 1 - prop_Test;
21RUN;
22 
23PROC logistic DATA=casuser.CausalData outest=casuser.outcomemodel_est noprint;
24 class Campaign;
25 model Purchase(event='1') = Age Income Campaign;
26 store casuser.OutcomeModel;
27RUN;
28 
29DATA casuser.ScoringData_Test;
30 SET casuser.CausalData;
31 Campaign = 'Test';
32RUN;
33 
34DATA casuser.ScoringData_Control;
35 SET casuser.CausalData;
36 Campaign = 'Control';
37RUN;
38 
39PROC plm restore=casuser.OutcomeModel;
40 score DATA=casuser.ScoringData_Test out=casuser.Pred_Test predicted=p_Test;
41RUN;
42 
43PROC plm restore=casuser.OutcomeModel;
44 score DATA=casuser.ScoringData_Control out=casuser.Pred_Control predicted=p_Control;
45RUN;
46 
47DATA 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;
53RUN;

Beispiele

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).

SAS® / CAS-Code
Kopiert!
1PROC 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'}};
10RUN;
Ergebnis :
La sortie affichera plusieurs tables. La plus importante, 'Potential Outcome Means', montrera les estimations du taux d'achat pour les groupes 'Test' et 'Control'. La table 'Causal Effects' montrera l'estimation de la différence entre ces deux taux, représentant l'effet causal moyen du traitement (ATE).

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.

SAS® / CAS-Code
Kopiert!
1PROC 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'}};
11RUN;
Ergebnis :
Similaire à l'exemple IPW, mais les tables 'Potential Outcome Means' et 'Causal Effects' contiendront des colonnes supplémentaires pour l'erreur standard ('StdErr') et les limites de l'intervalle de confiance à 95% ('Lower' et 'Upper'). Les estimations ponctuelles peuvent être légèrement différentes et sont considérées comme plus robustes.

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é).

SAS® / CAS-Code
Kopiert!
1PROC 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'}};
25RUN;
Ergebnis :
Deux ensembles de résultats seront produits, un pour chaque appel d'action. Chaque ensemble affichera les estimations des résultats potentiels et de l'effet causal, cette fois avec des intervalles de confiance à 90%. De plus, une nouvelle table 'Covariance of POMs' sera affichée pour chaque méthode, montrant la covariance entre les estimations des résultats potentiels moyens pour 'Test' et 'Control'.

FAQ

Quelle est la fonction principale de l'action 'caEffect' ?
Quelles sont les méthodes disponibles pour estimer les moyennes des résultats potentiels (POM) ?
Quels paramètres sont obligatoires pour définir les variables de traitement et de résultat ?
Comment spécifier les résultats potentiels à estimer ?
Comment obtenir les erreurs-types et les intervalles de confiance pour les estimations ?
Pour les méthodes comme 'AIPW' ou 'REGADJ', comment fournir les modèles pré-calculés ?
Comment estimer la différence d'effet causal entre deux niveaux de traitement ?