Olá, boas-vindas!
Sou Rodrigo e serei seu instrutor neste curso de Data Science, em que aprenderemos uma técnica de machine learning conhecida por Regressão Linear. Trata-se de um modelo de aprendizagem do tipo supervisionado.
Criamos um notebook que nos guiará como um roteiro, e nós iremos preenchendo as células ao longo do curso. Aprenderemos a fazer análises preliminares dos dados, análises gráficas, utilizaremos técnicas de data sciente como separação de dados e conjunto de treino e de teste. Criaremos, ainda, algumas métricas para comparar os modelos. Em seguida, iremos interpretar os resultados dos modelos e realizar previsões a partir dos dados que obtemos.
Espero que você aproveite bastante!
Vamos lá?
Daremos inicio ao nosso projeto utilizando a regressão linear. O objetivo desta primeira aula é nos familiarizarmos com o dataset que utilizaremos ao longo do curso. É importante que conheçamos a estrutura de pastas que criamos, e você deve fazer o download de todas elas que estão disponíveis no tópico "Projeto Inicial do Treinamento".
O documento do projeto foi armazenado em "C:\Usuários\Alura\data-science". Em "data-science" encontraremos "reg-linear", que armazena as patas criadas do projeto. Na pasta "Dados" teremos o dataset Consumo_cerveja.csv
. Ainda em "data-science" teremos a pasta "projeto", em que encontraremos o notebook Regressão Linear.ipynb
.
Na pasta "data-science", teremos o arquivo "StartJupyter". Clicaremos sobre ele para iniciar a ferramenta. O Jupyter já será executado na pasta que estamos trabalhando. Por fim, clicaremos sobre "Projeto" e abriremos o notebook Regressão Linear
.
Ele estará inteiramente documentado, apenas as células vazias serão preenchidas, e já contém todas as aulas que desenvolveremos ao longo do treinamento. Começaremos importando as bibliotecas básicas.
Caso você já tenha feito o curso de Pandas, encontrará algumas similaridades.
Importaremos matplotlib.pyplot
com o "apelido" as plt
. Depois, inseriremos a function %matplotlib inline
. Alguns sistemas precisam dessa configuração para que o Jupyter consiga imprimir os gráficos.
Em seguida, importaremos o Pandas e o Numpy.
import matplotlib.pyplot as plt
%matplotlib inline
import pandas as pd
import numpy as np
No notebook, temos um espaço para bibliotecas opcionais. Acessaremos o portal Kaggle, onde encontraremos uma grande quantidade de datasets voltados para data science.
Para este projeto faremos algo bem simples, com o tema consumo de cerveja. Teremos uma breve descrição do arquivo, e também uma distribuição de frequência de cada variável.
O objetivo do nosso projeto é estimar um modelo de machine usando a técnica de regressão linear, e averiguar os impactos das variações disponibilizadas no dataset, sobre o consumo de cerveja. Tentaremos estimar o consumo utilizando a regressão utilizando as variáveis apresentadas. Vamos conhecer cada uma delas:
data
= dia de coleta.temp_media
= média da temperatura ambiente registradatemp_min
= temperatura mínima ambiente registradatemp_max
= temperatura máxima ambiente registradachuva
= Precipitação(mm)fds
= Final de Semana (1= Sim, 0=Não)consumo
= Consumo de Cerveja (litros)Temos uma questão: os dados do Kaggle que iremos utilizar faz uso da ,
ao invés do .
: por exemplo 27,3
.
De volta ao notebook Regressão Linear
, na célula de "Leitura dos dados", importaremos o arquivo o seguinte arquivo - lembrando de especificar o separador:
dados = pd.read_csv('../Dados/Consumo_cerveja.csv', sep=';')
Assim feito, basta escrever dados
na próxima célula para gerarmos a visualização da tabela, composta pelas variáveis que já conhecemos e seus respectivos valores.
dados
data | temp_media | temp_min | temp_max | chuva | fds | consumo | |
---|---|---|---|---|---|---|---|
0 | 01/01/2015 | 27.30 | 23.9 | 32.5 | 0.0 | 0 | 25461 |
1 | 02/01/2015 | 27.02 | 24.5 | 33.5 | 0.0 | 0 | 28972 |
2 | 03/01/2015 | 24.82 | 22.4 | 29.9 | 0.0 | 1 | 30814 |
3 | 04/01/2015 | 23.98 | 21.5 | 28.6 | 1.2 | 1 | 29799 |
4 | 05/01/2015 | 23.82 | 21.0 | 28.3 | 0.0 | 0 | 28900 |
5 | 06/01/2015 | 23.78 | 20.1 | 30.5 | 12.2 | 0 | 28218 |
6 | 07/01/2015 | 24.00 | 19.5 | 33.7 | 0.0 | 0 | 29732 |
7 | 08/01/2015 | 24.90 | 19.5 | 32.8 | 48.6 | 0 | 28397 |
8 | 09/01/2015 | 28.20 | 21.9 | 34.0 | 4.4 | 0 | 24886 |
9 | 10/01/2015 | 26.76 | 22.1 | 34.2 | 0.0 | 1 | 37937 |
10 | 11/01/2015 | 27.62 | 22.2 | 34.8 | 3.4 | 1 | 36254 |
11 | 12/01/2015 | 25.96 | 21.4 | 35.4 | 0.0 | 0 | 25743 |
12 | 13/01/2015 | 25.52 | 21.2 | 34.8 | 0.8 | 0 | 26990 |
13 | 14/01/2015 | 25.96 | 21.3 | 34.0 | 1.6 | 0 | 31825 |
14 | 15/01/2015 | 25.86 | 21.5 | 32.8 | 3.0 | 0 | 25724 |
15 | 16/01/2015 | 26.50 | 22.3 | 32.7 | 2.0 | 0 | 29938 |
16 | 17/01/2015 | 28.86 | 22.0 | 35.8 | 0.0 | 1 | 37690 |
17 | 18/01/2015 | 28.26 | 23.4 | 35.6 | 0.0 | 1 | 30524 |
18 | 19/01/2015 | 28.22 | 22.7 | 36.5 | 3.7 | 0 | 29265 |
19 | 20/01/2015 | 27.68 | 23.3 | 35.6 | 0.6 | 0 | 35127 |
20 | 21/01/2015 | 25.32 | 22.7 | 30.9 | 0.0 | 0 | 29130 |
21 | 22/01/2015 | 21.74 | 19.2 | 26.1 | 31.0 | 0 | 25795 |
22 | 23/01/2015 | 21.04 | 18.5 | 26.1 | 3.6 | 0 | 21784 |
23 | 24/01/2015 | 23.12 | 19.0 | 29.4 | 13.0 | 1 | 28348 |
24 | 25/01/2015 | 24.40 | 18.1 | 30.0 | 0.0 | 1 | 31088 |
25 | 26/01/2015 | 22.40 | 18.9 | 28.7 | 20.8 | 0 | 21520 |
26 | 27/01/2015 | 23.60 | 20.5 | 28.7 | 1.2 | 0 | 29972 |
27 | 28/01/2015 | 25.68 | 20.1 | 29.9 | 4.9 | 0 | 22603 |
28 | 29/01/2015 | 25.00 | 21.5 | 29.2 | 0.0 | 0 | 22696 |
29 | 30/01/2015 | 22.80 | 20.9 | 26.9 | 0.0 | 0 | 26845 |
... | ... | ... | ... | ... | ... | ... | ... |
335 | 02/12/2015 | 22.10 | 18.2 | 29.4 | 0.0 | 0 | 30471 |
336 | 03/12/2015 | 22.44 | 20.2 | 26.1 | 0.0 | 0 | 28405 |
337 | 04/12/2015 | 22.76 | 19.0 | 29.1 | 0.0 | 0 | 29513 |
338 | 05/12/2015 | 24.80 | 19.5 | 30.6 | 0.1 | 1 | 32451 |
339 | 06/12/2015 | 23.12 | 20.6 | 28.0 | 0.1 | 1 | 32780 |
340 | 07/12/2015 | 20.04 | 18.0 | 23.9 | 47.8 | 0 | 23375 |
341 | 08/12/2015 | 21.70 | 18.0 | 28.0 | 0.0 | 0 | 27713 |
342 | 09/12/2015 | 23.96 | 19.6 | 27.9 | 0.0 | 0 | 27137 |
343 | 10/12/2015 | 24.00 | 22.2 | 27.7 | 0.0 | 0 | 22933 |
344 | 11/12/2015 | 24.04 | 20.7 | 30.3 | 0.0 | 0 | 30740 |
345 | 12/12/2015 | 23.92 | 20.6 | 30.8 | 0.0 | 1 | 29579 |
346 | 13/12/2015 | 24.54 | 19.3 | 31.0 | 12.2 | 1 | 29188 |
347 | 14/12/2015 | 26.28 | 21.1 | 32.5 | 2.0 | 0 | 28131 |
348 | 15/12/2015 | 25.66 | 20.6 | 32.8 | 4.0 | 0 | 28617 |
349 | 16/12/2015 | 22.04 | 20.7 | 24.8 | 1.5 | 0 | 21062 |
350 | 17/12/2015 | 23.32 | 18.9 | 28.7 | 0.0 | 0 | 24337 |
351 | 18/12/2015 | 26.42 | 19.6 | 33.5 | 0.1 | 0 | 27042 |
352 | 19/12/2015 | 23.74 | 19.8 | 31.3 | 1.3 | 1 | 32536 |
353 | 20/12/2015 | 22.84 | 19.6 | 29.0 | 8.4 | 1 | 30127 |
354 | 21/12/2015 | 23.12 | 19.6 | 29.1 | 27.2 | 0 | 24834 |
355 | 22/12/2015 | 24.60 | 19.6 | 32.4 | 43.0 | 0 | 26828 |
356 | 23/12/2015 | 27.46 | 22.1 | 32.4 | 3.0 | 0 | 26468 |
357 | 24/12/2015 | 24.72 | 20.5 | 31.5 | 3.4 | 0 | 31572 |
358 | 25/12/2015 | 23.58 | 17.8 | 31.0 | 39.0 | 0 | 26308 |
359 | 26/12/2015 | 23.34 | 17.8 | 29.8 | 94.8 | 1 | 21955 |
360 | 27/12/2015 | 24.00 | 21.1 | 28.2 | 13.6 | 1 | 32307 |
361 | 28/12/2015 | 22.64 | 21.1 | 26.7 | 0.0 | 0 | 26095 |
362 | 29/12/2015 | 21.68 | 20.3 | 24.1 | 10.3 | 0 | 22309 |
363 | 30/12/2015 | 21.38 | 19.3 | 22.4 | 6.3 | 0 | 20467 |
364 | 31/12/2015 | 24.76 | 20.2 | 29.0 | 0.0 | 0 | 22446 |
Verificaremos o tamanho do nosso dataset ao escrever: dados.shape
. Teremos como resultado (365,7)
, isto é, uma dupla numérica, em que o primeiro valor corresponde ao número de linhas de registro no dataset e o segundo ao número de variáveis.
O objetivo dessa aula é estudar a relação entre as variáveis do dataset que estamos trabalhando, além de investigar os comportamentos das variáveis com algumas estatísticas descritivas. Lembrando que caso você tenha finalizado o dataset, ele deve ser executado novamente para que os dados sejam inseridos na memória novamente.
Criaremos inicialmente uma tabela de estatísticas descritivas dos dados do dataset. Escreveremos: dados.describe()
.
E teremos como resposta algumas estatísticas de cada uma das variáveis que estão do dataset: média aritmética, desvio padrão, valor mínimo, 25% ou primeiro quartil dos dados, 50%, 75% e valor máximo.
Iremos arredondar os dados da tabela utilizando o método round()
:
dados.describe().round(2)
temp_media | temp_min | temp_max | chuva | fds | consumo | |
---|---|---|---|---|---|---|
count | 365.00 | 365.00 | 365.00 | 365.00 | 365.00 | 365.00 |
mean | 21.23 | 17.46 | 26.61 | 5.20 | 0.28 | 25401.37 |
std | 3.18 | 2.83 | 4.32 | 12.42 | 0.45 | 4399.14 |
min | 12.90 | 10.60 | 14.50 | 0.00 | 0.00 | 14343.00 |
25% | 19.02 | 15.30 | 23.80 | 0.00 | 0.00 | 22008.00 |
50% | 21.38 | 17.90 | 26.90 | 0.00 | 0.00 | 24867.00 |
75% | 23.28 | 19.60 | 29.40 | 3.20 | 1.00 | 28631.00 |
max | 28.86 | 24.50 | 36.50 | 94.80 | 1.00 | 37937.00 |
Note que em consumo
- a variável que estamos interessados em estimar - possui como valor mínimo 14343.00
, e o valor máximo está em torno de 37937.00
. Vejamos que se trata de um limite razoável, então não temos motivo para acreditar que haja algum problema neste ponto. O mesmo ocorre para outras variáveis do dataset.
Feita essa análise mínima, podemos passar para a matriz de correlação, em que buscaremos identificar as relações lineares entre variáveis. Trata-se de uma medida de associação linear que está entre -1 e 1. Quando uma variável está "subindo", outra está "caindo", este é um exemplo de associação negativa. Já a positiva seria justamente o contrário, uma variável "sobe" e a outra acompanha essa ascendência.
Para realizar essa medição, usaremos a matriz. Para tanto, escreveremos:
dados.corr().round(4)
temp_media | temp_min | temp_max | chuva | fds | consumo | |
---|---|---|---|---|---|---|
temp_media | 1.0000 | 0.8628 | 0.9225 | 0.0244 | -0.0508 | 0.5746 |
temp_min | 0.8628 | 1.0000 | 0.6729 | 0.0986 | -0.0595 | 0.3925 |
temp_max | 0.9225 | 0.6729 | 1.0000 | -0.0493 | -0.0403 | 0.6427 |
chuva | 0.0244 | 0.0986 | -0.0493 | 1.0000 | 0.0016 | -0.1938 |
fds | -0.0508 | -0.0595 | -0.0403 | 0.0016 | 1.0000 | 0.5060 |
consumo | 0.5746 | 0.3925 | 0.6427 | -0.1938 | 0.5060 | 1.0000 |
Veremos que a correlação com de consumo com a temperatura média é de 0.5746
, já para temperatura mínima teremos 0.3925
. Já em temperatura máxima temos uma correlação alta de 0.6427
. Esses valores revelam que a variável possui uma relação linear boa com o consumo.
Ao observarmos a variável chuva
, temos o valor negativo -0.1938
. O que podemos interpretar deste dado?
Quando chove, a tendência é que o consumo de cerveja diminua, por isso o valor negativo. Já em no caso de fds
, verificamos que o consumo se eleva.
Em processo de regressão linear, teremos uma variável dependente (Y), e as variáveis auxiliares que explicarão esse consumo (X). No caso que acabamos de analisar, as variáveis temp_max
e chuva
podem ser classificadas como X.
Um motivo para não inserirmos as outras variáveis no eixo X é porque, ao observarmos a temperatura média e a temperatura mínima, temos uma variação altíssima entre as duas, e isso não é bom para o modelo.
O curso Regressão linear: testando relações e prevendo resultados possui 171 minutos de vídeos, em um total de 68 atividades. Gostou? Conheça nossos outros cursos de Estatística em Data Science, ou leia nossos artigos de Data Science.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.