Indo além de previsões pontuais de preços de imóveis

Giovana Silva
Loft
Published in
10 min readMar 25, 2021
Como chegar em um intervalo de preços de imóveis com Machine Learning?

Aqui na Loft, um dos maiores e mais antigos desafios que temos é o de construir modelos de precificação de apartamentos (AVMs). Nosso time de Data & Decision Science está continuamente trabalhando na construção, melhoria e manutenção desses modelos, visando torná-los cada vez mais precisos, robustos e justificáveis.

Existem algumas variáveis intrínsecas a um imóvel que podem ajudar na tarefa de precificação — como a área útil, sua localização, entre outros. No entanto, além dessas características pouco mutáveis de um apartamento, há uma série de outros fatores que muitas vezes não conseguimos ter um controle tão direto — seja por ser uma informação difícil de coletar ou por ser uma variável pouco tangível ou objetiva — mas que podem influenciar no preço de um apartamento.

Por exemplo, as condições de negociação importam muito: a pessoa vendedora pode querer liquidar mais rápido ou talvez receber o valor do imóvel à vista, influenciando no preço. Também, a pessoa compradora pode valorizar algum atributo do imóvel acima da média do mercado, dando mais valor para uma localização próxima da família ou um andar baixo por conta de familiares que não gostam de usar o elevador (true story!). Outro exemplo é o estado de conservação em que o imóvel se encontra. Podemos usar fotos, formulários preenchidos pela pessoa vendedora e visitas feitas por nossos parceiros para obter essa informação, tornando ela tão detalhada quanto a gente queira, mas ao mesmo tempo aumentando a subjetividade envolvida.

Por isso, além de previsões pontuais de preço, frequentemente nos interessa obter uma medida de incerteza em relação a elas. Saber o intervalo de preço ao invés de apenas a previsão pontual pode nos ajudar significativamente a tomar melhores decisões de negócio: entregamos um intervalo de preços onde pessoas vendedoras e compradoras podem exercer o seu julgamento acerca do valor do imóvel, levando em consideração esses fatores subjetivos ou não observados. Ainda, o intervalo determina uma “zona segura” de liquidez: dentro dele é onde ocorre a maior parte das transações e onde o risco de o imóvel “encalhar” (ou fazer um negócio ruim) é menor.

Nesse post, vamos mostrar algumas formas de ir além de previsões pontuais e como podemos obter distribuições a partir de modelos de Machine Learning tradicionais.

Para isso, preparamos uma base de dados genérica baseada em anúncios, em que cada linha contém um imóvel com os respectivos valores de variáveis relacionadas a ele, além do preço em que foi anunciado.

Distribuições de preços e quantis

Seja Y uma variável aleatória contínua cuja função de distribuição acumulada é dada por:

Então, um quantil é a probabilidade q tal que:

Se q é um valor entre 0 e 1, q*100 é o percentil p da distribuição. Em outras palavras, podemos dizer que p% da distribuição apresenta valores menores ou iguais a y_q. Por exemplo, se queremos saber qual é o quantil 0.5 (ou percentil 50) de uma distribuição de probabilidade, estamos procurando pelo valor de sua mediana, isto é, o valor que separa a metade maior e a menor da distribuição.

Em uma distribuição normal padrão, 80% dos dados apresentam-se sob a área laranja. Observamos que 80% dos valores são menores do que aproximadamente 0.9. Então, o quantil 0.8 ou percentil 80 da distribuição é aproximadamente 0.9

Se a função de distribuição acumulada F é inversível, podemos encontrar o valor y_q ao inverter F. Ou seja,

Em particular, a mediana da distribuição é

Quando falamos em ir além de previsões pontuais, estamos pensando em construir modelos que entreguem quantis ou percentis ao invés de apenas um valor único.

Métodos para prever distribuições

Para ilustrar alguns desses modelos que entregam distribuições, separamos três exemplos da nossa base de apartamentos em bairros diferentes.

  • Uma cobertura localizada no Jardim América com 220m², 3 quartos e 1 vaga de garagem. A sua estimativa pontual anunciada é de R$2.606.950,00;
  • Um apartamento na Bela Vista com 35m², 1 quarto e sem vagas de garagem, avaliado em R$362.532,00;
  • Um apartamento no Ipiranga com 66m², 2 quartos e 1 vaga de garagem; seu preço está em R$691.612,00.

Para termos um cheiro da dinâmica de preço nesses bairros e do comportamento dos apartamentos, trouxemos um comparativo entre o preço do metro quadrado desses imóveis e os valores médio e mediano do preço por metro de seus respectivos bairros, calculados nas amostras disponíveis na base. Podemos observar que o apartamento do Ipiranga apresenta um preço por metro bem acima dos valores da região, enquanto o da Bela Vista está bem próximo da média e o do Jardim América tem o valor do metro mais baixo do que os preços do bairro.

A linha verde representa o valor médio do metro quadrado da região; a azul, o valor mediano; a vermelha, a estimativa pontual do m² do imóvel. Atrás, em laranja, temos a distribuição de preços do metro quadrado de cada bairro

1. Regressão linear quantílica

Se Y é a variável aleatória dependente que representa os possíveis valores alvo do modelo (no nosso caso, o preço de um apartamento) e X um vetor aleatório representando as variáveis independentes (como área, número de quartos, etc), em uma regressão linear simples estima-se a média de Y|X=x. Ou seja, estamos estimando a média de uma variável Y condicionada pelos valores de X. Quando, ao invés da média, estamos interessados em estimar a mediana ou algum outro quantil da variável dependente é onde a regressão quantílica se faz muito útil.

Para estimar os quantis precisamos fazer algumas modificações na função de perda do modelo de regressão linear simples — que é o erro quadrático médio (MSE). Para calcular a mediana, basta trocar a objetiva do MSE para o erro médio absoluto (MAE). De forma generalizada, a regressão quantílica faz uso da função de perda quantílica, que nada mais é do que uma extensão do erro médio absoluto — quando o quantil é 0.5, a função de perda é exatamente o MAE.

Função de perda quantílica, onde γ é o quantil de interesse

A ideia por trás da perda quantílica é baseada em dar diferentes penalidades para erros positivos (quando o preço estimado é maior do que verdadeiro) e para erros negativos (quando o preço estimado é menor do que o real) dependendo do valor do quantil escolhido. Por exemplo, a perda quantílica para o quantil 0.25 penaliza mais os erros positivos e tenta manter os valores preditos um pouco abaixo da mediana.

Na prática, a biblioteca statsmodels tem algumas opções de implementações de regressão quantílica já preparadas em que não precisamos modificar a função de perda manualmente. Vamos ver um exemplo usando nosso conjunto de dados.

Aqui na Loft, frequentemente estamos interessados nos 2º, 5º e 8º decis, por isso vamos estimar os quantis 0.2, 0.5 e 0.8. Lembrando: isso significa que, para cada observação, estamos procurando previsões de preços tal que elas tenham uma probabilidade de 20%, 50% e 80% de serem maiores que os valores reais, respectivamente.

Depois de implementar a função que calcula o valor de um quantil, podemos calcular para todos os quantis de interesse.

A saída é uma lista em que cada item é um vetor de predições da regressão quantílica dados os quantis 0.2, 0.5 e 0.8.

Usando os nossos três exemplos de apartamentos e tomando o preço previsto por metro quadrado ao invés do valor total, podemos visualizar os intervalos estimados pela regressão quantílica para cada um dos imóveis. Notamos que o nosso modelo já entrega intervalos mais precisos do que somente usando o histograma de preços do bairro.

Quantis de m² estimados pela regressão quantílica: em vermelho, o percentil 0.2; em azul, a mediana; e, em verde, o percentil 0.8

2. Rede neural quantílica

Ainda utilizando a função de perda quantílica, é possível também implementarmos uma rede neural para que ela consiga estimar quantis ao invés de um valor único. A ideia é a mesma: modificar a função de perda do erro quadrático médio para a perda quantílica.

Primeiro, implementamos a função de perda quantílica em Keras.

Então, definimos a perda quantílica para cada um dos quantis de interesse:

Depois, construímos uma rede multi-saídas com uma saída para cada quantil desejado. No nosso caso, a rede possui 3 saídas. Temos ainda camadas internas compartilhadas que conectam a entrada da rede a cada uma das saídas.

Por fim, podemos treinar a rede e encontrar as predições para cada quantil.

Agora, visualizando os quantis de preço por metro quadrado para os apartamentos que separamos como exemplo, podemos observar que os intervalos seguem o mesmo padrão da regressão linear quantílica — porém, com a rede que construímos, os intervalos apresentam-se maiores.

Quantis de m² estimados pela rede neural quantílica: em vermelho, o percentil 0.2; em azul, a mediana; e, em verde, o percentil 0.8

3. Random Forest

Um método não-probabilístico para encontrar percentis é usar as predições de cada árvore de uma Random Forest. Simples assim: para cada observação, calculamos a respectiva predição em cada árvore da floresta, ordenamos esses valores de forma crescente e calculamos os quantis de interesse usando essa amostra de predições. Para isso, é importante construir florestas com algumas árvores para obtermos amostras de tamanhos razoáveis.

É importante ressaltar que esse método não é construído para calcular os quantis ideais, como os que visam minimizar a perda quantílica, mas funciona calculando “pseudo-quantis” a posteriori usando uma amostra de possíveis valores para cada observação. Então, o intervalo estimado por essa técnica se assemelha mais a um intervalo de confiança ao invés de uma estimação de quantis.

Começamos construindo um modelo de floresta normalmente:

Depois, para cada observação, calculamos a predição fornecida por cada um dos estimadores da floresta:

Por último, obtemos os quantis desejados a partir das amostras:

É esperado que, nesse método, o tamanho do intervalo seja menor do que aqueles obtidos por técnicas que minimizam a perda quantílica, uma vez que não esperamos que exista uma variação muito grande entre cada predição da floresta. Ao avaliar os quantis estimados pela RF usando os exemplos de apartamentos, percebemos que esse resultado é consistente: os intervalos de fato são bem menores do que nos algoritmos anteriores.

Quantis de m² estimados pela Random Forest: em vermelho, o percentil 0.2; em azul, a mediana; e, em verde, o percentil 0.8

4. NGBoost

O último método que iremos explorar nesse post é o NGBoost, um algoritmo de boosting lançado em 2019 por um grupo de Stanford e assinado por um dos principais pesquisadores de ML no mundo, Andrew Ng. Modelos de boosting têm sido amplamente utilizados nos últimos anos, tendo apresentado um ótimo desempenho em dados tabulares. No entanto, os algoritmos tradicionais falham em estimar incertezas de predições. Assim, surgiu o NGBoost, um método que constrói uma distribuição de probabilidade condicional baseado no uso do gradiente natural. Além da predição pontual, o NGBoost retorna a distribuição de probabilidade completa de Y|X=x com os seus respectivos parâmetros ajustados.

Assim como qualquer técnica de boosting, o NGB treina preditores, os chamados base learners, em sequência para melhorar as predições continuamente. Esses preditores costumam ser árvores de decisão, mas o modelo aceita qualquer algoritmo do scikit-learn.

Precisamos definir também uma distribuição de probabilidade condicional para Y. Toda distribuição é descrita por alguns parâmetros — por exemplo, a média e desvio padrão em uma normal. Por último, definimos também a função de perda que queremos minimizar. Essa função vai comparar a distribuição de probabilidade estimada com os dados observados. Como estamos tratando de probabilidades, a verossimilhança é uma escolha óbvia, mas outras funções também são aceitas.

Aqui, vamos utilizar como distribuição de Y|X uma normal e queremos maximizar a verossimilhança.

O modelo não é treinado para encontrar um valor único de saída, mas tenta aprender cada parâmetro da distribuição definida simultaneamente ao construir um base learner para cada. A saída do modelo, portanto, é uma distribuição completa — em outras palavras, o modelo retorna uma saída para cada parâmetro.

Como pode-se observar acima, ao utilizar uma normal, o NGBoost retorna os dois parâmetros que definem a distribuição: a média (loc) e o desvio padrão (scale). Usando SciPy e NumPy, conseguimos facilmente encontrar os valores de quantis dada uma normal e seus parâmetros:

Assim, encontramos os valores dos quantis de interesse para cada uma das observações.

Avaliando o comportamento da distribuição nos nossos exemplos, o NGBoost mostra intervalos de tamanho mais semelhantes à Random Forest, bem menores do que nos métodos que usam a perda quantílica.

Quantis de m² estimados pelo NGBoost: em vermelho, percentil 0.2; em azul, a mediana; e, em verde, o percentil 0.8

Aqui apresentamos, em alto nível, alguns exemplos de modelos tradicionais modificados para construir distribuições. Na Loft, é muito importante que envolvamos predição de intervalos na construção de nossos modelos de precificação. Já fizemos isso de algumas formas diferentes e inovadoras e seguimos tentando melhorar as nossas predições, usando ciência de dados para lidar com a complexidade do mercado imobiliário.

No próximo post da série, vamos apresentar como monitoramos e avaliamos o desempenho de modelos que retornam distribuições.

Ficou com vontade de fazer parte da Loft? Temos vagas abertas, se inscreva!

--

--