Como construímos nosso modelo de precificação — Keycash

Jorge Barros
building-soulKey
Published in
6 min readFeb 8, 2024

Introdução

A Keycash é uma fintech que fornece crédito com garantia imobiliária (CGI) para pessoas físicas de todo o Brasil. Portanto, para o nosso negócio, é essencial precificar imóveis em todo o país, pois o crédito a ser recebido será proporcional ao valor do imóvel. Sendo assim, foi necessário a construção de modelos preditivos de precificação utilizando técnicas de inteligência artificial com o objetivo ser mais assertivo nos valores dos imóveis em avaliação pelo nosso Comitê de Crédito. Conseguimos também automatizar parte da avaliação do imóvel, desonerando a esteira de crédito e deixando o processo mais ágil.

Com o objetivo de possuir um modelo preditivo robusto, realizamos todo o pipeline abaixo, de forma a construir uma base mais sólida relacionada ao problema de negócio e também a entender como nossos dados estão se comportando quando treinado os modelos.

  • Problema;
  • Análise Descritiva dos Dados;
  • Filtragem dos Dados;
  • Feature Selection;
  • Treinamento dos Modelos de Machine Learning;
  • Avaliando Modelos;

Problema

Inicialmente, observamos que imóveis possuem preços diferentes de acordo com sua região. Ou seja, imóveis localizados na Grande São Paulo possivelmente são mais valorizados do que imóveis em Recife. Sendo assim, observamos que há um determinado comportamento para cada região que precisa ser levada em consideração. Mas, o que fazer?

Photo by Jeremy Bishop on Unsplash

Pra que pudéssemos resolver esse problema rapidamente, optamos por segmentar nossos modelos por região. Desta forma, teríamos modelos atuando em todas as regiões do brasil (Norte, Sul, Sudeste, Nordeste e Centro-Oeste) possibilitando capturar o comportamento dos imóveis de determinada localidade. Além disso, observamos que o estado de São Paulo possui características específicas, sendo assim, separamos entre Grande São Paulo, Interior de São Paulo e cidade de São Paulo.

Assim, foi realizado a separação das seguintes regiões:

  • Região Nordeste;
  • Região Norte;
  • Região Sul
  • Região Sudeste (Minas Gerais, Espírito Santo e Rio de Janeiro);
  • Grande São Paulo e Interior de São Paulo;

Análise Descritiva de Dados

Photo by Jeremy Bishop on Unsplash

Aqui, buscamos entender as características das variáveis avaliadas e obter um maior entendimento do problema de negócio. Portanto, dedicamos a compreender qual a dimensão dos dados que estamos trabalhando, que tipos de atributos estão presentes na nossa base, além de informações estatísticas a respeito dessas variáveis.

A partir de tal análise, realizamos as modificações necessárias como mudança no tipo das variáveis, tratamento de outliers, tratamento de valores nulos e valores inconsistentes. Além disso, identificamos que apartamento e casa possuem características diferentes quanto a área, quantidade de quartos, preço etc. Portanto, além de criarmos modelos específicos para cada região, dividimos por tipo de imóvel.

Filtragem dos Dados

Após entendermos a distribuição dos dados e separá-los por região e tipo de imóvel, identificamos uma concentração maior de imóveis em um intervalo de área específico, por exemplo, entre 40 e 150 metros quadrados. Portanto, a partir destas observações, decidimos separar imóveis com áreas semelhantes, tornando nosso modelo ainda mais especialista.

Essa técnica é conhecida como Quantile Forest [1], onde realizamos a divisão da nossa base fazendo uso dos intervalos entre os quartis da área do imóvel para que posteriormente pudéssemos aplicar um algoritmo de aprendizado de máquina para cada intervalo.

Sendo assim, agora possuímos modelos por região, tipo de imóvel (casa ou apartamento) e por intervalo de área.

Feature Selection

Photo by Jeremy Bishop on Unsplash

Um dos principais problemas que encontramos na ciência de dados é a maldição da dimensionalidade [2]. Ou seja, conjuntos de dados com muitas variáveis, em sua grande maioria, possuem features que não impactam diretamente na variável resposta.

A seleção de features [3] é um dos principais conceitos do aprendizado de máquina, o qual afeta enormemente o desempenho do nosso modelo. Sendo assim, buscamos selecionar informações que contribuem com a variável que queremos prever. Caso possuíssemos variáveis irrelevantes para o nosso modelo, poderíamos diminuir o desempenho e fazer com que não houvesse aprendizado, mas sim um overfitting [4].

Mas, quais são os benefícios de escolher as variáveis mais relevantes para o nosso modelo?

  • Reduzir o Overfitting;
  • Melhora na desempenho do modelo;
  • Redução da dimensionalidade e tempo de treinamento;

Para realizar a seleção, utilizamos duas técnicas:

  • Importância das Árvores (Random Forest) [5];
  • Boruta [6];

É importante levar em consideração que faremos apenas uso dos resultados obtidos automaticamente pelos algoritmos, mas também a partir das análises que foram feitas anteriormente e do conhecimento a respeito do negócio. Como forma de obter uma granularidade maior em relação a localização do imóvel, decidimos utilizar também uma feature de cep, a qual podemos extrair informações a respeito da cidade, do bairro e até MESMO da rua.

Treinamento dos Modelos de Machine Learning

Photo by Jeremy Bishop on Unsplash

Com os nossos dados separados por região, por tipo de imóvel e por intervalo de área, partimos para etapa de treinamento dos modelos. Como buscamos prever o preço do imóvel, estamos lidando com um tipo de aprendizado supervisionado. Além disso, como nossa variável resposta é um número real, aplicaremos algoritmos de regressão.

Inicialmente para obtermos um baseline pensamos em aplicar uma regressão linear, entretanto, percebemos que estávamos lidando com um problema não linear e por isso decidimos utilizar algoritmos mais robustos baseados em árvores de decisão e ensembles. Conforme abaixo, os modelos treinados foram:

  • Regressão Linear;
  • Regressão Linear Regularizada (Lasso);
  • Random Forest;
  • Gradient Boosting;
  • LightGBM;
  • XGBoost Regressor;

Obs: É importante levar em consideração que a separação dos dados em treino e validação foi feita utilizando a técnica de Cross-Validation [7], a fim de reduzir algum tipo de viés inserido pelos dados.

Avaliando Modelos

A partir do treinamento dos modelos, comparamos os seus desempenhos de acordo com as seguintes métricas:

  • MAE (Mean Absolute Error);
  • MAPE (Mean Absolute Percentage Error);
  • MAdPE (Median Absolute Percentage Error);
  • RMSE (Root Mean Squared Error);

A principal métrica de avaliação utilizada foi o MAdPE devido à sua robustez na presença de outliers. Os modelos que obtiveram o melhor desempenho nesta métrica foram Random Forest e o LightGBM, entretanto, optamos pelo modelo LightGBM por possuir um menor tempo de processamento e menor espaço de armazenamento [8].

Com o LightGBM selecionado, foi realizado o Fine Tunning dos hiperparâmetros [9] de forma a melhorar o desempenho dos nossos modelos, além de encontrar parâmetros que auxiliem o nosso algoritmo a não decorar os dados (overfitting).

Conclusão

Portanto, após construir um modelo especialista por localidade do imóvel e tamanho da área, obtemos um ótimo resultado e uma melhoria significativa em relação ao seu tratamento de forma conjunta. Além disso, para cidades que possuem uma baixa quantidade de dados, buscamos imóveis semelhantes como forma de obter maior amostragem para a etapa de treinamento, resultando em um bom desempenho.

Caso tenham alguma observação ou dúvida, não deixem de comentar ou entrar em contato conosco! Nos vemos no próximo artigo :)

Caso tenha interesse em entender como foi feito o deploy dos modelos de forma automatizada, você pode encontra no seguinte link: https://medium.com/building-soulkey/como-utilizamos-o-sagemaker-para-fazer-o-deploy-automatizado-de-modelos-de-machine-leaning-f6df12b0e199

Referências

[1] https://medium.com/dataman-in-ai/a-tutorial-on-quantile-regression-quantile-random-forests-and-quantile-gbm-d3c651af7516

[2] https://towardsdatascience.com/principal-components-analysis-pca-fundamentals-benefits-insights-for-industry-2f03ad18c4d7?source=search_post---------4

[3] https://towardsdatascience.com/feature-selection-techniques-in-machine-learning-with-python-f24e7da3f36e

[4] https://towardsdatascience.com/overfitting-vs-underfitting-a-complete-example-d05dd7e19765?source=search_post---------0

[5] https://towardsdatascience.com/feature-selection-using-random-forest-26d7b747597f

[6] https://towardsdatascience.com/boruta-explained-the-way-i-wish-someone-explained-it-to-me-4489d70e154a

[7] https://towardsdatascience.com/train-test-split-and-cross-validation-in-python-80b61beca4b6?source=false---------0

[8] https://medium.com/building-soulkey/como-utilizamos-o-sagemaker-para-fazer-o-deploy-automatizado-de-modelos-de-machine-leaning-f6df12b0e199

[9] https://towardsdatascience.com/automated-machine-learning-hyperparameter-tuning-in-python-dfda59b72f8a

--

--