Alura > Cursos de Data Science > Cursos de Machine Learning > Conteúdos de Machine Learning > Primeiras aulas do curso Data Science: transformando variáveis para uma Regressão Linear

Data Science: transformando variáveis para uma Regressão Linear

Análises preliminares - Apresentação

Você já construiu um modelo de aprendizado de máquina que não funcionou tão bem quanto esperava?

Quer aprender a implementar um modelo com ajustes de dados para melhorar sua eficácia?

Então venha e mergulhe agora nesse tema!

Meu nome é Afonso Rios, sou instrutor de dados aqui na Alura.

Audiodescrição: Alfonso se declara como um homem de pele morena, cabelos e olhos castanhos escuros. Possui uma barba curta, usa uma roupa preta com o símbolo da Escola de Dados. Ao fundo, há uma parede com iluminação azul e objetos que remetem tanto à Alura quanto ao futebol.

Neste curso, vamos trabalhar como cientistas de dados em uma imobiliária e precisamos precificar o valor de venda de casas, auxiliando as pessoas vendedoras da imobiliária a negociar essas propriedades com preços mais justos, com potenciais clientes.

Objetivo: precificar casas para auxiliar pessoas vendedoras

No modelo que vamos construir conseguiremos trazer diferentes características das casas.

Por exemplo, as características da área, da distância do metrô e o fato de existir o segundo andar, etc.

Vamos conseguir aplicar o modelo para precificar essa casa com essas características. Temos, por exemplo, uma casa no valor de R$ 1.245.551,34 com o nosso modelo sendo aplicado a ela.

Para isso, vamos utilizar o Collab, explorando uma base de casas que já foram vendidas e suas características.

Nesta base, vamos identificar:

Além disso, vamos fazer previsões com mais casas utilizando esse modelo.

Tudo isso para chegar a um modelo que seja rápido, que deixe as pessoas vendedoras menos dependentes de processos manuais para chegar à valorização de uma casa. E claro, sendo um processo eficiente, agregando muito valor à imobiliária.

Pré-requisitos

Para que possa aproveitar esse curso da melhor maneira, é muito importante já ter um conhecimento básico em manipulação e visualização de dados com as bibliotecas do Python, como Pandas, NumPy, Matplotlib e Seaborn. E conhecer um pouco de uma das bibliotecas mais utilizadas na área de Machine Learning: Scikit-Learn.

Com as expectativas alinhadas, vamos começar o nosso projeto?

Análises preliminares - Conhecendo os dados

Você é uma pessoa cientista de dados que trabalha com imobiliária, visando criar modelos que estimem preços de casas de acordo com algumas características, auxiliando o time de vendas a negociá-los com os clientes.

Para isso, vamos focar em um projeto que consiga tanto avaliar a partir da precisão e trazer preços mais justos para essas casas, como também fazer um processo mais rápido e menos manual para que o time de vendas consiga utilizá-lo.

Claro que para construir esse modelo, vamos precisar trabalhar com uma base de dados.

Essa base de dados que recebemos está no formato CSV, com algumas das características e casas que já foram vendidas de acordo com essas características que vamos possuir.

Qual é o primeiro processo que vamos precisar fazer para criar esse modelo?

Quais são essas características e como elas podem influenciar no preço de uma casa?

Para responder a essas perguntas, vamos utilizar um notebook bem estruturado, com todo o passo a passo para a criação do nosso modelo.

Esse notebook já está nas nossas atividades, assim como a base de dados que vamos utilizar durante o curso.

No início do notebook, deixamos uma breve explicação sobre o que seria esse nosso projeto e os objetivos que temos na criação desse modelo, e também explicações sobre a base de dados que vamos trabalhar.

Problema de negócio:

Você, como cientista de dados de uma imobiliária, precisa criar um modelo que consiga estimar os preços de diferentes casas para que o time de vendedores e vendedoras possam negociá-las com potenciais clientes.

Para isso, vamos observar as principais características de casas que já foram vendidas de acordo com a base de dados que recebemos, analisar estes dados e construir um modelo de aprendizado de máquina (ML), averiguando sua eficácia.

Objetivo

Estimar preços dos imóveis de acordo com diversas características das propriedades, como área e localização. Para este propósito, vamos:

Identificar quais fatores contribuem para a precificação dos imóveis; Averiguar a influência das características no preço do imóvel; Diferenciar quando precisamos transformar ou não as variáveis para uma melhor resposta do modelo; Verificar a relação entre as variáveis explicativas e a variável resposta; Criar um modelo de regressão linear de múltiplas variáveis; Fazer previsões para uma ou mais casas. Base de dados:

Vamos utilizar a base precos_casa.csv adaptada de uma base bem conhecida no Kaggle chamada House Prices.

Esses dados serão lidos a partir do repositório compartilhado pelo GitHub.

Como processo inicial para realmente trabalhar com nossos dados, precisamos importar uma biblioteca que faça tanto a parte da manipulação quanto da análise exploratória dos dados.Essa biblioteca é o Pandas. Vamos executar o seguinte código:

import pandas as pd

Em seguida, vamos utilizar o processo que vai fazer a leitura desse nosso arquivo CSV.

dados = pd.read_csv('https://raw.githubusercontent.com/alura-cursos/data-science-regressao-linear/main/dados/precos_casas.csv')

Esse link que vamos colocar vem de um repositório do GitHub, o repositório do nosso próprio curso, que está disponível nas atividades do curso. Esse link vai trazer a nossa base do CSV.

Lendo agora a nossa variável dados, vamos ver as primeiras linhas dele.

dados.head()
valorarea_primeiro_andarexiste_segundo_andararea_quintaldist_metrodist_parque
0104250079.52123.861.639
1907500117.24035.171.538
2111750085.47125.641.275

Estamos exibindo as primeiras cinco linhas com os dados e as suas respectivas colunas. Aqui na nossa base de dados, o que possuímos? Possuímos o valor, que seria o valor da casa que foi vendida, a área do primeiro andar, que seria a área do primeiro andar dessa casa vendida em metros quadrados. Existe o segundo andar, que é uma variável binária que representa 1 para uma casa que tenha segundo andar e 0 para uma casa que não possua segundo andar.

A área do quintal também vai estar em metros quadrados, que será a área do quintal da casa. E a dist_metro e dist_parque é a distância em quilômetros tanto do metrô quanto do parque.

Então, temos essas seis variáveis, sendo 1 o valor, que é o que queremos prever, e o restante das cinco seriam as variáveis que são as características dessa casa.

Entendendo o formato dos valores

Já conseguimos ter uma noção da quantidade de colunas que temos para os nossos dados. Mas quantas casas temos aqui nessa base? Com quantos valores estamos trabalhando aqui?

Para saber isso, vamos vir aqui embaixo, na próxima linha de código, e vou colocar dados.shape. dados.shape vai ver a forma, ele vai trazer uma tupla, ele vai trazer a quantidade de linhas e a quantidade de colunas que temos.

dados.shape

(1460, 6)

Temos 1.460 casas em nossa base de dados, e 6 colunas (uma para valor e cinco para características).

Então, já temos uma noção de quantos dados possuímos.

Agora, vamos ver se realmente esses valores que dissemos que estavam em metros quadrados e que estavam em quilômetros, se são realmente números e não textos?

Quando vamos trabalhar com modelos, é importante que os dados estejam no formato que precisamos para alimentá-los. E os modelos que vamos trabalhar aqui, eles precisam que os dados estejam em formato ou inteiro ou float.

Então, vamos ler agora como é que estão esses dados. E também vamos verificar se existem dados nulos ou não, para saber se precisamos tratá-los.

dados.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1460 entries, 0 to 1459
Data columns (total 6 columns):
 #   Column            	Non-Null Count  Dtype  
---  ------            	--------------  -----  
 0   valor             	1460 non-null   int64  
 1   area_primeiro_andar   1460 non-null   float64
 2   existe_segundo_andar  1460 non-null   int64  
 3   area_quintal      	1460 non-null   float64
 4   dist_metro        	1460 non-null   float64
 5   dist_parque       	1460 non-null   float64
dtypes: float64(4), int64(2)
memory usage: 68.6 KB

Com dados.info() temos a representação da quantidade de linhas, da quantidade de colunas que temos, mas também temos todas as colunas bem descritas, trazendo tanto a parte das contagens de dados não nulos, quanto os tipos que temos para esses nossos dados.

Note que tem 1.460 não nulos para todos, ou seja, todos os dados estão perfeitos. Não precisamos tratar nenhum dos dados aqui, pois não temos dados nulos nem faltantes.

Além disso, sobre os tipos, temos para valor, valores inteiros, e para esse segundo andar, que falamos que era aquela variável binária, também valores inteiros.

A área e as distâncias que temos dentro do nosso projetos estão todas no formato float, que é o formato ideal para trabalhar, até porque temos em casas decimais essas variáveis.

Essa base que temos é baseada numa base que tem lá no Kaggle (plataforma de competição de ciência de dados), que é chamada "house prices". Nós só alteramos, modificando algumas colunas, alteramos também a questão das medidas, que estavam em pés quadrados para metros quadrados, que estavam valores em dólares para real, coisas desse formato, para que nos concentremos aqui apenas na parte da criação do nosso modelo e entendimento da relação entre as variáveis.

Tanto que nem vamos precisar tratar esses dados, pois eles já estão tratados previamente.

Já conseguimos observar quais são as características da base de dados.

Que tal agora começar a entender a relação entre elas. Vamos fazer isso no próximo vídeo!

Análises preliminares - Entendendo a relação dos dados

Agora, precisamos entender como as características se relacionam com o preço da casa.

Vamos entender como criar essa relação entre as características e o preço. Vamos utilizar algumas ferramentas para estabelecer essa relação, o que vai facilitar para uma precificação mais justa da casa para as pessoas vendedoras passarem para a clientela.

Mas qual seria essa relação e como fazemos?

Será que, por exemplo, a área do primeiro andar consegue afetar positivamente o preço de uma casa? E qual seria a intensidade dessa relação?

Para entender a relação entre os dados dos valores da venda das casas com as suas características, vamos utilizar uma técnica estatística chamada de correlação.

Entendendo a relação dos dados

Para entender a relação dos dados entre o valor de venda dos imóveis do dataset e suas características vamos utilizar a Correlação.

Correlação é uma medida estatística que varia numa escala de -1 a 1, indicando a relação e a dependência entre duas variáveis. Existem três tipos principais de correlação:

  1. Correlação Positiva: quando uma variável aumenta, a outra tende a aumentar.
  2. Correlação Nula: não há relação linear entre as variáveis.
  3. Correlação Negativa: quando uma variável aumenta, a outra tende a diminuir.

Essa medida não só define a direção, como também, a intensidade da relação.

Basicamente, a correlação é um número que varia entre -1 e 1, e esse número dita o quão forte e qual a direção dessa relação entre duas variáveis.

Podemos ter relação que seja positiva, negativa ou neutra.

Vamos conseguir ver se o aumento de uma coisa pode tender ao aumento de outra, ou a diminuição, por exemplo, de um valor vai diminuir o valor da casa ou aumentar o valor da casa. Essas relações vamos entender por meio desse número.

Para conseguirmos entender como seria essa relação da correlação, vamos construir a correlação com os nossos dados.

Então, no nosso notebook, vamos executar:

corr = dados.corr().round(3)
corr

Colocamos para 3 casas decimais porque a correlação é um cálculo que pode vir com muitas casas decimais. Vamos passar isso tudo por uma variável, o que achamos legal é termos essa variável para o processo mais à frente.

Então, o que aconteceu? Apareceu uma tabela muito similar a um dataframe (quadro de dados), só que aqui chamamos isso de uma matriz.

Por que chamamos de uma matriz de correlação? Porque a matriz de correlação vai ter tanto nas suas linhas quanto nas colunas, temos as colunas e as linhas, os mesmos valores. Então, vamos ter os nomes de cada uma das variáveis em uma coluna e o nome das mesmas variáveis nas suas linhas. E a relação entre elas, esse pareamento, vai ter o número que vai estar dentro dessa matriz.

Ou seja, se temos uma correlação perfeita, que seria o mesmo valor, o valor com valor, por exemplo, vamos ter valor 1. Então, isso significa correlação perfeita.

Ou seja, se pegarmos a da área de primeiro andar e a área de primeiro andar, tanto a linha quanto a coluna, e fizermos essa relação, é 1.

Por que existe uma tendência muito forte em que quando aumentamos a área de primeiro andar, aumentamos a área de primeiro andar. Parece estranho, por quê? Porque a variável é a mesma. Então, sempre quando a variável é a mesma, essa correlação vai ser perfeita. E aí, vamos ter esses valores oscilando entre -1 e 1.

Vamos ter, por exemplo, a área de primeiro andar com valor 0,6, que seria uma correlação positiva, moderada. Ou podemos ter também correlação negativa aqui, em metro e valor. Então, conseguimos ter essa noção.

Um ponto legal que podemos ver, por exemplo, a área de primeiro andar com a área do quintal, tem uma correlação muito boa, 0,8. Então, isso aqui está mais próximo de 1. Então, aqui é uma correlação positiva forte. Então, temos essas situações.

Mas não vamos utilizar essa matriz por inteiro.

Porque estamos concentrados em criar um modelo para precificação de casas. Então, o que interessa para nós é a relação das variáveis com o valor. Então, vamos puxar apenas a coluna de valor. Então, para isso, vamos fazer o seguinte:

# Correlação do preço de venda
corr["valor"].to_frame()
Valor
valor1.000
area_primeiro_andar0.606
existe_segundo_andar0.138
area_quintal0.614
dist_metro-0.644
dist_parque-0.071

Então, temos aqui formatação. São realmente os dados que mais importam para criarmos as nossas relações.

Vamos entender cada uma delas aqui? Então, vamos ter a questão de relações positivas, fortes ou fracas, como por exemplo, o valor e a área de primeiro andar, que já falamos previamente, temos uma variação positiva moderada para forte, que é 0,6.

Em contrapartida, no exemplo de segundo andar, temos uma relação que é positiva, porque o sinal ainda é positivo, mas ela é fraca, porque é 0,138.

Ou seja, talvez a área de primeiro andar seja mais importante para o valor do que a área de segundo andar, se for considerado, claro, separadamente.

Já outra forma também de visualizarmos, não só agora a intensidade, mas também a direção, temos, por exemplo, a área de primeiro andar, que era positiva, e a área da distância do metrô, que é negativa, temos uma relação de menos 0,644. O que seria isso?

Seria dizer que quanto mais distante do metrô, a tendência é que a casa seja mais barata. E quanto maior a área, a tendência é que o preço seja mais alto. Note como a relação é inversa de um para o outro.

Então, essa variável de correlação traz bem explicado essa questão de quais variáveis influenciam ou não no preço da casa, e como é a intensidade da relação.

Próximo passo

Já vimos algumas relações utilizando a correlação, e uma delas que nos chamou bastante atenção é que a área do primeiro andar é moderadamente positiva em relação ao valor.

Será que tem alguma forma de analisarmos com mais detalhes essa relação? Vamos descobrir no próximo vídeo.

Sobre o curso Data Science: transformando variáveis para uma Regressão Linear

O curso Data Science: transformando variáveis para uma Regressão Linear possui 140 minutos de vídeos, em um total de 53 atividades. Gostou? Conheça nossos outros cursos de Machine Learning 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:

Aprenda Machine Learning acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas