smartData

dataSegment

##set_smartdata

Description

Attention, cette action est un peu comme cette vieille paire de chaussettes qu'on adore mais qu'il faut se résoudre à jeter : elle est officiellement dépréciée depuis la version 2026.02 ! L'action dataSegment regroupe les données en utilisant le clusteringLe clustering est une technique d'apprentissage non supervisé regroupant des données similaires en segments homogènes afin d'identifier des structures cachées sans étiquettes préalables. k-meansLe clustering K-means (ou algorithme des k-moyennes) est une méthode d'apprentissage automatique non supervisé qui sert à diviser des données non étiquetées en $k$ groupes distincts (clusters) selon leurs similitudes. et segmente les documents par identifiant de clusterEnsemble de nœuds (machines) interconnectés, gérés par Kubernetes, qui collaborent pour exécuter les microservices et le moteur CAS de SAS Viya, assurant haute disponibilité et passage à l'échelle.. SAS recommande désormais vivement d'utiliser les actions de remplacement modernes comme profileText et kClus pour vos travaux de text clusteringLe clustering est une technique d'apprentissage non supervisé regroupant des données similaires en segments homogènes afin d'identifier des structures cachées sans étiquettes préalables..

Syntaxe Officielle
proc cas;
smartData.dataSegment /
table={name="table_name"}
docId="variable-name"
docVectOut={name="table_name"}
casOut={name="table_name"}
conv=1E-05
docOut={name="table_name"}
inputs={{name="variable-name"}}
keepWords={name="table_name"}
maxIters=10
nSegment=10
seed=0
termOut={name="table_name"}
textParse={language="FRENCH", stemming=TRUE, entities="NONE"};
quit;

Paramètres Clés

Nom du paramètre Description
table (Requis) Spécifie la table d'entrée contenant les documents à analyser.
docId (Requis) Nom de la variable (de type texte ou numérique) contenant l'identifiant unique de chaque document.
docVectOut (Requis) Spécifie la table CAS de sortie en mémoire destinée à stocker les vecteurs de documents.
casOut Spécifie la table CAS de sortie qui stockera les informations générales de clustering.
conv Spécifie la tolérance de convergence de l'algorithme k-means (la valeur par défaut est 1E-05).
docOut Spécifie la table de sortie stockant les informations croisées document-terme, incluant l'ID du document, le terme et l'ID du cluster.
inputs Spécifie la liste des noms des colonnes de la table d'entrée à utiliser pour le clustering. Si omis, toutes les variables numériques seront exploitées.
keepWords Spécifie une table CAS d'entrée limitant l'analyse uniquement aux termes qui y figurent. (Astuce: la variable contenant les mots doit impérativement être du type varchar).
maxIters Le nombre maximum d'itérations autorisées pour l'algorithme (par défaut : 10).
nSegment Le nombre de clusters (k) ciblés par l'analyse k-means (par défaut : 10).
seed Permet de spécifier une graine pour l'initialisation du générateur aléatoire (0 par défaut pour une valeur issue de l'horloge système). Renseignez une valeur > 0 pour assurer la reproductibilité parfaite de vos exécutions.
termOut Spécifie la table de sortie en mémoire chargée de stocker les informations relatives à l'index des termes.
textParse Définit les paramètres fondamentaux de parsing textuel comme la langue (ex: FRENCH), le stemming (racinisation), ou l'extraction des groupes nominaux et d'entités.

Préparation des données

Création d'une table CAS de témoignages

Préparation d'une table CAS d'exemple contenant des commentaires et un identifiant unique, un pré-requis absolu pour exécuter l'action dataSegment.

1DATA mycas.avis_clients;
2 LENGTH id_doc 8 texte varchar(200);
3 id_doc=1; texte="J'adore ce produit, il est fantastique et de très bonne qualité."; output;
4 id_doc=2; texte="Vraiment très déçu, la qualité est mauvaise et le produit est arrivé cassé."; output;
5 id_doc=3; texte="Produit génial, je le recommande vivement à tout le monde."; output;
6 id_doc=4; texte="Service client horrible, produit nul, fuyez !"; OUTPUT;
7RUN;

Exemples d'utilisation

Clustering textuel de base

Utilisation simple et directe de dataSegment pour classer automatiquement nos 4 avis clients en 2 clusters sémantiques. Remarquez que la configuration textParse est soigneusement ajustée pour la langue française.

1PROC CAS;
2 smartData.dataSegment /
3 TABLE={name="avis_clients"}
4 docId="id_doc"
5 inputs={{name="texte"}}
6 nSegment=2
7 docVectOut={name="vect_out", replace=TRUE}
8 casOut={name="cluster_out", replace=TRUE}
9 textParse={language="FRENCH", stemming=TRUE, nounGroups=FALSE};
10RUN;
11QUIT;
Résultat Attendu :
L'action parse les textes français, génère la matrice de termes, exécute un k-means, répartit les données en 2 groupes distincts et sauvegarde les synthèses dans `cluster_out` et les vecteurs correspondants dans `vect_out`.
Segmentation experte avec filtrage par dictionnaire personnalisé et paramétrage algorithmique

Cette approche 'overkill' pour seulement quatre malheureuses lignes de texte illustre parfaitement les capacités avancées du paramètre 'keepWords', réduisant drastiquement le bruit du texte. On y impose aussi un maximum d'itérations, une convergence stricte et une graine aléatoire fixe.

1DATA mycas.mots_cles;
2 LENGTH term varchar(20);
3 term="produit"; OUTPUT;
4 term="qualité"; OUTPUT;
5RUN;
6PROC CAS;
7 smartData.dataSegment /
8 TABLE={name="avis_clients"}
9 docId="id_doc"
10 inputs={{name="texte"}}
11 keepWords={name="mots_cles"}
12 nSegment=2
13 maxIters=50
14 conv=1E-06
15 seed=12345
16 docVectOut={name="vect_out_adv", replace=TRUE}
17 casOut={name="cluster_out_adv", replace=TRUE}
18 docOut={name="doc_out_adv", replace=TRUE}
19 termOut={name="term_out_adv", replace=TRUE}
20 textParse={language="FRENCH", entities="NONE"};
21RUN;
22QUIT;
Résultat Attendu :
Le parsing filtre rigoureusement les données d'entrée pour ne modéliser que l'occurrence des termes 'produit' et 'qualité' référencés dans la table 'mots_cles'. Ensuite, un k-means fin est accompli produisant pas moins de 4 tables de sortie pour décortiquer la totalité de la relation document-terme-cluster. Attention tout de même : malgré son charme technique, l'action dataSegment est bel et bien dépréciée !