?> catTrans - WeAreCAS
dataPreprocess

catTrans

Beschreibung

L'action `catTrans` du set `dataPreprocess` est un outil fondamental en préparation de données (feature engineering). Elle permet de transformer des variables catégorielles en représentations numériques, ce qui est indispensable pour la plupart des algorithmes de machine learning. Cette action offre plusieurs stratégies, allant du simple regroupement de modalités rares (non supervisé) à des techniques d'encodage supervisées sophistiquées comme le 'Weight of Evidence' (WOE) ou le regroupement par arbre de décision, qui utilisent une variable cible pour créer des groupes optimaux.

dataPreprocess.catTrans result=results status=rc / arguments={{ contingencyTblOpts={{ inputsMethod="BUCKET" | "DISTINCTLEVELS" | "QUANTILE" | "RAW", inputsNLevels=integer, inputsRawLevelStartingValue=integer }}, maxNBins=integer, minNBins=integer, nBinsArray={integer-1, integer-2, ...} | integer, overrides={{ binMissing=TRUE | FALSE, emptyBins=TRUE | FALSE, enforceBinaryLevels=TRUE | FALSE, ivFactor=double, minNObsInBin=64-bit-integer, minPerNObsInBin=double, missingBinStats=TRUE | FALSE, missingEvalNonEvent=TRUE | FALSE, woeAdjust=double, woeDefinition="EVENT" | "NONEVENT" }}, preprocessRare=TRUE | FALSE, rareThreshold=integer, rareThresholdPercent=double, treeCrit="ENTROPY" | "GAINRATIO" | "GINI" | "RSS" }}, casOut={{ caslib="string", compress=TRUE | FALSE, indexVars={"variable-name-1", "variable-name-2", ...}, label="string", lifetime=64-bit-integer, maxMemSize=64-bit-integer, memoryFormat="DVR" | "INHERIT" | "STANDARD", name="table-name", promote=TRUE | FALSE, replace=TRUE | FALSE, replication=integer, tableRedistUpPolicy="DEFER" | "NOREDIST" | "REBALANCE", threadBlockSize=64-bit-integer, timeStamp="string", where={"string-1", "string-2", ...} }}, casOutBinDetails={{ caslib="string", compress=TRUE | FALSE, indexVars={"variable-name-1", "variable-name-2", ...}, label="string", lifetime=64-bit-integer, maxMemSize=64-bit-integer, memoryFormat="DVR" | "INHERIT" | "STANDARD", name="table-name", promote=TRUE | FALSE, replace=TRUE | FALSE, replication=integer, tableRedistUpPolicy="DEFER" | "NOREDIST" | "REBALANCE", threadBlockSize=64-bit-integer, timeStamp="string", where={"string-1", "string-2", ...} }}, casOutLevelBinMap={{ caslib="string", compress=TRUE | FALSE, indexVars={"variable-name-1", "variable-name-2", ...}, label="string", lifetime=64-bit-integer, maxMemSize=64-bit-integer, memoryFormat="DVR" | "INHERIT" | "STANDARD", name="table-name", promote=TRUE | FALSE, replace=TRUE | FALSE, replication=integer, tableRedistUpPolicy="DEFER" | "NOREDIST" | "REBALANCE", threadBlockSize=64-bit-integer, timeStamp="string", where={"string-1", "string-2", ...} }}, code={{ casOut={{ caslib="string", compress=TRUE | FALSE, indexVars={"variable-name-1", "variable-name-2", ...}, label="string", lifetime=64-bit-integer, maxMemSize=64-bit-integer, memoryFormat="DVR" | "INHERIT" | "STANDARD", name="table-name", promote=TRUE | FALSE, replace=TRUE | FALSE, replication=integer, tableRedistUpPolicy="DEFER" | "NOREDIST" | "REBALANCE", threadBlockSize=64-bit-integer, timeStamp="string", where={"string-1", "string-2", ...} }}, comment=TRUE | FALSE, fmtWdth=integer, indentSize=integer, labelId=integer, lineSize=integer, noTrim=TRUE | FALSE, tabForm=TRUE | FALSE }}, copyAllVars=TRUE | FALSE, copyVars={"variable-name-1", "variable-name-2", ...}, distinctCountLimit=integer, evaluationStats=TRUE | FALSE, events={"string-1", "string-2", ...}, freq="variable-name", fuzzyCompare=double, includeInputVars=TRUE | FALSE, includeMissingGroup=TRUE | FALSE, inputs={{...}, {...}}, inputsInheritFormats=TRUE | FALSE, method="DTREE" | "GROUPRARE" | "ONEHOT" | "RTREE" | "WOE", outputTableOptions={{ forceTableReturn=TRUE | FALSE, tableNames={"string-1", "string-2", ...} }}, outVarsNamePrefix="string", outVarsNameSuffix="string", sasVarNameLength=TRUE | FALSE, table={...}, targets={{...}, {...}}, targetsInheritFormats=TRUE | FALSE, weight="variable-name" ;
Einstellungen
ParameterBeschreibung
tableSpécifie la table CAS d'entrée à analyser. C'est le seul paramètre obligatoire.
inputsListe des variables catégorielles à transformer. Si non spécifié, toutes les variables de type caractère sont utilisées.
methodSpécifie la technique de transformation à utiliser. Les valeurs possibles sont 'GROUPRARE' (par défaut, regroupe les modalités rares), 'ONEHOT' (encodage 1-chaud), 'WOE' (Weight of Evidence, supervisé), 'DTREE' (arbre de décision, supervisé), 'RTREE' (arbre de régression, supervisé).
targetsListe des variables cibles à utiliser pour les méthodes d'encodage supervisées (WOE, DTREE, RTREE).
eventsSpécifie la valeur de la modalité 'événement' pour chaque variable cible binaire. Doit correspondre à la liste `targets`.
argumentsConteneur pour les options de configuration avancées de l'algorithme de regroupement.
arguments.preprocessRareSi TRUE, les modalités rares sont regroupées en une seule catégorie avant d'appliquer la méthode de regroupement principale. Utile pour nettoyer les données.
arguments.rareThresholdPercentDéfinit le seuil en pourcentage pour considérer une modalité comme 'rare'. Par défaut à 5% si `preprocessRare` est activé.
arguments.treeCritPour la méthode DTREE, spécifie le critère de division de l'arbre ('GINI', 'ENTROPY', 'GAINRATIO').
arguments.maxNBinsNombre maximum de groupes (bins) à créer pour les méthodes supervisées.
arguments.overridesConteneur pour les options globales qui peuvent surcharger les comportements par défaut, comme la gestion des valeurs manquantes (`binMissing`) ou l'ajustement du WOE (`woeAdjust`).
casOutSpécifie la table de sortie qui contiendra les données d'entrée avec les nouvelles variables transformées.
casOutBinDetailsSpécifie une table de sortie pour stocker les statistiques détaillées de chaque bin créé (ex: WOE, IV, nombre d'événements).
casOutLevelBinMapSpécifie une table de sortie pour stocker le mappage entre les modalités originales et les nouveaux bins.
codePermet de générer le code de scoring SAS DATA step dans une table CAS, pour une réutilisation facile.
copyVarsListe des variables de la table d'entrée à copier dans la table de sortie `casOut`.
outVarsNamePrefixSpécifie un préfixe à ajouter aux noms des nouvelles variables créées.
Datenaufbereitung
Jeu de données de ventes pour les tests

Cette table `sales_data` contient des informations sur les ventes. `CustomerID` est un identifiant unique. `Product` est une variable catégorielle avec de nombreuses modalités, dont certaines sont rares. `Region` est une variable catégorielle simple. `Purchased` est une variable cible binaire (1 pour un achat, 0 sinon), utilisée pour les méthodes supervisées. `SaleCount` et `SaleValue` peuvent être utilisées comme variables de fréquence et de poids.

1DATA casuser.sales_data;
2 INFILE DATALINES dlm=',';
3 INPUT CustomerID $ Product $ Region $ Purchased SaleCount SaleValue;
4 DATALINES;
5101,Laptop,East,1,1,1200
6102,Mouse,West,0,2,50
7103,Keyboard,West,1,1,75
8104,Laptop,East,0,1,1150
9105,Monitor,North,1,1,300
10106,Mouse,South,0,3,75
11107,Laptop,West,1,1,1300
12108,Webcam,East,0,5,250
13109,Monitor,South,1,2,600
14110,Keyboard,North,0,1,80
15111,Laptop,East,1,1,1250
16112,Mouse,West,1,1,25
17113,Headphones,South,0,4,300
18114,Laptop,North,1,1,1400
19115,Monitor,West,0,1,280
20116,Webcam,East,1,2,100
21117,Mouse,North,0,1,20
22118,Keyboard,South,1,1,90
23119,Laptop,West,0,1,1100
24120,Docking Station,East,1,1,150
25;
26RUN;

Beispiele

Le 'One-Hot Encoding' est une technique non supervisée qui crée une nouvelle variable binaire (0 ou 1) pour chaque modalité unique de la variable d'entrée. C'est utile pour les algorithmes qui ne gèrent pas les variables catégorielles nativement. Ici, on transforme la variable `Region`.

SAS® / CAS-Code
Kopiert!
1PROC CAS;
2 dataPreprocess.catTrans
3 TABLE={name='sales_data'},
4 method='ONEHOT',
5 inputs={{name='Region'}},
6 casOut={name='sales_onehot', replace=true},
7 copyVars={'CustomerID'};
8RUN;
9QUIT;
Ergebnis :
Une nouvelle table `sales_onehot` est créée dans la caslib de l'utilisateur. Elle contient `CustomerID` et de nouvelles colonnes binaires pour chaque région (par exemple, `cat_Region_East`, `cat_Region_West`, etc.), avec une valeur de 1 si l'observation appartient à cette région, 0 sinon.

Cette méthode non supervisée identifie les modalités d'une variable qui apparaissent rarement et les regroupe dans une seule catégorie '_RARE_'. C'est efficace pour réduire la cardinalité d'une variable avant modélisation. On utilise `rareThresholdPercent=15` pour définir comme 'rare' toute modalité représentant moins de 15% du total des observations. On utilise aussi `outVarsNamePrefix` pour préfixer la nouvelle variable.

SAS® / CAS-Code
Kopiert!
1PROC CAS;
2 dataPreprocess.catTrans
3 TABLE='sales_data',
4 method='GROUPRARE',
5 inputs={{name='Product'}},
6 arguments={preprocessRare=true, rareThresholdPercent=15},
7 outVarsNamePrefix='grp',
8 copyVars={'CustomerID', 'Product'},
9 casOut={name='sales_grouped', replace=true};
10RUN;
11QUIT;
Ergebnis :
La table `sales_grouped` est créée. Elle contient `CustomerID`, `Product` et une nouvelle variable `grp_Product`. Les produits comme 'Webcam', 'Headphones', 'Docking Station' qui sont rares seront regroupés sous la modalité '_RARE_' dans la nouvelle colonne.

Le WOE est une technique d'encodage supervisée puissante pour les cibles binaires. Elle remplace chaque modalité par une valeur numérique qui représente le 'poids de la preuve' qu'elle apporte en faveur de l'événement. On utilise `Product` comme entrée et `Purchased` comme cible, en spécifiant `event='1'`. On active le calcul des statistiques d'évaluation (`evaluationStats=true`) et on gère les valeurs manquantes (s'il y en avait) avec `binMissing=true`. Les détails des bins sont sauvegardés dans `sales_woe_details`.

SAS® / CAS-Code
Kopiert!
1PROC CAS;
2 dataPreprocess.catTrans
3 TABLE='sales_data',
4 method='WOE',
5 inputs={{name='Product'}},
6 targets={{name='Purchased'}},
7 events={'1'},
8 evaluationStats=true,
9 arguments={overrides={binMissing=true, woeAdjust=0.5}},
10 casOut={name='sales_woe', replace=true},
11 casOutBinDetails={name='sales_woe_details', replace=true},
12 copyVars={'CustomerID', 'Product', 'Purchased'};
13RUN;
14QUIT;
Ergebnis :
La table `sales_woe` contient une nouvelle colonne `cat_Product` avec les valeurs WOE. Une table `sales_woe_details` est également créée, contenant les statistiques détaillées pour chaque bin (groupe de produits), y compris le WOE et l'Information Value (IV), ce qui permet d'évaluer la puissance prédictive de la variable.

Cette méthode supervisée utilise un arbre de décision à un niveau pour regrouper les modalités de manière optimale par rapport à la cible. On utilise le critère `GINI` pour la séparation et on vise un maximum de 4 groupes (`maxNBins=4`). Cet exemple montre également comment générer le code de scoring SAS DATA step correspondant et le stocker dans une table CAS (`scoring_code_dtree`).

SAS® / CAS-Code
Kopiert!
1PROC CAS;
2 dataPreprocess.catTrans
3 TABLE='sales_data',
4 method='DTREE',
5 inputs={{name='Product'}},
6 targets={{name='Purchased'}},
7 events={'1'},
8 arguments={treeCrit='GINI', maxNBins=4},
9 code={casOut={name='scoring_code_dtree', replace=true}},
10 casOut={name='sales_dtree', replace=true};
11RUN;
12QUIT;
Ergebnis :
Une table `sales_dtree` avec la variable `Product` transformée en une nouvelle variable numérique représentant les groupes trouvés par l'arbre. Une autre table `scoring_code_dtree` est créée, contenant le code DATA step qui peut être utilisé pour appliquer cette même transformation dans d'autres environnements.

FAQ

Quelle est la fonction principale de l'action `catTrans` ?
Quelles sont les différentes méthodes de regroupement disponibles ?
Comment peut-on gérer les niveaux rares d'une variable ?
Quels paramètres sont nécessaires pour un regroupement supervisé comme `DTREE` ou `WOE` ?
Quels types de sorties peuvent être générés par cette action ?