O sistema de teste A/B do PAI-Rec opera em conjunto com seu mecanismo existente de recomendação, busca ou publicidade, sem necessidade de migração. Integre-o configurando recursos na cloud, definindo experimentos, chamando o SDK e mensurando os resultados.
Como funciona
O PAI-Rec organiza os testes A/B em uma hierarquia de quatro níveis:
Lab → Experiment layer → Experiment group → Experiment
Um lab contém camadas de experimento; cada camada contém grupos de experimentos, e cada grupo contém experimentos. O tráfego passa primeiro pelos labs não base; o lab base atua como fallback para o tráfego restante.
Quando uma solicitação de usuário chega, o SDK chama match_experiment com um nome de cenário e um contexto de requisição. O PAI-Rec atribui o usuário a um experimento e retorna:
exp_id— ID do experimento a ser registrado em todos os eventos do usuário para cálculo de métricasParâmetros do experimento — pares chave-valor que seu sistema lê para determinar qual variante de algoritmo executar
Eventos e métricas: Seu código registra eventos de comportamento do usuário (cliques, compras etc.) e inclui o exp_id em cada evento. O PAI-Rec agrega esses eventos no MaxCompute para calcular métricas dos experimentos e gerar relatórios comparativos. O campo exp_id vincula cada evento de comportamento ao experimento correto durante a análise.
Pré-requisitos
Antes de começar, verifique se você possui:
Uma instância do PAI-Rec com ID da instância e região definidos
AccessKey ID e AccessKey secret (da sua conta Alibaba Cloud)
Um projeto do MaxCompute com permissões de leitura e gravação concedidas ao PAI-Rec
Um bucket do Object Storage Service (OSS)
Etapa 1: Configure os recursos
Faça login no console do PAI-Rec
No console do PAI-Rec, clique em Full-link Service no painel de navegação à esquerda. No assistente Service Initialization exibido, configure seus workspaces.
Observações sobre a configuração:
Consulte os workspaces existentes no Platform for AI (PAI), DataWorks e MaxCompute em seus respectivos consoles. Na página inicial de cada product, clique em Console.
Crie um bucket do OSS no console do OSS antes de configurá-lo aqui.
Conceda acesso ao MaxCompute
Na página Projects, pesquise o projeto do MaxCompute que deseja utilizar.
Se nenhum projeto aparecer, selecione a região correta primeiro.
Na coluna Actions do projeto, clique em Manage. Conceda ao PAI-Rec acesso direto e permissões de gravação no projeto do MaxCompute.
Para mais detalhes, consulte Service activation and initialization.
Etapa 2: Crie um cenário
|
Parâmetro |
Descrição |
|
Scenario name |
Nome do cenário de recomendação. Utilize um nome que reflita a localização na página (por exemplo, |
|
Description |
Descrição opcional do cenário. |
|
Intended users |
Selecione usuários que não utilizam totalmente o PAI-Rec. |
Configuração de tráfego para sistemas autogerenciados:
Se você possui um sistema de recomendação autogerenciado, comece direcionando de 10% a 20% do tráfego do cenário para o PAI-Rec. Assim que os resultados atenderem às expectativas, aumente gradualmente a parcela de tráfego.
Para rastrear o tráfego autogerenciado separadamente, atribua a ele um código de tráfego personalizado. Registre o exp_id nos logs de rastreamento de eventos para cada interação do usuário, permitindo que o PAI-Rec atribua eventos de comportamento aos experimentos durante o cálculo de métricas.
Etapa 3: Configure o teste A/B
Antes de iniciar um experimento, confirme as alterações a serem testadas com o gerente de produto ou gerente de projetos responsável.
Para definições de terminologia, consulte Basic Concepts.
Crie um lab
Selecione um ambiente de execução e um cenário de recomendação.
Clique em Create Lab.
No painel Create Lab, configure os seguintes parâmetros:
|
Parâmetro |
Descrição |
|
Lab type |
Base Lab (obrigatório): gerencia o tráfego que não corresponde a labs não base. Pode usar itens populares ou lógica de fallback aleatória. Non-base Lab (opcional): o tráfego corresponde aqui primeiro; útil para modelos complexos executados junto a um modelo base mais simples. |
|
Bucketing method |
Hashed UID-based Bucketing: segmenta usuários pelo valor hash do UID. UID-based Bucketing: segmenta usuários pelos últimos dígitos do UID. Condition-based Bucketing: segmenta usuários por uma expressão chave-valor, como |
|
Buckets |
Número total de buckets neste lab (por exemplo, 100). |
|
Traffic allocation |
Números de buckets atribuídos a este lab, no intervalo de 0 a 99. |
|
Layering |
Camada de experimento. Camadas típicas: |
|
Test users |
Usuários direcionados diretamente a este lab sem correspondência de bucketing. Insira UIDs manualmente (separados por vírgula) ou selecione um User Group ID na página User Group Management. |
Crie um grupo de experimentos
Cada camada de experimento pode ter vários grupos de experimentos, e cada grupo pode conter múltiplos experimentos. Utilize grupos separados quando vários engenheiros precisarem executar experimentos na mesma camada (por exemplo, diferentes algoritmos de recall) sem interferir uns nos outros.
Grupo de teste A/A (recomendado para novos experimentos):
Para validar que a configuração do seu experimento é imparcial, crie um grupo de teste A/A antes de executar experimentos reais:
Selecione de 4 a 5 buckets para o experimento.
Atribua 2 buckets a um grupo sem política configurada. Execute esses buckets como um teste preliminar e monitore as métricas principais.
Utilize os dois grupos cujas métricas forem mais semelhantes para o seu teste A/B real.
Parâmetros adicionais do grupo de experimentos:
|
Parâmetro |
Descrição |
|
Filter by |
Filtre usuários adicionalmente após a seleção dos usuários de teste. Filtrar por usuários novos versus existentes fornece resultados de teste mais abrangentes. |
|
Test users |
Manually Enter: especifique IDs de usuário para executar experimentos inicialmente, coletar feedback e depois refinar. User Group ID: direcione grupos específicos de usuários para experimentos específicos. Crie grupos de usuários em User Group Management sob Experiment Platform; você pode carregar IDs de usuário manualmente ou via Excel. |
Crie um experimento
Clique em Create Experiment. Por padrão, um experimento base é criado primeiro.
|
Tipo de experimento |
Descrição |
|
Baseline experiment |
O grupo de controle. Os usuários são atribuídos aleatoriamente ao grupo de experimento ou ao grupo de controle. |
|
Normal experiment |
Experimentos adicionais com a mesma estrutura do base. Cada um serve como grupo de tratamento. |
Estratégias de alocação de tráfego:
|
Objetivo |
Estratégia |
|
Minimizar riscos no lançamento de novo recurso |
Envie uma pequena fatia de tráfego para a nova versão para limitar o impacto nos usuários enquanto coleta dados dentro do seu cronograma. |
|
Maximizar a velocidade do teste |
Distribua o tráfego uniformemente entre os grupos para coletar resultados mais rapidamente. |
|
Otimizar o retorno sobre investimento (ROI) |
Aloque mais tráfego para o grupo de experimento e mantenha uma pequena fatia para o grupo de controle. |
Após configurar todos os parâmetros, clique em Save.
Etapa 4: Chame o SDK
Os SDKs Python e Java seguem o mesmo padrão: inicialize um client com suas credenciais e detalhes da instância, chame match_experiment com um nome de cenário e contexto de usuário e leia o exp_id e os parâmetros do experimento no resultado.
Armazene o exp_id em todos os eventos de comportamento do usuário que você registrar. O PAI-Rec usa esse campo para atribuir eventos aos experimentos ao calcular métricas.
SDK Python
Instalação
Prepare um ambiente Python e instale o PyCharm para executar o SDK.
pip install https://aliyun-pairec-config-sdk.oss-cn-hangzhou.aliyuncs.com/python/aliyun_pairec_config_python_sdk-1.0.0-py2.py3-none-any.whl
Instale usando o comando acima, não pelo gerenciador de pacotes do PyCharm. O pacote não é open source e o instalador do PyCharm pode causar conflitos. Se o pip precisar de atualização, atualize-o antes da instalação. Caso encontre um timeout, execute o comando novamente.
Inicialização e chamada
Armazene suas credenciais em variáveis de ambiente antes de executar o código:
export ALIBABA_CLOUD_ACCESS_KEY_ID=<your-access-key-id>
export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<your-access-key-secret>
Nunca codifique credenciais AccessKey diretamente no código-fonte. Leia-as de variáveis de ambiente em tempo de execução.
import os
from alibabacloud_tea_openapi.models import Config
from api.api_scene import SceneApiService
from api.api_experiment_room import ExperimentRoomApiService
from api.api_layer import api_layer
from api.api_experiment_group import ExperimentGroupApiService
from api.api_experiment import ExperimentApiService
from client.client import ExperimentClient
from model.experiment import ExperimentContext
from api.api_crowd import CrowdApiService
from alibabacloud_pairecservice20221213.client import Client
from common.constants import ENVIRONMENT_PRODUCT_CONFIG_CENTER
from common.constants import ENVIRONMENT_PREPUB_CONFIG_CENTER
from common.constants import ENVIRONMENT_DAILY_CONFIG_CENTER
# Instance details — find these on the Basic Information page in the PAI-Rec console
instance_id = "<instance-id>"
region = "<region-id>"
# Read credentials from environment variables
access_id = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
access_key = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
if __name__ == '__main__':
# Valid environments: ENVIRONMENT_PRODUCT_CONFIG_CENTER, ENVIRONMENT_PREPUB_CONFIG_CENTER, ENVIRONMENT_DAILY_CONFIG_CENTER
experiment = ExperimentClient(
instance_id=instance_id,
region=region,
access_key_id=access_id,
access_key_secret=access_key,
environment=ENVIRONMENT_PRODUCT_CONFIG_CENTER
)
# Build the request context
# request_id: any unique identifier (auto-increment ID or UUID)
# uid: the user ID to assign to an experiment
experiment_context = ExperimentContext(
request_id="<request-id>",
uid="<user-id>",
filter_params={}
)
# Match the user to an experiment in the specified scenario
# Find the scenario name on the Recommendation Scenarios page
experiment_result = experiment.match_experiment("<scenario-name>", experiment_context)
# Log experiment assignment details
print('info', experiment_result.info())
# Store exp_id in your event tracking logs for metric calculation
print('exp_id', experiment_result.get_exp_id())
# Read experiment parameters to determine which algorithm variant to run
print(experiment_result.get_experiment_params())
print(experiment_result.get_experiment_params().get('url', 'not exist'))
print(experiment_result.get_experiment_params().get('token', 'not exist'))
Substitua os placeholders antes de executar:
|
Placeholder |
Onde encontrar |
|
|
Página Basic Information no console do PAI-Rec |
|
|
Página Basic Information no console do PAI-Rec |
|
|
Página Recommendation Scenarios no console do PAI-Rec |
Saída esperada:
Uma execução bem-sucedida imprime a atribuição do experimento e os valores dos parâmetros configurados para aquele experimento:
info exp_id=<exp_id> ...
exp_id <exp_id>
{'url': 'https://...', 'token': '...'}
https://...
...
Se ocorrer um KeyError ao ler variáveis de ambiente, clique com o botão direito na configuração de execução no PyCharm e verifique se as variáveis de sistema estão carregadas. Caso contrário, reinicie o projeto.
SDK Java
Nunca codifique credenciais AccessKey diretamente no código-fonte. Leia-as de variáveis de ambiente em tempo de execução.
package com.aliyun.openservices.pairec;
import com.aliyun.openservices.pairec.api.ApiClient;
import com.aliyun.openservices.pairec.api.Configuration;
import com.aliyun.openservices.pairec.common.Constants;
import com.aliyun.openservices.pairec.model.ExperimentContext;
import com.aliyun.openservices.pairec.model.ExperimentResult;
public class ExperimentTest {
static ExperimentClient experimentClient;
public static void main(String[] args) throws Exception {
// Instance details — find regionId and instanceId on the Basic Information page
String regionId = "<region-id>";
String instanceId = System.getenv("Instance ID"); // pai-rec instance ID
// Read credentials from environment variables
String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
Configuration configuration = new Configuration(regionId, accessId, accessKey, instanceId);
// Set the experiment environment
configuration.setEnvironment(Constants.Environment_Product_Desc);
ApiClient apiClient = new ApiClient(configuration);
experimentClient = new ExperimentClient(apiClient);
// Initialize the client
experimentClient.init();
// Build the request context
ExperimentContext experimentContext = new ExperimentContext();
experimentContext.setUid("<user-id>");
experimentContext.setRequestId("<request-id>");
// Match the user to an experiment in the specified scenario
ExperimentResult experimentResult = experimentClient.matchExperiment("<scenario-name>", experimentContext);
// Store exp_id in your event tracking logs for metric calculation
System.out.println(experimentResult.getExpId());
// Log experiment assignment details
System.out.println(experimentResult.info());
// Read experiment parameters to determine which algorithm variant to run
System.out.println(experimentResult.getExperimentParams().getString("rank_version", "not exist"));
System.out.println(experimentResult.getExperimentParams().getString("version", "not exist"));
System.out.println(experimentResult.getExperimentParams().getString("recall", "not exist"));
System.out.println(experimentResult.getExperimentParams().getDouble("recall_d", 0.0));
// Read parameters for a specific experiment layer by name
System.out.println(experimentResult.getLayerParams("recall").getString("rank_version", "not exist"));
System.out.println(experimentResult.getLayerParams("rank").getString("version", "not exist"));
}
}
Etapa 5: Defina métricas de experimento
Antes de calcular métricas, registre uma tabela de dados do MaxCompute e defina o que será medido. Analistas de dados geralmente projetam métricas principais — como taxa de cliques (CTR) e taxa de conversão (CVR) — além de métricas obrigatórias que não devem sofrer regressão durante o experimento.
Registre uma tabela de dados
No console do PAI-Rec, acesse Metric Management > Data Registration. Associe uma tabela do MaxCompute à sua instância de teste A/B. Defina o Data Table Name com um nome que reflita o contexto de negócio.
Selecione uma tabela que contenha os campos obrigatórios. Para requisitos de campos, consulte Data registration and field configuration.
Se o seu projeto do MaxCompute não tiver uma tabela com todos os campos necessários, crie uma:
Faça login no console do MaxCompute e crie uma tabela de dados.
No DataWorks, crie uma tabela de source para relatórios de experimentos de teste A/B no MaxCompute.
Após o registro, a tabela aparece na lista de tabelas de dados. Clique em View Fields na coluna Actions para inspecionar ou editar mapeamentos de campos.
Tipos de métricas
O PAI-Rec suporta três categorias de métricas:
|
Categoria |
Exemplos |
Quando usar |
|
Métricas baseadas em proporção |
Taxa de conversão de cliques, CTR, CVR, taxa de retenção no dia seguinte |
Compare taxas entre grupos; mais comum para experimentos de recomendação |
|
Métricas por usuário |
Média de cliques por usuário, valor médio do pedido (AOV) |
Meça o impacto por usuário em vez de taxas agregadas |
|
Métricas absolutas |
Total de cliques, valor total dos pedidos |
Compare apenas quando os grupos de teste tiverem o mesmo número de usuários |
Além disso, distinga entre:
Métricas principais (KPIs): os resultados primários que o experimento foi projetado para melhorar
Métricas obrigatórias: métricas que devem ser observadas durante um teste; a capacidade testada não pode afetá-las negativamente
Configure métricas
Na página Metric Configurations, clique em Metrics. Defina os parâmetros Recommendation Scenario e Metric Timeliness.
Métricas de dimensão única são calculadas a partir de uma única agregação: contagem, contagem distinta, soma ou média. Por exemplo, cliques diários e visitas diárias são métricas de dimensão única.
No parâmetro Metric Definition:
Page Views: conta cada visita à página
Unique Visitors: conta cada usuário uma vez, na primeira visita
Métricas derivadas combinam múltiplas métricas de dimensão única. Por exemplo:
CTR = Daily clicks / Daily visits
Adicione cliques diários e visitas diárias como métricas de dimensão única primeiro, depois defina o CTR como uma métrica derivada usando a fórmula acima.
Configure grupos de métricas
Agrupe métricas relacionadas para calculá-las e compará-las como um conjunto.
Na aba Metric Groups, crie um grupo de métricas e defina o parâmetro Metric Selection para incluir as métricas desejadas.
Clique em Calculate na coluna Actions para acionar o cálculo das métricas.
Etapa 6: Calcule métricas e gere relatórios
Calcule métricas
Na aba Metric Groups da página Metric Configurations, clique em Calculate na coluna Actions. Selecione as métricas a serem calculadas no painel exibido.
Acompanhe o progresso dos jobs na página Jobs. Quando todos os jobs forem concluídos, o status mudará para Succeeded.
Visualize relatórios
Na página Performance Reports sob Experiment Platform, configure os parâmetros e clique em Start Analysis.
Detail Data: mostra as diferenças de métricas entre o experimento base e os experimentos normais
Trend Analysis: mostra como as métricas selecionadas variam ao longo do período do experimento
Próximos passos
Service activation and initialization — configuração detalhada de workspace
Basic Concepts — referência de terminologia de teste A/B do PAI-Rec
Data registration and field configuration — campos obrigatórios para tabelas de dados do MaxCompute