Scénario de test & Cas d'usage
Entraînement de réseaux de neurones artificiels classiques.
Découvrir toutes les actions de neuralNetCréation d'une table de clients avec des caractéristiques démographiques et d'usage, ainsi qu'un modèle de classification binaire pré-entraîné simulé.
| 1 | PROC CAS; |
| 2 | LOADACTIONSET 'dataStep'; |
| 3 | LOADACTIONSET 'neuralNet'; |
| 4 | |
| 5 | /* 1. Création des données clients à scorer */ |
| 6 | ACTION dataStep.runCode / code=' |
| 7 | data clients_a_scorer (caslib="casuser"); |
| 8 | call streaminit(42); |
| 9 | do id_client = 1 to 1000; |
| 10 | anciennete_mois = 6 + int(rand("Uniform") * 60); |
| 11 | consommation_gb = 5 + rand("Normal", 20, 5); |
| 12 | reclamations_12m = int(rand("Poisson", 0.5)); |
| 13 | if consommation_gb < 0 then consommation_gb = 0; |
| 14 | output; |
| 15 | end; |
| 16 | run;'; |
| 17 | |
| 18 | /* 2. Simulation d''un modèle pré-entrainé (structure) */ |
| 19 | ACTION dataStep.runCode / code=' |
| 20 | data model_churn_simule (caslib="casuser"); |
| 21 | length _Layer_ $20 _Neuron_ 8 _Weight_ 8; |
| 22 | /* Ceci est une représentation très simplifiée d''une table modèle */ |
| 23 | _Layer_="INPUT"; _Neuron_=1; _Weight_=0.5; output; |
| 24 | _Layer_="HIDDEN1"; _Neuron_=1; _Weight_=1.2; output; |
| 25 | _Layer_="OUTPUT"; _Neuron_=1; _Weight_=-0.8; output; |
| 26 | run;'; |
| 27 | |
| 28 | /* 3. Entraînement d''un vrai modèle pour le test */ |
| 29 | ACTION dataStep.runCode / code=' |
| 30 | data churn_train_data (caslib="casuser"); |
| 31 | call streaminit(123); |
| 32 | do i = 1 to 2000; |
| 33 | anciennete_mois = 6 + int(rand("Uniform") * 60); |
| 34 | consommation_gb = 5 + rand("Normal", 20, 5); |
| 35 | reclamations_12m = int(rand("Poisson", 0.5)); |
| 36 | churn = (anciennete_mois < 12 and reclamations_12m > 1) or (consommation_gb > 40); |
| 37 | output; |
| 38 | end; |
| 39 | run;'; |
| 40 | ACTION neuralNet.annTrain / |
| 41 | TABLE={name='churn_train_data', caslib='casuser'}, |
| 42 | target='churn', |
| 43 | inputs={'anciennete_mois', 'consommation_gb', 'reclamations_12m'}, |
| 44 | hiddens={10}, |
| 45 | modelTable={name='model_churn_nn', caslib='casuser', replace=true}; |
| 46 | QUIT; |
| 1 | PROC CAS; |
| 2 | LOADACTIONSET 'neuralNet'; |
| 3 | ACTION neuralNet.annScore / |
| 4 | TABLE={name='clients_a_scorer', caslib='casuser'}, |
| 5 | modelTable={name='model_churn_nn', caslib='casuser'}, |
| 6 | copyVars={'id_client'}, |
| 7 | assessOneRow=true, |
| 8 | casOut={name='churn_scores', caslib='casuser', replace=true}; |
| 9 | QUIT; |
| 1 | PROC CAS; |
| 2 | ACTION TABLE.columnInfo / TABLE={name='churn_scores', caslib='casuser'}; |
| 3 | ACTION TABLE.fetch / TABLE={name='churn_scores', caslib='casuser'}, to=5; |
| 4 | QUIT; |
La table de sortie `churn_scores` doit contenir l'identifiant `id_client`, la prédiction de churn `_NN_PredName_`, et deux colonnes de probabilité : `_NN_P_0` (probabilité de ne pas churner) et `_NN_P_1` (probabilité de churner). Ces colonnes permettent au marketing de prioriser les actions en fonction de la certitude du modèle.