La procédure BART permet de construire des modèles prédictifs robustes. Cette fonctionnalité est particulièrement utile pour la prédiction sur de nouveaux jeux de données ou pour l'analyse d'interventions sur des variables explicatives. L'exemple fourni illustre la création d'un modèle BART, son stockage dans un magasin analytique, puis son chargement pour la prédiction et le calcul de marges prédictives. Les options TRAININMEM et MAPINMEM sont utilisées pour optimiser le processus en mémoire CAS. Les instructions MARGIN et MARGINDIFF sont présentées pour l'analyse des effets de changements spécifiques sur les prédicteurs.
Analyse des données
Type : CREATION_INTERNE
Les exemples utilisent des données synthétiques générées par la fonction rand() de SAS pour simuler un jeu de données avec une variable réponse continue (y) et 40 variables explicatives continues (x1-x40). Seules x1-x5 affectent réellement la variable réponse.
1 Bloc de code
PROC BART Data
Explication : Cet exemple génère un jeu de données synthétique de 10 000 observations et entraîne un modèle BART en utilisant `PROC BART`. Le modèle est ensuite stocké dans un magasin analytique nommé `mylib.modelFit` à l'aide de l'instruction `STORE`. Les options `trainInMem` et `mapInMem` sont utilisées pour améliorer les performances en gérant les données et les éléments du modèle en mémoire CAS, ce qui est recommandé pour des données de taille modérée.
Copié !
/* Création du jeu de données d'entraînement simulé */
data mylib.inputData / single =yes;
drop j w1-w40;
array x{40};
array w{40};
call streaminit(6524);
pi=constant("pi");
do i=1 to 10000;
u = rand("Uniform");
do j=1 to dim(x);
w{j} = rand("Uniform");
x{j} = (w{j} + u)/2;
end;
f1 = sin(pi * x1 * x2 );
f2 = (x3-0.5)**2;
f3 = x4;
f4 = x5;
fb = 10*f1 +20*f2+10*f3+5*f4;
y = fb + rand("Normal");
output;
end;
run;
/* Entraînement du modèle BART et stockage dans un magasin analytique */
proc bart data=mylib.inputData seed=9181 trainInMem mapInMem;
model y = x1-x40;
store mylib.modelFit;
run;
1
/* Création du jeu de données d'entraînement simulé */
2
DATA mylib.inputData / single =yes;
3
drop j w1-w40;
4
array x{40};
5
array w{40};
6
call streaminit(6524);
7
pi=constant("pi");
8
9
DO i=1 to 10000;
10
u = rand("Uniform");
11
DO j=1 to dim(x);
12
w{j} = rand("Uniform");
13
x{j} = (w{j} + u)/2;
14
END;
15
16
f1 = sin(pi * x1 * x2 );
17
f2 = (x3-0.5)**2;
18
f3 = x4;
19
f4 = x5;
20
fb = 10*f1 +20*f2+10*f3+5*f4;
21
22
y = fb + rand("Normal");
23
OUTPUT;
24
END;
25
RUN;
26
27
/* Entraînement du modèle BART et stockage dans un magasin analytique */
Explication : Ce second exemple génère un nouveau jeu de données de 1 000 observations (`mylib.toScoreData`) pour la prédiction. Il utilise ensuite `PROC BART` avec l'option `RESTORE=mylib.modelFit` pour charger le modèle précédemment enregistré et prédire la variable réponse. L'instruction `OUTPUT` est utilisée pour créer un tableau `mylib.scoredData` contenant les prédictions (`predResp`) et les résidus (`residual`). Enfin, une étape `DATA` et `PROC MEANS` sont employées pour calculer l'erreur carrée moyenne (ASE) des prédictions, permettant d'évaluer la généralisation du modèle.
Copié !
/* Création du jeu de données à scorer simulé */
data mylib.toScoreData / single =yes;
drop j w1-w40;
array x{40};
array w{40};
call streaminit(1972);
pi=constant("pi");
do i=1 to 1000;
u = rand("Uniform");
do j=1 to dim(x);
w{j} = rand("Uniform");
x{j} = (w{j} + u)/2;
end;
f1 = sin(pi * x1 * x2 );
f2 = (x3-0.5)**2;
f3 = x4;
f4 = x5;
fb = 10*f1 +20*f2+10*f3+5*f4;
y = fb + rand("Normal");
output;
end;
run;
/* Scoring des nouvelles observations en utilisant le modèle stocké */
proc bart data=mylib.toScoreData restore=mylib.modelFit;
output out = mylib.scoredData pred = predResp resid = residual;
run;
/* Calcul de l'erreur carrée moyenne (ASE) pour les données scorées */
data fitCheck;
set mylib.scoredData;
SquareError = residual * residual;
run;
proc means data=fitCheck mean;
var SquareError;
run;
1
/* Création du jeu de données à scorer simulé */
2
DATA mylib.toScoreData / single =yes;
3
drop j w1-w40;
4
array x{40};
5
array w{40};
6
call streaminit(1972);
7
pi=constant("pi");
8
9
DO i=1 to 1000;
10
u = rand("Uniform");
11
DO j=1 to dim(x);
12
w{j} = rand("Uniform");
13
x{j} = (w{j} + u)/2;
14
END;
15
16
f1 = sin(pi * x1 * x2 );
17
f2 = (x3-0.5)**2;
18
f3 = x4;
19
f4 = x5;
20
fb = 10*f1 +20*f2+10*f3+5*f4;
21
22
y = fb + rand("Normal");
23
OUTPUT;
24
END;
25
RUN;
26
27
/* Scoring des nouvelles observations en utilisant le modèle stocké */
OUTPUT out = mylib.scoredData pred = predResp resid = residual;
30
RUN;
31
32
/* Calcul de l'erreur carrée moyenne (ASE) pour les données scorées */
33
DATA fitCheck;
34
SET mylib.scoredData;
35
SquareError = residual * residual;
36
RUN;
37
38
PROC MEANSDATA=fitCheck mean;
39
var SquareError;
40
RUN;
3 Bloc de code
PROC BART
Explication : Cet exemple illustre l'utilisation de l'instruction `MARGIN` pour calculer les marges prédictives du modèle BART. En utilisant le modèle enregistré (`mylib.modelFit`) et les données d'entraînement, des scénarios d'intervention sont définis où les valeurs de variables explicatives (ici `x1`, `x2`, `x3`) sont modifiées. Par exemple, 'Scenario1' fixe `x2` à 0.25, tandis que 'Scenario2' fixe `x2` à 0.25 et `x3` à 0.5. Ceci permet d'analyser l'impact de changements contrôlés sur les prédictions du modèle.
Explication : Ce dernier exemple s'appuie sur le calcul des marges prédictives pour effectuer des comparaisons. L'instruction `MARGINDIFF` est utilisée pour spécifier des contrastes entre différentes marges prédictives définies par l'instruction `MARGIN`. Ici, les effets de l'intervention sur `x1` à 0.5 et 0.75 sont comparés à une valeur de référence de `x1` à 0.25. Cela permet d'obtenir directement les différences moyennes des estimations des marges prédictives avec leurs intervalles de crédibilité, offrant une analyse comparative des scénarios.
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.