Costruire un Sistema di Raccomandazione Utilizzando Google Cloud.

Building a Recommendation System Using Google Cloud.

Implementa un sistema di raccomandazione altamente avanzato utilizzando Google Cloud Recommendation AI

fonte pixabay

Immagina che i nostri ingegneri di ML di Google stiano lavorando per te per implementare i sistemi di raccomandazione sul tuo sito web e sull’applicazione. Con Google Cloud Recommendation AI, puoi sfruttare i sistemi di raccomandazione che vengono utilizzati per alimentare YouTube, Google Ads e altri prodotti Google per fornirci personalizzazione.

In questo articolo, ti guiderò su come implementare Google Cloud Recommendation AI per consentirti di fornire un’esperienza personalizzata ai tuoi clienti.

Noon, IKEA, KINGUIN e molti altri hanno utilizzato Google Recommendations AI per offrire raccomandazioni ad elevate prestazioni su tutti i canali.

Impatto iniziale dell'AI di raccomandazione per una delle attività commerciali, di Muffaddal

Come implementare Google Cloud Recommendation AI?

La raccomandazione AI richiede due cose per alimentare i modelli di machine learning. Primo, le attività dell’utente. Secondo, i dettagli del prodotto rispetto ai quali l’utente esegue le attività.

Le attività o le azioni vengono inviate come evento e i dettagli dell’elemento vengono archiviati come catalogo in Recommendation AI. Una volta che abbiamo la quantità di eventi e dettagli del catalogo necessari, possiamo addestrare il nostro modello ML per fornire agli utenti elenchi personalizzati basati sui comportamenti e gli attributi passati degli utenti.

Andiamo nei dettagli per ognuno di essi uno per uno.

Pipeline dei dati per utilizzare la Recommendation AI di Google Cloud, di Muffaddal

Nota: l’implementazione richiede una forte conoscenza tecnica di Google Cloud, SQL. Fammelo sapere se hai bisogno di aiuto.

1- Importa i dettagli del prodotto

Il catalogo può avere molti campi e attributi, tuttavia, id, name, title e categories sono campi obbligatori e devono essere forniti.

Leggi qui per maggiori dettagli su tutti i campi disponibili per il catalogo.

Assumendo che i dettagli del nostro prodotto esistano già all’interno di BigQuery, utilizzeremo l’integrazione di BigQuery e Recommendation AI per importare i dati del catalogo.

Processo del catalogo dei prodotti per Recommendation AI, di Muffaddal

Recommendation AI si aspetta uno schema di tabella BigQuery specifico. Pertanto, dobbiamo creare una tabella con il formato richiesto e inserire i dati del catalogo in essa.

Supponiamo che la nostra tabella di catalogo in BigQuery abbia i seguenti camp

Ci sono molti campi che possiamo impostare per il nostro catalogo. Più dati produciamo, meglio è. Per questo scopo dimostrativo, mi attengo ai più comuni. Si noti che i campi annullabili sono opzionali.

Il campo type qui è dove decidiamo se il prodotto è una variante o primario. Opterò per PRIMARY per questo articolo. Leggi qui per maggiori dettagli.

Una volta che la nostra tabella è pronta, possiamo inserire i dati del catalogo dalla tabella principale in questa tabella utilizzando la query qui sotto.

insert into `recommendersystem.product_data` (  name,id,type,primaryProductId,collectionMemberIds,gtin,categories,title,brands,description,languageCode,attributes,  tags,      priceInfo,rating,expireTime,ttl,availableTime,availability,availableQuantity,fulfillmentInfo, uri, images,audience,colorInfo,sizes,materials,patterns,conditions,retrievableFields,publishTime,promotions)SELECT    name,   cast(id as string) as id,   "PRIMARY" as type,    cast(id as string) as primaryProductId,    null as collectionMemberIds,    null as gtin,   array [categories] as categories,   name as title,   array[title] as brands,   ifnull(description,name) as description,    null as languageCode,   [      struct(      'product_location' as key,  STRUCT(array[ifnull(city,"empty")] as text,  cast(null as ARRAY<FLOAT64>) as numbers, true as searchable, true as indexable ) as value      )]   as attributes,   ARRAY_CONCAT(      [ifnull(location,"empty")],      [ifnull(categories,"empty")]          ) as tags,    null as  priceInfo,    null as  rating,    null as  expireTime,    null as  ttl,    null as  availableTime,    null as  availability,    null as  availableQuantity,    null as  fulfillmentInfo,   url,   array[struct(image_url) as uri, null as height, null as width)] as images,   null as audience,   null as colorInfo,   null as sizes,   null as materials,   null as patterns,   null as conditions,   null as retrievableFields,   null as publishTime,   null as promotionsFROM `product.product_details`

Non appena i dati sono disponibili nella nostra nuova tabella, siamo pronti per importarli in Recommendation AI.

Nella scheda Dati di retail ai in Google Cloud, fare clic su Importa in alto a sinistra per importare i dati.

Import catalog details to Recommendation AI, by Muffaddal

Apparirà un pannello come quello raffigurato nell’immagine qui sotto. Selezionare “Catalogo prodotti” nel tipo di importazione e “BigQuery” per la fonte dati. Fornire il percorso della tabella BigQuery e selezionare un ramo e premere “importa”.

Import catalog panel of Recommendation AI, by Muffaddal

Attendere un paio di minuti per visualizzare i dettagli del catalogo nella tabella dei dati di Retail AI.

2- Importare eventi storici

Successivamente, è necessario importare i dati storici degli utenti in Recommendation AI. Questa operazione è facoltativa, tuttavia, aiuta a costruire un modello di machine learning migliore.

Come per il catalogo, dobbiamo avere gli eventi in una tabella BigQuery con il formato richiesto.

Ecco gli eventi che Recommendation AI accetta

Eventi che possono essere inviati a Recommendation AI

In tutti questi, home-page-view, detail-page-viewed, add-to-cart e purchase-complete sono necessari per alimentare completamente il modello AI.

Ogni evento ha uno schema di tabella specifico necessario per l’importazione dei dati. Puoi trovarli in dettaglio qui.

1- Lo schema della tabella per home-page-view, detail-page-viewed e add-to-cart è il seguente

[    {        "name": "eventType",        "type": "STRING",        "mode": "REQUIRED"    },    {        "name": "visitorId",        "type": "STRING",        "mode": "REQUIRED"    },    {        "name": "eventTime",        "type": "STRING",        "mode": "REQUIRED"    }, {   "name": "productDetails",   "type": "RECORD",   "mode": "REPEATED",   "fields": [     {       "name": "product",       "type": "RECORD",       "mode": "REQUIRED",       "fields": [         {           "name": "id",           "type": "STRING",           "mode": "REQUIRED"         }       ]     },     {       "name": "quantity",       "type": "INTEGER",       "mode": "REQUIRED"     }   ] },    {        "name": "attributes",        "type": "RECORD",        "mode": "NULLABLE",        "fields": [            {                "name": "deviceType",                "type": "RECORD",                "mode": "NULLABLE",                "fields": [                    {                        "name": "text",                        "type": "STRING",                        "mode": "REPEATED"                    }                ]            }        ]    }]

2- E lo schema per l’evento purchase-complete è il seguente

[ {   "name": "eventType",   "type": "STRING",   "mode": "REQUIRED" }, {   "name": "visitorId",   "type": "STRING",   "mode": "REQUIRED" }, {   "name": "eventTime",   "type": "STRING",   "mode": "REQUIRED" }, {   "name": "productDetails",   "type": "RECORD",   "mode": "REPEATED",   "fields": [     {       "name": "product",       "type": "RECORD",       "mode": "REQUIRED",       "fields": [         {           "name": "id",           "type": "STRING",           "mode": "REQUIRED"         }       ]     },     {       "name": "quantity",       "type": "INTEGER",       "mode": "REQUIRED"     }   ] }, {   "name": "purchaseTransaction",   "type": "RECORD",   "mode": "REQUIRED",   "fields": [     {       "name": "revenue",       "type": "FLOAT",       "mode": "REQUIRED"     },     {       "name": "currencyCode",       "type": "STRING",       "mode": "REQUIRED"     }   ] }, {    "name": "attributes",    "type": "RECORD",    "mode": "NULLABLE",    "fields": [        {            "name": "deviceType",            "type": "RECORD",            "mode": "NULLABLE",            "fields": [                {                    "name": "text",                    "type": "STRING",                    "mode": "REPEATED"                }            ]        },        {            "name": "cityName",            "type": "RECORD",            "mode": "NULLABLE",            "fields": [                {                    "name": "text",                    "type": "STRING",                    "mode": "REPEATED"                }            ]        }    ]}]

Una volta creata la tabella, puoi utilizzare le seguenti query per inserire i dati nella nostra nuova tabella.

1- La query di inserimento SQL per home-page-viewed è la seguente

insert into `recommendersystem.user_event_home_page_view` (eventType, visitorId,eventTime,attributes)  SELECT   'home-page-view' as eventType,  visitorId,  eventTime,  struct(      struct([deviceType] as text)as deviceType,      struct([city] as text)as cityName   )    as attributes,  from (    select *,  deviceType from  `recommendersystem.user_event_history` 

2- La query di inserimento SQL per detail-page-viewed, add-to-cart è

inserisci in `recommendersystem.user_event_add_to_cart` (eventType, visitorId,eventTime,productDetails,attributes)SELECT 'add-to-cart' come eventType,visitorId,eventTime,[    struct( struct(product_id  come id) come product , 1 come quantity) ] come productDetails, struct(     struct([deviceType] come text)come deviceType,     struct([city] come text)come cityName        )   come attributes,da (  seleziona *,  deviceType da  `recommendersystem.user_event_history` -- limit 100)

3- Query di inserimento SQL per gli eventi purchase-complete è

inserisci in `recommendersystem.user_event_purchase_complete` (eventType, visitorId,eventTime,productDetails,purchaseTransaction,attributes)SELECT 'purchase-complete' come eventType,cast( visitorId come stringa) come visitorId,eventTime,[    struct( struct(product_id  come id) come product , 1 come quantity) ] come productDetails,struct(safe_cast(revenue come float64) come revenue, 'USD' come currencyCode) come purchaseTransaction, struct(     struct([deviceType] come text)come deviceType,     struct([city] come text)come cityName        )   come attributesda (  seleziona *, deviceType da  `recommendersystem.user_purchase_event` )

Nota: l’ID del visitatore e l’ID dell’utente possono essere gli stessi o possono essere diversi. Dipende se l’utente è tenuto a effettuare l’accesso prima di utilizzare il prodotto o meno.

Nota: Recommendation AI supporta anche i dati grezzi di Google Analytics 4. Quindi, se li hai, non è necessario eseguire la trasformazione e puoi importare direttamente.

Per importare i dati storici, vai alla scheda dati di retail ai come prima e fai clic su importa in alto.

Nel pannello di importazione, seleziona il tipo di importazione come Eventi utente e scegli le seguenti opzioni e fai clic su importa.

Ai abbiamo importato con successo eventi utente in Recommendation AI.

3- Invia eventi in tempo reale

Successivamente, dobbiamo inviare agli utenti eventi in tempo reale in modo che il modello AI possa essere ritrattato e migliorare le raccomandazioni man mano che l’utente interagisce con la piattaforma nel tempo.

Ci sono tre modi per inviare eventi utente a Recommendation AI. Utilizzando il pixel javascript, utilizzando l’API e utilizzando GTM.

Useremo l’API per questo articolo poiché può coprire tutti i casi indipendentemente dalla natura del sito web o dell’applicazione.

Ecco la chiamata curl per inviare l’evento home-page-viewed

curl -X POST \     -H "Authorization: Bearer ya29.a0AasRrdaM8jq4J0FBtJpsdhu87ZJcPlr4-8NqkDdGmLYtQ7P-riTx5man4k2maqWGNIsL1007a4BClSsfVbgHyjycaKn_5bviofo5XCbvCeO5-kkepnb_RUgy6prxRX7X8pi2PFHxX-kbmSmQgeEoILQQnK_aYMtTagSFzkUXC12Q2A5VmlfXR5cvSW-a80XxGOikpEf1jHuwusQx2EftBITnhPaYvg6Xi08qzvAEnmKgYicqCqY5o9d9ixav1jm6bd0r7A" \     -H "Content-Type: application/json; charset=utf-8" \     -H "X-Goog-User-Project: test-prod "     --data "{         'eventType': 'home-page-view',         'visitorId': '12',         'eventTime': '2021-09-28T03:33:33.000001Z',         'attributionToken': 'ABC',         'attributes': {            'city_name': {              'text': ['karachi']            },            'device_type': {              'text': ['iOS']            },         },         'userInfo': {           'userId': '123',         }}"\"https://retail.googleapis.com/v2/projects/test-prod/locations/global/catalogs/default_catalog/userEvents:write"

Chiamata curl per detail-page-view

curl -X POST \     -H "Authorization: Bearer ya29.a0ARrdaMsd84J0FBtZdJp2jhu87ZJcPlr4-8NqkDdGmLYtQ7P-riTx5man4k2maqWGNIsL1007a4BClSsfVbgHyjycaKn_5bviofo5XCbvCeO5-kkepnb_RUgy6prxRX7X8pi2PFHxX-kbmSmQgeEoILQQnK_aYMtTagSFzkUXC12Q2A5VmlfXR5cvSW-a80XxGOikpEf1jHuwusQx2EftBITnhPaYvg6Xi08qzvAEnmKgYicqCqY5o9d9ixav1jm6bd0r7A" \     -H "Content-Type: application/json; charset=utf-8" \     -H "X-Goog-User-Project: test-prod "     --data "{         'eventType': 'detail-page-view',         'visitorId': '123',         'eventTime': '2021-09-28T03:33:33.000001Z',         'attributionToken': 'ABC',         'attributes': {            'city_name': {              'text': ['karachi']            },            'device_type': {              'text': ['iOS']            },         },         'productDetails': [{           'product': {             'id': '2806'           }          }],         'userInfo': {           'userId': '123',         }}"\"https://retail.googleapis.com/v2/projects/test-prod/locations/global/catalogs/default_catalog/userEvents:write"

Chiamata Curl per add-to-cart

curl -X POST \     -H "Authorization: Bearer ya29.sdrdaM8jq4J0FBtZdJp2jsdshu87ZJcPlr4-8NqkDdGmLYtQ7P-riTx5man4k2maqWGNIsL1007a4BClSsfVbgHyjycaKn_5bviofo5XCbvCeO5-kkepnb_RUgy6prxRX7X8pi2PFHxX-kbmSmQgeEoILQQnK_aYMtTagSFzkUXC12Q2A5VmlfXR5cvSW-a80XxGOikpEf1jHuwusQx2EftBITnhPaYvg6Xi08qzvAEnmKgYicqCqY5o9d9ixav1jm6bd0r7A" \     -H "Content-Type: application/json; charset=utf-8" \     -H "X-Goog-User-Project: test-prod"     --data "{         'eventType': 'add-to-cart',         'visitorId': '123',         'eventTime': '2021-09-28T03:33:33.000001Z',         'attributionToken': 'ABC',         'attributes': {            'city_name': {              'text': ['karachi']            },            'device_type': {              'text': ['iOS']            },         },         'productDetails': [{           'product': {             'id': '2806'           },     'quantity':1          }],         'userInfo': {           'userId': '123',         }}"\"https://retail.googleapis.com/v2/projects/test-prod/locations/global/catalogs/default_catalog/userEvents:write"

Chiamata Curl per purchase-complete

curl -X POST \     -H "Authorization: Bearer ya29.a0ARrsddaM8jJ0FBtZdJsdjhu87ZJcPlr4-8NqkDdGmLYtQ7P-riTx5man4k2maqWGNIsL1007a4BClSsfVbgHyjycaKn_5bviofo5XCbvCeO5-kkepnb_RUgy6prxRX7X8pi2PFHxX-kbmSmQgeEoILQQnK_aYMtTagSFzkUXC12Q2A5VmlfXR5cvSW-a80XxGOikpEf1jHuwusQx2EftBITnhPaYvg6Xi08qzvAEnmKgYicqCqY5o9d9ixav1jm6bd0r7A" \     -H "Content-Type: application/json; charset=utf-8" \     -H "X-Goog-User-Project: test-prod "     --data "{         'eventType': 'purchase-complete',         'visitorId': '123',         'eventTime': '2021-09-28T03:33:33.000001Z',         'attributionToken': 'ABC',         'attributes': {            'city_name': {              'text': ['karachi']            },            'device_type': {              'text': ['iOS']            },         },         'productDetails': [{           'product': {             'id': '2806'           },     'quantity':'1'          }],          'purchaseTransaction':{              "id": 'transacion-id-here',              "revenue": 'orderPrice-here',              "currencyCode": 'USD',               "quantity":'1'            }         'userInfo': {           'userId': '123',         }}"\"https://retail.googleapis.com/v2/projects/test-prod/locations/global/catalogs/default_catalog/userEvents:write"

Dovrai generare il token di autorizzazione utilizzando Google Cloud per inviare gli eventi.

Puoi visualizzare gli eventi in tempo reale nella scheda eventi di Retail AI.

Eventi utente di Retail AI, di Muffaddal

Nota: se registri eventi utente prima o durante l’importazione del tuo catalogo, ricollega tutti gli eventi registrati prima che l’importazione del catalogo sia completata.

Infine, siamo a un passo dalla creazione del nostro primo modello per la raccomandazione.

Costruisci il modello di raccomandazione

I seguenti modelli di machine learning sono supportati da Recommendation AI.

Modelli AI supportati da Recommendation AI, di Muffaddal

Per questo articolo, utilizzeremo il modello Raccomandato per te. Puoi leggere qui per maggiori dettagli sui modelli disponibili.

Vai nella scheda modelli e clicca su Crea modello per iniziare a configurare i tuoi modelli di machine learning.

Creazione del modello in Recommendation AI, di Muffaddal

Successivamente, seleziona il modello Raccomandato per te come tipo di modello.

Selezione del modello AI in Recommendation AI, di Muffaddal

Aimiamo a migliorare gli acquisti, quindi vogliamo che il nostro modello di machine learning ottimizzi le conversioni. Seleziona tasso di conversione (CVR) come obiettivo del modello.

L'obiettivo del modello in Recommendation AI, di Muffaddal

Imposta la frequenza di messa a punto come ogni tre mesi e la filtrazione per i valori degli attributi come automatica

Impostazioni di messa a punto e di filtraggio per i modelli di Recommendation AI, di Muffaddal

E fai clic sul pulsante Crea. Questo avvierà l’addestramento del modello. Attendi uno o due giorni affinché il modello di machine learning sia pronto. Il tempo dipende dalla quantità di dati necessari per l’addestramento.

Servizio

Una volta creato il modello di machine learning, è il momento di configurare i servizi in modo che possiamo chiamare il nostro modello di machine learning e ottenere l’elenco personalizzato.

Vai nella configurazione dei servizi e clicca sul pulsante Crea un servizio in alto. Seleziona la raccomandazione come mostrato nell’immagine qui sotto.

Configurazione del servizio di modello in Recommendation AI, di Muffaddal

Assegna un nome al tuo servizio e fai clic su Continua.

Seleziona il nostro modello Raccomandato per te che abbiamo creato. In questo modo, il nostro modello sarà collegato a questa configurazione di servizio.

La scheda di preferenze è dove decidi come si comporta il modello. Possiamo avere le impostazioni automatiche.

Impostazione delle preferenze dell'AI di raccomandazione, di Muffaddal

Clicca sul pulsante “crea”. Prendi nota dell’id della configurazione poiché verrà utilizzato per chiamare l’API del modello.

Ottieni le raccomandazioni

Di seguito è riportata la chiamata curl per ottenere la raccomandazione dal modello che abbiamo creato.

curl -X POST \    -H "Authorization: Bearer ya29.aARrdaM9Bm57OTsdsIQAzGT15GwYzZpVfssffknWPNJ8gpKRk6IHSFmGqs1nBpAlaRRg2fQvtJgtUDGsuIc-h-j0RMLkAPy7FjxQ4tQbYZl62ba-4q4oRx-oY2KwYDA-pEQW77SACo2a8hS1zEUZHyyHCO3V-PycSBetJeldjib5VYo969D1PFVF33WSSRLPIP9uBcTW9ABoYthSOioTePlaICbwV1p8dlXesnCH8PdPNuKPxJJI3rzrnIghKXUKSQb4E-mc" \    -H "Content-Type: application/json; charset=utf-8" \    -H "X-Goog-User-Project: test-prod"\    --data  '{             "pageSize":100,             "userEvent": {              "eventType": "home-page-view",              "visitorId": "123",              "userInfo": {                  "userId": "123"              },              "experimentIds": "123"            }          }' \https://retail.googleapis.com/v2/projects/test-prod/locations/global/catalogs/default_catalog/placements/<your serving id here>:predict

Passa l’id utente, l’id di servizio, l’id del progetto e il token di autorizzazione corretti e otterrai un elenco personalizzato per l’id utente fornito.

Condividi il codice sopra con il tuo sviluppatore e dovrebbe essere in grado di fornire una sezione personalizzata sul tuo sito web e app.

Esperimento

Consiglio vivamente di fare un test A/B quando si lancia per la prima volta il sistema di raccomandazione. Ti aiuterà a capire quanto valore hai ottenuto dalla fornitura di un’esperienza personalizzata per l’utente.

Considerazioni finali

Questo articolo dovrebbe essere più che sufficiente per aiutarti a alimentare un sistema di raccomandazione completamente scalabile senza troppi problemi. Ma ricorda che ci sono altre cose da considerare per utilizzare Recommendation AI al massimo delle sue potenzialità.

Ad esempio, i token di attribuzione sono cruciali quando si impostano più modelli, mantenere il catalogo è anche importante per fornire prodotti aggiornati agli utenti e si deve anche considerare il prezzo di Google Cloud. Ce ne sono molti altri.

Non esitare a contattarmi se hai bisogno del mio aiuto con Google Recommendation AI.

Utilizzando Google Cloud Recommendation AI, non solo puoi utilizzare i propri modelli di ML di Google, ma ti consente anche di saltare l’intero processo di progettazione dei sistemi di raccomandazione. Ti fornisce rapidamente il valore che le raccomandazioni forniscono. Implementalo in poco tempo per aumentare l’engagement degli utenti, la retention e il fatturato per la tua attività.