Um problema de learning to rank

Com utilização do modelo da solução via Google Sheets

Renato da Nova Favarin
6 min readDec 11, 2021

Conceitos abordados e exemplificados ao longo deste artigo

  • Learning to rank;
  • Curva de ganhos cumulativos (cumulative gains curve);
  • Curva de desempenho (lift curve);
  • Precision@k;
  • Recall@k;
  • Publicação do modelo em produção no Heroku e acessando usando Google Sheets.

Introdução

Este artigo é para quem está buscando como criar uma solução para um problema de learning to rank e também para quem está buscando entender, na prática, as métricas precision@k, recall@k e as curvas de ganhos cumulativos (cumulative gains curve) e desempenho (lift curve)

Listarei todos os passos desenvolvidos ao longo do projeto. Se desejar aprofundar em algo escrito aqui, recomendo visitar o repositório deste projeto no GitHub. Também fique à vontade para comentar ou perguntar algo diretamente pelo meu Linkedin.

Importante mencionar que é um projeto fictício, inspirado em um desafio do Kaggle.

O cliente contratante do projeto

Corretora de seguros, que negocia seguros saúde e veicular.

O cenário de negócio

A empresa está interessada em vender seguro veicular para os clientes que contrataram seguro saúde no ano anterior (portanto, realizar uma venda cruzada ou cross-sell).

A venda de novos planos de seguro para veículos para os portadores de seguro saúde é algo antigo na corretora, embora seus funcionários, até então, utilizam o feeling para saber quem abordar neste segundo momento de venda.

Os anos de experiência da empresa apontam que 12% dos clientes que adquirem o seguro saúde no ano anterior irão adquirir o seguro veicular no ano vigente.

Considerando que a empresa preza por uma campanha de vendas que propicie uma experiência única - que inclui convites para uma conversa pessoalmente ou calls dedicados - e que há alguns anos, são muitos os novos clientes, o gerente de marketing avisou que, neste ano, apenas 40% dos novos clientes de seguro saúde poderão ser contactados para oferecerem o seguro veicular.

Portanto, a corretora de seguros deseja obter uma ferramenta que retorne uma lista ordenada dos clientes mais propensos a fecharem um novo negócio e assim poderem contactar todos — ou quase todos — os clientes que compõem os 12% que irão adquirir o novo seguro ao contactar apenas os primeiros 40% da lista ordenada.

Os dados

Justamente pensando que um dia irão ofertar novos planos de seguros, eles aproveitam a oportunidade no momento da venda de seguro saúde (seu produto mais conhecido e vendido) e solicitam aos clientes para preencherem alguns campos, por exemplo:

  • Qual foi o canal de comunicação que você conheceu nossa corretora?
  • Possui habilitação para dirigir?
  • Possui veículo próprio? Se sim, qual o ano?
  • Possui seguro veicular?
  • Seu veículo já sofreu danos no passado?

O sistema da corretora também adiciona automaticamente informações extras para cada um dos clientes, como por exemplo a região da residência e o valor do seguro saúde contratado.

Os dados de experiências passadas foram disponibilizados. Estes dados já possuem a resposta se o cliente, posteriormente, adquiriu ou não o segundo seguro com a corretora; estes dados (amostra abaixo) foram utilizados na construção do modelo de machine learning.

A estratégia

A linguagem de programação utilizada foi Python; e a estratégia da solução, que pode ser conferida diretamente no repositório do projeto, passou pelas etapas:

  • Coleta e descrição dos dados (disponíveis em um banco de dados postgreSQL);
  • Separação de 20% dos dados para teste do modelo final (para simular o ambiente de produção com dados inéditos);
  • Feature engineering;
  • Filtragem dos dados;
  • Análise exploratória de dados;
  • Preparação dos dados;
  • Seleção de features;
  • Modelagem de machine learning, onde foram avaliados 5 algoritmos: balanced random forest classifier, knn classifier, logistic regression, random forest classifier e xgboost classifier utilizando-se validação cruzada;
  • Publicação do modelo no Heroku e vínculo com o Google Sheets da corretora.

As métricas de avaliação e resultados

As métricas para avaliar o desempenho dos modelos foram:

  • Curva de ganhos cumulativos (cumulative gains curve): plota a porcentagem de amostras positivas classificadas corretamente como uma função da porcentagem de amostras consideradas.
  • Curva de desempenho (lift curve): mostra quantas vezes o desempenho de um modelo é melhor comparado a um modelo aleatório para uma dada fatia da amostra considerada.

As curvas de ganhos cumulativos e desempenho, para os diferentes algoritmos de machine learning treinados, são mostradas a seguir.

O modelo perfeito é aquele hipotético que ordenaria com perfeição todos os clientes que fecharão o novo negócio no topo da lista; portanto, ao chegar na quantidade limite de clientes que irão adquirir o seguro veicular (em torno de 12%), a curva de ganhos já atinge o valor máximo e a de desempenho começa a cair na medida que mais clientes (que não irão adquirir um novo produto) são contactados.

Outras métricas utilizadas na avaliação dos modelos foram:

  • Precision@k: proporção das amostras relevantes em relação às k amostras consideradas.
  • Recall@k: proporção das amostras relevantes encontradas até k amostras consideradas em relação à todas as amostras relevantes existentes na base.

Nota-se que os melhores modelos foram o balanced random forest classifier e o xgboost classifier. Por uma questão do tamanho do modelo para publicar em produção, foi considerado o xgboost classifier para a solução final.

O desempenho do modelo na simulação de dados de produção

Conforme mencionado anteriormente, foram separados 20% dos dados para teste; após estes dados passarem pelo mesmo pipeline que os dados de treino, tem-se curvas de ganhos cumulativos e de desempenho comparáveis com àquelas obtidas para os dados de treino.

Esta compatibilidade de desempenho é evidenciada quando comparamos o precision@k e recall@k dos modelos obtidos com os dados de treino e de teste.

Conclusão

Podemos observar que, com a aplicação do modelo obtido, aproximadamente 93% dos potenciais clientes interessados também no seguro veicular serão convertidos após contactar 40% do total de clientes atualmente apenas com seguro saúde.

Modelo em produção

O modelo foi publicado no Heroku e disponível por meio de uma planilha no Google Sheets.

Qualquer funcionário da seguradora pode utilizar a planilha e estabelecer um ranking dos clientes com maior probabilidade de adquirir seguro de veículos, utilizando-se dados diretos do sistema da empresa.

Como pode ser verificado na demonstração abaixo, existe um botão que, uma vez acionado, após alguns segundos, retorna a lista já ordenada pelos clientes com maior probabilidade de adquirir o novo produto.

A comunicação entre o Google Sheets e o Heroku foi realizada por meio de AppScript, que é uma plataforma JavaScript baseada em nuvem que permite a integração e a automação de tarefas nos produtos do Google. Os códigos utilizamos podem ser vistos aqui.

Sinta-se à vontade para solicitar uma permissão de edição da planilha (envie-me uma mensagem pelo meu Linkedin) e então realizar a classificação dos clientes você mesmo. Tente alterar alguns valores de atributo e veja o impacto na pontuação (campo Score) do cliente.

Agradecimentos

Agradeço aos membros da Comunidade DS e ao Meigarom Lopes que propiciaram horas de frutíferas conversas essenciais para o desenrolar deste trabalho.

Muito obrigado pela leitura!

--

--

Renato da Nova Favarin

Constantly evolving data scientist who decided to write some words about the daily learnings.