

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Gere recomendações personalizadas e reclassificadas usando o Amazon Personalize
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize"></a>

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

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

Esse padrão mostra como usar o Amazon Personalize para gerar recomendações personalizadas para seus usuários, incluindo recomendações reclassificadas, com base na ingestão de dados de interação do usuário em tempo real desses usuários. O cenário de exemplo usado nesse padrão é baseado em um site de adoção de animais de estimação que gera recomendações para seus usuários com base em suas interações (por exemplo, quais animais de estimação visitados pelo usuário). Neste cenário de exemplo, você aprenderá a usar o Amazon Kinesis Data Streams para ingerir dados de interação, o AWS Lambda para gerar recomendações e reordená-las, e o Amazon Data Firehose para armazenar os dados em um bucket do Amazon Simple Storage Service (Amazon S3). Você também aprende a usar o AWS Step Functions para criar uma máquina de estado que gerencia a versão da solução (ou seja, um modelo treinado) que gera suas recomendações.

## Pré-requisitos e limitações
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-prereqs"></a>

**Pré-requisitos **
+ Uma [conta AWS](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/) ativa com um AWS Cloud Development Kit (AWS CDK) [integrado](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html)
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) com credenciais configuradas
+ [Python 3.9](https://www.python.org/downloads/release/python-390/)

**Versões do produto**
+ Python 3.9
+ CDK da AWS: 2.23.0 ou superior
+ CLI da AWS: 2.7.27 ou superior

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

**Pilha de tecnologia**
+ Amazon Data Firehose
+ Amazon Kinesis Data Streams
+ Amazon Personalize
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Cloud Development Kit (AWS CDK)
+ AWS Command Line Interface (AWS CLI)
+ AWS Lambda
+ AWS Step Functions

**Arquitetura de destino**

O diagrama a seguir ilustra um pipeline para a ingestão de dados em tempo real no Amazon Personalize. O pipeline então usa esses dados para gerar recomendações personalizadas e reclassificadas para os usuários.

![\[Arquitetura de ingestão de dados do Amazon Personalize\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/42eb193b-2347-408a-8b25-46beeb3b29ca/images/786dbd56-7d7f-41bb-90f6-d4485d73fe15.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. O Kinesis Data Streams ingere dados de usuários em tempo real (por exemplo, eventos como animais de estimação visitados) para processamento pelo Lambda e pelo Firehose.

1. Uma função do Lambda processa os registros do Kinesis Data Streams e faz uma chamada de API para adicionar a interação do usuário no registro a um rastreador de eventos no Amazon Personalize.

1. Uma regra baseada em tempo invoca uma máquina de estado do Step Functions e gera novas versões da solução para os modelos de recomendação e reclassificação usando os eventos do rastreador de eventos no Amazon Personalize.

1. As [campanhas](https://docs.aws.amazon.com/personalize/latest/dg/campaigns.html) do Amazon Personalize são atualizadas pela máquina de estado para usar a nova [versão da solução](https://docs.aws.amazon.com/personalize/latest/dg/creating-a-solution-version.html).

1. O Lambda reclassifica a lista de itens recomendados chamando a campanha de reclassificação do Amazon Personalize.

1. O Lambda recupera a lista de itens recomendados chamando a campanha de recomendações do Amazon Personalize.

1. O Firehose armazena os eventos em um bucket do S3, permitindo acessá-los posteriormente como dados históricos.

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

**Ferramentas da AWS**
+ O [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) é uma estrutura de desenvolvimento de software que ajuda você a definir e provisionar a infraestrutura da Nuvem AWS em código.
+ A ‭[AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)‭ é uma ferramenta de código aberto que permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.
+ O [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) auxilia no envio de [dados de streaming](https://aws.amazon.com/streaming-data/) em tempo real para outros serviços da AWS, para endpoints HTTP personalizados e para endpoints HTTP de provedores de serviços terceirizados compatíveis.
+ O [Amazon Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/introduction.html) ajuda a coletar e processar grandes fluxos de registros de dados em tempo real.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é um serviço de computação que ajuda você a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.
+ O [Amazon Personalize](https://docs.aws.amazon.com/personalize/latest/dg/what-is-personalize.html) é um serviço de machine learning (ML) totalmente gerenciado que ajuda você a gerar recomendações de itens para seus usuários com base em seus dados.
+ O [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) é um serviço de orquestração sem servidor que permite combinar funções do Lambda e outros serviços da AWS para criar aplicações essenciais aos negócios.

**Outras ferramentas**
+ [pytest ](https://docs.pytest.org/en/7.2.x/index.html)é uma estrutura Python para escrever testes pequenos e legíveis.
+ [Python](https://www.python.org/) é uma linguagem de programação de computador de uso geral.

**Código **

O código desse padrão está disponível no repositório GitHub [Animal Recommender](https://github.com/aws-samples/personalize-pet-recommendations). Você pode usar o CloudFormation modelo da AWS desse repositório para implantar os recursos para a solução de exemplo.

**nota**  
As versões da solução Amazon Personalize, o rastreador de eventos e as campanhas são apoiadas por [recursos personalizados](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html) (dentro da infraestrutura) que expandem os recursos nativos. CloudFormation 

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

### Criar a infraestrutura
<a name="create-the-infrastructure"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um ambiente Python isolado. | **Configuração Mac/Linux**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.html)**Configuração do Windows**Para criar manualmente um ambiente virtual, execute o `% .venv\Scripts\activate.bat` comando no seu terminal. | DevOps engenheiro | 
| Sintetize o modelo. CloudFormation  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.html)Na etapa 2, `CDK_ENVIRONMENT` se refere ao arquivo `config/{env}.yml`. | DevOps engenheiro | 
| Implante recursos e crie infraestrutura. | Para implantar os recursos da solução, execute o comando `./deploy.sh` no seu terminal.Esse comando instala as dependências necessárias do Python. Um script do Python cria um bucket do S3 e uma chave do AWS Key Management Service (AWS KMS) e, em seguida, adiciona os dados iniciais para as criações iniciais do modelo. Por fim, o script `cdk deploy` é executado para criar a infraestrutura restante.O treinamento de modelo inicial acontece durante a criação da pilha. Poderá levar até duas horas para a pilha terminar de ser criada. | DevOps engenheiro | 

## Recursos relacionados
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-resources"></a>
+ [Recomendador de animais](https://github.com/aws-samples/personalize-pet-recommendations) () GitHub
+ [Documentação de referência do CDK da AWS](https://docs.aws.amazon.com/cdk/api/v2/)
+ [Documentação do Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)
+ [Otimize recomendações personalizadas para uma métrica de negócios de sua escolha com o Amazon Personalize](https://aws.amazon.com/blogs/machine-learning/optimize-personalized-recommendations-for-a-business-metric-of-your-choice-with-amazon-personalize/) (AWS Machine Learning Blog)

## Mais informações
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-additional"></a>

**Exemplos de cargas e respostas**

*Função do Lambda de recomendação*

Para recuperar recomendações, envie uma solicitação para a função do Lambda de recomendação com uma carga no seguinte formato:

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

O exemplo de resposta a seguir contém uma lista de grupos de animais:

```
[{"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 você omitir o campo `userId`, a função retornará recomendações gerais.

*Reclassificar a função do Lambda*

Para usar a reclassificação, envie uma solicitação para a função do Lambda de reclassificação. A carga contém todos os itens a IDs serem reclassificados e seus metadados. `userId` Os dados de exemplo a seguir usam as classes Oxford Pets para `animal_species_id` (1=gato, 2=cachorro) e números inteiros de 1 a 5 para `animal_age_id` e `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"
         }
      }
   ]
}
```

A função Lambda reclassifica esses itens e, em seguida, retorna uma lista ordenada que inclui o item IDs e a resposta direta do Amazon Personalize. Esta é uma lista classificada dos grupos de animais em que os itens estão e sua pontuação. O Amazon Personalize usa receitas de [Personalização do usuário](https://docs.aws.amazon.com/personalize/latest/dg/native-recipe-new-item-USER_PERSONALIZATION.html) e [Classificação personalizada](https://docs.aws.amazon.com/personalize/latest/dg/native-recipe-search.html) para incluir uma pontuação para cada item nas recomendações. Essas pontuações representam a certeza relativa que o Amazon Personalize tem em relação ao item que o usuário selecionará em seguida. As pontuações mais altas representam maior certeza.

```
{
   "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"
   }
}
```

*Carga útil do Amazon Kinesis*

A carga a ser enviada ao Amazon Kinesis tem o seguinte 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**  
O campo `userId` é removido para um usuário não autenticado.