Prepara i tuoi dati per Amazon Personalize con Amazon SageMaker Data Wrangler

Prepara i tuoi dati per Amazon Personalize con Amazon SageMaker Data Wrangler

Un motore di raccomandazione è valido solo quanto i dati utilizzati per prepararlo. Trasformare i dati grezzi in un formato adatto per un modello è fondamentale per ottenere raccomandazioni personalizzate migliori per gli utenti finali.

In questo articolo, spiegheremo come preparare ed importare il dataset MovieLens, un dataset preparato dalla ricerca del GroupLens presso l’Università del Minnesota, che comprende una varietà di valutazioni degli utenti su vari film, in Amazon Personalize utilizzando Amazon SageMaker Data Wrangler.[1]

Panoramica della soluzione

Amazon Personalize è un servizio gestito la cui proposta di valore principale è la sua capacità di apprendere le preferenze degli utenti dal loro comportamento passato e di adattare rapidamente tali preferenze apprese per tenere conto del cambiamento del comportamento degli utenti in tempo quasi reale. Per poter sviluppare questa comprensione degli utenti, Amazon Personalize deve allenarsi sul comportamento storico degli utenti in modo da poter trovare modelli generalizzabili per il futuro. In particolare, il tipo principale di dati da cui Amazon Personalize impara è quello che chiamiamo un dataset di interazioni, che è un dataset tabulare che consiste almeno in tre colonne critiche, userID, itemID e timestamp, che rappresentano un’interazione positiva tra un utente e un elemento in un determinato momento. Gli utenti di Amazon Personalize devono caricare dati contenenti le interazioni dei propri clienti affinché il modello sia in grado di apprendere queste tendenze comportamentali. Sebbene gli algoritmi interni di Amazon Personalize siano stati scelti sulla base dell’esperienza di Amazon nel campo dell’apprendimento automatico, un modello personalizzato non viene caricato con alcun tipo di dati e i modelli vengono addestrati caso per caso per ogni cliente.

Il dataset MovieLens esplorato in questa guida non ha questo formato, quindi per prepararlo per Amazon Personalize, utilizziamo SageMaker Data Wrangler, un’applicazione appositamente progettata per l’aggregazione e la preparazione dei dati per l’apprendimento automatico. Dispone di oltre 300 trasformazioni dati preconfigurate e della possibilità di inserire codice personalizzato per creare trasformazioni personalizzate in PySpark, SQL e una varietà di librerie di elaborazione dati, come pandas.

Prerequisiti

Prima di tutto, è necessario configurare un dominio Amazon SageMaker Studio. Per ulteriori dettagli su come configurarlo, consultare Onboard to Amazon SageMaker Domain using Quick setup.

Inoltre, è necessario impostare le autorizzazioni corrette utilizzando AWS Identity and Access Management (IAM) per i ruoli dei servizi Amazon Personalize e Amazon SageMaker in modo che possano accedere alle funzionalità necessarie.

È possibile creare un nuovo gruppo di dataset Amazon Personalize da utilizzare in questa guida o utilizzarne uno esistente.

Infine, è necessario scaricare e decomprimere il dataset MovieLens e inserirlo in un bucket di Amazon Simple Storage Service (Amazon S3).

Avvio di SageMaker Data Wrangler da Amazon Personalize

Per iniziare l’integrazione di SageMaker Data Wrangler con Amazon Personalize, seguire i seguenti passaggi:

  1. Nella console di Amazon Personalize, passare alla pagina Panoramica del gruppo di dataset.
  2. Scegliere Importa dati di interazione, Importa dati utente o Importa dati elemento, a seconda del tipo di dataset (per questo articolo, scegliamo Importa dati di interazione).

  1. Per il metodo di importazione, selezionare Importa dati usando Data Wrangler.
  2. Scegliere Avanti.

  1. Specificare il dominio SageMaker, il profilo utente e il ruolo del servizio IAM creati in precedenza come prerequisiti.
  2. Scegliere Avanti.

  1. Continuare attraverso i passaggi per avviare un’istanza di SageMaker Data Wrangler.

La configurazione dell’ambiente per la prima volta può richiedere fino a 5 minuti.

Importa i dati grezzi in SageMaker Data Wrangler

Quando si utilizza SageMaker Data Wrangler per preparare e importare dati, si utilizza un flusso di dati. Un flusso di dati definisce una serie di trasformazioni e analisi sui dati per prepararli alla creazione di un modello di machine learning. Ogni volta che si aggiunge un passaggio al flusso, SageMaker Data Wrangler esegue un’azione sui dati, come ad esempio unirli a un altro dataset o eliminare alcune righe e colonne.

Per iniziare, importiamo i dati grezzi.

  1. Sulla pagina del flusso di dati, scegliere Importa dati.

Con SageMaker Data Wrangler, è possibile importare dati da oltre 50 fonti dati supportate.

  1. Per Fonti dati, scegliere Amazon S3.

  1. Scegliere il dataset caricato nel proprio bucket S3.

SageMaker Data Wrangler visualizza automaticamente una anteprima dei dati.

  1. Mantenere le impostazioni predefinite e scegliere Importa.

Dopo l’importazione dei dati, SageMaker Data Wrangler convalida automaticamente i dataset e rileva i tipi di dati per tutte le colonne in base al campionamento.

  1. Scegliere Flusso dati nella parte superiore della pagina Tipi di dati per visualizzare il flusso principale dei dati prima di passare al passo successivo.

Uno dei principali vantaggi di SageMaker Data Wrangler è la possibilità di eseguire anteprime delle trasformazioni su un piccolo subset di dati prima di applicare le trasformazioni all’intero dataset. Per eseguire la stessa trasformazione su più file partizionati in Amazon S3, è possibile utilizzare parametri.

Trasforma i dati

Per trasformare i dati in SageMaker Data Wrangler, aggiungi un passaggio di trasformazione al flusso di dati. SageMaker Data Wrangler include oltre 300 trasformazioni che puoi utilizzare per preparare i tuoi dati, inclusa una trasformazione Mappa colonne per Amazon Personalize. Puoi utilizzare le trasformazioni generali di SageMaker Data Wrangler per risolvere problemi come outlier, problemi di tipo e valori mancanti o applicare passaggi di preelaborazione dei dati.

Per utilizzare Amazon Personalize, i dati forniti nel set di interazioni devono corrispondere allo schema del dataset. Per il nostro motore di raccomandazioni di film, lo schema del set di interazioni proposte include:

  • user_id (stringa)
  • item_id (stringa)
  • event_type (stringa)
  • timestamp (formato Unix epoch time)

Per saperne di più sui dataset e gli schemi di Amazon Personalize, consulta Dataset e schemi.

Il file ratings.csv mostrato nell’ultimo passaggio della sezione precedente include film con valutazioni da 1 a 5. Vogliamo creare un motore di raccomandazioni di film basato su questo. Per farlo, è necessario completare i seguenti passaggi:

  1. Modifica i tipi di dati delle colonne.
  2. Crea due tipi di evento: Click e Watch.
  3. Assegna tutti i film valutati 2 o più come Click e i film valutati 4 o più come sia Click che Watch.
  4. Elimina la colonna ratings.
  5. Mappa le colonne allo schema del set di interazioni di Amazon Personalize.
  6. Verifica che il nostro timestamp sia nel formato Unix epoch time.

Si noti che il passaggio 3 non è necessario per creare un modello di personalizzazione. Se vogliamo utilizzare uno dei recommender di dominio video ottimizzati di Amazon Personalize, come Top Picks for You, i tipi di evento Click e Watch sarebbero richiesti. Tuttavia, se non li abbiamo, potremmo non includere un campo di tipo di evento (o aggiungere i nostri tipi di evento personalizzati come le valutazioni utente grezze) e utilizzare una ricetta personalizzata come User Personalization. Indipendentemente dal tipo di motore di raccomandazione che utilizziamo, è necessario assicurarsi che il nostro dataset contenga solo rappresentazioni di intenti utente positivi. Quindi, qualunque approccio si scelga, è necessario eliminare tutte le valutazioni a una stella (e eventualmente anche quelle a due stelle).

Ora utilizziamo SageMaker Data Wrangler per eseguire i passaggi precedenti.

  1. Nella pagina Data flow, scegli la prima trasformazione chiamata Tipi di dati.

  1. Modifica il tipo per ogni colonna.
  2. Scegli Anteprima per riflettere le modifiche, quindi scegli Aggiorna.

  1. Per aggiungere un passaggio nel flusso di dati, scegli il segno “+” accanto al passaggio su cui desideri eseguire la trasformazione, quindi scegli Aggiungi trasformazione.

  1. Per filtrare l’evento Clicca al di fuori delle valutazioni dei film, aggiungiamo un passaggio di filtraggio dei dati per filtrare i film valutati 2 e superiori.

  1. Aggiungi un altro passaggio di trasformazione personalizzata per aggiungere una nuova colonna, eventType, con Clicca come valore assegnato.
  2. Scegli Anteprima per revisionare la tua trasformazione e verificare che i risultati siano come desiderato, quindi scegli Aggiungi.
  3. In questo caso, scriviamo del codice PySpark per aggiungere una colonna chiamata eventType il cui valore sarà uniformemente “Clicca” per tutti i nostri film da due a cinque stelle:
from pyspark.sql.functions import litdf = df.withColumn("eventType", lit("Clicca"))

  1. Per gli eventi di Visione, ripeti i passaggi precedenti per i film valutati 4 e superiori e assegna il valore Visione aggiungendo i passaggi al passaggio Tipi di dati. Il nostro codice PySpark per questi passaggi è il seguente:
from pyspark.sql.functions import litdf = df.withColumn("eventType", lit("Visione"))

Fino a questo punto, il flusso dati dovrebbe apparire come nella seguente schermata.

Concatenare i dataset

Poiché abbiamo due dataset per gli eventi di visione e di clic, vediamo come concatenarli in un unico dataset interazioni.

  1. Nella pagina Flusso dati, scegli il segno più accanto a Crea evento di visione e scegli Concatena.

  1. Scegli l’altro passaggio finale (Crea evento di clic), e questo dovrebbe mappare automaticamente (convergere) entrambi i set in una anteprima di concatenazione.

  1. Scegli Configura per visualizzare un’anteprima dei dataset concatenati.
  2. Aggiungi un nome al passaggio.
  3. Scegli Aggiungi per aggiungere il passaggio.

Ora il flusso dati appare come nella seguente schermata.

  1. Ora, aggiungiamo un passaggio di gestione colonne per eliminare la colonna di valutazione originale.

Amazon Personalize ha nomi di colonna predefiniti per gli utenti, gli elementi e i timestamp. Questi nomi di colonna predefiniti sono user_id, item_id e timestamp.

  1. Aggiungiamo una trasformazione per il passaggio di Amazon Personalize per sostituire gli header di colonna esistenti con gli header predefiniti.
  2. Nel nostro caso, utilizziamo anche il campo event_type, quindi mappiamolo anche.

Con questo passaggio, l’attività di trasformazione dei dati è completa e il set di dati delle interazioni è pronto per il passaggio successivo.

Successivamente, convalidiamo i nostri timestamp.

  1. Possiamo farlo aggiungendo un passaggio di trasformazione personalizzato. Per questo post, scegliamo Python (Funzione definita dall’utente).
  2. Scegliere timestamp come colonna di input e come output, creare una nuova colonna chiamata readable_timestamp.
  3. Scegliere Python come modalità per la trasformazione e inserire il seguente codice per la funzione Python:
def custom_func(value: int) → str:    return datetime.utcfromtimestamp(value).strftime('%Y-%m-%d %H:%M:%S')
  1. Scegliere Anteprima per rivedere le modifiche.

In questo caso, vediamo le date negli anni 2000-poiché MovieLens ha iniziato a raccogliere dati nel 1996, questo corrisponde a quanto previsto. Se non scegliamo Aggiungi, questa trasformazione non verrà aggiunta al nostro flusso di dati.

  1. Poiché questo era solo un controllo di integrità, è possibile tornare al flusso di dati scegliendo Flusso di dati nell’angolo in alto a sinistra.

Infine, aggiungiamo un passaggio di analisi per creare un rapporto di riepilogo sul set di dati. Questo passaggio esegue un’analisi per valutare la idoneità del set di dati per Amazon Personalize.

  1. Scegli il segno più accanto all’ultimo passaggio del flusso di dati e scegli Aggiungi analisi.
  2. Per il Tipo di analisi, scegli Rapporto sulla qualità dei dati e le informazioni per Amazon Personalize.
  3. Per il Tipo di set di dati, scegli Interazioni.
  4. Scegli Crea.

Il set di dati MovieLens è abbastanza pulito, quindi l’analisi non mostra problemi. Se vengono identificati alcuni problemi, è possibile iterare sul set di dati e rieseguire l’analisi fino a quando non è possibile affrontarli.

Note che l’analisi di default viene eseguita su un campione di 50.000 righe.

Importa il dataset su Amazon Personalize

A questo punto, i nostri dati grezzi sono stati trasformati e siamo pronti per importare il dataset delle interazioni trasformate su Amazon Personalize. SageMaker Data Wrangler ti consente di esportare i tuoi dati in una posizione all’interno di un bucket S3. Puoi specificare la posizione utilizzando uno dei seguenti metodi:

  • Nodo di destinazione – Dove SageMaker Data Wrangler conserva i dati dopo averli elaborati
  • Esporta in – Esporta i dati risultanti da una trasformazione su Amazon S3
  • Esporta dati – Per dataset di piccole dimensioni, puoi esportare rapidamente i dati che hai trasformato

Utilizzando il metodo Nodo di destinazione, per esportare i tuoi dati crei nodi di destinazione e un job di SageMaker Data Wrangler. La creazione di un job di SageMaker Data Wrangler avvia un job di elaborazione SageMaker per esportare il tuo flusso. Puoi scegliere i nodi di destinazione che desideri esportare dopo averli creati.

  1. Scegli il segno più accanto al nodo che rappresenta le trasformazioni che desideri esportare.

  1. Scegli Esporta in e poi scegli Amazon S3 (tramite Jupyter Notebook).

Note che avremmo potuto anche scegliere di esportare i dati su Amazon Personalize tramite un notebook Jupyter disponibile in SageMaker Data Wrangler.

  1. Per Nome del dataset, inserisci un nome, che verrà utilizzato come nome di una cartella nel bucket S3 fornito come destinazione.
  2. Puoi specificare il tipo di file, il delimitatore di campo e il metodo di compressione.
  3. Opzionalmente, specifica il numero di partizioni e la colonna da partizionare.
  4. Scegli Aggiungi destinazione.

Il flusso dati dovrebbe assomigliare alla schermata seguente.

  1. Crea un job per elaborare il flusso dati e archiviare i dati nella destinazione (bucket S3) configurata nel passaggio precedente.
  2. Inserisci un nome per il job, quindi scegli Configura job.

SageMaker Data Wrangler offre la possibilità di configurare il tipo di istanza, il numero di istanze e la configurazione del job, nonché la possibilità di creare un programma per elaborare il job. Per una guida su come scegliere il numero di istanze, consulta Crea e Usa un Flusso di Data Wrangler.

Per monitorare lo stato del job, passa alla pagina Dashboard nella console di SageMaker. La sezione Elaborazione mostra il numero di job completati e creati. Puoi approfondire per ottenere ulteriori dettagli sul job completato.

Quando il lavoro è completo, viene creato un nuovo file dei dati trasformati nella destinazione specificata.

  1. Ritorna alla console di Amazon Personalize e vai al gruppo di dataset per importare un altro dataset.
  2. Scegli Importa dati di interazione.

  1. Seleziona Importa dati direttamente nei dataset di Amazon Personalize per importare il dataset trasformato direttamente da Amazon S3, quindi scegli Avanti.

  1. Definisci lo schema. In questo post, il nostro dataset è composto dai campi user_id (stringa), item_id (stringa), event_type (stringa) e timestamp (lungo).

A questo punto, puoi creare un sistema di raccomandazione per dominio video on demand o una soluzione personalizzata. Per farlo, segui i passaggi in Preparazione e importazione dei dati

Conclusioni

In questo post, abbiamo descritto come utilizzare SageMaker Data Wrangler per preparare un dataset di esempio per Amazon Personalize. SageMaker Data Wrangler offre più di 300 trasformazioni. Queste trasformazioni e la possibilità di aggiungere trasformazioni utente personalizzate possono contribuire a semplificare il processo di creazione di un dataset di qualità per offrire contenuti iper-personalizzati agli utenti finali.

Anche se in questo post abbiamo esplorato solo come preparare un dataset di interazioni, puoi utilizzare SageMaker Data Wrangler per preparare anche dataset di utenti e oggetti. Per ulteriori informazioni sui tipi di dati che possono essere utilizzati con Amazon Personalize, consulta Dataset e schemi.

Se sei nuovo di Amazon Personalize o SageMaker Data Wrangler, consulta Introduzione ad Amazon Personalize o Introduzione a SageMaker Data Wrangler, rispettivamente. Se hai domande relative a questo post, aggiungile nella sezione dei commenti.