fcmpact addRoutines

Segmentación de Clientes para Campaña de Fidelización

Scénario de test & Cas d'usage

Contexto empresarial

Una empresa minorista busca mejorar la retención de clientes mediante la creación de un programa de fidelización por niveles. El objetivo es clasificar a los clientes en 'Oro', 'Plata' y 'Bronce' según su gasto total para ofrecerles recompensas personalizadas. Se necesita una función reutilizable en CAS para realizar esta clasificación de manera eficiente sobre millones de transacciones.
Sobre el conjunto : fcmpact

Ejecución de funciones SAS FCMP en el entorno CAS.

Descubrir todas las acciones de fcmpact
Preparación de datos

Creación de una tabla de transacciones de clientes. Contiene el ID del cliente y el importe de cada compra.

¡Copiado!
1DATA mycas.transacciones_clientes;
2 LENGTH id_cliente $ 10;
3 INPUT id_cliente $ importe_compra;
4 DATALINES;
5CUST001 150.75
6CUST002 45.20
7CUST001 300.50
8CUST003 1200.00
9CUST002 89.90
10CUST001 525.00
11CUST003 250.25
12CUST004 30.00
13;
14RUN;

Étapes de réalisation

1
Definir y compilar la función 'OBTENER_NIVEL_CLIENTE' que asigna un nivel basado en el gasto total. La función se almacena en el paquete 'herramientas_mkt'.
¡Copiado!
1PROC CAS;
2 fcmpact.addRoutines
3 routineCode='function obtener_nivel_cliente(gasto_total) $;
4 length nivel $ 6;
5 if gasto_total >= 1000 then nivel = "Oro";
6 else if gasto_total >= 150 then nivel = "Plata";
7 else nivel = "Bronce";
8 return(nivel);
9 endsub;'
10 package='herramientas_mkt'
11 funcTable={name='funciones_marketing', caslib='mycas', replace=true};
12RUN;
13QUIT;
2
Utilizar la función en un paso DATA. Primero, se agrupan las transacciones para calcular el gasto total por cliente. Luego, se aplica la función para determinar el nivel de cada cliente.
¡Copiado!
1PROC CAS;
2 SESSION casauto;
3 datastep.runCode /
4 code='data mycas.segmentacion_clientes (groupBy={id_cliente});
5 dcl package fcmpact("herramientas_mkt") p;
6 method run();
7 set mycas.transacciones_clientes;
8 by id_cliente;
9 dcl double gasto_total;
10 if first.id_cliente then gasto_total=0;
11 gasto_total + importe_compra;
12 if last.id_cliente then do;
13 nivel_cliente = p.obtener_nivel_cliente(gasto_total);
14 output;
15 end;
16 end;
17 run;';
18RUN;
19QUIT;
3
Verificar los resultados de la segmentación.
¡Copiado!
1PROC CAS;
2 TABLE.fetch / TABLE='segmentacion_clientes' sortBy={{name='id_cliente', order='ASCENDING'}};
3RUN;
4QUIT;

Resultado esperado


La tabla 'segmentacion_clientes' debe contener cuatro filas, una por cada cliente único. Cada fila mostrará el 'id_cliente', el 'gasto_total' acumulado y la columna 'nivel_cliente' con el valor 'Oro', 'Plata' o 'Bronce' correctamente asignado según la lógica de la función FCMP. CUST003 será 'Oro', CUST001 será 'Plata', CUST002 será 'Bronce' y CUST004 será 'Bronce'.