neuralNet annScore

Réduction de Dimension pour la Maintenance Prédictive via Auto-encodeur

Scénario de test & Cas d'usage

Contexte Métier

Une usine utilise des milliers de capteurs sur ses machines. Pour la maintenance prédictive, analyser toutes ces variables est coûteux. L'objectif est d'utiliser un auto-encodeur (un type de réseau de neurones) pour compresser les données des capteurs en un plus petit nombre de 'features' significatives. Ce scénario teste l'extraction de ces features depuis la couche cachée du réseau.
À 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 volumineuse simulant les données de 50 capteurs pour des milliers de cycles de machine. Un modèle d'auto-encodeur est ensuite entraîné.

Copié !
1PROC CAS;
2 LOADACTIONSET 'dataStep';
3 LOADACTIONSET 'neuralNet';
4 
5 /* 1. Création des données de capteurs (volumétrie) */
6 ACTION dataStep.runCode / code='
7 data capteurs_usine (caslib="casuser");
8 array capteurs{50} capteur1-capteur50;
9 call streaminit(2024);
10 do id_cycle = 1 to 20000;
11 base_val = rand("Uniform") * 100;
12 do i = 1 to 50;
13 capteurs{i} = base_val + rand("Normal", 0, 2);
14 end;
15 output;
16 end;
17 drop i base_val;
18 run;';
19 
20 /* 2. Entraînement d''un modèle auto-encodeur (inputs = target) */
21 /* On définit une couche cachée 'goulot d''étranglement' de 5 neurones */
22 ACTION neuralNet.annTrain /
23 TABLE={name='capteurs_usine', caslib='casuser'},
24 inputs={'capteur1'-'capteur50'},
25 target={'capteur1'-'capteur50'},
26 hiddens={20, 5, 20},
27 modelTable={name='model_autoencoder', caslib='casuser', replace=true};
28QUIT;

Étapes de réalisation

1
Scoring des données de capteurs avec le modèle auto-encodeur, en utilisant `listNode='HIDDEN'` pour extraire les activations de toutes les couches cachées.
Copié !
1PROC CAS;
2 LOADACTIONSET 'neuralNet';
3 ACTION neuralNet.annScore /
4 TABLE={name='capteurs_usine', caslib='casuser'},
5 modelTable={name='model_autoencoder', caslib='casuser'},
6 listNode='HIDDEN',
7 casOut={name='features_compressees', caslib='casuser', replace=true};
8QUIT;
2
Vérification de la structure de la table de sortie. Elle doit contenir les colonnes des couches cachées, et non les prédictions des capteurs.
Copié !
1PROC CAS;
2 ACTION TABLE.columnInfo / TABLE={name='features_compressees', caslib='casuser'};
3 ACTION TABLE.fetch / TABLE={name='features_compressees', caslib='casuser'}, to=5;
4QUIT;

Résultat Attendu


La table `features_compressees` ne contiendra pas les 50 colonnes de capteurs prédites. À la place, elle contiendra 25 colonnes (20+5) représentant les activations des neurones des deux premières couches cachées (SAS n'expose pas la dernière couche cachée dans ce cas). Ces 25 nouvelles variables, en particulier les 5 du 'goulot d'étranglement', sont une représentation compressée des 50 capteurs originaux et peuvent être utilisées pour des modèles de détection d'anomalies plus légers.