Tutorial: Creación de modelos de clasificación multiclase - Amazon Redshift

Tutorial: Creación de modelos de clasificación multiclase

En este tutorial, utilizará Amazon Redshift ML para crear un modelo de machine learning que resuelva los problemas de clasificación multiclase. El algoritmo de clasificación multiclase clasifica los puntos de datos en una de tres o más clases. A continuación, implementará consultas mediante la función SQL que genera el comando CREATE MODEL.

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

Para seguir el tutorial, utilice el conjunto de datos público E-Commerce Sales Forecast (Previsión de ventas de comercio electrónico), que incluye datos de ventas de un minorista en línea del Reino Unido. El modelo que genere se dirigirá a los clientes más activos para un programa especial de fidelización de clientes. Con la clasificación multiclase, puede usar el modelo para predecir cuántos meses estará activo un cliente durante un período de 13 meses. La función de predicción designa a los clientes que se prevé que estarán activos durante 7 o más meses para la admisión al programa.

Ejemplos de casos de uso

Puede resolver otros problemas de clasificación multiclase con Amazon Redshift ML, como predecir el producto más vendido de una línea de productos. También puede predecir qué fruta contiene una imagen, por ejemplo, seleccionar manzanas, peras o naranjas.

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, debe realizar el procedimiento de configuración administrativa de Amazon Redshift ML.

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

Use el editor de consultas de Amazon Redshift v2 para ejecutar las siguientes consultas. Estas consultas cargan los datos de muestra en Amazon Redshift.

  1. En la siguiente consulta, se crea una tabla llamada ecommerce_sales.

    CREATE TABLE IF NOT EXISTS ecommerce_sales ( invoiceno VARCHAR(30), stockcode VARCHAR(30), description VARCHAR(60), quantity DOUBLE PRECISION, invoicedate VARCHAR(30), unitprice DOUBLE PRECISION, customerid BIGINT, country VARCHAR(25) );
  2. La siguiente consulta copia los datos de muestra del conjunto de datos E-Commerce Sales Forecast (Previsión de ventas de comercio electrónico) en la tabla ecommerce_sales.

    COPY ecommerce_sales FROM 's3://redshift-ml-multiclass/ecommerce_data.txt' IAM_ROLE default DELIMITER '\t' IGNOREHEADER 1 REGION 'us-east-1' MAXERROR 100;

Dividir los datos

Al crear un modelo en Amazon Redshift ML, SageMaker divide automáticamente los datos en conjuntos de entrenamiento y de prueba para que SageMaker pueda determinar la precisión del modelo. Al dividir manualmente los datos en este paso, podrá verificar la precisión del modelo asignando un conjunto de predicciones adicional.

Utilice la siguiente instrucción SQL para dividir los datos en tres conjuntos para el entrenamiento, la validación y la predicción.

--creates table with all data CREATE TABLE ecommerce_sales_data AS ( SELECT t1.stockcode, t1.description, t1.invoicedate, t1.customerid, t1.country, t1.sales_amt, CAST(RANDOM() * 100 AS INT) AS data_group_id FROM ( SELECT stockcode, description, invoicedate, customerid, country, SUM(quantity * unitprice) AS sales_amt FROM ecommerce_sales GROUP BY 1, 2, 3, 4, 5 ) t1 ); --creates training set CREATE TABLE ecommerce_sales_training AS ( SELECT a.customerid, a.country, a.stockcode, a.description, a.invoicedate, a.sales_amt, (b.nbr_months_active) AS nbr_months_active FROM ecommerce_sales_data a INNER JOIN ( SELECT customerid, COUNT( DISTINCT( DATE_PART(y, CAST(invoicedate AS DATE)) || '-' || LPAD( DATE_PART(mon, CAST(invoicedate AS DATE)), 2, '00' ) ) ) AS nbr_months_active FROM ecommerce_sales_data GROUP BY 1 ) b ON a.customerid = b.customerid WHERE a.data_group_id < 80 ); --creates validation set CREATE TABLE ecommerce_sales_validation AS ( SELECT a.customerid, a.country, a.stockcode, a.description, a.invoicedate, a.sales_amt, (b.nbr_months_active) AS nbr_months_active FROM ecommerce_sales_data a INNER JOIN ( SELECT customerid, COUNT( DISTINCT( DATE_PART(y, CAST(invoicedate AS DATE)) || '-' || LPAD( DATE_PART(mon, CAST(invoicedate AS DATE)), 2, '00' ) ) ) AS nbr_months_active FROM ecommerce_sales_data GROUP BY 1 ) b ON a.customerid = b.customerid WHERE a.data_group_id BETWEEN 80 AND 90 ); --creates prediction set CREATE TABLE ecommerce_sales_prediction AS ( SELECT customerid, country, stockcode, description, invoicedate, sales_amt FROM ecommerce_sales_data WHERE data_group_id > 90);

Paso 2: Crear el modelo de machine learning

En este paso, utilizará la instrucción CREATE MODEL para crear el modelo de machine learning mediante la clasificación multiclase.

La siguiente consulta crea el modelo de clasificación multiclase con el conjunto de entrenamiento mediante la operación CREATE MODEL. Reemplace amzn-s3-demo-bucket por el bucket de Amazon S3 propio.

CREATE MODEL ecommerce_customer_activity FROM ( SELECT customerid, country, stockcode, description, invoicedate, sales_amt, nbr_months_active FROM ecommerce_sales_training ) TARGET nbr_months_active FUNCTION predict_customer_activity IAM_ROLE default PROBLEM_TYPE MULTICLASS_CLASSIFICATION SETTINGS ( S3_BUCKET 'amzn-s3-demo-bucket', S3_GARBAGE_COLLECT OFF );

En esta consulta, se especifica el tipo de problema como Multiclass_Classification. El objetivo que predice para el modelo es nbr_months_active. Cuando SageMaker termina de entrenar el modelo, crea la función predict_customer_activity, que utilizará para hacer predicciones en Amazon Redshift.

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 consulta para devolver varias métricas del modelo, incluidos el estado y la precisión del modelo.

SHOW MODEL ecommerce_customer_activity;

Cuando el modelo esté listo, la salida de la operación anterior debería mostrar que Model State es Ready. A continuación se muestra un ejemplo de la salida de la operación SHOW MODEL.

+--------------------------+-----------------------------------------------------------------------------------------------+ | Model Name | ecommerce_customer_activity | +--------------------------+-----------------------------------------------------------------------------------------------+ | Schema Name | public | | Owner | awsuser | | Creation Time | Fri, 17.06.2022 19:02:15 | | Model State | READY | | Training Job Status | MaxAutoMLJobRuntimeReached | | validation:accuracy | 0.991280 | | Estimated Cost | 7.897689 | | | | | TRAINING DATA: | | | Query | SELECT CUSTOMERID, COUNTRY, STOCKCODE, DESCRIPTION, INVOICEDATE, SALES_AMT, NBR_MONTHS_ACTIVE | | | FROM ECOMMERCE_SALES_TRAINING | | Target Column | NBR_MONTHS_ACTIVE | | | | | PARAMETERS: | | | Model Type | xgboost | | Problem Type | MulticlassClassification | | Objective | Accuracy | | AutoML Job Name | redshiftml-20220617190215268770 | | Function Name | predict_customer_activity | | Function Parameters | customerid country stockcode description invoicedate sales_amt | | Function Parameter Types | int8 varchar varchar varchar varchar float8 | | IAM Role | default-aws-iam-role | | S3 Bucket | amzn-s3-demo-bucket | | Max Runtime | 5400 | +--------------------------+-----------------------------------------------------------------------------------------------+

Paso 3: Realizar predicciones con el modelo

La siguiente consulta muestra qué clientes califican para su programa de fidelización de clientes. Si el modelo predice que el cliente estará activo durante al menos siete meses, el modelo seleccionará al cliente para el programa de fidelización.

SELECT customerid, predict_customer_activity( customerid, country, stockcode, description, invoicedate, sales_amt ) AS predicted_months_active FROM ecommerce_sales_prediction WHERE predicted_months_active >= 7 GROUP BY 1, 2 LIMIT 10;

Ejecutar consultas de predicción contra los datos de validación (opcional)

Ejecute las siguientes consultas de predicción con los datos de validación para comprobar el nivel de precisión del modelo.

SELECT CAST(SUM(t1.match) AS decimal(7, 2)) AS predicted_matches, CAST(SUM(t1.nonmatch) AS decimal(7, 2)) AS predicted_non_matches, CAST(SUM(t1.match + t1.nonmatch) AS decimal(7, 2)) AS total_predictions, predicted_matches / total_predictions AS pct_accuracy FROM ( SELECT customerid, country, stockcode, description, invoicedate, sales_amt, nbr_months_active, predict_customer_activity( customerid, country, stockcode, description, invoicedate, sales_amt ) AS predicted_months_active, CASE WHEN nbr_months_active = predicted_months_active THEN 1 ELSE 0 END AS match, CASE WHEN nbr_months_active <> predicted_months_active THEN 1 ELSE 0 END AS nonmatch FROM ecommerce_sales_validation )t1;

Prediga cuántos clientes no ingresan (opcional)

La siguiente consulta compara la cantidad de clientes que se prevé que estarán activos solo durante 5 o 6 meses. El modelo predice que estos clientes se quedarán fuera del programa de fidelización. A continuación, la consulta compara la cantidad que se quedan fuera del programa con el número que se prevé que cumpla los requisitos para el programa de fidelización. Esta consulta podría usarse para tomar una decisión sobre si reducir el umbral del programa de fidelización. También puede determinar si hay una cantidad significativa de clientes que se prevé que se quedarán fuera del programa por poco. A continuación, puede alentar a esos clientes a aumentar su actividad para poder entrar en el programa de fidelización.

SELECT predict_customer_activity( customerid, country, stockcode, description, invoicedate, sales_amt ) AS predicted_months_active, COUNT(customerid) FROM ecommerce_sales_prediction WHERE predicted_months_active BETWEEN 5 AND 6 GROUP BY 1 ORDER BY 1 ASC LIMIT 10) UNION (SELECT NULL AS predicted_months_active, COUNT (customerid) FROM ecommerce_sales_prediction WHERE predict_customer_activity( customerid, country, stockcode, description, invoicedate, sales_amt ) >=7);

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: