Blog

Construindo o Primeiro Algoritmo de Recomendação da Samwise

2024-10-09

Na Samwise, propusemo-nos a resolver um problema comum, mas complexo, no mundo imobiliário: ajudar os utilizadores a encontrar as propriedades mais relevantes de forma rápida e eficiente. Em vez de mostrar aos utilizadores uma lista bruta de propriedades baseada em filtros simples como preço e localização, queríamos oferecer algo muito mais inteligente — um algoritmo que classificasse as propriedades com base nas preferências do utilizador, dinâmicas previstas do mercado e atualidade. Esta é a história de como construímos o nosso primeiro algoritmo de recomendação do zero, os desafios que enfrentámos e as soluções que desenvolvemos ao longo do caminho.

O Problema Inicial

No início, a Samwise era simples: os utilizadores inseriam um preço máximo, número de quartos e localização. A nossa plataforma filtrava as listagens para mostrar propriedades que atendiam a esses critérios, mas faltava qualquer tipo de classificação inteligente. Isso levava a uma experiência subótima, onde os utilizadores não tinham uma indicação clara de quais propriedades eram as melhores correspondências para as suas necessidades.

Pretendíamos ir além da filtragem básica e criar um motor de recomendação que classificasse as propriedades com base em múltiplos fatores-chave:

  1. Preço Previsto: Qual deveria ser o preço de mercado da propriedade com base nas suas características.
  2. Preferências do Utilizador: Ajustar o preço com base em quão bem a propriedade se adequa aos desejos específicos do utilizador.
  3. Atualidade: Ter em conta há quanto tempo uma propriedade está listada e reduzir a sua classificação se não tiver sido vendida num prazo razoável.
  4. Impulso de Bom Negócio: Destacar propriedades que estão listadas abaixo do seu preço previsto para capturar potenciais "pechinchas".

Passo 1: Prever Preços de Propriedades

O primeiro passo importante foi estabelecer uma base com preços previstos para cada propriedade. Construímos um modelo de aprendizagem automática que considera características-chave de uma propriedade, incluindo:

  • Localização: Desejabilidade do bairro, proximidade de comodidades
  • Tamanho: Metros quadrados, número de quartos/casas de banho
  • Condição e Comodidades: Recentemente renovado, tem varanda, lugar de estacionamento

Este modelo produz um preço de mercado previsto para cada listagem, dando-nos uma avaliação justa de mercado que serve como base do nosso sistema de classificação. Adicionalmente, aproveitamos o modelo CogVLM2 para processar imagens de propriedades, extraindo informações visuais valiosas que melhoram ainda mais a precisão da nossa previsão de preços. Esta combinação de análise de dados textuais e visuais permite-nos capturar detalhes subtis sobre a condição, estilo e valor percebido de uma propriedade que podem não ser evidentes apenas a partir de descrições textuais.

Passo 2: Adaptar Preços às Preferências do Utilizador

Nem todos os utilizadores valorizam as mesmas características de propriedade igualmente. Por exemplo, alguém à procura de uma casa familiar pode priorizar a proximidade de escolas e parques, enquanto outro utilizador pode preocupar-se mais em ter uma cozinha moderna ou uma vista. Esta personalização exigiu que desenvolvêssemos um mecanismo para ajustar o preço previsto com base nas preferências individuais de um utilizador.

Conseguimos isso usando Modelos de Linguagem Grande (LLMs) para processar as entradas dos utilizadores (como descrições da sua casa ideal) e traduzi-las num conjunto de etiquetas. Estas etiquetas eram então comparadas com as etiquetas associadas a cada propriedade, gerando uma pontuação de correspondência de preferência. Esta pontuação ajustava o preço previsto para cima ou para baixo dependendo de quão bem a propriedade correspondia à descrição ideal do utilizador.

PP_utilizador = preçoPrevisto × (1 + β(M_etiquetas - 1))

Onde:

  • PP_utilizador é o preço previsto personalizado.
  • M_etiquetas é uma pontuação de correspondência entre 0 e 2, onde 1 representa uma correspondência neutra.
  • β é um parâmetro de ajuste que controla a força do ajuste de preferência.

Esta fórmula garante que uma correspondência perfeita (M_etiquetas = 2) aumenta o preço previsto, enquanto uma correspondência fraca (M_etiquetas < 1) o diminui. O parâmetro β permite-nos afinar o impacto das preferências do utilizador na classificação geral.

Passo 3: Considerar a Atualidade e Dinâmicas de Mercado

O próximo fator que considerámos foi a atualidade — há quanto tempo uma propriedade estava listada sem ser vendida. No mercado imobiliário, uma propriedade que permanece muito tempo no mercado geralmente indica uma discrepância entre o seu preço listado e o que os compradores estão dispostos a pagar. Precisávamos de uma forma de reduzir a classificação de propriedades que tinham sido listadas por um período prolongado, preservando o valor das listagens recentes.

Desenhámos uma curva de decaimento de atualidade que começa suave, refletindo a realidade de que as propriedades não se vendem imediatamente. No entanto, após um certo período, o decaimento acelera, sugerindo que o preço é provavelmente muito alto ou a propriedade é menos desejável. A nossa fórmula de decaimento é:

R = 1 / (1 + γ · [(1 / (1 + exp(-λ · (diasListados - τ))) - 0.5) · (1 + δ · log(1 + |preçoPrevisto - preçoListado| / preçoListado))])

Onde:

  • γ controla o decaimento geral.
  • λ ajusta a inclinação da curva de decaimento.
  • τ define quando o decaimento se torna mais agressivo (ponto médio).
  • δ afina o fator de diferença de preço.

Esta fórmula garante um impacto mínimo em listagens recentes, mas aplica um decaimento mais forte à medida que o tempo passa e as discrepâncias de preço se tornam mais evidentes.

Passo 4: Impulso de Bom Negócio

Uma das principais inovações no algoritmo da Samwise é o Impulso de Bom Negócio. Queríamos recompensar propriedades que estavam listadas a preços bem abaixo do seu valor de mercado previsto. Estas listagens subvalorizadas representam potenciais pechinchas, e precisávamos de uma forma de aumentar a sua visibilidade na classificação.

A fórmula para aplicar este impulso é:

Impulso = 1 + α · max(0, (preçoPrevisto - preçoListado) / preçoPrevisto)

Onde:

  • α controla quão forte é o impulso (tipicamente entre 0 e 1).
  • O impulso só é aplicado quando o preço listado está abaixo do preço previsto.
  • O impulso aumenta linearmente com a diferença percentual entre os preços previstos e listados.

Este mecanismo garante que propriedades com uma diferença de preço substancial (por exemplo, uma propriedade listada por €150k mas prevista a €250k) recebam um impulso significativo, enquanto propriedades listadas ao ou acima do seu preço previsto não recebem impulso.

Passo 5: Juntar Tudo

Depois de trabalhar em cada um destes componentes, a fórmula de classificação final para a Samwise fica assim:

ClassificaçãoFinal = PP_utilizador × R × Impulso

Eis como tudo funciona em conjunto:

  • Preço Previsto Personalizado (PP_utilizador) ajusta o preço previsto da propriedade com base em quão bem se adequa às preferências do utilizador.
  • Multiplicador de Atualidade (R) aplica um decaimento baseado no tempo para refletir há quanto tempo a propriedade está listada.
  • Impulso de Bom Negócio recompensa propriedades listadas significativamente abaixo do seu preço previsto.

Este sistema de classificação abrangente permite à Samwise apresentar aos utilizadores uma lista personalizada e atualizada de propriedades que não só correspondem às suas preferências, mas também representam um bom valor no mercado atual.

Ao combinar estes fatores, garantimos que:

  1. Os utilizadores veem propriedades que correspondem às suas necessidades e preferências específicas.
  2. As listagens recentes têm prioridade, mas não à custa de listagens mais antigas que ainda podem ser bons negócios.
  3. Propriedades potencialmente subvalorizadas são destacadas, dando aos utilizadores a oportunidade de encontrar ótimos negócios.
  4. A classificação geral se adapta às dinâmicas do mercado e às preferências individuais do utilizador.

A beleza deste algoritmo reside na sua flexibilidade e interpretabilidade. Cada componente tem um propósito claro e pode ser ajustado independentemente:

  • O fator de personalização (β) controla quanto as preferências do utilizador influenciam a classificação.
  • Os parâmetros de decaimento de atualidade (γ, λ, τ, δ) podem ser ajustados para refletir diferentes condições de mercado e ciclos de vida das listagens.
  • O impulso de bom negócio (α) pode ser ajustado para enfatizar ou desenfatizar discrepâncias de preço.

Esta configuração flexível significa que podemos continuar a ajustar e melhorar o nosso algoritmo com base no que os utilizadores nos dizem e no que está a acontecer no mercado imobiliário. O nosso objetivo é simples: ajudá-lo a encontrar a casa dos seus sonhos sem complicações. Estamos sempre a trabalhar para tornar a Samwise mais inteligente para que possa ser o seu fiel companheiro na sua aventura de procura de casa!

Samwise background