Tutorial: Creazione di modelli di classificazione multi-classe - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Tutorial: Creazione di modelli di classificazione multi-classe

In questo tutorial, utilizzi Amazon Redshift ML per creare un modello di machine learning che risolva i problemi di classificazione multi-classe. L'algoritmo di classificazione multi-classe classifica i punti dati in una delle tre o più classi. Implementerai quindi le query utilizzando la funzione SQL generata dal comando CREATE MODEL.

È possibile usare un comando CREATE MODEL per esportare i dati di addestramento, addestrare un modello, importare il modello e preparare una funzione di previsione Amazon Redshift. Usa l'istruzione CREATE MODEL per specificare i dati di addestramento come tabella o istruzione SELECT.

Per eseguire il tutorial, è possibile utilizzare il set di dati pubblico E-Commerce Sales Forecast, che include i dati di vendita di un rivenditore online del Regno Unito. Il modello generato fa riferimento ai clienti più attivi per uno speciale programma di fidelizzazione dei clienti. Con la classificazione multi-classe, è possibile utilizzare il modello per prevedere per quanti mesi un cliente sarà attivo in un periodo di 13 mesi. La funzione di previsione individua i clienti che si prevede siano attivi per 7 o più mesi ai fini dell'ammissione al programma.

Esempi di casi d'uso

Puoi risolvere altri problemi di classificazione multi-classe con Amazon Redshift ML, ad esempio la previsione relativa al prodotto più venduto di una linea di prodotti. Puoi anche prevedere quale frutto include un'immagine, ad esempio selezionando mele, pere o arance.

Attività

  • Prerequisiti

  • Passaggio 1: caricamento dei dati da Amazon S3 ad Amazon Redshift

  • Passaggio 2: creazione del modello di machine learning

  • Passaggio 3: esecuzione di previsioni con il modello

Prerequisiti

Per completare questo tutorial, è necessario completare la configurazione amministrativa di Amazon Redshift ML.

Passaggio 1: caricamento dei dati da Amazon S3 ad Amazon Redshift

Utilizza l'editor di query v2 di Amazon Redshift per eseguire le seguenti query. Queste query caricano i dati di esempio in Amazon Redshift.

  1. La query seguente crea una tabella denominata 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 seguente query copia i dati di esempio dal set di dati E-Commerce Sales Forecast nella tabella 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;

Suddivisione dei dati

Quando crei un modello in Amazon Redshift ML, suddivide SageMaker automaticamente i dati in set di training e test, in SageMaker modo da determinare la precisione del modello. Suddividendo manualmente i dati in questa fase, sarai in grado di verificare l'accuratezza del modello assegnando un set di previsione aggiuntivo.

Utilizza l'istruzione SQL seguente per suddividere i dati in tre set per l'addestramento, la convalida e la previsione.

--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);

Passaggio 2: creazione del modello di machine learning

In questo passaggio, si utilizza l'istruzione CREATE MODEL per creare il modello di machine learning utilizzando la classificazione multi-classe.

La seguente query crea il modello di classificazione multi-classe con il set di addestramento utilizzando l'operazione CREATE MODEL. Sostituisci DOC-EXAMPLE-BUCKET con il tuo bucket Amazon S3.

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 '<DOC-EXAMPLE-BUCKET>', S3_GARBAGE_COLLECT OFF );

In questa query, specifica il tipo di problema come Multiclass_Classification. L'obiettivo previsto per il modello è nbr_months_active. Al SageMaker termine dell'addestramento del modello, crea la funzione predict_customer_activity che utilizzerai per fare previsioni in Amazon Redshift.

Visualizzazione dello stato dell'addestramento del modello (facoltativo)

È possibile utilizzare il comando SHOW MODEL per verificare quando il modello è pronto.

Utilizza la seguente query per restituire i vari parametri del modello, inclusi lo stato e la precisione.

SHOW MODEL ecommerce_customer_activity;

Se il modello è pronto, l'output dell'operazione precedente dovrebbe indicare che Model State è Ready. Di seguito è riportato un esempio di output dell'operazione 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 | DOC-EXAMPLE-BUCKET | | Max Runtime | 5400 | +--------------------------+-----------------------------------------------------------------------------------------------+

Passaggio 3: esecuzione di previsioni con il modello

La seguente query mostra quali clienti si qualificano per il programma di fidelizzazione. Se il modello prevede che il cliente sia attivo per almeno sette mesi, tale modello seleziona il cliente per il programma fedeltà.

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;

Esecuzione di query di previsione sui dati di convalida (facoltativo)

Esegui le seguenti query di previsione sui dati di convalida per visualizzare il livello di precisione del modello.

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;

Previsione del numero di clienti che non riescono a entrare (opzionale)

La seguente query confronta il numero di clienti che si prevede siano attivi solo per 5 o 6 mesi. Il modello prevede che questi clienti perdano l'iscrizione al programma fedeltà. La query confronta quindi l'importo mancante all'iscrizione al programma con il numero che si prevede sia idoneo per il programma fedeltà. Questa query potrebbe essere utilizzata per formulare una decisione relativa all'abbassamento della soglia per il programma fedeltà. Puoi anche determinare se esiste un numero significativo di clienti che si prevede non rientrino per poco nel programma. Potresti quindi incoraggiare questi clienti ad aumentare la loro attività per ottenere l''iscrizione al programma fedeltà.

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);

Per ulteriori informazioni su Amazon Redshift ML, fare riferimento ai seguenti collegamenti:

Per ulteriori informazioni sul machine learning, consulta la documentazione seguente: