Scénario de test & Cas d'usage
Entrenamiento de redes neuronales artificiales clásicas.
Descubrir todas las acciones de neuralNetCrea una tabla de clientes con datos demográficos, uso del servicio y una variable objetivo binaria 'Churn'. Se generan 10,000 observaciones y luego se dividen en conjuntos de entrenamiento y validación.
| 1 | DATA clientes_churn (keep=IDCliente AntiguedadMeses Contrato FacturacionMensual TotalCargos Churn); |
| 2 | call streaminit(4321); |
| 3 | DO IDCliente = 1 to 10000; |
| 4 | AntiguedadMeses = floor(rand('Uniform') * 72) + 1; |
| 5 | IF rand('Uniform') < 0.5 THEN Contrato = 'Mensual'; ELSE Contrato = 'Anual'; |
| 6 | FacturacionMensual = 20 + rand('Uniform') * 100; |
| 7 | TotalCargos = FacturacionMensual * AntiguedadMeses * (0.8 + rand('Uniform')*0.4); |
| 8 | IF (AntiguedadMeses < 6 and Contrato='Mensual') or (FacturacionMensual > 90) THEN DO; |
| 9 | IF rand('Uniform') < 0.6 THEN Churn = 1; ELSE Churn = 0; |
| 10 | END; |
| 11 | ELSE DO; |
| 12 | IF rand('Uniform') < 0.15 THEN Churn = 1; ELSE Churn = 0; |
| 13 | END; |
| 14 | OUTPUT; |
| 15 | END; |
| 16 | RUN; |
| 17 | |
| 18 | PROC CAS; |
| 19 | TABLE.loadTable / caslib='casuser' path='clientes_churn.sashdat' casOut={name='clientes_churn', replace=true}; |
| 20 | partition.partition / |
| 21 | TABLE={name='clientes_churn', caslib='casuser'}, |
| 22 | sampPct=70, |
| 23 | sampPct2=30, |
| 24 | partInd={name='P_IND', label='Partition Indicator'}, |
| 25 | seed=123; |
| 26 | TABLE.partition / TABLE={name='clientes_churn', where='P_IND=1'} casOut={name='churn_train', replace=true}; |
| 27 | TABLE.partition / TABLE={name='clientes_churn', where='P_IND=2'} casOut={name='churn_valid', replace=true}; |
| 28 | QUIT; |
| 1 | PROC CAS; |
| 2 | neuralNet.annTrain / |
| 3 | TABLE={name='churn_train', caslib='casuser'}, |
| 4 | validTable={name='churn_valid', caslib='casuser'}, |
| 5 | inputs={'AntiguedadMeses', 'FacturacionMensual', 'TotalCargos'}, |
| 6 | nominals={'Contrato'}, |
| 7 | target='Churn', |
| 8 | hiddens={20, 10}, |
| 9 | acts={'RECTIFIER', 'TANH'}, |
| 10 | arch='MLP', |
| 11 | std='STD', |
| 12 | errorFunc='ENTROPY', |
| 13 | targetAct='SOFTMAX', |
| 14 | nloOpts={maxIters=100, printOpt={printFreq=5}}, |
| 15 | seed=5150, |
| 16 | casOut={name='churn_model', replace=true}, |
| 17 | saveState={name='churn_savestate', replace=true}; |
| 18 | RUN; |
| 19 | QUIT; |
La acción debe entrenar el modelo y detenerse prematuramente si el error de validación deja de mejorar. Las tablas de salida 'ModelInfo', 'OptIterHistory' y 'OutputCasTables' se generan. La tabla 'OptIterHistory' debe mostrar las métricas de error tanto para el conjunto de entrenamiento como para el de validación en cada época.