Artigo original: https://www.freecodecamp.org/news/what-is-a-correlation-coefficient-r-value-in-statistics-explains/

As correlações são uma ótima ferramenta para aprender sobre como uma coisa muda com a outra. Depois de ler este artigo, você deverá entender o que é correlação, como pensar sobre correlações em seu próprio trabalho e como programar uma implementação mínima para calcular correlações.

Uma correlação tem a ver com o modo como duas coisas se alteram entre si

Correlação é um conceito matemático abstrato, mas você provavelmente já tem uma ideia sobre o que isso significa. Aqui estão alguns exemplos das três categorias gerais de correlação.

À medida que você come, provavelmente acabará se sentindo mais saciado. Esse é um caso em que duas coisas estão mudando juntas e da mesma maneira. Uma aumenta (você come mais), a outra também aumenta (sensação de saciedade). Essa é uma correlação positiva.

pos_plot
A correlação positiva entre comer e se sentir saciado. Quanto mais você come, mais saciado se sente (tendência no lado superior direito. Código em R 

Quando você está em um carro e ele vai mais rápido, você provavelmente chegará ao seu destino mais rápido e seu tempo total de viagem será menor. Esse é um caso de duas coisas mudando na direção oposta (mais velocidade, menos tempo). Essa é uma correlação negativa.

neg_plot
Correlação negativa entre a velocidade do carro e o tempo de viagem. Quanto mais rápido o carro, menor o tempo de viagem (tendência no canto inferior direito. Código em R

Há também uma terceira maneira possível de duas coisas "mudarem". Ou melhor, não mudarem. Por exemplo, se você ganhasse peso e se verificasse como isso afeta (muda) suas pontuações em exames da escola, provavelmente não haverá nenhum padrão geral de mudança nas pontuações na escola. Isso significa que não há correlação.

non_plot
Um gráfico exagerado sobre a ausência de correlação entre o aumento de peso e a pontuação nos exames escolares. Código em R

Saber como duas coisas alteram uma a outra é o primeiro passo para fazer uma previsão

Ser capaz de descrever o que está acontecendo em nossos exemplos anteriores é ótimo, claro, mas para que fazemos isso? A razão é aplicar esse conhecimento de maneira significativa para ajudar a prever o que acontecerá a seguir.

Em nosso exemplo alimentar, podemos registrar o quanto comemos por uma semana inteira e, em seguida, anotar o quanto nos sentimos saciados depois. Como descobrimos antes, quanto mais comemos, mais saciados nos sentimos.

Depois de coletar todas essas informações, podemos fazer mais perguntas sobre por que isso acontece para entender melhor essa relação. Aqui, podemos começar a perguntar que tipo de alimentos nos deixam mais cheios, ou se a hora do dia afeta o nosso nível de saciedade também.

Um pensamento semelhante pode ser aplicado ao seu trabalho ou empresa. Se você perceber que as vendas ou outras métricas importantes estão subindo ou descendo juntamente com outra métrica da empresa (em outras palavras, as coisas estão positivamente correlacionadas ou negativamente correlacionadas), pode valer a pena explorar e aprender mais sobre essa relação para prosperar mais em seu trabalho.

Correlações podem ter níveis diferentes de potência

Tratamos de algumas correlações gerais, como

  • positiva,
  • negativa ou
  • inexistente

Embora essas descrições funcionem, as correlações positivas e negativas não são iguais entre elas.

Essas descrições também podem ser traduzidas para números. Um valor de correlação pode assumir qualquer valor decimal entre um negativo, −1, e um positivo, +1.

Valores decimais entre −1 e 0 são correlações negativas, como −0.32.

Valores decimais entre 0 e +1 são correlações positivas, como +0.63.

Uma correlação de valor 0 perfeita representa a ausência de correlação.

Para cada tipo de correlação, há uma variação entre correlações fortes e correlações fracas. Valores de correlação mais próximos do zero são correlações mais fracas, enquanto valores mais próximos do um positivo ou do um negativo são correlações mais fortes.

Correlações fortes mostram tendências mais óbvias nos dados, enquanto as fracas parecem mais difíceis de correlacionar. Por exemplo, a correlação alta e positiva mais forte abaixo se parece mais com uma linha em comparação com a correlação positiva mais fraca e mais baixa.

positive_plots-1
Níveis variados de correlação positiva. Código em R

Do mesmo modo, correlações fortemente negativas têm uma tendência mais óbvia do que a correlação negativa mais fraca e mais baixa.

negative_plots-2
Níveis variados de correlação negativa. Código em R

De onde vem o valor r? Que valores ele pode receber?

O "valor r" é uma maneira comum de indicar um valor de correlação. Mais especificamente, refere-se à correlação (amostral) de Pearson, ou r de Pearson. O "amostral" entre parênteses é para enfatizar que você só pode declarar uma correlação para os dados que você tem. Você deve ser cauteloso ao fazer declarações maiores para além de seus dados.

A tabela abaixo resume o que tratamos sobre correlações até o momento.

VALOR R DE PEARSONA CORRELAÇÃO ENTRE AMBOS É...EXEMPLO
r = -1Perfeitamente negativaHora do dia e número de horas restantes no dia
r < 0NegativaVelocidades maiores no carro e tempo de viagem menor
r = 0Independente ou não correlacionadaGanho de peso e pontuações nos exames escolares
r > 0PositivaMais alimento ingerido e sensação de saciedade
r = 1Perfeitamente positivaAumento da minha idade e o aumento da sua idade

Nas próximas seções,

  • Analisaremos a equação matemática para calcular correlações
  • Usaremos números de exemplo para a equação de correlação
  • Programaremos a equação matemática em Python e em JavaScript

Análise da equação matemática para calcular correlações

Como um lembrete, as correlações só podem ser entre −1 e 1. Por que isso ocorre?

A resposta rápida é que ajustamos a quantidade de mudança em ambas as variáveis para uma escala comum. Em termos mais técnicos, normalizamos o quanto as duas variáveis mudam juntas pelo quanto cada uma das duas variáveis muda sozinha.

Na Wikipédia, pegamos a definição matemática do coeficiente de correlação de Pearson. Parece bastante complicado, mas vamos analisar juntos.

image-2

A partir dessa equação, para encontrar a correlação (r) entre uma variável x e uma variável y, primeiro precisamos calcular o valor médio de todos os valores de x e o valor médio de todos os valores de y.

Vamos nos concentrar primeiro na parte de cima da equação, também conhecida como o numerador. Para cada variável x e cada variável y, precisamos encontrar a distância entre os valores de x da média dos x e fazer a mesma subtração para y.

Intuitivamente, comparar todos esses valores à média nos dá um ponto de destino para vermos o quanto de mudança ocorre em uma das variáveis.

Isso é visto na seguinte fórmula matemática:

image-3

São somadas as diferenças entre os valores e o valor médio para a variável x.

Na parte de baixo da equação, também conhecida como o denominador, fazemos um cálculo semelhante. Porém, antes de somarmos todas as distâncias dos nossos valores e a média, multiplicamos os valores por eles mesmos (é por isso que (…)2 está ali).

Esse denominador é o que "ajusta" a correlação de maneira que os valores estejam entre −1 e 1.

Usando números em nossa equação para torná-la real

Para demonstrar a matemática, vamos encontrar a correlação entre as idades de você e de seus irmãos no ano passado [1,2,6] e suas idades para este ano [2,3,7]. Note que este é um pequeno exemplo. Normalmente, você gostaria de muito mais do que três amostras para ter mais confiança no fato de que sua correlação é verdadeira.

Olhando para os números, eles parecem aumentar do mesmo modo. Você também pode notar que eles são a mesma sequência de números, mas o segundo conjunto de números tem um adicionado a ele. Isso é o mais próximo de uma correlação perfeita que chegaremos. Em outras palavras, devemos obter um r=1.

Primeiro, precisamos calcular as médias de cada. A média de [1,2,6] é (1+2+6)/3=3 e a média de [2,3,7] é (2+3+7)/3=4. Preenchendo a equação, temos

image-4

Olhando para a parte de cima da equação, precisamos encontrar as diferenças pareadas de x e de y. Lembre-se de que ∑ é o símbolo para o somatório. A parte superior, então, é simplesmente:

image-5

No numerador, então, temos 14.

image-6

Para a parte de baixo da equação, precisamos fazer cálculos bem parecidos, exceto pelo fato de que o foco é apenas no x e no x em separado antes da multiplicação.

Vamos começar com

image-7

Lembre-se: 3, aqui, é a média de todos os valores de x. Esse número mudará, dependendo de seus dados específicos.

image-8

Passemos, agora, aos valores de y.

image-9

Tendo os números de que precisávamos, podemos colocá-los de volta em nossa equação e resolvê-la para nossa correlação.

image-10

Confirmamos com sucesso que obtivemos r=1.

Embora este tenha sido um exemplo simples, é sempre melhor usar exemplos simples para fins de demonstração. Isso mostra que nossa equação realmente funciona, o que será importante ao colocá-la em forma de código na próxima seção.

Código em Python e em JavaScript para o coeficiente de correlação de Pearson

A matemática, por vezes, pode ser muito abstrata. Vamos colocá-la na forma de código para que você possa experimentar com ela. Só para lembrar, segue abaixo a equação que transformaremos em código.

image-11

Depois de examinarmos a matemática envolvida acima e de ler o código abaixo, você deverá ter uma ideia mais clara de como tudo funciona combinado.

Abaixo temos a versão em Python da correlação de Pearson.

import math


def pearson(x, y):
    """
    Calcular o coeficiente de correlação de Pearson de arrays de mesmo tamanho.
    O numerador (numerator) é a soma da multiplicação de (x - x_avg) e de (y - y_avg).
    O denominador (denominator) é a raiz quadrada do produto entre a soma de (x - x_avg)^2 e a soma de (y - y_avg)^2.
    """
    n = len(x)
    idx = range(n)
    
    # Médias
    avg_x = sum(x) / n
    avg_y = sum(y) / n
    
    numerator = sum([(x[i] - avg_x)*(y[i] - avg_y) for i in idx])
    
    denom_x = sum([(x[i] - avg_x)**2 for i in idx])
    denom_y = sum([(y[i] - avg_y)**2 for i in idx])
    denominator = math.sqrt(denom_x * denom_y)
    
    return numerator / denominator
Coeficiente de correlação de Pearson programado em Python

Aqui vemos um exemplo do nosso código em Python em funcionamento. Podemos conferir nosso trabalho usando uma função de correlação de Pearson (documentação em inglês) do pacote SciPy.

import numpy as np
import scipy.stats

# Criando dados de teste
x = np.arange(5, 15)  # array([ 5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
y = np.array([24, 0, 58, 26, 82, 89, 90, 90, 36, 56])

# Usando um pacote para calcular o r de Pearson
# Obs: a variável p abaixo é o valor-p para o r de Pearson. Ele testa
#   a distância entre a correlação e o zero e se há uma tendência.
r, p = scipy.stats.pearsonr(x, y)
r  # 0.506862548805646

# Usando nossa própria função
pearson(x, y)  # 0.506862548805646

Abaixo temos a versão em JavaScript da correlação de Pearson.

function pearson(x, y) {
    let n = x.length;
    let idx = Array.from({length: n}, (x, i) => i);
    
    // Médias
    let avgX = x.reduce((a,b) => a + b) / n;
    let avgY = y.reduce((a,b) => a + b) / n;
    
    let numMult = idx.map(i => (x[i] - avg_x)*(y[i] - avg_y));
    let numerator = numMult.reduce((a, b) => a + b);
    
    let denomX = idx.map(i => Math.pow((x[i] - avgX), 2)).reduce((a, b) => a + b);
    let denomY = idx.map(i => Math.pow((y[i] - avgY), 2)).reduce((a, b) => a + b);
    let denominator = Math.sqrt(denomX * denomY);
    
    return numerator / denominator;
};
Coeficiente de correlação de Pearson programado em JavaScript

Aqui temos um exemplo do nosso código em JavaScript em funcionamento para conferir nosso trabalho.

x = Array.from({length: 10}, (x, i) => i + 5)
// Array(10) [ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 ]

y = [24, 0, 58, 26, 82, 89, 90, 90, 36, 56]

pearson(x, y)
// 0.506862548805646

Fique à vontade para traduzir a fórmula para Python ou para JavaScript para entender melhor como ela funciona.

Conclusão

As correlações são uma ferramenta útil e acessível para entender melhor a relação entre duas medidas numéricas quaisquer. Pode ser pensada como um começo para problemas preditivos ou apenas para entender melhor o seu negócio.

Valores de correlação, mais comumente usados como o r de Pearson, vão de −1 até +1 e podem ser categorizados em correlação negativa (−1<r<0), correlação positiva (0<r<1) e ausência de correlação (r=0).

Uma rápida conferida em um mundo maior de correlações

Há mais de uma maneira de calcular uma correlação. Aqui abordamos o caso em que ambas as variáveis mudam da mesma maneira. Há outros casos em que uma variável pode mudar em uma taxa diferente, mas ainda assim ter uma relação clara. Isso dá origem ao que se chama de relações não lineares (texto em inglês).

É importante notar que correlação não implica causa (texto em inglês). Se precisar de exemplos rápidos sobre o motivo, aqui estão (texto em inglês).

Abaixo temos uma lista com outros artigos que encontrei e que me ajudaram a entender melhor o coeficiente de correlação (textos em inglês).

Siga o autor no Twitter e confira o blog pessoal do autor, onde ele compartilha dicas e outros recursos úteis sobre programação, estatística e aprendizagem de máquina.

Agradecemos a leitura!