0Pricing
Coding Interview Prep · Aula

Incremento, significância e proteções em SQL

Calculando o incremento de conversão e as verificações de dados que sinalizam um experimento com problemas.

Incremento, significância e proteções em SQL é uma aula grátis de Coding Interview Prep no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Coding Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Coding Interview Prep inclui 4 aulas no total.

Das métricas a uma decisão

A conversão por variante é apenas o começo. A pergunta da entrevista é: o tratamento realmente venceu? Isso significa calcular o incremento, avaliar se a diferença é real ou apenas ruído e verificar as métricas de segurança que identificam um experimento defeituoso.

Você não executará um pacote estatístico completo em SQL, mas poderá calcular as entradas e um indicador aproximado de significância que os entrevistadores esperam ver.

A CTE de resumo por variante

Tudo o que vem depois se baseia em um único resumo organizado: por variante, a quantidade de usuários n, a quantidade de conversores c e a taxa de conversão p. Calcule isso uma vez em uma CTE e reutilize.

WITH summary AS (
  SELECT
    variant,
    COUNT(DISTINCT user_id)            AS n,
    COUNT(DISTINCT converted_user)     AS c
  FROM experiment_flat
  GROUP BY variant
)
SELECT
  variant, n, c,
  1.0 * c / n AS p
FROM summary;

Incremento absoluto versus relativo

Há duas definições de incremento, e os entrevistadores esperam, por padrão, a relativa:

  • Incremento absoluto = p_tratamento - p_controle (pontos percentuais).
  • Incremento relativo = (p_tratamento - p_controle) / p_controle (uma melhoria percentual).

Dizer "um aumento de 2 pontos" ou "um incremento relativo de 20%" pode descrever o mesmo resultado. Seja explícito.

Calculando o incremento com uma autoagregação

Para comparar duas variantes em uma única linha, coloque controle e tratamento lado a lado usando agregação condicional e depois faça a aritmética.

Isso evita uma autojunção frágil e mantém a fórmula do incremento legível.

WITH s AS (
  SELECT variant,
    COUNT(DISTINCT user_id)        AS n,
    COUNT(DISTINCT converted_user) AS c
  FROM experiment_flat GROUP BY variant
),
rates AS (
  SELECT
    MAX(CASE WHEN variant='control'   THEN 1.0*c/n END) AS p_ctrl,
    MAX(CASE WHEN variant='treatment' THEN 1.0*c/n END) AS p_trt
  FROM s
)
SELECT
  p_ctrl, p_trt,
  p_trt - p_ctrl                          AS abs_lift,
  ROUND(100.0 * (p_trt - p_ctrl) / p_ctrl, 2) AS rel_lift_pct
FROM rates;

Por que uma diferença pode ser ruído

Uma taxa maior no tratamento pode ser resultado da sorte da amostragem aleatória. A significância pergunta: qual é a probabilidade de uma diferença desse tamanho ocorrer se as variantes fossem realmente idênticas?

O ingrediente principal é o erro padrão de cada taxa, que diminui à medida que o tamanho da amostra aumenta. Amostras grandes tornam incrementos pequenos confiáveis; amostras pequenas tornam suspeitos até incrementos grandes.

Erro padrão de uma proporção

Para uma taxa de conversão p em n usuários, o erro padrão é sqrt(p * (1 - p) / n). Calcule-o diretamente em SQL para cada variante.

Isso quantifica a oscilação de cada taxa antes de compará-las.

WITH s AS (
  SELECT variant,
    COUNT(DISTINCT user_id)        AS n,
    COUNT(DISTINCT converted_user) AS c
  FROM experiment_flat GROUP BY variant
)
SELECT
  variant, n,
  1.0 * c / n                                       AS p,
  SQRT( (1.0*c/n) * (1 - 1.0*c/n) / n )             AS std_err
FROM s;

Um escore z para duas proporções

Um indicador aproximado de significância é o escore z para duas proporções: a diferença entre as taxas dividida pelo erro padrão dessa diferença. Um valor absoluto acima de aproximadamente 1.96 corresponde ao limite comum de 95%.

Deixe claro que isso é uma aproximação, não um substituto para um teste apropriado, mas que responde em SQL à pergunta "isso é plausivelmente real?".

WITH r AS (
  SELECT
    MAX(CASE WHEN variant='control'   THEN 1.0*c/n END) AS p1,
    MAX(CASE WHEN variant='control'   THEN n END)        AS n1,
    MAX(CASE WHEN variant='treatment' THEN 1.0*c/n END) AS p2,
    MAX(CASE WHEN variant='treatment' THEN n END)        AS n2
  FROM (
    SELECT variant, COUNT(DISTINCT user_id) n,
           COUNT(DISTINCT converted_user) c
    FROM experiment_flat GROUP BY variant
  ) s
)
SELECT
  p2 - p1 AS abs_lift,
  (p2 - p1) / SQRT( p1*(1-p1)/n1 + p2*(1-p2)/n2 ) AS z_score
FROM r;

Interpretando o escore z

Transforme o número em uma conclusão para que o entrevistador ouça bom senso de negócio, não apenas matemática:

  • |z| >= 1.96: a diferença é significativa com aproximadamente 95% de confiança.
  • |z| < 1.96: não há evidências suficientes; o incremento pode ser apenas ruído.

Use um CASE para emitir um rótulo legível e sempre associe a significância ao tamanho prático do incremento.

SELECT
  z_score,
  CASE WHEN ABS(z_score) >= 1.96
       THEN 'significant at 95%'
       ELSE 'not significant' END AS verdict
FROM (
  SELECT 2.3 AS z_score
) t;

Incompatibilidade da proporção da amostra (SRM)

A primeira métrica de segurança investigada pelos entrevistadores é: os usuários foram realmente divididos conforme o planejado? Um experimento 50/50 que resulta em 53/47 com milhões de usuários é um sinal de alerta: a randomização ou o registro está com problema.

Compare as quantidades observadas com a divisão esperada. Um desvio grande invalida todo o teste antes mesmo de você analisar a métrica.

WITH cnt AS (
  SELECT variant, COUNT(DISTINCT user_id) AS n
  FROM experiment_flat GROUP BY variant
),
tot AS (SELECT SUM(n) AS total FROM cnt)
SELECT
  c.variant, c.n,
  ROUND(100.0 * c.n / t.total, 2)        AS observed_pct,
  50.0                                   AS expected_pct
FROM cnt c CROSS JOIN tot t;

Métricas de segurança

Uma métrica de segurança é uma métrica que não pode piorar, mesmo que a métrica principal melhore. Exemplos clássicos: latência da página, taxa de reembolso, taxa de descadastro e taxa de erros.

Apresente-as por variante junto com a métrica vencedora. Um tratamento que aumenta a conversão, mas dobra os reembolsos, não é uma vitória. Calcular as métricas de segurança sem ser solicitado demonstra bom julgamento de produto.

SELECT
  variant,
  AVG(load_ms)                                  AS avg_latency_ms,
  ROUND(100.0 * SUM(refunded) / COUNT(*), 2)    AS refund_rate_pct,
  ROUND(100.0 * SUM(errored)  / COUNT(*), 2)    AS error_rate_pct
FROM experiment_flat
GROUP BY variant;

O relatório completo

Um relatório completo do experimento, do tipo que os entrevistadores valorizam, combina quatro elementos em um único resultado: taxas por variante, incremento relativo, conclusão de significância e verificação de SRM. Encadeie CTEs e apresente tudo como uma única tabela pronta para embasar uma decisão.

Conclua afirmando: significativo, tamanho do incremento aceitável, métricas de segurança saudáveis, divisão equilibrada; portanto, publique ou aguarde.

WITH s AS (
  SELECT variant, COUNT(DISTINCT user_id) n,
         COUNT(DISTINCT converted_user) c
  FROM experiment_flat GROUP BY variant
),
r AS (
  SELECT
    MAX(CASE WHEN variant='control'   THEN 1.0*c/n END) p1,
    MAX(CASE WHEN variant='control'   THEN n END) n1,
    MAX(CASE WHEN variant='treatment' THEN 1.0*c/n END) p2,
    MAX(CASE WHEN variant='treatment' THEN n END) n2
  FROM s
)
SELECT
  ROUND(100.0*(p2-p1)/p1, 2) AS rel_lift_pct,
  CASE WHEN ABS((p2-p1)/SQRT(p1*(1-p1)/n1 + p2*(1-p2)/n2)) >= 1.96
       THEN 'significant' ELSE 'not significant' END AS verdict,
  CASE WHEN ABS(1.0*n2/(n1+n2) - 0.5) > 0.02
       THEN 'SRM warning' ELSE 'split ok' END AS srm_check
FROM r;

Verificação rápida

O tratamento mostra um incremento relativo de 25% na conversão, mas cada variante tem apenas 40 usuários. Qual é a conclusão correta?

Recapitulação: Incremento, significância e métricas de segurança

Agora você consegue transformar métricas brutas das variantes em uma decisão:

  • Diferencie o incremento absoluto (em pontos) do incremento relativo (em percentual).
  • Calcule o erro padrão de cada taxa e um escore z para duas proporções como indicador aproximado de significância (|z| >= 1.96 ~ 95%).
  • Faça a verificação de SRM para confirmar que a divisão corresponde ao planejado.
  • Apresente métricas de segurança para que uma vitória não esconda uma regressão.
  • Apresente um único relatório pronto para embasar uma decisão e sempre associe a significância ao tamanho prático do incremento.

Isso conclui a análise de funis e testes A/B em SQL.

Perguntas Frequentes

A aula “Incremento, significância e proteções em SQL” é grátis?

Sim — o texto completo de “Incremento, significância e proteções em SQL” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Coding Interview Prep, atualize para CoddyKit PRO. O curso de Coding Interview Prep inclui 4 aulas no total.

O que vou aprender em “Incremento, significância e proteções em SQL”?

Calculando o incremento de conversão e as verificações de dados que sinalizam um experimento com problemas. Você pratica Coding Interview Prep com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Coding Interview Prep?

Nenhuma experiência prévia é necessária. Coding Interview Prep no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Incremento, significância e proteções em SQL”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Coding Interview Prep?

Sim. Cada aula de Coding Interview Prep inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Criando um funil de várias etapas
  2. Eventos ordenados e janelas de tempo
  3. Atribuição e métricas de teste A/B
  4. Incremento, significância e proteções em SQL
← Voltar para Coding Interview Prep