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.
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.
REGR_R2retorna 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 oREGR_SLOPEacabou de calcular?".Sintaxe e ideia central
Os argumentos sao os mesmos das outras funcoes
REGR_*: primeiro a variavel dependenteye depois a independentex.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,xnao explica nada dey.0.7— a reta explica 70% da variancia dey.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 > 0masr2vale, por exemplo,0.04, o "crescimento" e uma ilusao: a dispersao diaria e enorme e a reta nao explica quase nada. Jaslope > 0junto der2 = 0.8e 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 PearsonCORR(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(*) >= 30nao 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
xcausey.xouyfor NULL, aquela linha simplesmente nao participa, igual emREGR_SLOPE/CORR.REGR_R2nem as outras funcoesREGR_*vem no MySQL padrao; voce tera que calcular na mao via um equivalente deCORRou com variancias. O ClickHouse tambem nao temREGR_R2, mas suas estatisticas com janela permitem montar o R-quadrado por formula.Regra pratica: calcule sempre
REGR_SLOPEeREGR_R2juntos. A inclinacao da direcao e magnitude; o R-quadrado diz se vale a pena olhar para essa inclinacao.