neuralNet

annScore

L'essentiel
L'essentiel
Au cœur des processus d'analyse prédictive sous SAS Viya, l'action annScore joue un rôle déterminant lors de la phase de déploiement opérationnel. Concrètement, cette fonctionnalité permet d'appliquer des modèles de réseaux de neurones artificiels (ANN) — préalablement entraînés et stockés — à de nouveaux ensembles de données afin de générer des scores et des prédictions fiables. Il s'agit d'une étape technique indispensable pour transformer vos modèles théoriques en outils de décision concrets. Pour vous accompagner dans l'utilisation de cette commande CAS, cette page regroupe une série de questions-réponses techniques traitant des erreurs de syntaxe communes, de la gestion des tables d'entrée et des meilleures pratiques de configuration.

Description

L'action `annScore` est utilisée pour évaluer (scorer) une table de données en utilisant un modèle de réseau de neurones artificiels préalablement entraîné. Elle applique le modèle stocké dans une table de modèle sur une nouvelle table de données pour générer des prédictions. Cette action est une étape cruciale dans le cycle de vie du machine learning, permettant de déployer un modèle pour faire des inférences sur de nouvelles données.

neuralNet.annScore { assess=VRAI | FAUX, assessOneRow=VRAI | FAUX, casOut={caslib='string', compress=VRAI | FAUX, indexVars={'variable-name-1' <, 'variable-name-2', ...>}, label='string', lifetime=entier-64-bits, maxMemSize=entier-64-bits, memoryFormat='DVR' | 'INHERIT' | 'STANDARD', name='table-name', promote=VRAI | FAUX, replace=VRAI | FAUX, replication=entier, tableRedistUpPolicy='DEFER' | 'NOREDIST' | 'REBALANCE', threadBlockSize=entier-64-bits, timeStamp='string', where={'string-1' <, 'string-2', ...>}}, copyVars={'variable-name-1' <, 'variable-name-2', ...>}, impute=VRAI | FAUX, includeMissing=VRAI | FAUX, listNode='ALL' | 'HIDDEN' | 'INPUT' | 'OUTPUT', modelId='string', modelTable={caslib='string', computedOnDemand=VRAI | FAUX, computedVars={{format='string', formattedLength=entier, label='string', name='variable-name', nfd=entier, nfl=entier}, {...}}, computedVarsProgram='string', dataSourceOptions={key-1=any-list-or-data-type-1 <, key-2=any-list-or-data-type-2, ...>}, importOptions={fileType='ANY' | 'AUDIO' | 'AUTO' | 'BASESAS' | 'CSV' | 'DELIMITED' | 'DOCUMENT' | 'DTA' | 'ESP' | 'EXCEL' | 'FMT' | 'HDAT' | 'IMAGE' | 'JMP' | 'LASR' | 'PARQUET' | 'SOUND' | 'SPSS' | 'VIDEO' | 'XLS', fileType-specific-parameters}, name='table-name', singlePass=VRAI | FAUX, vars={{format='string', formattedLength=entier, label='string', name='variable-name', nfd=entier, nfl=entier}, {...}}, where='where-expression', whereTable={casLib='string', dataSourceOptions={adls_noreq-parameters | bigquery-parameters | cas_noreq-parameters | clouddex-parameters | db2-parameters | dnfs-parameters | esp-parameters | fedsvr-parameters | gcs_noreq-parameters | hadoop-parameters | hana-parameters | impala-parameters | informix-parameters | jdbc-parameters | mongodb-parameters | mysql-parameters | odbc-parameters | oracle-parameters | path-parameters | postgres-parameters | redshift-parameters | s3-parameters | sapiq-parameters | sforce-parameters | singlestore_standard-parameters | snowflake-parameters | spark-parameters | spde-parameters | sqlserver-parameters | ss_noreq-parameters | teradata-parameters | vertica-parameters | yellowbrick-parameters}, importOptions={fileType='ANY' | 'AUDIO' | 'AUTO' | 'BASESAS' | 'CSV' | 'DELIMITED' | 'DOCUMENT' | 'DTA' | 'ESP' | 'EXCEL' | 'FMT' | 'HDAT' | 'IMAGE' | 'JMP' | 'LASR' | 'PARQUET' | 'SOUND' | 'SPSS' | 'VIDEO' | 'XLS', fileType-specific-parameters}, name='table-name', vars={{format='string', formattedLength=entier, label='string', name='variable-name', nfd=entier, nfl=entier}, {...}}, where='where-expression'}}, table={caslib='string', computedOnDemand=VRAI | FAUX, computedVars={{format='string', formattedLength=entier, label='string', name='variable-name', nfd=entier, nfl=entier}, {...}}, computedVarsProgram='string', dataSourceOptions={key-1=any-list-or-data-type-1 <, key-2=any-list-or-data-type-2, ...>}, importOptions={fileType='ANY' | 'AUDIO' | 'AUTO' | 'BASESAS' | 'CSV' | 'DELIMITED' | 'DOCUMENT' | 'DTA' | 'ESP' | 'EXCEL' | 'FMT' | 'HDAT' | 'IMAGE' | 'JMP' | 'LASR' | 'PARQUET' | 'SOUND' | 'SPSS' | 'VIDEO' | 'XLS', fileType-specific-parameters}, name='table-name', singlePass=VRAI | FAUX, vars={{format='string', formattedLength=entier, label='string', name='variable-name', nfd=entier, nfl=entier}, {...}}, where='where-expression', whereTable={casLib='string', dataSourceOptions={adls_noreq-parameters | bigquery-parameters | cas_noreq-parameters | clouddex-parameters | db2-parameters | dnfs-parameters | esp-parameters | fedsvr-parameters | gcs_noreq-parameters | hadoop-parameters | hana-parameters | impala-parameters | informix-parameters | jdbc-parameters | mongodb-parameters | mysql-parameters | odbc-parameters | oracle-parameters | path-parameters | postgres-parameters | redshift-parameters | s3-parameters | sapiq-parameters | sforce-parameters | singlestore_standard-parameters | snowflake-parameters | spark-parameters | spde-parameters | sqlserver-parameters | ss_noreq-parameters | teradata-parameters | vertica-parameters | yellowbrick-parameters}, importOptions={fileType='ANY' | 'AUDIO' | 'AUTO' | 'BASESAS' | 'CSV' | 'DELIMITED' | 'DOCUMENT' | 'DTA' | 'ESP' | 'EXCEL' | 'FMT' | 'HDAT' | 'IMAGE' | 'JMP' | 'LASR' | 'PARQUET' | 'SOUND' | 'SPSS' | 'VIDEO' | 'XLS', fileType-specific-parameters}, name='table-name', vars={{format='string', formattedLength=entier, label='string', name='variable-name', nfd=entier, nfl=entier}, {...}}, where='where-expression'}}, target='variable-name' };
Paramètres
ParamètreDescription
assess Lorsque défini sur Vrai, les probabilités prédites pour les niveaux d'événement sont ajoutées à la table de résultats. Ces probabilités peuvent être utilisées avec l'action `assess`.
assessOneRow Lorsque défini sur Vrai, les probabilités prédites pour les niveaux d'événement sont ajoutées à la table de résultats. Toutes les probabilités d'événement sont incluses en tant que colonnes séparées et sont nommées avec le préfixe _NN_P_. Ces probabilités peuvent être utilisées avec l'action `assess`.
casOut Spécifie la table de sortie pour stocker les résultats du scoring.
copyVars Spécifie les variables à transférer de la table d'entrée vers la table de sortie.
impute Lorsque défini sur Vrai, les observations avec une valeur non manquante pour la variable cible sont utilisées comme valeurs prédites. Seules les observations avec des valeurs manquantes pour la variable cible sont scorées.
includeMissing Par défaut, les observations avec des valeurs manquantes sont incluses. Lorsque défini sur Faux, toute observation avec des valeurs manquantes pour les variables utilisées dans le modèle n'est pas incluse.
listNode Spécifie les nœuds à inclure dans la table de sortie scorée. Utile pour l'auto-encodage afin de réduire la dimensionnalité des entrées.
modelId Spécifie le nom de la variable d'ID du modèle à utiliser lors de la génération de la table scorée. Par défaut, le nom de la variable est _NN_PredName_ pour les classifications et _NN_Pred_ pour les régressions.
modelTable Spécifie la table qui contient le modèle de réseau de neurones artificiels à utiliser pour le scoring.
table Spécifie la table d'entrée à scorer.
target Spécifie la variable cible lors du scoring d'un jeu de données. Non requis si le nom de la variable cible dans le modèle est le même que dans la table à scorer.
Préparation des Données Voir la fiche de ce code dataprep
Création des Données et Entraînement d'un Modèle

Avant de pouvoir utiliser `annScore`, nous devons d'abord entraîner un modèle de réseau de neurones. Ce code charge les données `iris`, les partitionne, puis entraîne un modèle simple avec l'action `annTrain`. Le modèle entraîné est stocké dans la table `my_ann_model`.

Copié !
1PROC CAS;
2 LOADACTIONSET 'dataStep';
3 LOADACTIONSET 'sampling';
4 LOADACTIONSET 'neuralNet';
5 
6 /* 1. Charger les données */
7 load DATA=sashelp.iris out=iris;
8 
9 /* 2. Partitionner les données */
10 ACTION sampling.srs RESULT=p_iris /
11 TABLE={name='iris'},
12 samppct=70,
13 partind=TRUE,
14 seed=1234;
15 
16 /* 3. Créer les tables d'entraînement et de validation */
17 ACTION dataStep.runCode /
18 code='data train_data; set p_iris.srs; if _partind_ = 1; run; data valid_data; set p_iris.srs; if _partind_ = 0; run;';
19 
20 /* 4. Entraîner le modèle de réseau de neurones */
21 ACTION neuralNet.annTrain /
22 TABLE={name='train_data'},
23 validTable={name='valid_data'},
24 target='Species',
25 inputs={'SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth'},
26 hiddens={50, 20},
27 modelTable={name='my_ann_model', replace=true};
28QUIT;

Exemples

Cet exemple utilise le modèle `my_ann_model` (créé précédemment) pour scorer la table de validation `valid_data`. Les prédictions sont stockées dans une nouvelle table CAS nommée `scored_results`.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1PROC CAS;
2 LOADACTIONSET 'neuralNet';
3 ACTION neuralNet.annScore /
4 TABLE={name='valid_data'},
5 modelTable={name='my_ann_model'},
6 casOut={name='scored_results', replace=true};
7 
8 /* Afficher les 5 premières lignes des résultats */
9 ACTION TABLE.fetch /
10 TABLE={name='scored_results'},
11 to=5;
12QUIT;
Résultat :
Une table de résultats contenant les prédictions du modèle pour chaque observation de la table `valid_data`. La colonne de prédiction par défaut sera nommée `_NN_PredName_`.

Cet exemple plus détaillé montre comment scorer les données tout en conservant les variables d'origine (`copyVars`) et en générant les probabilités de prédiction pour chaque classe (`assessOneRow`). Cela est utile pour une analyse plus approfondie et pour évaluer la performance du modèle.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1PROC CAS;
2 LOADACTIONSET 'neuralNet';
3 ACTION neuralNet.annScore /
4 TABLE={name='valid_data'},
5 modelTable={name='my_ann_model'},
6 copyVars={'Species', 'SepalLength', 'PetalLength'},
7 assessOneRow=true,
8 casOut={name='scored_results_detailed', replace=true};
9 
10 /* Afficher les 5 premières lignes des résultats détaillés */
11 ACTION TABLE.fetch /
12 TABLE={name='scored_results_detailed'},
13 to=5;
14QUIT;
Résultat :
La table de sortie `scored_results_detailed` contiendra les variables originales `Species`, `SepalLength`, `PetalLength`, la prédiction `_NN_PredName_`, ainsi que des colonnes supplémentaires pour les probabilités de chaque classe (par exemple, `_NN_P_Setosa`, `_NN_P_Versicolor`, `_NN_P_Virginica`).

L'auto-encodage est une technique où un réseau de neurones est utilisé pour apprendre une représentation compressée des données. En utilisant `listNode='HIDDEN'`, nous pouvons extraire les valeurs des neurones de la couche cachée. Ces valeurs peuvent ensuite être utilisées comme de nouvelles caractéristiques (features) de dimension réduite pour d'autres modèles.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1PROC CAS;
2 LOADACTIONSET 'neuralNet';
3 /* Note: Un modèle d'auto-encodeur aurait été entraîné au préalable */
4 /* Pour cet exemple, nous utilisons le même modèle mais illustrons le concept */
5 ACTION neuralNet.annScore /
6 TABLE={name='valid_data'},
7 modelTable={name='my_ann_model'},
8 listNode='HIDDEN',
9 casOut={name='autoencoded_features', replace=true};
10 
11 /* Afficher les 5 premières lignes des caractéristiques encodées */
12 ACTION TABLE.fetch /
13 TABLE={name='autoencoded_features'},
14 to=5;
15QUIT;
Résultat :
Une table `autoencoded_features` contenant les activations des 50 neurones de la première couche cachée et des 20 neurones de la seconde, pour chaque observation. Ces colonnes peuvent être utilisées comme un nouvel ensemble de données de dimension réduite.

FAQ

À quoi sert l'action annScore ?
Que fait le paramètre `assess` ?
Quel est le but du paramètre `assessOneRow` ?
Comment spécifier la table de sortie avec `casOut` ?
À quoi sert le paramètre `copyVars` ?
Que fait le paramètre `impute` ?
Comment le paramètre `includeMissing` affecte-t-il les données ?
À quoi sert le paramètre `listNode` ?
Que spécifie le paramètre `modelId` ?
Quel est le rôle du paramètre `modelTable` ?
Que spécifie le paramètre `table` ?
Quand utiliser le paramètre `target` ?

Scénarios associés

Cas d'usage
Détection de Churn Client avec Analyse de Probabilités

Une entreprise de télécommunications souhaite prédire de manière proactive les clients susceptibles de résilier leur abonnement (churn). Le but est de scorer la base client mens...

Cas d'usage
Prédiction de Réadmission avec Gestion des Données Manquantes

Un hôpital cherche à prédire le risque de réadmission d'un patient dans les 30 jours. Les dossiers médicaux sont souvent incomplets. Le test vise à valider le comportement de l'...

Cas d'usage
Réduction de Dimension pour la Maintenance Prédictive via Auto-encodeur

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-encodeu...