neuralNet annTrain

Predicción de Fuga de Clientes con Datos de Validación

Scénario de test & Cas d'usage

Contexto empresarial

Una empresa de telecomunicaciones desea predecir qué clientes tienen una alta probabilidad de cancelar su suscripción (churn). El objetivo es entrenar un modelo de red neuronal que pueda identificar a estos clientes para dirigirles campañas de retención personalizadas. Se utilizará un conjunto de datos de validación para evitar el sobreajuste del modelo.
Sobre el conjunto : neuralNet

Entrenamiento de redes neuronales artificiales clásicas.

Descubrir todas las acciones de neuralNet
Preparación de datos

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

¡Copiado!
1DATA 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;
16RUN;
17 
18PROC 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};
28QUIT;

Étapes de réalisation

1
Entrenar una red neuronal MLP con dos capas ocultas, usando la tabla de validación para la detención temprana. Se estandarizan las entradas.
¡Copiado!
1PROC 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};
18RUN;
19QUIT;

Resultado esperado


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.