Tutorial: Creación de modelos de deserción de clientes - Amazon Redshift

Tutorial: Creación de modelos de deserción de clientes

En este tutorial, utilizará Amazon Redshift ML para crear un modelo de deserción de clientes con el comando CREATE MODEL y ejecutará consultas de predicción para situaciones de usuario. A continuación, implementará consultas mediante la función SQL que genera el comando CREATE MODEL.

Se puede utilizar un comando sencillo CREATE MODEL para exportar datos de formación, formar un modelo, importar ese modelo y preparar una función de predicción de Amazon Redshift. Utilice la instrucción CREATE MODEL para especificar los datos de formación en forma de tabla o con la instrucción SELECT.

Este ejemplo utiliza información histórica para construir un modelo de machine learning sobre las bajas de clientes de un operador de telefonía móvil. En primer lugar, SageMaker entrena su modelo de machine learning y, a continuación, lo prueba utilizando la información de perfil de un cliente arbitrario. Una vez validado el modelo, Amazon SageMaker implementa el modelo y la función de predicción en Amazon Redshift. Puede usar la función de predicción para predecir si un cliente va a darse de baja o no.

Ejemplos de casos de uso

Puede resolver otros problemas de clasificación binaria con Amazon Redshift ML, como predecir si un cliente potencial de ventas se cerrará o no. También puede predecir si una transacción financiera es fraudulenta o no.

Tareas

  • Requisitos previos

  • Paso 1: Cargar los datos desde Amazon S3 en Amazon Redshift

  • Paso 2: Crear el modelo de machine learning

  • Paso 3: Realizar predicciones con el modelo

Requisitos previos

Para completar este tutorial, necesita los siguientes requisitos previos:

  • Debe configurar un clúster de Amazon Redshift para Amazon Redshift ML. Para ello, utilice la documentación relativa a la Agrupación y ajuste de la configuración para la administración de Amazon Redshift ML.

  • El clúster de Amazon Redshift que se utiliza para crear el modelo y el bucket de Amazon S3 que se utiliza para preparar los datos de entrenamiento y almacenar los artefactos del modelo deberán estar en la misma región de AWS.

  • Para descargar los comandos SQL y el conjunto de datos de muestra utilizados en esta documentación, realice una de las siguientes acciones:

    • Descargue los comandos SQL, el archivo de actividad del cliente y el archivo de Abalone.

    • A través de la AWS CLI para Amazon S3, ejecute el siguiente comando. Puede utilizar su propia ruta de destino.

      aws s3 cp s3://redshift-downloads/redshift-ml/tutorial-scripts/redshift-ml-tutorial.sql </target/path> aws s3 cp s3://redshift-downloads/redshift-ml/customer_activity/customer_activity.csv </target/path> aws s3 cp s3://redshift-downloads/redshift-ml/abalone_xgb/abalone_xgb.csv </target/path>

Paso 1: Cargar los datos desde Amazon S3 en Amazon Redshift

Use el editor de consultas de Amazon Redshift v2 para editar y ejecutar consultas y visualizar los resultados.

Al ejecutar las consultas siguientes, se crea una tabla llamada customer_activity y se incorpora el conjunto de datos de ejemplo desde Amazon S3.

DROP TABLE IF EXISTS customer_activity; CREATE TABLE customer_activity ( state varchar(2), account_length int, area_code int, phone varchar(8), intl_plan varchar(3), vMail_plan varchar(3), vMail_message int, day_mins float, day_calls int, day_charge float, total_charge float, eve_mins float, eve_calls int, eve_charge float, night_mins float, night_calls int, night_charge float, intl_mins float, intl_calls int, intl_charge float, cust_serv_calls int, churn varchar(6), record_date date ); COPY customer_activity FROM 's3://redshift-downloads/redshift-ml/customer_activity/' REGION 'us-east-1' IAM_ROLE default FORMAT AS CSV IGNOREHEADER 1;

Paso 2: Crear el modelo de machine learning

La deserción es nuestro objetivo de entrada en este modelo. Todas las demás entradas del modelo son atributos que ayudan a crear una función para predecir la deserción.

En el siguiente ejemplo, se utiliza la operación CREATE MODEL para ofrecer un modelo que prediga si un cliente permanecerá activo. Para ello, se utilizan distintos datos, como edad del cliente, código postal, gasto y casos. En el siguiente ejemplo, reemplace DOC-EXAMPLE-BUCKET por el bucket de Amazon S3 propio.

CREATE MODEL customer_churn_auto_model FROM ( SELECT state, account_length, area_code, total_charge/account_length AS average_daily_spend, cust_serv_calls/account_length AS average_daily_cases, churn FROM customer_activity WHERE record_date < '2020-01-01' ) TARGET churn FUNCTION ml_fn_customer_churn_auto IAM_ROLE default SETTINGS ( S3_BUCKET 'DOC-EXAMPLE-BUCKET' );

La consulta SELECT del ejemplo anterior crea los datos de entrenamiento. La cláusula TARGET especifica cuál es la columna que corresponde a la etiqueta de machine learning que utiliza la operación CREATE MODEL para aprender a generar predicciones. La columna de destino “churn” (deserción) indica si el cliente todavía tiene una suscripción activa o si la ha suspendido. El campo S3_BUCKET es el nombre del bucket de Amazon S3 que ha creado anteriormente. El bucket de Amazon S3 se utiliza para compartir los datos y artefactos de entrenamiento entre Amazon Redshift y Amazon SageMaker. Las columnas restantes corresponden a las características que se utilizan para la predicción.

Para ver un resumen de la sintaxis y las características de un caso de uso básico del comando CREATE MODEL, consulte CREATE MODEL simple.

Añadir permisos para el cifrado del lado del servidor (opcional)

Amazon Redshift utiliza de forma predeterminada Amazon SageMaker Autopilot para el entrenamiento. En concreto, Amazon Redshift exporta de forma segura los datos de entrenamiento al bucket de Amazon S3 que especifica el cliente. Si no se especifica un KMS_KEY_ID, los datos se cifran mediante el cifrado del servidor SSE-S3 de forma predeterminada.

Si cifra la entrada mediante el cifrado del lado del servidor con una clave administrada por AWS KMS (SSE-MMS), agregue los siguientes permisos:

{ "Effect": "Allow", "Action": [ "kms:Encrypt" "kms:Decrypt" ] }

Para obtener más información acerca de los roles de Amazon SageMaker, consulte Roles de Amazon SageMaker en la Guía para desarrolladores de Amazon SageMaker.

Comprobar el estado del entrenamiento del modelo (opcional)

Puede utilizar el comando SHOW MODEL para saber cuándo está listo el modelo.

Utilice la siguiente operación para comprobar el estado del modelo.

SHOW MODEL customer_churn_auto_model;

A continuación se muestra un ejemplo de la salida de la operación anterior.

+--------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Key | Value | +--------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Model Name | customer_churn_auto_model | | Schema Name | public | | Owner | awsuser | | Creation Time | Tue, 14.06.2022 17:15:52 | | Model State | TRAINING | | | | | TRAINING DATA: | | | Query | SELECT STATE, ACCOUNT_LENGTH, AREA_CODE, TOTAL_CHARGE / ACCOUNT_LENGTH AS AVERAGE_DAILY_SPEND, CUST_SERV_CALLS / ACCOUNT_LENGTH AS AVERAGE_DAILY_CASES, CHURN | | | FROM CUSTOMER_ACTIVITY | | | WHERE RECORD_DATE < '2020-01-01' | | Target Column | CHURN | | | | | PARAMETERS: | | | Model Type | auto | | Problem Type | | | Objective | | | AutoML Job Name | redshiftml-20220614171552640901 | | Function Name | ml_fn_customer_churn_auto | | Function Parameters | state account_length area_code average_daily_spend average_daily_cases | | Function Parameter Types | varchar int4 int4 float8 int4 | | IAM Role | default-aws-iam-role | | S3 Bucket | DOC-EXAMPLE-BUCKET | | Max Runtime | 5400 | +--------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+

Una vez finalizado el entrenamiento del modelo, la variable model_state se convierte en Model is Ready y la función de predicción pasa a estar disponible.

Paso 3: Realizar predicciones con el modelo

Puede usar instrucciones SQL para ver las predicciones realizadas por el modelo de predicción. En este ejemplo, la función de predicción creada por la operación CREATE MODEL se denomina ml_fn_customer_churn_auto. Los argumentos de entrada para la función de predicción corresponden a los tipos de características, como varchar para state y entero para account_length. La salida de la función de predicción es del mismo tipo que la columna TARGET de la instrucción CREATE MODEL.

  1. Ha entrenado el modelo con datos anteriores al 01/01/2020, por lo que ahora usa la función de predicción en el conjunto de pruebas. La siguiente consulta muestra las predicciones sobre si los clientes que se inscribieron después de 01-01-2020 se darán de baja o no.

    SELECT phone, ml_fn_customer_churn_auto( state, account_length, area_code, total_charge / account_length, cust_serv_calls / account_length ) AS active FROM customer_activity WHERE record_date > '2020-01-01';
  2. El siguiente ejemplo utiliza la misma función de predicción para un caso de uso diferente. En este caso, Amazon Redshift predice la proporción de usuarios que se han dado de baja y los que no lo han hecho entre clientes de diferentes estados en los que la fecha de registro es posterior al 01-01-2020.

    WITH predicted AS ( SELECT state, ml_fn_customer_churn_auto( state, account_length, area_code, total_charge / account_length, cust_serv_calls / account_length ) :: varchar(6) AS active FROM customer_activity WHERE record_date > '2020-01-01' ) SELECT state, SUM( CASE WHEN active = 'True.' THEN 1 ELSE 0 END ) AS churners, SUM( CASE WHEN active = 'False.' THEN 1 ELSE 0 END ) AS nonchurners, COUNT(*) AS total_per_state FROM predicted GROUP BY state ORDER BY state;
  3. El siguiente ejemplo utiliza la función de predicción para el caso de uso consistente en predecir el porcentaje de clientes que se dan de baja en un estado. En este caso, Amazon Redshift predice el porcentaje de deserción con una fecha de registro posterior al 01/01/2020.

    WITH predicted AS ( SELECT state, ml_fn_customer_churn_auto( state, account_length, area_code, total_charge / account_length, cust_serv_calls / account_length ) :: varchar(6) AS active FROM customer_activity WHERE record_date > '2020-01-01' ) SELECT state, CAST((CAST((SUM( CASE WHEN active = 'True.' THEN 1 ELSE 0 END )) AS FLOAT) / CAST(COUNT(*) AS FLOAT)) AS DECIMAL (3, 2)) AS pct_churn, COUNT(*) AS total_customers_per_state FROM predicted GROUP BY state ORDER BY 3 DESC;

Para obtener más información sobre Amazon Redshift ML, consulte la siguiente documentación:

Para obtener más información sobre machine learning, consulte la siguiente documentación: