Regressão Linear, uma introdução.

Gabriel Pires
7 min readJun 27, 2022

--

Já pensou em ter a possibilidade de prever valor de alguma coisa? Pois bem, esse método pode te ajudar.

A primeira técnica que me deparei quando comecei a estudar machine learning foi a regressão linear, que primeiramente, é um método estatístico. Portanto quero compartilhar com vocês o que pude aprender até então, bora lá?

Vou dividir esse post em algumas partes:

  1. Conceito: O que é regressão linear?
  2. Função de custo: Como encontramos a melhor reta?
  3. Implementação do modelo: Como fazer na prática?
  4. Avaliando resultados: Será que deu certo?
  5. Respondendo a pergunta principal.
  6. Próximos passos

Você trabalha em uma cervejaria artesanal. Seu gestor está preparando o estoque para as festas de final de ano e precisa comprar uma quantidade grande de levedura. Essas leveduras são compradas em um mercado atacado, e seu preço sofre variação por diferentes variáveis. Você, um assíduo curioso, pediu permissão ao seu chefe para avaliar os dados históricos dessas vendas. Você notou que as toneladas de levedura tinham uma relação próxima a linear com o preço e sugeriu: amanhã trarei pra você quanto 5 toneladas de levedura podem custar.

Como você vai resolver esse problema?

1. Conceito

A palavra chave de uma regressão linear já foi dita: relação. O método estatístico de regressão linear busca estimar um valor para a variável explicativa (dependente) através de uma variável explicativa (independente), mas além disso, também levamos em consideração uma constante e um coeficiente linear (comumente chamado de peso). Acho que aqui já começa a ficar mais claro, né? Estamos tentando adequar os dados em uma fórmula matemática, que provavelmente você já a viu:

Clássica fórmula matemática.

Quando vocês derem um google em ‘’regressão linear’’ vocês não encontraram essa fórmula descrevendo este método, mas encontraram essas duas fórmulas abaixo:

Regressão linear.

Onde:

  • h(x): valor predito
  • Theta(0): intercepto
  • Theta(n): coeficiente
Regressão Linear, forma vetorial
  • ThetaT: vetor de parâmetro (intercepto e coeficiente)
  • x: vetor de características
  • ThetaT.x: produto escalar dos vetores

Mas qual a diferença entre elas? Basicamente nenhuma, ambas podem trazer o resultado para uma regressão linear. Entretanto, a segunda fórmula, a forma vetorial, é a emprega nos modelos de machine learning, uma vez que estes modelos utilizam de matrizes para a realização dos cálculos propostos em seus algoritmos.

Sabemos então que iremos determinar uma equação que possa explicar nossos dados, correto? Vamos então olhar nossos dados.

Gráfico dos dados referentes ao preço atrelado à levedura.

Conseguimos perceber que os dados apresentam uma tendência, correto? Mas perceberam que é possível traçar mais de uma reta que possa representar esse conjunto de dados?

Múltiplas retas para representar o conjunto de dados.

Então, como iremos achar a melhor reta que representa estes dados?

2. Função de custo

A função de custo nos ajudará nesse problema. Em machine learning todos algoritmos tem uma função de custo, e para nós na regressão linear o intuito é achar o menor valor para ela. Podemos usar diferentes funções de custo, mas comumente é utilizado, para a regressão linear, o erro quadrático médio (MSE).

Erro quadrático médio (MSE).

Então o que o MSE fará é calcular o erro quadrático médio de cada valor real para cada valor predito, e a reta que descreverá melhor estes dados é aquela que apresentará o menor valor para a função de custo, em outras palavras, será a reta cujo os erros dos valores preditos frente aos valores reais serão menores.

Elucidando o cálculo do erro (resíduo).

E como minimizamos essa função de custo? Para isso, utilizamos o gradiente descendente. De maneira bem resumida, ele busca achar o mínimo global da função de custo. O gradiente descendente é um conceito bem extenso, então vou falar mais sobre ele no próximo post!

3. Implementação do modelo

Agora que você já está introduzido sobre o que a regressão linear trata, e como ela busca achar a melhor reta, vamos começar a fazer a parte legal!

Quero aqui três métodos para implementar a regressão linear:

  1. Utilizando a biblioteca Scikit-Learn.
  2. Utilizando a biblioteca Statsmodels;
  3. Utilizando a biblioteca Numpy;

1. Scikit-Learn

A regressão linear pelo scikit-learn é muito tranquila de ser implementada.

Se você não possui o pacote instalado, por favor instale-o.

Devemos então importar a biblioteca e então criar nosso modelo. Simples e rápido.

Com este método, obtivemos os seguintes resultados para o intercepto (modelo_linear.intercept_)e coeficiente(modelo_linear.coef_):

Intercepto do LinearRegression: 4.11 
Coeficiente do LinearRegression: 2.94

2. Statsmodels

Se você não possui o pacote instalado, por favor instale-o.

A regressão pelo statsmodel também é bem fácil de ser implementada. Farei um post especial para explicar todo o conteúdo presente no sumário, pois teremos que tratar sobre outros assuntos.

Iremos então implementar o modelo OLS (mínimos quadrados ordinários) que é um método estatístico de regressão linear, mas diferente um pouco do modelo de regressão linear utilizado pela biblioteca scikit-learn.

Mas para este conteúdo, analisem os valores de const e x1. Eles são similares ao modelos do scikit-learn?

Sumário do método de regressão linear.
Const: 4.1066
x1: 2.9442

O valor para “Const” representa o intercepto, ao passo que “x1” representa o coeficiente. Comparando este resultado com o resultado obtido pelo modelo do scikit-learn, observamos uma grande proximidade.

3. Numpy

Lembra daquela fórmula vetorial para a regressão linear que mostrei anteriormente? É a partir dela que conseguiremos entender este último método, que utiliza a álgebra linear explicitamente.

Eu não vou entrar no mérito matemático desta implementação, que não é o intuito deste post, mas com certeza farei brevemente.

Bom, conseguimos encontrar o valor que minimiza nossa função de custo utilizando uma outra função (e também vetorial), a equação normal.

Equação normal.
O melhor intercepto, pelo NumPy é: 4.11
O melhor teta, pelo NumPy é: 2.94

Podemos notar que o resultado obtido para o modelo usando o Numpy é igual ao modelo do scikit-learn. Como mencionei no começo desse post, algoritmos de machine learning realizam cálculos de matrizes e é exatamente isso que acabamos de realizar.

Acho que vocês podem ter ficado com duas possíveis dúvidas:

  • Porque foi adicionado uma constante no método OLS?

Adicionar uma constante no método OLS previne que o método seja enviesado, trazendo resultados mais plausíveis.

  • Porque foi adicionado uma coluna com “uns” no método usando Numpy?

A necessidade desta adição se diz respeito a multiplicação das matrizes presentes.

Matriz para a regressão linear

4. Avaliando os resultados

Com o modelo pronto, podemos então visualizar os dados frente a reta que melhor os descrevem.

Gráfico dos dados e a melhor reta.

Para avaliar o modelo, podemos realizar o cálculo do MSE (nossa função de custo) para todo o conjunto de dados e avalia-lo: quanto mais próximos de zero, melhor será, uma vez que seus erros estarão minimizados.

Temos como resultado então:

MSE para o modelo linear: 0.89

Outra técnica que podemos utilizar para avaliar o modelo é o R² Score, também conhecido como coeficiente de determinação (quadrado do coeficiente de correlação de Pearson). O R² pode variar entre 0 e 1 e seu objetivo é medir quantidade da variância dos dados que é explicada pelo modelo linear. Assim, quanto maior o R², mais explicativo é o modelo linear, ou seja, melhor ele se ajusta à amostra.

O resultado para o R² Score é:

R² para o modelo linear: 0.78

Será que é possível melhorar esse resultado?

5. Resolvendo o problema principal

Com os métodos aprendidos até aqui, você já é capaz de obter o resultado que seu gestor gostaria de saber: o valor para 5 toneladas de levedura. Prever um valor após implementado o modelo é simples.

O resultado será de:

O valor para 5 toneladas será: R$ 18.39 x10³

6. Próximos passos

Com isso, já temos uma ideia principal de como funciona e de como implementar um modelo de regressão linear, mas há mais algumas coisas que ainda podemos buscar entender:

  • Como ele encontra o menor valor para a função de custo?
  • Esse é o único método de regressão?
  • Como funciona esses vetores e coeficientes?
  • O que significa todos aqueles dados do sumário?
  • Consigo fazer uma regressão multilinear?

--

--