neuralNet annTrain

Scénario Cas Limite : Maintenance Prédictive avec Données de Capteurs Incomplètes

Scénario de test & Cas d'usage

Contexte Métier

Une usine utilise des milliers de capteurs sur sa chaîne de production. Certains capteurs sont anciens et transmettent des données de manière intermittente, générant des valeurs manquantes. L'objectif est de construire un modèle robuste capable de prédire une panne imminente (`panne_imminente`) malgré la mauvaise qualité des données, en imputant les valeurs manquantes pour ne perdre aucune information.
À 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 de relevés de capteurs (température, pression, vibration) avec un taux élevé de valeurs manquantes (environ 20%) pour les variables d'entrée. La variable cible est binaire.

Copié !
1DATA capteurs_data;
2 call streaminit(555);
3 DO i = 1 to 10000;
4 temperature = 70 + rand('NORMAL', 10, 5);
5 pression = 100 + rand('NORMAL', 20, 10);
6 vibration = 5 + rand('NORMAL', 2, 1);
7 /* Introduction de valeurs manquantes */
8 IF rand('UNIFORM') < 0.2 THEN call missing(temperature);
9 IF rand('UNIFORM') < 0.25 THEN call missing(pression);
10 IF rand('UNIFORM') < 0.15 THEN call missing(vibration);
11
12 panne_imminente = 0;
13 IF (temperature > 95 or pression > 130 or vibration > 8) and not (missing(temperature) and missing(pression)) THEN DO;
14 IF rand('UNIFORM') > 0.3 THEN panne_imminente = 1;
15 END;
16 OUTPUT;
17 END;
18RUN;
19 
20PROC CASUTIL;
21 load DATA=capteurs_data outcaslib=casuser casout='CAPTEURS_DEFAILLANTS' replace;
22QUIT;

Étapes de réalisation

1
Tentative d'entraînement sans gestion des valeurs manquantes. Cette étape devrait échouer ou produire des résultats de mauvaise qualité.
Copié !
1PROC CAS;
2 ACTION neuralNet.annTrain /
3 TABLE={name='CAPTEURS_DEFAILLANTS'},
4 inputs={{name='temperature'}, {name='pression'}, {name='vibration'}},
5 target='panne_imminente',
6 nominals={{name='panne_imminente'}},
7 hiddens={15},
8 missing='NONE', /* 'NONE' est le comportement par défaut qui exclut les lignes */
9 errorFunc='ENTROPY',
10 nloOpts={algorithm='SGD', sgdOpt={learningRate=0.05}};
11QUIT;
2
Entraînement du même modèle mais en activant l'imputation par la moyenne pour toutes les variables d'entrée. L'objectif est de vérifier que l'action s'exécute et utilise toutes les données.
Copié !
1PROC CAS;
2 ACTION neuralNet.annTrain /
3 TABLE={name='CAPTEURS_DEFAILLANTS'},
4 inputs={{name='temperature'}, {name='pression'}, {name='vibration'}},
5 target='panne_imminente',
6 nominals={{name='panne_imminente'}},
7 hiddens={15},
8 missing='MEAN', /* Imputation par la moyenne */
9 errorFunc='ENTROPY',
10 nloOpts={algorithm='SGD', sgdOpt={learningRate=0.05}},
11 code={caslib='casuser', casout='scoring_code_imputation', name='score_panne'};
12QUIT;

Résultat Attendu


La première étape devrait montrer dans les résultats un nombre d'observations utilisées bien inférieur à 10000, confirmant que les lignes avec des valeurs manquantes ont été ignorées. La deuxième étape doit s'exécuter avec succès en utilisant les 10000 observations. Le modèle produit est entraîné sur des données imputées, et un fichier de code de scoring est généré, démontrant la robustesse de l'action face à des données incomplètes.