Como calcular a taxa de conversão por canal em Real-Time Analytics
Calcular a taxa de conversão por canal em Real-Time Analytics permite ver, em tempo real, que canais (ex.: email, ads, orgânico) convertem melhor e agir rapidamente. Este tutorial explica o porquê e mostra como montar um pipeline simples de ingestão, agregação por janela e cálculo da taxa de conversão por canal.
Pré-requisitos
- Conta num serviço de streaming orientado a eventos (ex.: Apache Kafka, Event Hubs)
- Sistema de processamento em tempo real (ex.: Azure Stream Analytics, Apache Flink ou Spark Structured Streaming)
- Armazenamento para resultados (ex.: Azure SQL, Cosmos DB, ou um tópico Kafka de saída)
- Dados de evento com campos: event_time, user_id, channel, event_type (ex.: page_view, purchase)
Passo 1: Entender a métrica e os eventos necessários
Taxa de conversão por canal = (nº de utilizadores com evento de conversão num canal) / (nº de utilizadores expostos ou visitantes num canal) numa janela temporal. Precisamos distinguir eventos de exposição/visita (ex.: page_view) de eventos de conversão (ex.: purchase). Usar user_id para evitar duplicados por utilizador.
Passo 2: Modelar a janela temporal e a granularidade
Decida janela tumbling ou sliding (ex.: tumbling de 1 minuto para dashboards em tempo real). A granularidade define frequência de atualização e custo. Para início, use janela tumbling de 1 minuto por canal.
Passo 3: Exemplo com Azure Stream Analytics (consulta SQL-like)
Exemplo prático usando Azure Stream Analytics para contar utilizadores únicos por canal e calcular taxa de conversão numa janela tumbling de 1 minuto. A fonte é um Event Hub com eventos JSON.
-- Contagem de visitantes únicos por canal (page_view)
SELECT
System.Timestamp() AS window_end,
channel,
COUNT(DISTINCT user_id) AS visitors
INTO
output_visitors
FROM
input_events
WHERE
event_type = 'page_view'
GROUP BY
TumblingWindow(minute, 1), channel;
-- Contagem de conversões únicas por canal (purchase)
SELECT
System.Timestamp() AS window_end,
channel,
COUNT(DISTINCT user_id) AS conversions
INTO
output_conversions
FROM
input_events
WHERE
event_type = 'purchase'
GROUP BY
TumblingWindow(minute, 1), channel;
-- Juntar resultados e calcular taxa de conversão (pode ser feito numa query separada ou em downstream)
Passo 4: Unir resultados e calcular taxa de conversão
Se o motor não suportar joins de outputs, grave ambas as saídas num armazenamento e depois faça uma query que junte por window_end e channel. Exemplo SQL para um destino como Azure SQL ou um job que combine os outputs:
SELECT
v.window_end,
v.channel,
v.visitors,
c.conversions,
CASE WHEN v.visitors = 0 THEN 0 ELSE CAST(c.conversions AS FLOAT)/v.visitors END AS conversion_rate
FROM
visitors_table v
LEFT JOIN
conversions_table c
ON
v.window_end = c.window_end AND v.channel = c.channel
ORDER BY v.window_end DESC;
Passo 5: Tratar duplicados e sessões curtas (boas práticas)
Use COUNT(DISTINCT user_id) para evitar duplicados dentro da janela. Para evitar contagens inflacionadas por bots, filtre user_agents suspeitos ou crie heurísticas (ex.: eventos com duração muito curta). Se a plataforma permitir, aplique deduplicação por event_id antes da agregação.
Passo 6: Visualizar em tempo real e configurar alertas
Envie a tabela resultante para um destino suportado pelo seu dashboard (ex.: Power BI DirectQuery, ou Cosmos DB + Azure Synapse). Configure alertas quando conversion_rate cair abaixo de um limiar ou quando visitors/conversions tiverem mudanças abruptas.
Verificar o resultado
Confirme que para cada janela de 1 minuto existe uma linha por channel com visitors, conversions e conversion_rate entre 0 e 1. Teste com eventos de exemplo: enviar 10 page_view e 2 purchase no mesmo channel deverá mostrar visitors≥10 (dependendo de user_id) e conversion_rate correspondente. Verifique logs do Stream Analytics para erros comuns (schema mismatch, timestamps fora de ordem).
Conclusão
Com uma janela tumbling e contagens distinct por user_id é simples obter a taxa de conversão por channel em Real-Time Analytics. Próximos passos: experimentar janelas deslizantes, normalizar por sessões e integrar filtros anti-fraude. Dica: comece com janelas maiores para validar lógica antes de reduzir para latência baixa.