Marcação de metadados e particionamento de usuários
As Recomendações Inteligentes podem ser usadas para melhorar a personalização relevante para os usuários finais, mesmo quando eles são anônimos. Os clientes podem integrar uma experiência personalizada de marcação de metadados para sua vitrine. Essa experiência é obtida usando a possibilidade de identificar marcas de metadados para conteúdo (como artigos escritos, podcasts, vídeos, produtos de varejo, etc.) e recomendar marcas ou conteúdo semelhantes com base nos gostos/preferências desse usuário. Os metadados do usuário podem ser poderosos para recomendar conteúdo relevante a todos os usuários, incluindo:
- Clientes novos ou pouco frequentes (também conhecidos como "usuários frios").
- Conectar usuários a outros usuários com base na marcação exclusiva de metadados.
- Conectar usuários a conteúdo relevante e de curto prazo.
Quando a marcação de metadados está habilitada, os usuários podem criar cenários de recomendações, como:
- Categorias de metadados que escolhemos para você
- Outras pessoas também olham essas categorias
- Eventos recentes com base em sua atividade recente
- Produtos/conteúdos semelhantes com base em nas marcas de metadados atribuídas
- Escolhas para você com base nos buckets de comportamento do usuário
O que é uma marca?
Marcas são um descritor para algo de interesse nos dos itens/conteúdo, para o qual os usuários gravitam, e devem ser específicas para a atividade do usuário final. Por exemplo, no mundo dos filmes, gênero, membros do elenco, tom, etc. podem ser considerados marcas para um filme, bem como algo pelo qual os usuários finais têm um gosto especial/não gostam. As marcas podem até incluir jogadores/usuários famosos, títulos de artigos, gênero, categorias de produtos, eventos e outras terminologias de conteúdo. O objetivo é garantir que os usuários finais recebam conteúdo relevante recomendado que atenda aos seus interesses/gostos/preferências com base nos metadados disponíveis.
Visão geral da arquitetura
Para configurar a marcação de metadados conforme mostrado no diagrama de arquitetura, os pré-requisitos são os seguintes:
- Armazenamento impositivo para conteúdo com marcas de metadados avançadas – Catálogo.
- Comportamento de interação do usuário (cliques no conteúdo/Uso). As informações do perfil do usuário final também podem estar disponíveis para uso.
- Uma Conta de Recomendações Inteligentes separada e instância de modelagem para entender os interesses do usuário apresentados como marcas.
- Um componente para classificar o conteúdo com base em marcas personalizadas com uma consulta de API em tempo real.
Quando habilitado, o serviço produz um modelo de "tags" personalizados para os usuários, com base em:
- Interações históricas do usuário
- Conteúdo rico em metadados com "marcas"
- A suposição aqui é que as tags são limpas (sem erros de ortografia e as tags são um conjunto predeterminado e racionalizado de especialistas e não criados ou anexados aleatoriamente).
Configuração do Contrato de Dados
Para configurar um Contrato de dados para oferecer suporte à marcação de metadados, faça o seguinte: observe as alterações entre a ItemId
, a TagId
e a InteractionGroupingId
.
Na seção Aplicativos, você vê exemplos de como a introdução de um TagID
ou BucketId
altera a configuração do Contrato de Dados. Sugerimos ter uma conta separada de Recomendações Inteligentes e uma instância de modelagem ao testar a marcação de metadados.
Nome da capacidade do IR | CATÁLOGO Entidade de Dados |
CATÁLOGO Campos de Entidade de Dados |
INTERAÇÕES Entidade de Dados |
INTERAÇÕES Campos de Entidade de Dados |
---|---|---|---|---|
(Necessário para todas as respostas) | Reco_ItemsAndVariants |
ItemId como a TagId Title |
||
Capacidade de filtragem (Aplica-se a todas as listas) |
Reco_ItemCategories | ItemCategories: ItemId (ou TagId ), Categoria |
||
As pessoas também viram | Reco_Interactions |
InteractionGroupingId como a UserId ItemId como a TagId UserId InteractionType: Compra == visualizada Carimbo de data/hora |
||
Sugestões | Reco_Interactions | (Mesmo que a anterior) |
Aplicativos e exemplos
As seções a seguir abordam dois casos de uso comuns que se beneficiam da marcação de metadados e fornecem alguns exemplos com dados de demonstração para cada um.
- Para obter "itens mais populares para você" para usuários frios. Para ver um exemplo, consulte a seção chamada "Obter os itens mais populares para usuários frios".
- Para criar um mapa com machine learning dos valores de metadados dos usuários. Para ver um exemplo, consulte a seção chamada "Criar um mapa de ML dos valores de metadados dos usuários".
Aplicação 1: Obter "itens mais populares para você" para usuários frios
Um problema comum no mundo da AI-ML é como fornecer recomendações relevantes para usuários que são clientes novos ou pouco frequentes (também conhecidos como "usuários frios"). Conforme mencionado anteriormente, o objetivo aqui é criar alguns intervalos distintos com base em categorias significativas e informações demográficas disponíveis (ou seja, Idade e Sexo). Em seguida, use todas as interações para conectar todos os usuários aos seus buckets demográficos correspondentes, o que, por sua vez, permite que os intervalos sejam conectados a itens durante a fase de treinamento do modelo. Durante a fase de veiculação, um segmento demográfico de Cold User pode ser atribuído e usado para recomendar itens, por exemplo, "itens mais populares por segmento de usuário".
As etapas são as seguintes:
- Prepare um particionamento de usuários com suas informações de metadados.
- Crie as conexões para o modelo no arquivo de armazenamento de dados "Reco_Interactions.csv".
- Consulte o modelo para obter a API de "itens mais populares por grupo de usuários".
Etapa 1: Preparar um particionamento dos usuários com suas informações de metadados
Algumas melhores prática ao criar seus buckets são as seguintes:
- Os metadados do usuário podem ser representados como buckets à distância. Use os metadados que fazem sentido para seu domínio de negócios e caso de uso. Por exemplo, se quiser criar um bucket para dados de idade, você poderá usar estes valores: Age5To11, Age30To40, etc.
- Alguns metadados do usuário podem até ser combinados em buckets. Use os metadados e combinações que façam sentido para seu domínio de negócios e caso de uso. Por exemplo, você pode combinar os dados de Idade e Sexo para criar buckets como este: Age20To30Male, Age20To30Female, Age30To40Male, Age30To40Female, etc.
- Depois que os buckets são criados, você precisa atribuir a cada bucket um único
BucketId
.
Etapa 2: Criar as conexões para o modelo no arquivo de armazenamento de dados "Reco_Interactions.csv"
Dependendo do número de buckets acima ou abaixo de 1.000, a forma como os dados são configurados no contrato de dados pode mudar.
Se houver MENOS de 1.000 buckets
Para cada Linha de Interação, você define o ChannelId
como o BucketId
, que corresponde (ou melhor se ajusta) ao usuário. A linha CSV de interação é alterada para: InteractionGroupingID
, ItemId
, UserId
e BucketId
como o ChannelId
. Um exemplo do CSV Interações é mostrado conforme a seguir:
Exemplo de CSV para MENOS de 1.000 buckets
Os cabeçalhos do CSV Interações aparecem somente por conveniência e não devem fazer parte dos dados reais.
InteractionGroupingId | ItemId | ItemVariantId | UserId | InteractionType | Carimbo de data/hora | Atributo Futuro | Atributo Futuro | Canal | Catálogo | Ponto Forte | IsPositive |
---|---|---|---|---|---|---|---|---|---|---|---|
InteractionGroupingID |
ItemId |
UserId |
BucketId |
Se houver MAIS de 1.000 buckets
Se houver mais de 1.000 depósitos de dados, você criará mais linhas de interação usando BucketId
.
Transforme cada linha de interação original entre um usuário e um item em duas novas linhas distintas com uma InteractionGroupingId
exclusiva que seja exclusiva somente apenas para essas duas linhas. O exemplo mostra:
- A linha de interação original usando a
UserId
, aItemId
e aInteractionGroupingId
comoUNIQUE_ID
. - A linha de interação adicional com a
BucketId
como aItemId
.
Exemplo de CSV para MENOS de 1.000 buckets:
Os cabeçalhos do CSV Interações aparecem somente por conveniência e não devem fazer parte dos dados reais.
InteractionGroupingId | ItemId | ItemVariantId | UserId | InteractionType | Carimbo de data/hora | Atributo Futuro | Atributo Futuro | Canal | Catálogo | Ponto Forte | IsPositive |
---|---|---|---|---|---|---|---|---|---|---|---|
UNIQUE_ID |
ItemId |
UserId |
|||||||||
UNIQUE_ID |
BucketId |
UserId |
Etapa 3: Consultar o modelo para obter a API de "itens mais populares por grupo de usuários"
Leve em consideração o esboço de construção do modelo discutido anteriormente. Depois que um Cold User e seu intervalo demográfico forem determinados, consulte o ponto de extremidade de exibição usando o tipo de lista "Próxima Melhor Ação" (anteriormente CART) com o foco demográfico BucketId
para recomendar os itens mais populares para esse bucket.
Quando há MENOS de 1.000 buckets
Um exemplo de link de consulta de API em que o parâmetro para ChannelId
é substituído pelo valor BucketId
, que se pareceria com isso:
<serving-endpoint>/Reco/V1.0/Popular?channelID=<BucketId>
Exemplo 1: Menos de 1.000 buckets
Suponha que um Usuário com UserId
=100, com uma atribuição personalizada BucketId
=Age30To40, que comprou recentemente um item com ItemId
=98005.
Este exemplo cria uma linha no arquivo "Reco_Interactions.csv", que usa um BucketId
(no campo ChannelId
do esquema IR) que melhor corresponde ao usuário (representado por UserId
no esquema IR):
- As informações da interação original são:
InteractionGroupingId
=1,UserId
=100,ItemId
=98005 - Observe no CSV de exemplo que o
ChannelId
relevante, que melhor corresponde aoUserId
foi anexado. No exemplo, oUserId
foi correspondido aoBucketId
= Age30To40, então a linha de interação modificada é:
InteractionGroupingId | ItemId | ItemVariantId | UserId | InteractionType | Carimbo de data/hora | Atributo Futuro | Atributo Futuro | Canal | Catálogo | Ponto Forte | IsPositive |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | 98005 | 100 | Age30To40 |
- A Consulta e a Resposta da API retornam uma lista de ItemIds, incluindo
ItemId
=43218 na terceira posição, que é um item popular para usuários desta categoria.
Consulta API
GET <serving-endpoint>/reco/v1.0/Popular?ChannelId=Age30To40
Response
{
"id": "Lists",
"name": "Lists",
"version": "v1.0",
"interactionsVersion": "20220104115104",
"items": [
{
"id": "65106",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "62604",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "43218",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "63503",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "62452",
"trackingId": "00000000-0000-0000-0000-000000000003"
}
],
"title": "Popular",
"longTitle": "Popular",
"titleId": 5,
"pagingInfo": {
"totalItems": 200
},
"status": "Success"
}
Quando há MAIS de 1.000 buckets
Um exemplo de link de consulta de API em que a ItemId
é substituída pela BucketId
, para um usuário frio se pareceria com isso:
<serving-endpoint>/Reco/V1.0/Cart/<BucketId>?
Exemplo 2: Mais de 1.000 buckets
Suponha que um Usuário com UserId
=100, com uma atribuição personalizada BucketId
=Age30To40Female, que comprou recentemente um item com ItemId
=98005.
Agora você pode usar os dados de interação originais e construir linhas no arquivo "Reco_Interactions.csv":
- As informações da interação original são:
InteractionGroupingId
= NEW_UNIQUE_ID,UserId
=100,ItemId
=98005 - As duas linhas de informações de interação construídas que devem estar no arquivo "Reco_Interactions.csv" que é lido pelo serviço de Recomendações Inteligentes:
InteractionGroupingId | ItemId | ItemVariantId | UserId | InteractionType | Carimbo de data/hora | Atributo Futuro | Atributo Futuro | Canal | Catálogo | Ponto Forte | IsPositive |
---|---|---|---|---|---|---|---|---|---|---|---|
UNIQUE_ID |
98005 |
100 |
|||||||||
UNIQUE_ID |
Age30To40Female |
100 |
- A Consulta e a Resposta da API retornam uma lista de ItemIds, incluindo
ItemId
=43218 na terceira posição, que é um produto popular para usuários desta categoria.
Consulta API
GET <serving-endpoint>/reco/v1.0/Cart/Age30To40Female?
Response
{
"id": "Lists",
"name": "Lists",
"version": "v1.0",
"interactionsVersion": "20220104115104",
"items": [
{
"id": "65106",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "62604",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "43218",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "63503",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "62452",
"trackingId": "00000000-0000-0000-0000-000000000003"
}
],
"title": "Cart",
"longTitle": "FrequentlyBoughtTogether",
"titleId": 5,
"pagingInfo": {
"totalItems": 200
},
"status": "Success"
}
Aplicação 2: Criar um mapa de ML dos valores de metadados dos usuários
Modelar "Marcas" de metadados do usuário no lugar de interações diretas com o usuário pode ser uma modificação poderosa quando o objetivo é produzir um resultado, que mostra como os usuários estão conectados com essas marcas e quais marcas são realmente semelhantes em comportamento. Atribua a cada marca significativa e disponível (por exemplo, informações demográficas como Idade e Sexo ou outros metadados) um identificador exclusivo, ao qual o serviço se refere como a TagId
. Durante a fase de treinamento do modelo, todos os dados de interação são usados para criar uma conexão entre UserIds e TagIds.
Durante a fase de veiculação, o sistema pode fornecer uma lista personalizada de Marcas chamando "Sugestões" com a UserId
, e marcas semelhantes chamando "As pessoas também gostaram" com a TagId
.
Como usar TagIds para recomendações:
- Prepare uma lista de valores de metadados do usuário (marcas) e atribua a cada uma delas uma
TagId
. - Crie as conexões para o modelo no arquivo de armazenamento de dados "Reco_Interactions.CSV".
- Consulte o modelo para obter a API "marcas personalizadas por usuário" ou "marcas semelhantes".
Etapa 1: Preparar uma lista de valores de metadados do usuário (marcas) e atribuir a cada uma delas uma TagId
Ao construir valores para dados de Idade, o particionamento ainda é uma boa abordagem: Age5To11, Age12To18, etc.
Para outros valores de metadados, crie uma TagId separada para cada um. Por exemplo, se quisermos uma categoria para Status Familiar: Solteiro, Casal, CasalComFilhos, etc.
Etapa 2: Criar as conexões para o modelo no arquivo de armazenamento de dados "Reco_Interactions.CSV"
Use cada Interação original entre um Usuário e um Item para construir uma linha de dados de Interação com a TagId
.
[!Observação:]
Alguns lembretes importantes com essa abordagem:
- Somente os dados recém-construídos serão usados na entidade de dados Interações para o modelo.
- A criação de uma linha de Interação que conecta Usuários a TagIds não precisa necessariamente ser baseada em uma interação. Este é um exemplo para ilustrar como se pode criar uma Interação para conectar Usuários a Marcas no modelo.
- Na
InteractionGroupingId
pode fazer sentido reutilizar a interação original, se disponível. Caso contrário, tente agrupar porUserId
. Durante a fase de treinamento do modelo, todos os dados de interação são usados para criar uma conexão entre as diferentes TagIds e entre as UserIds e TagIds. Tentar diferentes maneiras de agrupar e ver qual produz os melhores resultados relevantes é nossa sugestão, pois diferentes cenários e padrões de uso podem diferir.
- Linha de interação original: com
UserId
,ItemId
,InteractionGroupingId
. Diferentemente do exemplo acima comBucketId
, NÃO INCLUA esta linha no conjunto de dados de entrada.- NOVA Linha de interação: com a
UserId
,TagId
como aItemId
,UserId
como aInteractionGroupingId
.
Um exemplo de Contrato de Dados ficaria assim:
InteractionGroupingId | ItemId | ItemVariantId | UserId | InteractionType | Carimbo de data/hora | Atributo Futuro | Atributo Futuro | Canal | Catálogo | Ponto Forte | IsPositive |
---|---|---|---|---|---|---|---|---|---|---|---|
UserId |
TagId |
UserId |
Etapa 3: Consultar o modelo para obter marcas personalizadas por usuário ou marcas semelhantes
Com uma construção de modelo cuidadosa, consultar o Ponto de Extremidade de Veiculação usando os tipos de lista "Escolhas para você" e "Pessoas também gostam" produz os resultados desejados.
Uma consulta de API "Sugestões", que retorna as TagIds recomendadas para uma determinada UserId
ficaria assim:
<serving-endpoint>Reco/v1.0/picks?userId=<UserId>
Uma consulta de API "As pessoas também gostaram" em que o parâmetro item de propagação é substituído pela TagId
correspondente:
<serving-endpoint>/Reco/V1.0/Similar/<TagID-value>?
Saída da resposta do exemplo
{
"id": "Picks",
"name": "Picks",
"version": "v1.0",
"items": [
{
"id": "68100",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "62500",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "61504",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "65103",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "61401",
"trackingId": "00000000-0000-0000-0000-000000000003"
}
],
"title": "Picks for you",
"longTitle": "Picks for you",
"titleId": 6,
"personalizationConfidence": 1.0,
"pagingInfo": {
"totalItems": 139
},
"status": "Success"
}
Exemplo 3: Consulta de tagIds com dados de demonstração
Suponha que um Usuário com UserId
=100 indicou que está alinhado com as seguintes tags: 123 (que representa "fã de futebol"), Age30To40Female e FamíliaComCrianças.
Você pode usar a linha de interação original para construir as seguintes linhas no arquivo "Reco_Interactions.csv": as informações de Novas 3 linhas de interação, uma para cada Marca para esse Usuário, que deve estar no arquivo "Reco_Interactions.csv" que é lido pelo serviço de Recomendações Inteligentes:
![Observação]
Neste exemplo, escolhemos agrupar por
UserId
e definimos aInteractionGroupingId
igual aUserId
. Observe também que aItemId
está representando aTagId
.
InteractionGroupingId | ItemId | ItemVariantId | UserId | InteractionType | Carimbo de data/hora | Atributo Futuro | Atributo Futuro | Canal | Catálogo | Ponto Forte | IsPositive |
---|---|---|---|---|---|---|---|---|---|---|---|
100 | 123 | 100 | |||||||||
100 | Age30To40Female | 100 | |||||||||
100 | FamíliaComCrianças | 100 |
Consulta e respostas para sugestões
Veja a aparência da solicitação "Sugestões" construída:
GET <serving-endpoint>/reco/v1.0/picks?UserId=100
A Resposta das Sugestões retorna uma lista de 200 ItemIds (para tags), incluindo, TagID
=FamilyWithKids na primeira posição.
{
"id": "Picks",
"name": "Picks",
"version": "v1.0",
"items": [
{
"id": "FamilyWithKids",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "625",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "Sports",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "651",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "611",
"trackingId": "00000000-0000-0000-0000-000000000003"
}
],
"title": "Picks for you",
"longTitle": "Picks for you",
"titleId": 6,
"personalizationConfidence": 1.0,
"pagingInfo": {
"totalItems": 139
},
"status": "Success"
}
Consulta e resposta para semelhantes
Veja a aparência da solicitação "Pessoas também" construída usando a API semelhante:
GET <serving-endpoint>/Reco/V1.0/Similar/FamilyWithKids?
A resposta "As pessoas também gostam" retorna uma lista de 200 ItemIds (para tags), incluindo, Age30To40Female na primeira posição e FamilyWithKids na segunda posição.
{
"id": "Similar",
"name": "Similar",
"version": "v1.0",
"items": [
{
"id": "Age30To40Female",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "FamilyWithKids",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "SportsParent",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "651",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "123",
"trackingId": "00000000-0000-0000-0000-000000000003"
}
],
"title": "People also like",
"longTitle": "People also like",
"titleId": 6,
"pagingInfo": {
"totalItems": 200
},
"status": "Success"
}
Para saber mais sobre nosso serviço e os modelos compatíveis, confira nosso Guia de modelagem.
Confira também
Guia de início rápido: criar uma conta de IR
Perguntas e respostas sobre modelagem
Guia do Contrato de Dados
Exemplos de solicitações de API