sqlpostgresqlregressionstatistics

REGR_R2 no SQL: R-quadrado e qualidade do ajuste da regressao

Como REGR_R2 mede a qualidade de uma regressao linear no SQL e por que ler esse valor junto com REGR_SLOPE.

3 min de leituraReferencesql · postgresql · regression · statistics · analytics

REGR_R2 retorna o coeficiente de determinacao (R-quadrado) de uma regressao linear: um numero entre 0 e 1 que indica quanto da variancia da variavel dependente a reta de regressao realmente explica. E o valor que responde a pergunta "da para confiar na inclinacao que o REGR_SLOPE acabou de calcular?".

Sintaxe e ideia central

Os argumentos sao os mesmos das outras funcoes REGR_*: primeiro a variavel dependente y e depois a independente x.

SELECT REGR_R2(y, x) FROM points;

A intuicao e simples: o R-quadrado compara o seu modelo com o modelo mais burro possivel, "sempre prever a media de y". Se a reta ajustada nao supera essa media, o R-quadrado fica perto de 0. Se a reta passa exatamente por cada ponto, o R-quadrado e 1.

  • 1.0 — reta perfeita, todos os pontos caem sobre ela.
  • 0.0 — a inclinacao e inutil, x nao explica nada de y.
  • 0.7 — a reta explica 70% da variancia de y.

Validar uma tendencia de receita

Digamos que agregamos os totais de pedidos por dia e queremos saber se a receita sobe de verdade ao longo do tempo ou se e apenas ruido. Calcule primeiro a inclinacao e depois a qualidade do ajuste.

WITH daily AS (
    SELECT
        date_trunc('day', created_at) AS day,
        SUM(amount) AS revenue
    FROM orders
    WHERE status = 'paid'
    GROUP BY 1
)
SELECT
    REGR_SLOPE(revenue, EXTRACT(EPOCH FROM day)) AS slope,
    REGR_R2(revenue, EXTRACT(EPOCH FROM day))    AS r2,
    COUNT(*)                                      AS days
FROM daily;

Se slope > 0 mas r2 vale, por exemplo, 0.04, o "crescimento" e uma ilusao: a dispersao diaria e enorme e a reta nao explica quase nada. Ja slope > 0 junto de r2 = 0.8 e uma tendencia estavel e confiavel.

Relacao com CORR ao quadrado

Numa regressao linear simples (um unico preditor) existe uma identidade exata: REGR_R2(y, x) e igual ao quadrado do coeficiente de correlacao de Pearson CORR(y, x). Isso serve como verificacao rapida.

SELECT
    REGR_R2(salary, manager_id)        AS r2,
    POWER(CORR(salary, manager_id), 2) AS corr_squared
FROM employees
WHERE manager_id IS NOT NULL;

As duas colunas vao coincidir a menos do erro de ponto flutuante. Daqui sai tambem a limitacao principal: o R-quadrado mede apenas a dependencia linear. Uma parabola perfeita pode dar um R-quadrado proximo de zero mesmo com as variaveis fortemente relacionadas.

Segmentar por pais

O R-quadrado brilha dentro de um GROUP BY: em vez de uma unica tendencia para todos, voce ganha uma nota de confiabilidade por segmento e descarta os ruidosos na hora.

SELECT
    u.country,
    REGR_SLOPE(o.amount, EXTRACT(EPOCH FROM o.created_at)) AS slope,
    REGR_R2(o.amount, EXTRACT(EPOCH FROM o.created_at))    AS r2,
    COUNT(*)                                                AS n
FROM orders o
JOIN users u ON u.id = o.user_id
GROUP BY u.country
HAVING COUNT(*) >= 30
ORDER BY r2 DESC;

A clausula HAVING COUNT(*) >= 30 nao e cosmetica, e uma protecao: com dois pontos o R-quadrado sempre vale 1 e, sem um limite minimo, voce vai confundir coincidencias aleatorias com padroes.

Pegadinhas

  • R-quadrado alto nao e causalidade. Ele so diz que a reta descreve bem os dados, nao que x cause y.
  • NULLs sao descartados aos pares. Se x ou y for NULL, aquela linha simplesmente nao participa, igual em REGR_SLOPE/CORR.
  • Nao existe no MySQL. Nem REGR_R2 nem as outras funcoes REGR_* vem no MySQL padrao; voce tera que calcular na mao via um equivalente de CORR ou com variancias. O ClickHouse tambem nao tem REGR_R2, mas suas estatisticas com janela permitem montar o R-quadrado por formula.
  • Apenas linearidade. Um R-quadrado perto de zero significa "nao ha relacao linear", nao "nao ha relacao alguma". Olhe o grafico antes de concluir.

Regra pratica: calcule sempre REGR_SLOPE e REGR_R2 juntos. A inclinacao da direcao e magnitude; o R-quadrado diz se vale a pena olhar para essa inclinacao.

Pratique com exercícios reais

Resolva exercícios no treinador de SQL com correção instantânea e dicas.

Abrir o treinador