Regressão Linear e Consumo de Cerveja!

Luigi Pontello
luigipontello
Published in
10 min readMay 2, 2021

Primeiramente, o que é uma Regressão Linear?

Em estatística ou econometria, regressão linear é uma equação para se estimar a condicional (valor esperado) de uma variável y, dados os valores de algumas outras variáveis x.

Exemplo de regressão linear. A regressão, em geral, tem como objetivo tratar de um valor que não se consegue estimar inicialmente.

A regressão linear é chamada “linear” porque se considera que a relação da resposta às variáveis é uma função linear de alguns parâmetros. Os modelos de regressão que não são uma função linear dos parâmetros se chamam modelos de regressão não-linear. Sendo uma das primeiras formas de análise regressiva a ser estudada rigorosamente, é usada extensamente em aplicações práticas. Isso acontece porque modelos que dependem de forma linear dos seus parâmetros desconhecidos, são mais fáceis de ajustar que os modelos não-lineares aos seus parâmetros, e porque as propriedades estatísticas dos estimadores resultantes são fáceis de determinar.

Modelos de regressão linear são frequentemente ajustados usando a abordagem dos mínimos quadrados, mas que também pode ser montada de outras maneiras, tal como minimizando a “falta de ajuste” em alguma outra norma (com menos desvios absolutos de regressão), ou através da minimização de uma penalização da versão dos mínimos quadrados. Por outro lado, a abordagem de mínimos quadrados pode ser utilizado para ajustar a modelos que não são modelos lineares. Assim, embora os termos “mínimos quadrados” e “modelo linear” estejam intimamente ligados, eles não são sinônimos.

Nosso Dataset

Não é segredo para ninguém que a cerveja é uma das bebidas mais tradicionais e populares no Brasil.

Em 2015, o ano mais recente para o qual existem estatísticas disponíveis, os checos beberam 142,4 litros por pessoa. Isso é o equivalente a 250 litros — ou um a cada 35 horas. Mas, dado que é improvável que menores de idade contribuam para esse número, é seguro supor que o bebedor de cerveja médio provavelmente consome um pouco mais.

Os dados (amostra) foram coletados em São Paulo — Brasil, em uma área universitária, onde acontecem algumas festas com turmas de alunos de 18 a 28 anos (média). O conjunto de dados utilizado para esta atividade possui 7 atributos, sendo uma Meta, com período de um ano.

Procedimentos padrões

Irei realizar os procedimentos padrões, ou seja, importar as bibliotecas e checar nosso dataset, criando em conjunto uma biblioteca para os dados.

Matriz de Correlação

Entende-se coeficiente de correlação como uma medida de associação linear entre duas variáveis e o mesmo se situa entre -1 e +1. O que isso significa? Quanto mais próximo de -1 quer dizer que os dados não correlacionam entre si, ou seja, enquanto um aumenta, o outro diminui. Mais próximo de +1 quer dizer que ambos dados possuem uma correlação, ou seja, “crescem juntos” digamos assim.

Desta forma, irei plotar uma Matriz de Correlação para ver se consigo observar alguma informação destes dados.

Quando observo Consumo x temp_max e Consumo x Chuva ai sim é possível ver algo interessante. O aumento do consumo aparentemente esta relacionado a maior temperatura, e em contrapartida, em dias chuvosos o consumo tende a cair bastante.

Quanto ao fim de semana, noto que o consumo tende a aumentar o consumo.

Análise Visual

Neste momento irei realizar uma visualização dos dados. No primeiro momento irei plotar um gráfico de linhas no intuito de observar se possui algo notável dentro da relação Consumo x Dias do ano

Para melhorar a visualização, irei colocar a data do dia como index.

É possível observar que dos primeiros dias do ano até o meio do ano há uma queda, possivelmente relacionada com o início do Outono/Inverno, que são épocas onde a temperatura tende a diminuir e como vimos anteriormente, o aumento de consumo está relacionado ao aumento de temperatura. Com esse pensamento posso perceber também um aumento do consumo, do meio do ano em diante, ou seja, quando começa a se aproximar da Primavera/Verão, épocas onde a temperatura tende a ser maior.

Box Plot

Conforme explicado pelo blog Operdata, o boxplot ou diagrama de caixa é uma ferramenta gráfica que permite visualizar a distribuição e valores discrepantes (outliers) dos dados, fornecendo assim um meio complementar para desenvolver uma perspectiva sobre o caráter dos dados.

Para fazer a visualização do Box Plot iremos importar a biblioteca Searborn.

É possível observar que não tem nenhum outlier visível de fato neste dataset. A mediana que esta “quase” no perfeito, ou seja, esta um pouquinho abaixo do meio certinho do box, mas no geral é um dataset que segue um padrão.

Analisando duas variáveis

Neste momento irei plotar um boxplot para análisar duas variáveis distintas e suas relações com o consumo de cerveja.

Conforme é possível notar na visualização, o consumo de litros durante a semana, tende a cair bastante com relação ao final de semana. Podemos relacionar isso com dias úteis, ou seja, normalmente as pessoas estão focadas em trabalhar ou estudar durante a semana, e no final de semana tomar sua cervejinha.

É visível também que possuímos em dias da semana alguns picos de alto consumo. Como o Brasil é um país católico e possui muitos feriados, além dos feriados ja tradicionais, existe a possibilidade de algum feriado cair em dia útil e sendo assim pode-se justificar os grandes picos em alguns pontos no dias úteis.

Distribuição de Frequências

Em estatística, a distribuição de frequência é um arranjo de valores que uma ou mais variáveis tomam em uma amostra. Cada entrada na tabela contém a frequência ou a contagem de ocorrências de valores dentro de um grupo ou intervalo específico, e deste modo, a tabela resume a distribuição dos valores da amostra.

Uma distribuição perfeita teria como base um formato bem parecido com um sino.

Relação entre variaveis dependentes x variáveis explicativas

Plotando um scatterplot para visualizar as relações da variável coluna com as demans variáveis.

É possível ver que no primeiro momento, com o sns.paiplot(df1) será traçada a relação de todas as colunas, então logo abaixo iremos mostrar um outro método onde é possível plotar apenas com a variável consumo no eixo Y.

Agora apenas com a variável consumo.

É possível analisar que em relação a temp_min o consumo de cerveja segue uma linha, é possível perceber um certo padrão, porém quando comparo com temp_media e principalmente com temp_max ai sim vemos uma grande correlação.

Outra forma de visualizar estes dados é através do lmplot.

Feitos todos estes procedimentos de visualização, vou realizar a importação da biblioteca Sklearn para criarmos nosso modelo de Regressão Linear.

Para este momento precisamos separar os dados que serão utilizados como dados de treino e teste no nosso modelo. Basicamente iremos armazenar a variável dependente e as variáveis explicativas.

Irei utilizar agora o train_test_split. A função nos retorna 4 valores, então dessa forma devemos organizar de maneira que fique X_train, X_test, y_train, y_test, logo após informaremos onde estão os dados do X e do Y. O test_size é para saber o tamanho do modelo de teste que queremos, utilizaremos 30% para teste. Dessa forma, será pego de forma aleatória 70% dos valores do dataset e estes serão “treinados” pelo modelo. Os 30% que sobraram ficaram para test, uma forma de checarmos acurácia do modelo.

Vamos visualizar se realmente foi feito conforme esperado.

Vamos agora instanciar a classe da Regressão Linear no Python e o metrics para checarmos as métricas do nosso modelo.

Fazemos a importação do modelo LinearRegression da biblioteca do Sklearn e do Metrics para avaliarmos nosso modelo.

Com este modelo tivemos um score de 0.73

Neste caso, irei utilizar o modelo nos nossos dados de teste, ou seja, ver qual é o score do modelo com os dados reais que temos. Para isso criei o y_previsto.

Basicamente o que foi feito foi: passei para o modelo os dados do X_test para ele fazer uma previsão sobre eles, e o que farei agora é conferir o quão ele “acertou” usando as respostas verdadeiras, no caso os valores verdadeiros.

Agora que ja foi estimado o modelo, irei realizar previsões com o mesmo.

Criando um simples Simulador para o modelo

Irei obter agora o valor do Intercepto do modelo, o intercepto nada mais é que o efeito médio em Y, sem a utilização das demais variáveis do modelo. Para isso, utilizamos o modelo.intercept_.

Ou seja, zerando todas as demais variáveis, o consumo médio seria de 5951 litros de cerveja.

Coeficiente de regressão

Também conhecidos por “coeficientes parciais de regressão” ou “coeficientes parciais angulares”. É obtido por meio do valor médio de Y, com a variação de uma unidade de uma determinada variável X. No caso do nosso projeto, poderíamos utilizar temp_max, por exemplo. A ideia é estudar o efeito direto de uma varíavel em cima de Y.

O que quero agora é colocar todas as variáveis de forma organizada em um dataframe, para questão de melhor visualização e entendimento. Para isso checo primeiro a ordem das variáveis explicativas em em seguida crio uma lista com os nomes das variáveis do modelo.

Interpretação dos Coeficientes Estimados

Intercepto → Excluindo o efeito das variáveis explicativas (𝑋2=𝑋3=𝑋4=0X2=X3=X4=0) o efeito médio no Consumo de Cerveja seria de 5951,98 litros.

Temperatura Máxima (°C) → Mantendo-se os valores de 𝑋3X3 (Chuva) e 𝑋4X4 (Final de Semana) constantes, o acréscimo de 1°C na Temperatura Máxima gera uma variação média no Consumo de Cerveja de 684,74 litros.

Chuva (mm) → Mantendo-se os valores de 𝑋2X2 (Temperatura Máxima) e 𝑋4X4 (Final de Semana) constantes, o acréscimo de 1mm de Chuva gera uma variação média no Consumo de Cerveja de -60,78 litros.

Final de Semana (Sim/Não) → Mantendo-se os valores de 𝑋2X2 (Temperatura Máxima) e 𝑋3X3 (Chuva) constantes, o fato de o dia ser classificado como Final de Semana gera uma variação média no Consumo de Cerveja de 5401,08 litros.

Análises visuais

Após feita todo checagem em nosso modelo, vamos agora conferir através de análises visuais se precisamos nos preocupar com alguma variável. Se tem algo “muito anormal” ao qual devemos conferir.

Plotando gráfico de dispersão entre valor estimado e valor real.

Podemos observar que o modelo não está tão legal, pois no inicio até observamos os dados “próximos” porém ele vai se abrindo ao mesmo tempo que o valor dos dados aumenta.

Obter resíduo

Vamos plotar um gráfico de dispersão entre o valor estimado e o resíduo. Isso nada mais é que um método informal de verificação da hipótese de variância constante dos resíduos (homocedasticidade)

Comparação de Modelos

Normalmente os datasets utilizados por nós cientistas de dados possuem muitas variáveis, e se faz necessário fazer comparativos entre variáveis. Talvez uma variável específica me daria dados melhores do que a variável “temp_max” por exemplo. Então o que farei é meio que “refazer” o modelo com nova variável explicativa.

Assim finalizo todo o meu primeiro projeto de Machine Learning voltada a Regressão Linear! Foi feito com auxílio dos professores da Alura!

Código do Projeto

GitHub

Linkedin

--

--