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:
Mais de 1500 cursos completamente atualizados, com novos lançamentos todas as semanas, emProgramação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.
Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.
Emitimos certificados para atestar que você finalizou nossos cursos e formações.
Mais de 1500 cursos completamente atualizados, com novos lançamentos todas as semanas, emProgramação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.
Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.
Emitimos certificados para atestar que você finalizou nossos cursos e formações.
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com Luri até 100 mensagens por semana.
Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.
Acesso completo
durante 1 ano
Estude 24h/dia
onde e quando quiser
Novos cursos
todas as semanas