neuralNet annCode

Génération de code pour un modèle complexe de maintenance prédictive (Auto-encodeur)

Scénario de test & Cas d'usage

Contexte Métier

Une entreprise industrielle utilise des milliers de capteurs sur ses machines. Pour détecter des anomalies de fonctionnement, un modèle de type auto-encodeur a été entraîné. L'objectif est de générer un code de scoring qui calcule les valeurs des nœuds de la couche cachée (la représentation compressée des données) pour chaque machine. Cette représentation sera ensuite utilisée par un autre processus pour calculer un score d'anomalie.
À propos du Set : neuralNet

Entraînement de réseaux de neurones artificiels classiques.

Découvrir toutes les actions de neuralNet
Préparation des Données

Création d'une table `CAPTEURS_MACHINE` simulant les données de 20 capteurs pour des milliers de cycles de fonctionnement. Les données sont majoritairement normales, avec quelques anomalies injectées pour simuler des pannes.

Copié !
1DATA casuser.CAPTEURS_MACHINE(promote=yes);
2 array capteurs{20} capteur_1-capteur_20;
3 call streaminit(456);
4 DO cycle = 1 to 10000;
5 base_val = rand('uniform') * 10;
6 DO i = 1 to 20;
7 capteurs{i} = base_val + rand('normal', 0, 0.5);
8 END;
9 IF rand('uniform') > 0.98 THEN DO;
10 capteurs{rand('integer', 1, 20)} = rand('uniform') * 100;
11 END;
12 OUTPUT;
13 END;
14 drop i base_val cycle;
15RUN;

Étapes de réalisation

1
Entraînement d'un modèle auto-encodeur. Les variables d'entrée sont également utilisées comme cibles. L'architecture contient une couche cachée de 5 neurones pour forcer la compression de l'information.
Copié !
1PROC CAS;
2 LOADACTIONSET 'neuralNet';
3 neuralNet.annTrain /
4 TABLE={name='CAPTEURS_MACHINE'},
5 inputs={'capteur_1', 'capteur_2', 'capteur_3', 'capteur_4', 'capteur_5', 'capteur_6', 'capteur_7', 'capteur_8', 'capteur_9', 'capteur_10', 'capteur_11', 'capteur_12', 'capteur_13', 'capteur_14', 'capteur_15', 'capteur_16', 'capteur_17', 'capteur_18', 'capteur_19', 'capteur_20'},
6 target={'capteur_1', 'capteur_2', 'capteur_3', 'capteur_4', 'capteur_5', 'capteur_6', 'capteur_7', 'capteur_8', 'capteur_9', 'capteur_10', 'capteur_11', 'capteur_12', 'capteur_13', 'capteur_14', 'capteur_15', 'capteur_16', 'capteur_17', 'capteur_18', 'capteur_19', 'capteur_20'},
7 arch='AUTOENCODER',
8 hiddens={5},
9 modelTable={name='MODELE_AUTOENCODEUR', replace=true};
10QUIT;
2
Génération du code de scoring en utilisant l'option `listNode='HIDDEN'` pour extraire uniquement les valeurs des neurones de la couche cachée.
Copié !
1PROC CAS;
2 neuralNet.annCode /
3 modelTable={name='MODELE_AUTOENCODEUR'},
4 listNode='HIDDEN',
5 code={casOut={name='CODE_AUTOENCODEUR', replace=true}};
6QUIT;

Résultat Attendu


L'action `annCode` génère une table `CODE_AUTOENCODEUR`. Le code DATA step contenu dans cette table, une fois appliqué à de nouvelles données de capteurs, doit produire une table de sortie contenant non pas les prédictions finales, mais les 5 variables intermédiaires correspondant aux activations des nœuds de la couche cachée (par exemple, `H_..._1`, `H_..._2`, etc.).