Schema
| Campo | Tipo | Descrição |
|---|
leadOrganizationId | string | PK — partition key. FK para LeadOrganization. Um item por lead por organização |
features | JSON | Mapa de todas as features como pares chave-valor. Todos os valores são numéricos |
computedAt | datetime | Quando as features foram computadas pela última vez |
Banco de dados: DynamoDB. Um único GetItem retorna o vetor completo de features — otimizado para consumo rápido pelos agentes de IA e modelos de ML.
Padrões de Acesso
| Padrão | Query |
|---|
| Buscar vetor completo de features | GetItem PK = leadOrganizationId — retorna tudo em uma única leitura |
| Atualizar todas as features | PutItem — escrita atômica do conjunto completo de features |
Categorias de Features
RFM (Recency, Frequency, Monetary)
| Feature | Descrição |
|---|
recency_days | Dias desde a última interação |
frequency_conversations_30d | Conversas nos últimos 30 dias |
frequency_purchases_90d | Compras nos últimos 90 dias |
monetary_total | Valor total gasto (lifetime) |
monetary_avg_ticket | Ticket médio de compra |
Engagement
| Feature | Descrição |
|---|
avg_response_time_seconds | Tempo médio de resposta do lead |
avg_messages_per_conversation | Média de mensagens por conversa |
sentiment_avg_30d | Score médio de sentimento (0-1) nos últimos 30 dias |
Comportamento
| Feature | Descrição |
|---|
discount_request_rate | Taxa de conversas em que o lead pediu desconto |
conversion_rate | Taxa de conversas que resultaram em compra |
support_ticket_rate_30d | Tickets de suporte nos últimos 30 dias |
days_since_last_purchase | Dias desde a última compra |
has_purchased | 1 se o lead tem qualquer compra, 0 caso contrário |
engagement_score | Score composto de engajamento (0-1) |
Padrões Temporais
| Feature | Descrição |
|---|
preferred_hour_of_day | Hora do dia em que o lead mais interage |
preferred_day_of_week | Dia da semana em que o lead mais interage |
channel_diversity | Número de canais diferentes utilizados |
Campaign
| Feature | Descrição |
|---|
campaign_open_rate | Taxa de abertura de campanhas |
campaign_click_rate | Taxa de clique em campanhas |
campaigns_received_30d | Campanhas recebidas nos últimos 30 dias |
Regras de Negócio
- Item único por LeadOrganization — um GetItem retorna o vetor completo de features
- Todos os valores de features são numéricos (double precision). Features categóricas devem ser codificadas como números
- Atualizado por dois triggers:
- Near-realtime: Feature Computer Lambda acionado via SQS quando um novo evento chega
- Batch: EventBridge Scheduler dispara recálculo periódico para features dependentes do tempo (ex:
recency_days muda diariamente mesmo sem novos eventos)
- O campo
computedAt indica a frescura dos dados — consumidores podem decidir como ponderar features desatualizadas
- O Domínio Lead computa e armazena features. Ele não decide como elas são usadas — isso é responsabilidade do domínio AI Agents (MAB/ML)
O vetor de features é projetado para consumo direto por modelos de ML e sistemas de Multi-Armed Bandit (MAB). A separação entre computação (Domínio Lead) e uso (Domínio AI Agents) garante que o domínio de dados não acumule lógica de decisão.
Exemplo
{
"PK": "ORG#org_01HX#LEAD#lead_01HX",
"SK": "FEATURES",
"recency_days": 2,
"frequency_7d": 5,
"frequency_30d": 18,
"monetary_total": 45000,
"avg_response_time_min": 12.5,
"sentiment_score": 0.78,
"engagement_depth": 3,
"preferred_hour": 14,
"preferred_dow": 2,
"campaign_response_rate": 0.45,
"updatedAt": "2026-03-20T14:22:00Z",
"version": 42
}