Recomendação de Preços para Residências

Você também pode gostar

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 19

Recomendação de Preços para Residências https://www.3dimensoes.com.br/post/sistemas-de-recomenda%C3...

1 of 19 07/11/2022 15:45
Recomendação de Preços para Residências https://www.3dimensoes.com.br/post/sistemas-de-recomenda%C3...

Michel

Recomendação de Preços para Residências


Atualizado: 8 de mai. de 2018

Usando Machine Learning é possível determinar preços de imóveis, carros usados,


e uma infinidade de produtos, baseando-se não em duas ou três variáveis, como por exemplo, a marca o
ano e a quilometragem de um automóvel, mas dezenas ou centenas de variáveis, como estado da pintura,
pneus, acessórios, localização, cor, número de proprietários, personalizações, etc.
Neste artigo apresentamos um modelo de Machine Learning para avaliação de imóveis baseada em cerca
de 80 variáveis, já usado de maneira extensiva no mercado imobiliário. Os dados são fornecidos por uma
companhia imobiliária americana e serviram para uma competição entre Cientistas de Dados.

Competições em Machine Learning


Como na maioria das ciências aplicadas, a melhor maneira de aprender Machine Learning é trabalhar com
problemas reais e tentar resolvê-los.
Existem alguns sites de Competiçoes em Machine Learning, dos quais o mais famoso é o Kaggle,
recentemente adquirido pelo Google.
O Kaggle é uma plataforma em que cientistas de dados competem para produzir os melhores modelos
para problemas reais enviados por enviados por empresas. Essa abordagem de crowdsourcing se baseia
no fato de que existem inúmeras estratégias que podem ser aplicadas a qualquer tarefa de modelagem
preditiva e é impossível saber de antemão qual delas será mais eficaz.
O Kaggle já realizou mais de 200 competições distribuindo prêmios para os vencedores que chegam a 1
milhão de dólares. As competições resultaram em muitos projetos de sucesso, incluindo o avanço do
estado da arte na pesquisa do HIV, identificação de imagens e previsão de tráfego.
Através do Kaggle algoritmos de grande sucesso como o Xgboost e o Keras são amplamente utilizados e
as soluções comentadas.
Em maio de 2016, o Kaggle tinha mais de 536.000 usuários registrados, ou Kagglers em 194 países. É a
maior e mais diversificada comunidade de cientistas de dados do mundo. Uma posição de destaque em
competições representa grande prestígio na comunidade e no mercado.
Na minha opinião a maior virtude do Kaggle é patrocinar a troca de ideias e soluções para um dado
problema ou um algoritmo entre os cientistas de dados. É claro que os prêmios são tentadores, mas
vencer, ou chegar próximo, geralmente requer além do profundo conhecimento em Machine Learning, a
disponibilidade de grande potência computacional e o trabalho em equipes.

Descrição da Competição

2 of 19 07/11/2022 15:45
Recomendação de Preços para Residências https://www.3dimensoes.com.br/post/sistemas-de-recomenda%C3...

Quando um comprador descreve a casa dos seus sonhos, ele provavelmente não começará com a altura
do teto do garagem ou o tipo de telhado. O conjunto de dados desta competição prova que existem muitos
outros fatores que influenciam as negociações de preço.
Com 79 variáveis independentes descrevendo (quase) todos os aspectos de casas residenciais em Ames,
Iowa, esta competição desafia você a prever o preço final de cada casa.
Se você tem alguma experiência com R ou Python e noções básicas de aprendizado de máquina, esta é
uma competição perfeita para estudantes de ciência de dados que concluíram um curso on-line de
aprendizado de máquina e desejam expandir seu conjunto de habilidades.
A competição está em https://www.kaggle.com/c/house-prices-advanced-regression-techniques.

Como desenvolvi a solução


Neste trabalho utilizei os seguintes recursos técnicos:

• Imputação de valores ausentes (missing values)


• Transformação de algumas variáveis numéricas que parecem ser realmente categóricas
• Codificação de algumas variáveis categóricas que podem conter informações em sua ordenação
(label encoding)

• Transformação Box Cox para as variáveis numéricas com elevado skew


• Geração de variáveis dummy para as variáveis categóricas
• Modelos Gradient Boost Regressor, XGBoost do Sklearn e LightGBM da Microsoft
• Ensemble

Meu resultado final está nos 4% melhores de um total de 11.387 concorrentes.

Pré-requisisos
Este artigo não é um tutorial de Machine Learning nem do Python.
Como pré-requisitos você deve saber o que é uma Análise Exploratória de Dados, programação em
Python, ScikitLearn e ter os conceitos centrais de algoritmos de Machine Leaning.

Dados do problema

3 of 19 07/11/2022 15:45
Recomendação de Preços para Residências https://www.3dimensoes.com.br/post/sistemas-de-recomenda%C3...

Uma variável target e 79 atributos das casas

4 of 19 07/11/2022 15:45
Recomendação de Preços para Residências https://www.3dimensoes.com.br/post/sistemas-de-recomenda%C3...

5 of 19 07/11/2022 15:45
Recomendação de Preços para Residências https://www.3dimensoes.com.br/post/sistemas-de-recomenda%C3...

O Fluxo do processo

Coleta de Dados

6 of 19 07/11/2022 15:45
Recomendação de Preços para Residências https://www.3dimensoes.com.br/post/sistemas-de-recomenda%C3...

A documentação informa a existência de outliers. Vamos explorar esses valores atípicos no train set.
Podemos ver na parte inferior direita dois outliers com GrLivArea extremamente grande e de um baixo
preço.

Esses valores são oultliers. Portanto, podemos com segurança, excluí-los.

7 of 19 07/11/2022 15:45
Recomendação de Preços para Residências https://www.3dimensoes.com.br/post/sistemas-de-recomenda%C3...

Análise da variável target

8 of 19 07/11/2022 15:45
Recomendação de Preços para Residências https://www.3dimensoes.com.br/post/sistemas-de-recomenda%C3...

A variável target é bem distorcida. Precisamos transformar essa variável e torná-la mais normalmente
distribuída. Para isso usamos a função np.log1p

9 of 19 07/11/2022 15:45
Recomendação de Preços para Residências https://www.3dimensoes.com.br/post/sistemas-de-recomenda%C3...

A inclinação (skew) parece agora corrigida pois os dados estão mais normalmente distribuídos.

10 of 19 07/11/2022 15:45
Recomendação de Preços para Residências https://www.3dimensoes.com.br/post/sistemas-de-recomenda%C3...

Correlações

À primeira vista, há dois quadrados coloridos vermelhos que chamam a atenção. O primeiro deles refere-
se às variáveis 'TotalBsmtSF' e '1stFlrSF', e o segundo refere-se às variáveis 'GarageX'. Ambos os casos
mostram significativa correlação entre essas variáveis. Na verdade, esta correlação é tão forte que pode

11 of 19 07/11/2022 15:45
Recomendação de Preços para Residências https://www.3dimensoes.com.br/post/sistemas-de-recomenda%C3...

mostram significativa correlação entre essas variáveis. Na verdade, esta correlação é tão forte que pode
indicar uma situação de multicolinearidade. Se pensarmos sobre essas variáveis, podemos concluir que
elas dão quase a mesma informação.

Gráficos entre variáveis correlacionadas com 'SalePrice'

Features Engineering
Atributos desnecessários
Temos muitos atributos.Vamos usar modelos de regressão linear regularizados para classificá-los por
importância.

Usamos a regularização tanto L1(Lasso). Também definiremos uma função que retorna o erro de validação
cruzada rmse, para que possamos avaliar nossos modelos.

L1(Lasso)

O parâmetro de ajuste principal para o modelo Lasso é alfa - um parâmetro de regularização que mede a
flexibilidade do nosso modelo. Quanto maior a regularização, menos propenso nosso modelo será para
overfiting, entretanto ele perde a flexibilidade e pode não capturar todos os sinais presentes nos dados.

12 of 19 07/11/2022 15:45
Recomendação de Preços para Residências https://www.3dimensoes.com.br/post/sistemas-de-recomenda%C3...

O valor do erro parece razoável, e vemos que os coeficientes mais importantes são:

Missing Values
Concatenamos (juntamos) os sets de treinamento e teste, e verificamos se existem missing values.

13 of 19 07/11/2022 15:45
Recomendação de Preços para Residências https://www.3dimensoes.com.br/post/sistemas-de-recomenda%C3...

Substitução de missing values (valores faltantes)


Os missing values são preenchidos de acordo com os critérios abaixo:

MiscFeature : NA ="no misc feature"


Alley : NA = "no alley access"
Fence : NA ="no fence"
FireplaceQu : NA = "no fireplace"
LotFrontage : Supondo que casas na mesma rua terão áreas semelhante a outras casas em sua
vizinhança, podemos preencher os valores ausentes, com a mediana de LotFrontage do bairro.
GarageType, GarageFinish, GarageQual e GarageCond : Substituímos por missing values por ‘None’
GarageYrBlt, GarageArea e GarageCars : Substituímos por missing values por 0
BsmtFinSF1, BsmtFinSF2, BsmtUnfSF, TotalBsmtSF, BsmtFullBath e BsmtHalfBath : valores
ausentes são provávemente zero por nãio ter bsmt.
BsmtQual, BsmtCond, BsmtExposure, BsmtFinType1 e BsmtFinType2 : Para todos estes atributos
categóricos, NaN significa que não há nenhum bsmt.
MasVnrArea e MasVnrType : NA provavelmente significa não haver este atributo (alvenaria) para estas
casas. Colocamos 0 para a área e ‘None’ para o tipo.
MSZoning (The general zoning classification) : 'RL' é, de longe, o valor mais comum. Então podemos
preencher valores ausentes com 'RL'
Utilities : Para este atributo categórico todos os registros são "AllPub", com exceção de um "NoSeWa" e 2
NA’s. Podemos então com remove-lo segurança.
Functional : NA = typical
Electrical : Só tem um NA. Substituímos pelo valor mais comum 'SBrkr‘.
KitchenQual: Só tem um NA. Substituímos pelo valor mais comum 'TA.
Exterior1st e Exterior2nd : Ambos só tem um NA. Substituímos pelo valor mais comum.
SaleType: Substituímos Os NA’s pelo valor mais comum ‘WD’.
"WD"
MSSubClass: NA provavelmente significa não haver este atributo para estas casas. Colocamos ‘None’.

Isso é efetuado usando o código abaixo:

14 of 19 07/11/2022 15:45
Recomendação de Preços para Residências https://www.3dimensoes.com.br/post/sistemas-de-recomenda%C3...

Transformando algumas variáveis numéricas que são realmente categóricas

Label Encoding para algumas variáveis categóricas que podem conter informações em sua ordenação

15 of 19 07/11/2022 15:45
Recomendação de Preços para Residências https://www.3dimensoes.com.br/post/sistemas-de-recomenda%C3...

Adicionamos um atributo que é a soma de todas as áreas construídas da casa.

Transformação Box Cox


Para reduzir o skew das variáveis contínuas usamos a função boxcox1p de scipy que calcula a
transformação de Box Cox de 1 + x.
Observe que essa configuração é equivalente λ = 0 na transformação log1p usada acima para a variável
target.

Gerando variáveis dummy para os atributos categóricos

16 of 19 07/11/2022 15:45
Recomendação de Preços para Residências https://www.3dimensoes.com.br/post/sistemas-de-recomenda%C3...

Importando as bibliotecas do sklearn

Definindo uma estratégia de validação


Usamos a função cross_val_score do Sklearn

Usamos três modelos:


GBRegressor, XGBoost e LightGBM e obtemos o score para cada um deles.

17 of 19 07/11/2022 15:45
Recomendação de Preços para Residências https://www.3dimensoes.com.br/post/sistemas-de-recomenda%C3...

Finalmente combinamos os três modelos.

18 of 19 07/11/2022 15:45
Recomendação de Preços para Residências https://www.3dimensoes.com.br/post/sistemas-de-recomenda%C3...

Ainda como um último passo, fiz algumas simulações no Excel procurando combinar os três modelos de
forma ponderada e ir reduzindo o desvio padrão da combinação. O modelo final obteve um rmse de
0,11519 que ficou em 193º num total de 5.273 competidores.

19 of 19 07/11/2022 15:45

Você também pode gostar