Scénario de test & Cas d'usage
Analyse d'inférence causale et estimation d'effets.
Découvrir toutes les actions de causalanalysisSimulation de 5000 clients avec attribution de traitement biaisée (basée sur l'ancienneté) et pré-calcul des probabilités (propension) et des résultats contrefactuels attendus.
| 1 | |
| 2 | DATA casuser.churn_data; |
| 3 | call streaminit(999); |
| 4 | DO i = 1 to 5000; |
| 5 | anciennete = rand('Uniform') * 10; |
| 6 | /* Attribution traitement */ prob_remise = 0.3 + 0.02*anciennete; |
| 7 | prob_surclass = 0.2 + 0.01*anciennete; |
| 8 | prob_aucune = 1 - (prob_remise + prob_surclass); |
| 9 | IF prob_aucune < 0 THEN prob_aucune=0; |
| 10 | r = rand('Uniform'); |
| 11 | IF r < prob_remise THEN offre = 'Remise'; |
| 12 | ELSE IF r < (prob_remise + prob_surclass) THEN offre = 'Surclassement'; |
| 13 | ELSE offre = 'Aucune'; |
| 14 | /* Resultat observe (0=Reste, 1=Churn) */ churn_prob = 0.4 - 0.03*anciennete; |
| 15 | IF offre='Remise' THEN churn_prob = churn_prob - 0.1; |
| 16 | IF offre='Surclassement' THEN churn_prob = churn_prob - 0.15; |
| 17 | churn = rand('Bernoulli', max(0, churn_prob)); |
| 18 | /* Counterfactuals */ pred_y_remise = max(0, (0.4 - 0.03*anciennete - 0.1)); |
| 19 | pred_y_surclass = max(0, (0.4 - 0.03*anciennete - 0.15)); |
| 20 | pred_y_aucune = max(0, (0.4 - 0.03*anciennete)); |
| 21 | ps_remise = prob_remise; |
| 22 | ps_surclass = prob_surclass; |
| 23 | ps_aucune = prob_aucune; |
| 24 | OUTPUT; |
| 25 | END; |
| 26 | |
| 27 | RUN; |
| 28 |
| 1 | |
| 2 | PROC CAS; |
| 3 | TABLE.loadTable / path='churn_data.sashdat' caslib='casuser' casout={name='churn_data', replace=true}; |
| 4 | |
| 5 | QUIT; |
| 6 |
| 1 | |
| 2 | PROC CAS; |
| 3 | causalanalysis.caEffect / TABLE={name='churn_data'}, treatVar={name='offre'}, outcomeVar={name='churn', type='BINOMIAL', event='1'}, method='AIPW', pom=[ {trtLev='Aucune', trtProb='ps_aucune', predOut='pred_y_aucune'}, {trtLev='Remise', trtProb='ps_remise', predOut='pred_y_remise'}, {trtLev='Surclassement', trtProb='ps_surclass', predOut='pred_y_surclass'} ], difference=[ {refLev='Aucune', evtLev='Remise'}, {refLev='Aucune', evtLev='Surclassement'} ], inference=true; |
| 4 | |
| 5 | RUN; |
| 6 |
L'action doit produire une table des 'Causal Effects' montrant la réduction du taux de churn (différence négative) pour les deux offres par rapport à 'Aucune'. Grâce à AIPW, les estimations doivent rester robustes même si le modèle de propension simule un ciblage fort.