

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à.

# Genera consigli personalizzati e riclassificati con Amazon Personalize
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize"></a>

*Mason Cahill, Matthew Chasse e Tayo Olajide, Amazon Web Services*

## Riepilogo
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-summary"></a>

Questo modello mostra come utilizzare Amazon Personalize per generare consigli personalizzati, inclusi consigli riclassificati, per i tuoi utenti in base all'acquisizione di dati di interazione utente in tempo reale da tali utenti. Lo scenario di esempio utilizzato in questo modello si basa su un sito Web dedicato all'adozione di animali domestici che genera consigli per gli utenti in base alle loro interazioni (ad esempio, quali animali domestici visita un utente). Seguendo lo scenario di esempio, impari a utilizzare Amazon Kinesis Data Streams per importare dati di interazione, AWS Lambda per generare consigli e riclassificarli e Amazon Data Firehose per archiviare i dati in un bucket Amazon Simple Storage Service (Amazon S3). Imparerai anche a usare AWS Step Functions per creare una macchina a stati che gestisca la versione della soluzione (ovvero un modello addestrato) che genera i tuoi consigli.

## Prerequisiti e limitazioni
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-prereqs"></a>

**Prerequisiti**
+ Un [account AWS](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/) attivo con un AWS Cloud Development Kit ([AWS CDK) avviato](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html)
+ [AWS Command Line Interface (AWS CLI) con credenziali](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) configurate
+ [Python 3.9](https://www.python.org/downloads/release/python-390/)

**Versioni del prodotto**
+ Python 3.9
+ AWS CDK 2.23.0 o versione successiva
+ AWS CLI 2.7.27 o versione successiva

## Architecture
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-architecture"></a>

**Stack tecnologico**
+ Amazon Data Firehose
+ Flusso di dati Amazon Kinesis
+ Amazon Personalize
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Cloud Development Kit (CDK AWS)
+ Interfaccia a riga di comando di AWS (CLI AWS)
+ AWS Lambda
+ AWS Step Functions

**Architettura Target**

Il diagramma seguente illustra una pipeline per l'acquisizione di dati in tempo reale in Amazon Personalize. La pipeline utilizza quindi tali dati per generare consigli personalizzati e riclassificati per gli utenti.

![\[Architettura di inserimento dati per Amazon Personalize\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/42eb193b-2347-408a-8b25-46beeb3b29ca/images/786dbd56-7d7f-41bb-90f6-d4485d73fe15.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Kinesis Data Streams acquisisce i dati degli utenti in tempo reale (ad esempio, eventi come animali domestici visitati) per l'elaborazione da parte di Lambda e Firehose.

1. Una funzione Lambda elabora i record di Kinesis Data Streams ed effettua una chiamata API per aggiungere l'interazione dell'utente nel record a un tracker di eventi in Amazon Personalize.

1. Una regola basata sul tempo richiama una macchina a stati Step Functions e genera nuove versioni della soluzione per i modelli di raccomandazione e riclassificazione utilizzando gli eventi dell'event tracker in Amazon Personalize.

1. Le [campagne](https://docs.aws.amazon.com/personalize/latest/dg/campaigns.html) Amazon Personalize vengono aggiornate dalla macchina a stati per utilizzare la nuova versione della [soluzione](https://docs.aws.amazon.com/personalize/latest/dg/creating-a-solution-version.html).

1. Lambda riordina l'elenco degli articoli consigliati avviando la campagna di riclassificazione di Amazon Personalize.

1. Lambda recupera l'elenco degli articoli consigliati chiamando la campagna di consigli di Amazon Personalize.

1. Firehose salva gli eventi in un bucket S3 dove è possibile accedervi come dati storici.

## Tools (Strumenti)
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-tools"></a>

**Strumenti AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) è un framework di sviluppo software che aiuta a definire e fornire l'infrastruttura cloud AWS in codice.
+ [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)) è uno strumento open source che ti aiuta a interagire con i servizi AWS tramite comandi nella tua shell a riga di comando.
+ [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) ti aiuta a distribuire [dati di streaming](https://aws.amazon.com/streaming-data/) in tempo reale ad altri servizi AWS, endpoint HTTP personalizzati ed endpoint HTTP di proprietà di provider di servizi terzi supportati.
+ [Amazon Kinesis Data](https://docs.aws.amazon.com/streams/latest/dev/introduction.html) Streams ti aiuta a raccogliere ed elaborare grandi flussi di record di dati in tempo reale.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di elaborazione che ti aiuta a eseguire codice senza dover fornire o gestire server. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di calcolo che utilizzi.
+ [Amazon Personalize](https://docs.aws.amazon.com/personalize/latest/dg/what-is-personalize.html) è un servizio di machine learning (ML) completamente gestito che ti aiuta a generare consigli sugli articoli per i tuoi utenti in base ai tuoi dati.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) è un servizio di orchestrazione senza server che ti aiuta a combinare funzioni Lambda e altri servizi AWS per creare applicazioni aziendali critiche.

**Altri strumenti**
+ [pytest](https://docs.pytest.org/en/7.2.x/index.html) è un framework Python per scrivere test piccoli e leggibili.
+ [Python](https://www.python.org/) è un linguaggio di programmazione per computer generico.

**Codice**

Il codice per questo modello è disponibile nel repository GitHub [Animal](https://github.com/aws-samples/personalize-pet-recommendations) Recommender. Puoi utilizzare il CloudFormation modello AWS di questo repository per distribuire le risorse per la soluzione di esempio.

**Nota**  
Le versioni della soluzione Amazon Personalize, l'event tracker e le campagne sono supportate da [risorse personalizzate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html) (all'interno dell'infrastruttura) che si espandono su risorse native. CloudFormation 

## Epiche
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-epics"></a>

### Crea l'infrastruttura
<a name="create-the-infrastructure"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un ambiente Python isolato. | **Configurazione Mac/Linux**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.html)**Configurazione di Windows**Per creare manualmente un ambiente virtuale, esegui il `% .venv\Scripts\activate.bat` comando dal tuo terminale. | DevOps ingegnere | 
| Sintetizza il modello. CloudFormation  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.html)Nel passaggio 2, `CDK_ENVIRONMENT` fa riferimento al `config/{env}.yml` file. | DevOps ingegnere | 
| Implementa risorse e crea infrastrutture. | Per distribuire le risorse della soluzione, esegui il `./deploy.sh` comando dal tuo terminale.Questo comando installa le dipendenze Python richieste. Uno script Python crea un bucket S3 e una chiave AWS Key Management Service (AWS KMS), quindi aggiunge i dati iniziali per le creazioni iniziali del modello. Infine, lo script viene eseguito per creare l'infrastruttura rimanente`cdk deploy`.L'addestramento iniziale del modello avviene durante la creazione dello stack. Il completamento della creazione dello stack può richiedere fino a due ore. | DevOps ingegnere | 

## Risorse correlate
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-resources"></a>
+ [Consigliere per animali](https://github.com/aws-samples/personalize-pet-recommendations) () GitHub
+ [Documentazione di riferimento per AWS CDK](https://docs.aws.amazon.com/cdk/api/v2/)
+ [Documentazione Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)
+ [Ottimizza i consigli personalizzati per una metrica aziendale a tua scelta con Amazon](https://aws.amazon.com/blogs/machine-learning/optimize-personalized-recommendations-for-a-business-metric-of-your-choice-with-amazon-personalize/) Personalize (AWS Machine Learning Blog)

## Informazioni aggiuntive
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-additional"></a>

**Esempi di payload e risposte**

*Raccomandazione: funzione Lambda*

Per recuperare i consigli, invia una richiesta alla funzione Lambda delle raccomandazioni con un payload nel seguente formato:

```
{
  "userId": "3578196281679609099",
  "limit": 6
}
```

Il seguente esempio di risposta contiene un elenco di gruppi di animali:

```
[{"id": "1-domestic short hair-1-1"},
{"id": "1-domestic short hair-3-3"},
{"id": "1-domestic short hair-3-2"},
{"id": "1-domestic short hair-1-2"},
{"id": "1-domestic short hair-3-1"},
{"id": "2-beagle-3-3"},
```

Se si omette il `userId` campo, la funzione restituisce raccomandazioni generali.

*Riclassificazione della funzione Lambda*

Per utilizzare la riclassificazione, invia una richiesta alla funzione di riclassificazione Lambda. Il payload contiene tutti gli elementi da riclassificare e i IDs relativi metadati. `userId` I seguenti dati di esempio utilizzano le classi Oxford Pets for `animal_species_id` (1=cat, 2=dog) e i numeri interi 1-5 per e: `animal_age_id` `animal_size_id`

```
{
   "userId":"12345",
   "itemMetadataList":[
      {
         "itemId":"1",
         "animalMetadata":{
            "animal_species_id":"2",
            "animal_primary_breed_id":"Saint_Bernard",
            "animal_size_id":"3",
            "animal_age_id":"2"
         }
      },
      {
         "itemId":"2",
         "animalMetadata":{
            "animal_species_id":"1",
            "animal_primary_breed_id":"Egyptian_Mau",
            "animal_size_id":"1",
            "animal_age_id":"1"
         }
      },
      {
         "itemId":"3",
         "animalMetadata":{
            "animal_species_id":"2",
            "animal_primary_breed_id":"Saint_Bernard",
            "animal_size_id":"3",
            "animal_age_id":"2"
         }
      }
   ]
}
```

La funzione Lambda riclassifica questi articoli e quindi restituisce un elenco ordinato che include l'articolo IDs e la risposta diretta di Amazon Personalize. Questo è un elenco classificato dei gruppi di animali a cui appartengono gli articoli e del relativo punteggio. Amazon Personalize utilizza le ricette di [personalizzazione degli utenti](https://docs.aws.amazon.com/personalize/latest/dg/native-recipe-new-item-USER_PERSONALIZATION.html) e di [classificazione personalizzata](https://docs.aws.amazon.com/personalize/latest/dg/native-recipe-search.html) per includere un punteggio per ogni articolo nei consigli. Questi punteggi rappresentano la certezza relativa di Amazon Personalize in merito all'articolo successivo che l'utente sceglierà. I punteggi più alti rappresentano una maggiore certezza.

```
{
   "ranking":[
      "1",
      "3",
      "2"
   ],
   "personalizeResponse":{
      "ResponseMetadata":{
         "RequestId":"a2ec0417-9dcd-4986-8341-a3b3d26cd694",
         "HTTPStatusCode":200,
         "HTTPHeaders":{
            "date":"Thu, 16 Jun 2022 22:23:33 GMT",
            "content-type":"application/json",
            "content-length":"243",
            "connection":"keep-alive",
            "x-amzn-requestid":"a2ec0417-9dcd-4986-8341-a3b3d26cd694"
         },
         "RetryAttempts":0
      },
      "personalizedRanking":[
         {
            "itemId":"2-Saint_Bernard-3-2",
            "score":0.8947961
         },
         {
            "itemId":"1-Siamese-1-1",
            "score":0.105204
         }
      ],
      "recommendationId":"RID-d97c7a87-bd4e-47b5-a89b-ac1d19386aec"
   }
}
```

*Carico utile Amazon Kinesis*

Il payload da inviare ad Amazon Kinesis ha il seguente formato:

```
{
    "Partitionkey": "randomstring",
    "Data": {
        "userId": "12345",
        "sessionId": "sessionId4545454",
        "eventType": "DetailView",
        "animalMetadata": {
            "animal_species_id": "1",
            "animal_primary_breed_id": "Russian_Blue",
            "animal_size_id": "1",
            "animal_age_id": "2"
        },
        "animal_id": "98765"
        
    }
}
```

**Nota**  
Il `userId` campo viene rimosso per un utente non autenticato.