ktChart

ktTrain

##set_ktchart

Description

L'action `ktTrain` (issue de l'ensemble d'actions KT Chart) est votre meilleure alliée pour entraîner des cartes de contrôle de type Kendall-Tau (KT charts) basées sur la méthode d'apprentissage SVDD (Support Vector Data DescriptionAlgorithme non supervisé créant une hypersphère minimale autour des données. Il est utilisé pour la détection d'anomalies en identifiant les points situés hors de cette frontière de décision.). Un peu comme un bon chien de garde statistique, elle analyse vos données historiques temporelles pour en modéliser la « normalité ». Ce modèleReprésentation mathématique entraînée sur des données pour capturer des tendances, prédire des résultats ou classifier des observations via des algorithmes (Régression, Forêt aléatoire, Gradient Boosting). (AstoreFichier binaire compact contenant la logique d'un modèle entraîné (analytique de score). Il permet de déployer et d'exécuter des modèles complexes de manière portable et ultra-rapide dans SAS Viya.) et ces paramètres pourront ensuite servir à surveiller vos procédés en temps réel avec l'action `ktMonitor` pour y détecter les moindres dérives !

Syntaxe Officielle
proc cas;
ktChart.ktTrain /
data={name="TABLE_IN", caslib="casuser"}
input={"var1", "var2", "var3"}
timeId="time_var"
window=100
overlap=25
solver="ACTSET"
outlierFraction=0.01
centers={name="centers_out", replace=true}
outData={name="data_out", replace=true}
outKT={name="kt_out", replace=true}
outSV={name="sv_out", replace=true}
saveState={name="astore_out", replace=true}
scoreInfo={name="scoreinfo_out", replace=true};
run;
quit;

Paramètres Clés

Nom du paramètre Description
data [Requis] Spécifie la table d'entrée contenant vos historiques de données saines. Ces données serviront d'étalon au modèle.
input [Requis] Liste des variables explicatives (numériques) à analyser et surveiller (ex: capteurs de pression, température, etc.).
window [Requis] Nombre d'observations dans chaque fenêtre glissante (ex: un bloc de temps). Plus la fenêtre est large, plus le calcul est lourd, mais plus la référence sera stable.
timeId Spécifie la variable contenant l'horodatage (datetime ID). Indispensable pour s'assurer que l'ordre temporel est bien respecté.
overlap Définit le nombre d'observations qui se chevauchent entre deux fenêtres consécutives. Utile pour lisser les transitions temporelles. Par défaut : 0.
outKT Table de sortie stockant les spécificités de la carte KT générée, notamment les limites de confiance et moyennes.
scoreInfo Table de sortie capitale qui conserve les méta-données et les informations statistiques nécessaires pour l'étape de scoring ultérieure.
saveState Génère un fichier ASTORE (Analytic Store) contenant le modèle binaire pré-compilé, parfait pour un déploiement fluide en production.
outlierFraction Fraction des données pouvant être considérée comme des valeurs aberrantes pendant l'entraînement SVDD. Par défaut: 0.01 (soit 1%). Pensez-y comme régler la sensibilité de votre alarme.
solver Méthode d'optimisation SVDD. Options possibles : 'ACTSET' (par défaut, Active-Set), 'FASTINC' (Fast Incremental), ou 'STOCHS' (Stochastic Subset).
centers Table de sortie contenant les coordonnées des centres de chaque fenêtre.
outSV Table de sortie listant les vecteurs de support découverts pendant l'entraînement SVDD.
outData Données en sortie d'entraînement avec l'ID de la fenêtre, le R-carré (R-square), et la distance au centre SVDD.

Préparation des données

Création d'un historique de télémétrie IoT (Comportement normal)

Générons un jeu de données simulé représentant deux capteurs d'un équipement industriel fonctionnant normalement sur quelques jours. Ce sera notre base d'entraînement saine.

1DATA casuser.iot_telemetry;
2 DO datetime = '01JAN2026:00:00:00'dt to '05JAN2026:00:00:00'dt BY 60;
3 sensor1 = 50 + 2*sin(datetime) + rand('Normal');
4 sensor2 = 100 + 5*cos(datetime) + rand('Normal');
5 OUTPUT;
6 END;
7 FORMAT datetime datetime19.;
8RUN;

Exemples d'utilisation

Entraînement fondamental d'une carte KT

Cet exemple illustre la syntaxe minimale. Nous spécifions la table, nos deux capteurs comme `input`, la variable temporelle `timeId`, et nous définissons des fenêtres d'analyse de 60 observations. Les trois tables de sortie essentielles (`outKT`, `scoreInfo` et `saveState`) sont créées.

1PROC CAS;
2 ktChart.ktTrain /
3 DATA={name="iot_telemetry", caslib="casuser"}
4 INPUT={"sensor1", "sensor2"}
5 timeId="datetime"
6 window=60
7 outKT={name="kt_out", caslib="casuser", replace=true}
8 scoreInfo={name="kt_scoreinfo", caslib="casuser", replace=true}
9 saveState={name="kt_astore", caslib="casuser", replace=true};
10RUN;
11QUIT;
Résultat Attendu :
Le CAS génère la carte KT (dans `kt_out`), un résumé des paramètres de scoring (dans `kt_scoreinfo`), et surtout l'ASTORE binaire (`kt_astore`) qui sera consommé par l'action `ktMonitor` pour de futures détections d'anomalies.
Entraînement avancé avec chevauchement, tolérance aux anomalies et analyse détaillée

Un appel sophistiqué où nous exploitons toutes les options d'optimisation : nous ajoutons un recouvrement (`overlap`) de 15 observations entre les fenêtres, choisissons le solveur 'FASTINC' idéal pour les grands volumes, modifions la fraction d'outliers à 5% et demandons toutes les tables de diagnostics possibles.

1PROC CAS;
2 ktChart.ktTrain /
3 DATA={name="iot_telemetry", caslib="casuser"}
4 INPUT={"sensor1", "sensor2"}
5 timeId="datetime"
6 window=60
7 overlap=15
8 solver="FASTINC"
9 outlierFraction=0.05
10 bwType="TRACE"
11 nRep=10
12 centers={name="kt_centers", caslib="casuser", replace=true}
13 outData={name="kt_outdata", caslib="casuser", replace=true}
14 outKT={name="kt_out", caslib="casuser", replace=true}
15 outSV={name="kt_outsv", caslib="casuser", replace=true}
16 scoreInfo={name="kt_scoreinfo", caslib="casuser", replace=true}
17 saveState={name="kt_astore", caslib="casuser", replace=true};
18RUN;
19QUIT;
Résultat Attendu :
Cette action ultra-détaillée produit six tables SAS en mémoire (casuser). Outre le modèle ASTORE, l'utilisateur a accès aux vecteurs de support (`kt_outsv`), aux centres des fenêtres (`kt_centers`) et à la distance SVDD de chaque observation d'entraînement (`kt_outdata`), permettant une analyse très fine de l'ajustement du modèle.