regression

logistic

##set_regression

Description

L'action `logistic` du set d'actions `regression` est le véritable couteau suisse pour ajuster des modèles de régression logistiqueModèle statistique prédisant la probabilité d'un événement binaire (0/1) via une fonction logistique. Il lie des variables explicatives à une variable cible catégorielle. binaire, binomiale ou multinomiale dans l'environnement distribué SAS Viya. Que ce soit pour prédire l'attrition de vos clients (le fameux churn) ou classer des transactions frauduleuses, cette action fait le gros du travail statistique avec des fonctionnalités avancées comme la sélection de variablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage. (LASSO, Stepwise) et le partitionnement de données intégré. Bref, c'est l'indispensable pour tout Data ScientistExpert exploitant SAS Viya pour extraire des connaissances via le Machine Learning et les statistiques, afin de résoudre des problèmes métier complexes à partir de données massives. qui se respecte ! Source :

Syntaxe Officielle
proc cas;
regression.logistic /
table={name="nom_de_la_table", caslib="nom_du_caslib"}
class={"var_cat_1", "var_cat_2"}
model={
depVars={{name="variable_cible", options={event="valeur_cible"}}},
effects={{vars={"var_expl_1", "var_expl_2"}}}
}
selection={method="STEPWISE"}
partByFrac={test=0.3, validate=0.3, seed=123}
output={casOut={name="table_sortie", replace=true}, pred="prob_predite"}
store={name="modele_sauvegarde", replace=true};
quit;

Paramètres Clés

Nom du paramètre Description
table Spécifie la table de données d'entrée CAS à utiliser pour l'analyse. Parce qu'évidemment, un modèle sans données, c'est comme une requête sans clause SELECT.
model Définit l'architecture de votre modèle : la variable cible dépendante (`depVars`), les variables explicatives (`effects`), ainsi que les options comme la fonction de lien (`link`) ou le type de distribution (`dist`).
class Liste les variables catégorielles (ou variables de classification) à utiliser comme variables explicatives. L'action s'occupera toute seule de la création des variables muettes (dummy variables).
selection Active la magie de la sélection automatique de variables (FORWARD, BACKWARD, STEPWISE, LASSO, ELASTICNET, etc.) pour ne retenir que les effets qui ont un réel impact prédictif.
output Génère une table de sortie CAS contenant des statistiques détaillées au niveau de l'observation, comme les probabilités prédites ou les différents types de résidus.
store Permet de sauvegarder votre modèle fraîchement entraîné sous la forme d'un objet binaire analytique (ASTORE), parfait pour être réutilisé en production sur de nouvelles données.
partByFrac Divise (partitionne) vos données de manière aléatoire en générant des sous-ensembles d'entraînement, de validation et de test selon les fractions spécifiées.

Préparation des données

Création d'un jeu de données de diagnostic médical

Afin de pouvoir tester notre modèle de régression logistique, nous allons générer une table CAS simulant des profils de patients. L'objectif sera de prédire s'ils sont 'malades' (1) ou non (0) en fonction de variables prédictives telles que l'âge, le sexe et la pression artérielle.

1cas monCasSession;
2LIBNAME mycas cas;
3DATA mycas.patients;
4 call streaminit(12345);
5 DO id = 1 to 2000;
6 age = round(rand('uniform') * 60 + 20);
7 sexe = ifc(rand('uniform') > 0.5, 'M', 'F');
8 pression = round(rand('normal', 120, 15));
9 /* Creation d'une probabilite logistique basee sur les variables */
10 log_odds = -5 + 0.05*age + 0.02*pression + ifn(sexe='M', 0.5, 0);
11 p = exp(log_odds) / (1 + exp(log_odds));
12 /* Assignation de la cible en fonction de la probabilite */
13 malade = (rand('uniform') < p);
14 OUTPUT;
15 END;
16RUN;

Exemples d'utilisation

Régression Logistique Simple (Binaire)

Cet exemple illustre la configuration minimale pour exécuter un modèle logistique de base visant à prédire l'événement `malade=1`.

1PROC CAS;
2 regression.logistic /
3 TABLE={name="patients"}
4 class={"sexe"}
5 model={
6 depVars={{name="malade", options={event="1"}}},
7 effects={{vars={"age", "sexe", "pression"}}}
8 };
9QUIT;
Résultat Attendu :
L'action générera plusieurs tables dans le journal SAS (ou l'interface) listant les informations du modèle, l'évaluation de l'ajustement global, et surtout le tableau des estimations des paramètres (Estimate, Std Error, Chi-Square, Pr > ChiSq) quantifiant l'impact de chaque variable explicative sur la probabilité de la maladie.
Régression Logistique Avancée avec Sélection Stepwise, Partitionnement et Sauvegarde ASTORE

Ici, nous passons à la vitesse supérieure ! Ce flux complet inclut : un partitionnement des données (70% entraînement / 30% test), une sélection automatique des caractéristiques via la méthode 'Stepwise' minimisant le critère AIC, la création d'une table de prédictions, et l'enregistrement du modèle sous forme de fichier ASTORE pour un déploiement futur.

1PROC CAS;
2 regression.logistic /
3 TABLE={name="patients"}
4 class={"sexe"}
5 model={
6 depVars={{name="malade", options={event="1"}}},
7 effects={{vars={"age", "sexe", "pression"}}}
8 }
9 partByFrac={test=0.3, seed=802}
10 selection={method="STEPWISE", select="AIC", details="SUMMARY"}
11 OUTPUT={
12 casOut={name="patients_scores", replace=true},
13 pred="Prob_Maladie_Predite",
14 into="Classe_Predite",
15 copyVars={"id", "malade"}
16 }
17 store={name="astore_modele_maladie", replace=true};
18QUIT;
Résultat Attendu :
Le serveur CAS va entraîner le modèle uniquement sur les 70% de données dédiées à l'apprentissage, sélectionner le sous-ensemble de variables le plus performant, évaluer la généralisation sur le set de test, générer la table en mémoire `patients_scores` contenant les probabilités calculées avec les ID, et créer l'objet analytique binaire `astore_modele_maladie` pour un scoring batch ou en temps réel ultérieur.