Como o Aprendizado de Máquina pode ser aplicado no mercado imobiliário

Luis Eduardo
Neuronio BR
Published in
6 min readAug 6, 2019

Nota: uma versão em inglês deste artigo está disponível em “How Machine Learning can be applied to the real state market”.

Photo by Breno Assis on Unsplash

Se você já comprou ou vendeu alguma coisa, é provável que tenha se deparado com uma questão: Qual o valor desse produto?

Para responder essa pergunta, provavelmente, deve ter feito uma pesquisa pra tentar identificar a faixa de preço que o produto se encontra. Outra coisa comum, é a consulta de especialistas, que normalmente são contratados para avaliarem as condições do produto e dar um valor para ele.

No caso de imóveis não é diferente, seja tentando vender ou comprar um imóvel, você acabará pesquisando sobre o mercado e seus valores. É bem possível que contrate um agente imobiliário para ajudar na pesquisa. Isso não é uma tarefa fácil, pode acabar dando trabalho e consumindo muito tempo.

Assim, uma ferramenta que facilite a obtenção do valor de um imóvel com determinadas características de forma automática e instantânea, pode auxiliar na decisão sobre compra e venda de imóveis.

Dessa forma, uma possível aplicação para Aprendizado de Máquina no mercado imobiliário é a predição dos preços dos imóveis, e o objetivo deste artigo é a criação de um modelo para realizar essa função.

Vamos dar início ao processo.

O conjunto de dados e pré-processamento

Para obter um melhor resultado, a gente pode realizar algumas ações que vão auxiliar o algoritmo em identificar os pontos mais importantes dentro do conjunto de dados. Essas ações consistem em modificar o conjunto de dados, ou seja, pré-processar os dados, de forma que possa melhorar a qualidade do conjunto antes de mandar para o modelo.

Para este exemplo, iremos utilizar um conjunto de dados de uma competição no Kaggle que pode ser acessado aqui.

Esse conjunto de dados contém diversas informações sobre a casa, como, a quantidade de quartos, se possui ou não garagem, ano de construção do imóvel, etc. Além disso, contém também o preço de venda das casas, esse que será nosso alvo na criação do modelo.

Por se tratar de uma competição, podemos utilizá-la para verificar a precisão que iremos atingir com o nosso resultado.

Depois de pegar os dados, podemos visualizar como que está o conjunto, se está balanceado ou completo por exemplo. Para fazer isso será utilizada a biblioteca pandas-profiling. Essa biblioteca fornece funções que permitem obter uma visão geral dos dados, criando um html com todas as variáveis disponíveis no conjunto de dados.

Print do resultado da fornecido por pandas-profiling

Você pode verificar o resultado aqui, hospedado com a ferramenta Surge.

Com o resultado do pandas-profiling podemos verificar que algumas variáveis possuem valores faltantes e que outras não estão bem equilibradas.

O primeiro passo do pré-processamento que iremos aplicar, é o preenchimento de variáveis com valores faltantes. Algumas variáveis que estão com valores faltantes serão preenchidas com a opção None, ou 0, as demais que não aceitam esses valores serão preenchidas com os valores mais comuns de cada variável.

Feature Engineering

Uma etapa importante do pré-processamento é chamada de Feature Engineering, que consiste em analisar as features (as colunas, também chamadas de variáveis), realizando modificações nas features, criando novas features ou removendo features que podem atrapalhar a identificação de padrões.

Depois que preenchemos os valores faltantes podemos aplicar feature engineering ao conjunto de dados. Vamos iniciar com a criação de novas features:

Criando novas features a partir de outras
  • HasAlleyAccess é uma nova variável para representar se a casa possui acesso por um beco, essa variável é criada da variável Alley que representa o tipo do beco, e possui uma distribuição bem desbalanceada;
  • TotalPorchSF é uma variável criada para representar o tamanho da varanda da casa, independente do tipo;
  • HasMasVnr é uma nova variável criada para substituir a variável MasVnrArea, que possui muitas entradas com 0 e as demais com valores diversos;
  • Has2ndFlr é uma nova variável criada para substituir a variável 2ndFlrSF pois essa também possui uma grande quantidade de entradas com valor 0;
  • TotalHouseSF é uma variável criada para representar o tamanho total da casa.

Depois de criar algumas variáveis, vamos agora modificar variáveis numéricas e categóricas. Ainda com o resultado do pandas-profiling, podemos verificar a distribuição das variáveis numéricas. Assim, podemos aplicar uma técnica de dividir os valores numéricos em intervalos e marcar esses intervalos com categorias.

As variáveis numéricas que iremos modificar são LotFrontage, LotArea, TotalBsmtSF e 1stFlrSF. Para fazer isso utilizamos a função cut(), disponível no módulo pandas.

Exemplo de transformação de numérico para categórico

Neste exemplo, bins são os intervalos que a variável será dividida e labels são os nomes das categorias que serão adicionados.

Em seguida, nós alteramos as variáveis categóricas, incluindo as que foram criadas, para que fiquem todas como variáveis numéricas.

Em algumas variáveis podemos simplesmente mapear as categorias em números, pois possuem uma certa ordenação entre os valores. Já as variáveis que não possuem o comportamento ordinal serão transformadas utilizando a técnica One-Hot encoding, que, basicamente, cria uma nova variável para cada uma das categorias de uma variável. E para facilidade desse processo será utilizado a função get_dummies(), disponível no módulo pandas.

Podemos remover algumas variáveis também, variáveis que possuem um alto nível de correlação entre si, que estão muito desbalanceadas ou que não serão mais utilizadas. Assim, as variáveis que serão removidas são: Utilities, GarageYrBlt, 2ndFlrSF, MasVnrArea, PoolQC, Alley, OpenPorchSF, EnclosedPorch, 3SsnPorch, ScreenPorch, Street, MiscFeature, PoolArea, RoofMatl, LowQualFinSF, Heating, MiscVal, WoodDeckSF.

Caso tenha mais interesse em Feature Engineering, ou ficou com duvidas, veja essa série de artigos que podem ajudar a entender melhor esse processo.

O modelo

Após finalizar o pré-processamento do conjunto de dados, podemos dar início ao treinamento do modelo. Nós temos varias opções de modelos para utilizar, o escolhido para este exemplo foi o XGBoost.

Como parâmetro usamos o RMSLE (Root Mean Squared Logarithmic Error) para avaliar a evolução do treino do nosso modelo em 150 rodadas. A métrica rmsle é útil quando não queremos penalizar uma diferença muito grande, no nosso caso temos que prever valores altos, preços de casas, assim, podemos nos deparar com diferenças de ordem elevada. Além do rsmle temos outras métricas possíveis, se você quiser ler mais sobre métricas veja esse artigo.

Durante o treino do modelo, podemos acompanhar a evolução em cada uma das rodadas, uma parte pode ser conferida a seguir:

Resultado do treinamento do modelo

Ao finalizar o treino, podemos utilizar o modelo para prever os preços do conjunto de testes:

Exemplo do resultado da predição de preços

Assim, podemos utilizar esse modelo para estimar o valor de uma casa que possui as mesmas variáveis do conjunto de dados original.

Por fim, iremos utilizar a competição do Kaggle para conferir a precisão do nosso modelo.

Resultado da competição do Kaggle

Conclusão

Uma aplicação possível para Aprendizado de Máquina no mercado imobiliário, como foi apresentada neste artigo, é a previsão do valor de casas. A solução para predição de preços de casas pode ser utilizada para desenvolvimento de uma ferramenta, que pode requisitar as características do imóvel e retornar o valor aproximado.

Assim, uma pessoa que tem a intenção de vender ou comprar um imóvel, pode ter mais facilidade ao realizar a pesquisa de preço através da ferramenta, podendo ter o preço aproximado da casa.

--

--