← Todos os artigos

Caderno Basicx / 03 / Matching cliente–imóvel

Matching cliente–imóvel: primeiro, parar de errar

Como a CF Intelligence reconstruiu o motor que cruza perfis de clientes com o acervo, e por que medimos "não errar" antes de medir "acertar o melhor".

Ilustração conceitual: um perfil conectado a dois imóveis; um terceiro permanece sem conexão.
Ilustração conceitual · imóveis gerados por IA

O problema

A busca responde a uma pergunta pontual do corretor. O matching faz outra coisa: cruza o perfil completo de um cliente com o acervo inteiro e propõe imóveis.

Esse perfil, o briefing, mistura muita coisa:

  • coisas que o cliente disse;
  • coisas que o corretor percebeu;
  • restrições firmes;
  • desejos vagos.

O acervo, por sua vez, tem informação incompleta: uma parte relevante dos atributos de qualquer imóvel é, honestamente, "desconhecida".

Um matching ruim falha de dois jeitos:

  • por excesso: propõe imóveis fora do bairro, acima do teto ou com aquilo que o cliente disse que não quer. O corretor perde a confiança na primeira lista;
  • por falta: veta imóveis bons só porque falta uma informação. O cliente nunca vê o imóvel certo.

Princípios do motor

Dois passos, com responsabilidades separadas

  1. Veto simbólico. Um imóvel só é excluído quando há evidência de que ele viola uma exigência do cliente: ausência comprovada, preço acima do teto ou localização fora da área. "Desconhecido" nunca veta.
  2. Pontuação ponderada. Os imóveis que sobram são ordenados pelo quanto atendem às preferências, com pesos por eixo: localização, tipologia, atributos e estado.

Uma autoridade única

Briefing, busca e matching usam o mesmo núcleo de regras, publicado como pacote versionado e com contratos explícitos de entrada e saída. Antes, partes da lógica estavam duplicadas entre serviços, e uma correção em um lugar não chegava ao outro. Hoje não há caminho alternativo: se o núcleo não responde, o sistema diz isso em vez de improvisar.

Vazio honesto e relaxamento controlado

Quando o acervo não tem nada que atenda ao briefing inteiro, o motor relaxa critérios numa ordem definida e avisa quais critérios relaxou. Se nem assim encontra nada, devolve uma lista vazia com a explicação. Uma lista cheia de imóveis errados é pior que uma lista vazia.

Os resultados

Briefings de clientes: menos imóveis errados

Para não avaliar o motor só com os casos que motivaram as correções, um gerador independente, sem acesso aos defeitos conhecidos, produziu 20 briefings de clientes sintéticos. Um briefing conta como "limpo" quando nenhum imóvel proposto viola uma exigência sem aviso.

Briefings de clientes: menos imóveis errados
Indicador Antes Depois
Briefings limpos 13/20 17/20
Figura 03 · Resultado medido

Menos violações do briefing.

Briefings limpos em 20 perfis sintéticos · maior é melhor.

Antes13 / 20
Depois17 / 20

Fonte: artigo 3, gerador independente de 20 briefings sintéticos. “Limpo” = nenhum imóvel proposto viola uma exigência sem aviso. O teste não comprova a melhor ordenação.

Localização: o bairro passou a valer

Num caso de produção, o motor ignorava o bairro pedido quando relaxava outros critérios: o universo de candidatos era o acervo inteiro da faixa de preço. Depois da correção, medida em dois clientes reais:

Localização: o bairro passou a valer
Indicador Antes Depois
Universo de candidatos 2.268 (bairro ignorado) 545 e 1.142
Primeiros 100 no bairro pedido não garantido 100%

Negação: "não quero piscina" passou a ser respeitado

Em testes com perfis que rejeitam um atributo, por exemplo um cliente avesso a piscina:

Negação: "não quero piscina" passou a ser respeitado
Indicador Antes Depois
Imóveis vetados que ainda eram propostos 10 de 10 0

O motor passou a distinguir os imóveis

Num cliente real, todos os 10 primeiros imóveis recebiam a mesma nota (93,75). Na prática, a ordem era arbitrária. Depois da reforma do cálculo, os 10 primeiros passaram a ter 9 notas distintas. O motor voltou a dizer qual imóvel atende melhor.

Bateria de regressão

Mantemos uma bateria de critérios de aprovação ("gates") que toda versão precisa passar antes de ir para produção:

  • discriminação da nota;
  • respeito a negações;
  • 48 invariantes lógicos;
  • 22 casos canônicos.

A versão em produção passou de 3 para 7 de 7 gates.

Numa bateria julgada por um especialista humano, a precisão nos 5 primeiros resultados chegou a 69%, contra uma meta de 60%. Sem a fatia mais difícil, ela chega a 84%.

Essa fatia mais difícil é feita de consultas adversariais. Elas pedem algo que a base ainda não registra, como um teto de condomínio para imóveis sem o valor do condomínio cadastrado. Nela, o resultado é de 15%.

Nesses casos o motor não inventa uma resposta. Quando uma exigência não pode ser verificada em nenhum resultado, ele avisa isso com destaque. A solução de fundo é completar os dados, e não mexer no algoritmo.

Desempenho

Uma reescrita do componente de comparação textual por índice invertido deixou esse passo 2,25× mais rápido, com zero divergência de resultado em 2.465 comparações.

Como medimos

  • Gabaritos congelados antes de rodar. O gabarito de cada teste é escrito e registrado com hash criptográfico antes de qualquer versão ser executada. Ninguém ajusta o critério depois de ver o resultado.
  • Clientes sintéticos gerados de forma independente. As correções foram desenhadas sobre um conjunto de casos, e a avaliação usa outro, gerado sem acesso aos defeitos. Um resultado de 30 em 30 nos casos que motivaram as correções não conta como evidência, e nós não o usamos como tal.
  • Votos de corretores. Uma vitrine em que corretores avaliam imóveis propostos para clientes reais é a régua final.
  • Juízes automáticos só como proxy. Medimos a concordância de cada juiz automático com o corretor antes de usá-lo. Um dos modelos avaliados ficou abaixo do acaso e foi descartado.

O que ainda não está resolvido

Este é o artigo da série em que mais importa ser preciso sobre o que foi provado.

Provamos que o motor parou de propor imóveis errados. Ainda não provamos que ele ordena os certos na melhor ordem.

  • Ordenação. Num caso real, dois imóveis aprovados pelo corretor caíram das posições 6 e 9 para além da 270ª depois de uma correção. A causa é conhecida: quando vários imóveis empatam nos fatos, quem desempata é a similaridade de texto, e o texto do anúncio não reflete o que o cliente valoriza. A correção está em andamento, e é exatamente o tipo de regressão que a bateria existe para pegar.
  • Reordenação por modelos. Testamos reordenar a lista com um modelo de linguagem. O ganho médio foi positivo, mas com intervalo de confiança cruzando zero em uma amostra de 5 clientes. Não fomos para produção com um ganho que não conseguimos distinguir de ruído.
  • Tempo de resposta. Reativar o sinal semântico no matching subiu o tempo mediano de cerca de 6 s para cerca de 10 s. A otimização está mapeada: boa parte do tempo vai para consultas de banco sem índice.
  • Qualidade dos dados. O matching só é tão bom quanto as fichas. Hoje, mais da metade dos atributos do acervo está como "desconhecido", e o motor trata isso de forma neutra, sem premiar nem punir. Aumentar a cobertura de atributos (veja o primeiro artigo) é a alavanca de maior impacto no matching.

O próximo passo de avaliação

O próximo passo é uma rodada comparativa cega de ordenação, desenhada antes de rodar:

  • pelo menos 36 votos;
  • dois corretores avaliando de forma independente;
  • critério de aprovação pelo limite inferior do intervalo de Wilson, e não pela média.

Por que isso importa

Em recomendação, a tentação é otimizar uma métrica de ranking e anunciar o número. Nós escolhemos outra ordem:

  1. Garantir que o sistema nunca proponha o que o cliente recusou.
  2. Garantir que ele diga o que relaxou quando não há resposta perfeita.
  3. Só então otimizar a ordem, com votos humanos e critérios fixados antes.

Os dois primeiros itens estão medidos e em produção. O terceiro está em curso, e vamos relatá-lo com a mesma régua.

Artigos da série: extração de atributos, busca semântica e matching cliente–imóvel.

Daniel Hollander

CF Intelligence · outubro de 2026

Série sobre extração, busca e matching no mercado imobiliário.

← Voltar ao Caderno Basicx
Finalidades