Como funciona uma Regressão Linear?
Uma introdução sobre Regressão Linear
O objetivo desse artigo, é demonstrar os conceitos e uma simples demonstração do algoritmo em Python.
Antes de definirmos o que é uma Regressão Linear, vamos entender primeiro sobre o conceito de correlação.
Breve definição sobre Correlação
A correlação entre duas variáveis indica a que o valor da variável dependente y altera de acordo com a variável independente x, vamos seguir com um exemplo:
O peso (variável dependente y) de uma pessoa varia de acordo com a sua altura (variável independente x).
Assim podemos prever seu peso, quando uma pessoa chegar a uma determinada altura, digamos 1.39 m, seu peso será 30 Kg ou a altura de 1.62 m resulta seu peso em 64 Kg aproximadamente, por exemplo, conforme ilustrado na fig1.
Interpretando a Correlação
Neste caso, falaremos do coeficiente de correlação de Pearson. O coeficiente de correlação indica a força e direção do relacionamento linear entre duas variáveis contínuas.
Os valores da força de correlação podem variar de -1 à 1, no qual temos a seguinte definição:
- O valor de -1 indica a correlação mais forte negativa, ou seja, o relacionamento linear é perfeito e quanto sua direção, indica que quando o valor de uma variável aumenta a outra tende a diminuir (Fig2 - a).
- O valor de 0 indica que não existe relacionamento entre as variáveis e a direção é uma reta próximo de uma constante (Fig2 - b).
- O valor de 1 indica a correlação mais forte positiva, ou seja, também existe um relacionamento linear perfeito entre as variáveis, e a sua direção mostra que quando um valor aumenta o outro também tende a aumentar (Fig2 - c).
Só que nem sempre teremos uma correlação perfeita, então podemos analisar a força dessa correlação, com base em uma escala, aproximadamente conforme Fig3:
Após essa breve introdução sobre correlação, vamos iniciar o papo sobre Regressão.
Definição de Regressão
Iniciei o assunto sobre correlação porque de uma forma simplificada, a Regressão leva Correlação para um próximo nível.
Vamos pensar que ao invés de analisar a força de correlação entre as variáveis, poderíamos descrever a relação através de uma equação.
Podemos usar essa equação para descrever o quanto aumenta o peso em cada unidade adicionada à altura e prever pesos para alturas específicas.
Regressão Linear
Conforme definido acima, podemos dizer que Regressão Linear é simples e fácil de entender e é um dos algoritmos supervisionados de Machine Learning utilizado para análises preditivas.
Modelo Representativo
A Regressão Linear pode ser definida pela expressão abaixo:
y=b0 + b1.X
Onde:
- y: é a variável dependente, ou seja, o valor previsto.
- X: é a variável independente, ou seja, a variável preditora.
- b0: é o coeficiente que intercepta ou que corta o eixo y.
- b1: é o coeficiente que define a inclinação da reta.
O objetivo é encontrar as melhores estimativas para os coeficientes, que minimizam os erros na previsão de y a partir de X.
Podemos estimar b1 como:
b1 = soma(( Xi - média(x) ) * ( yi - média(y) )) / soma((xi - média(x))²)
Onde:
- média(): é o valor médio da variável do conjunto de dados.
- Xi e yi: se referem ao fato de que precisamos repetir esses cálculos em todos os valores em nosso conjunto de dados e i se refere ao i’ésimo valor de x ou y.
E b0 podemos estimar como:
b0 = média(y) - b1 * média(x)
Erro Padrão
O erro padrão sobre a linha de regressão é uma medida do valor médio que a equação superestimou ou subestimou (Fig4), assim podemos analisar o coeficiente de determinação (R²), quanto maior esse valor, menor o erro padrão, com isso as previsões serão mais precisas provavelmente.
Podemos acrescentar o erro padrão à equação e, de uma forma geral, ficaria da seguinte forma:
y = b0 + b1.X1 + e
Onde:
- e: é o erro padrão.
Coeficiente de Determinação R²
O valor do R² ou R-squared é uma medida estatística que nos mostra o quão próximos os dados estão ajustados à linha de regressão. É um valor de 0 à 1 que, quanto mais próximo de 1, melhor o ajuste e menor o erro associado.
O R² nos mostra a porcentagem da variação da variável resposta que é explicada por um modelo linear, podendo ser descrito por:
R² = Variação explicada / Variação total
- 0% indica que o modelo não explica nada da variabilidade dos dados de resposta ao redor de sua média.
- 100% indica que o modelo explica toda a variabilidade dos dados de resposta ao redor de sua média.
Implementando a Regressão Linear em Python
Para uma demonstração, farei passo-a-passo da construção de um modelo simples em python.
Vamos iniciar importando as bibliotecas, usaremos o numpy para criar alguns valores fictícios para demonstração, o matplotlib para criação do gráfico e o algoritmo Regressão Linear do Scikit-learn.
# importando as bibliotecas
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
Agora vou criar duas listas de valores representando X e y.
# definindo X e y
X = np.array([1.47, 1.5, 1.52, 1.55, 1.57, 1.63, 1.65, 1.68, 1.7, 1.73, 1.78, 1.8, 1.83]).reshape(-1, 1)y = np.array([52.21, 53.12, 57.2, 58.6, 58.57, 59.93, 62, 63.11, 65.4, 66.28, 68.1, 72.19, 80.24])
O modelo será instanciado e em seguida treinado com os valores criados.
# instanciando do modelo
model = LinearRegression()# treinando o modelo
model.fit(X, y)
Perfeito! Lembram-se dos coeficientes que compõe a equação da Regressão Linear, podemos extrair cada um deles agora.
# imprimindo o coeficiente que corta o eixo y
intercept = model.intercept_
print(f'Coeficiente de interceptação: {intercept:.4f}')# imprimindo o coeficiente de inclinação da reta
slope = model.coef_
print(f'Coeficiente de inclinação: {slope.round(4)}')
Bom, vamos demonstrar o resultado de duas formas e comparar:
- Resultado criando a equação: acima, os coeficientes foram colocados cada um em objeto, então podemos utiliza-los para montar a equação:
# ficaria assim:
print(f"y = {intercept} + {slope} * X")
# criando a equação e prevendo nos dados de X
y_pred_eq = intercept + slope * X
print(y_pred_eq.tolist())
- Resultado com o modelo criado: agora, o resultado com base no método predict.
# prevendo com o modelo nos dados de X
y_pred_model = model.predict(X)
print(y_pred_model)
As duas formas deram os mesmos resultados, com a diferença somente nas quantidade de casas decimais.
Então vamos plotar o scatterplot e a linha de regressão.
# definindo a área de plotagem
plt.figure(figsize=(8,6))# definindo o gráfico
plt.scatter(X, y, color='blue')
plt.plot(X, model.predict(X), color='red', linewidth=2)# definindo x e y
plt.xticks(np.arange(1.40, 1.95, 0.1))
plt.yticks([50, 60, 70, 80])# inserindo os rótulos dos eixos
plt.xlabel("Altura (m)")
plt.ylabel("Peso (kg)")# inserindo o título do gráfico
plt.title("Demonstração de Regressão Linear", fontweight="bold", size=15)# plotando o gráfico
plt.show()
Por fim, veremos o resultado do R² ou coeficiente de determinação.
# imprimindo o coeficiente de determinação
r_squared = model.score(X, y)
print(f'Coeficiente de Determinação: {r_squared}')
O modelo explica aproximadamente 0.9091 ou 91.91% da variável resposta.
Conclusão
A Regressão Linear é um modelo muito utilizado para prever a relação entre duas ou mais variáveis. Neste artigo o objetivo foi demonstrar os conceitos e como implementar o modelo em python de uma forma bem simples.
Podemos também, criar facilmente regressão com múltiplas variáveis e também utilizar outras métricas de avaliação em tópicos mais avançados.
Referências
Regression Analysis - An Intuitive Guide for Using and Interpreting Linear Models - Jim Frost, MS.
Machine Learning Mastery: https://machinelearningmastery.com/simple-linear-regression-tutorial-for-machine-learning/
Real Python: https://realpython.com/linear-regression-in-python/
Oper Data: https://operdata.com.br/blog/coeficientes-de-correlacao/
Quer saber mais sobre mim e conhecer meu portfolio de projetos, acesse: https://carlosbonfim.com/