Raccomandazioni in 30 millisecondi

L'unione di Machine Learning, Cloud e Big Data per fornire raccomandazioni personalizzate a milioni di utenti in un istante.

Raccomandazioni in 30 millisecondi 0

Contesto

I sistemi di raccomandazione sono uno strumento estremamente efficace per le aziende in ambito retail o per quelle di servizi, dalle catene di supermercati alle piattaforme di streaming. Questi sistemi forniscono suggerimenti ai clienti sui siti di e-commerce o agli utenti che devono scegliere cosa vedere dopo una serie tv. Ciò permette di vendere di più e meglio.
Le raccomandazioni possono essere calcolate con diversi algoritmi e fornite su richiesta. Cosa succede, però, se i suggerimenti sono personalizzati per ogni utente? E se gli utenti sono migliaia o milioni? Cosa succede se le raccomandazioni sono complesse, come una lista di prodotti spesso acquistati insieme? E se volessimo anche delle risposte immediate, in meno di 30 millisecondi?

Il nostro approccio

Nel contesto di una grande società italiana di retail, noi di Machine Learning Reply abbiamo messo insieme le conoscenze di Big Data, Cloud e Machine Learning per rispondere a queste domande.
Il concetto chiave per vincere questa sfida è stato ripensare completamente l’approccio classico. In questi casi, infatti, non si tratta di piccole quantità di dati o di semplici calcoli da effettuare ad ogni richiesta di raccomandazione. Occorre sfruttare gli strumenti di Big Data offerti ad esempio da Google Cloud per ideare un’architettura scalabile.

Disegno della soluzione

La mole di utenti, i vincoli di performance ed i razionali che hanno definito la nostra soluzione.
  • strip-0

    Risposte nell’ordine dei millisecondi

    Per rispettare questo requisito, è impensabile calcolare le raccomandazioni al volo. Non ce n’è il tempo. Ne consegue che le raccomandazioni devono essere pre-calcolate e recuperabili in tempi brevissimi.

  • Scalabilità su milioni di utenti

    Se il sistema deve pre-calcolare tutte le raccomandazioni per ogni prodotto e per ogni utente, allora deve avere sufficiente potenza di calcolo. Deve anche poter salvare grandi quantità di dati, sia per l’input che per l’output.

    strip-1
  • strip-2

    Suddividere il problema

    Queste richieste sono però estramente stringenti e non è possibile utilizzare un unico database o un unico strumento per rispondere a tutte. Per questo, occorre suddividere il problema.

Utilizzare gli strumenti Google Cloud

Gli strumenti che rispondono singolarmente a queste richieste sono BigQuery, Dataflow e Bigtable. Vediamo come sono stati utilizzati.

Calcolo

Un Data Warehouse scalabile
BigQuery è lo strumento d’eccezione per gestire enormi quantità di informazione in poco tempo. Una volta inseriti i dati nel suo Data Warehouse, è possibile lanciare delle query SQL per ottenere tutte le combinazioni di raccomandazioni.

L’intelligenza sui dati
Fornisce inoltre funzionalità di machine learning tramite BigQueryML, che permette di addestrare e applicare modelli complessi senza muovere i dati. Il calcolo viene portato dove risiedono i dati, e non viceversa. Questo ha permesso di pre-calcolare tutte le raccomandazioni possibili in meno di 20 minuti e di salvarle comodamente su delle tabelle.

Recupero

Database non relazionale
Ogni utente, visitando il sito, scatenerà la chiamata ad una API che dovrà recuperare istantaneamente i suoi suggerimenti, ma non si può usare una query: troppo lenta. Il dato va quindi denormalizzato su un database non relazionale (o no SQL). Bigtable è lo strumento giusto.

Accesso con chiave
Il recupero dell’informazione deve avvenire tramite accesso con chiave: l’identificativo dell’utente. Solo in questo modo si può estrarre in tempo ridotto la lista dei suggerimenti. In pratica, ogni riga della tabella di Bigtable corrisponderà a un utente, ed ogni colonna a un prodotto. Poiché non si tratta di un database relazionale, solo i prodotti raccomandabili per quell’utente saranno presenti sulla riga con le loro informazioni. L’assenza di un prodotto, dunque, non occupa spazio – ogni riga avrà una lunghezza diversa. In questo modo non c’è bisogno di filtrare i prodotti raccomandabili. La lista è già pronta. Bigtable garantisce tempi di risposta dell’ordine dei millisecondi.

Un disegno che non è strano
Il disegno può sembrare sbagliato per chi è abituato a normalizzare i dati su un database relazionale. Tuttavia, quell’approccio risponde ad un’esigenza ben diversa: risparmiare spazio di archiviazione. Si tratta semplicemente di un compromesso. Per risparmiare spazio, si paga in tempo di accesso. Per risparmiare tempo di accesso, si paga in spazio. Basta comprendere cosa si vuole davvero.

Spostamento

Richieste incompatibili
BigQuery e Bigtable sono molto utili, ma rispondono ad esigenze diverse. I requisiti erano infatti contrastanti: poter gestire e aggregare velocemente il dato per dei calcoli e invece accedervi rapidamente in modo puntuale sono due richieste incompatibili. Si tratta di due mondi differenti, ovvero database relazionali e database non relazionali.

Il giusto compito
Per questo, occorre assegnare a ciascuno dei due strumenti il giusto compito. Una volta calcolate le raccomandazioni con BigQuery, si dovrà denormalizzarle e spostarle su Bigtable. Dataflow è lo strumento adatto.

Trasferimento veloce
Tramite Dataflow, è possibile reperire, manipolare e trasferire grosse quantità di dati su numerosi job paralleli. Google Cloud mette a disposizione i connettori per BigQuery e Bigtable, così che siano già pronti e ottimizzati. Nel nostro caso, nonostante la grande mole di dati, è stato possibile spostare i suggerimenti precalcolati in circa 25 minuti.

Benefici

Il gioco è fatto. Si ottengono i benefici di entrambi i mondi.
Per le API è tutto trasparente: le raccomandazioni sono accessibili in pochi millisecondi. Per il calcolo delle raccomandazioni, anche: il Data Warehouse può effettuare operazioni complesse, applicare modelli di Machine Learning e numerosi join in poco tempo.