ktTrain
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 !
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.
| 1 | DATA 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.; |
| 8 | RUN; |
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.
| 1 | PROC 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}; |
| 10 | RUN; |
| 11 | QUIT; |
Résultat Attendu :
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.
| 1 | PROC 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}; |
| 18 | RUN; |
| 19 | QUIT; |