Como criamos um MVP de sistemas de recomendação
Conseguimos trazer comodidade ao recomendar um conjunto de características de cursos no Quero Bolsa
Aqui utilizamos o modelo de sistemas de recomendação para facilitar a decisão do usuário ao escolher um curso em nosso produto, o Quero Bolsa. O meu objetivo é esclarecer as etapas de conceber o modelo, colocar em produção e medir os resultados. Meu foco vai ser nesse processo, com uma breve explicação das abordagens de sistemas de recomendação utilizadas.
Primeiro, vamos entender nosso contexto, que é o funil de conversão do nosso site, chamado de happy path, composto por cinco etapas:
- home
- página de busca, com as opções de cursos disponíveis
- página do produto, com as informações e condições de um curso
- check-out (carrinho de compras)
- venda
O happy path é de responsabilidade de um de nossos squads, o User Decision, cujo objetivo (entre outros) é melhorar e incentivar o processo de decisão do aluno, o ajudando a escolher o melhor curso para sua necessidade.
Entenda curso não como “Direito” ou “Enfermagem”, mas como o conjunto de características que o definem: seu nome, instituição de ensino, localização do campus, nível (Graduação, Pós-Graduação), modalidade (Presencial, EaD), turno (manhã, tarde, noite, virtual), área, etc.
Nosso escopo será a terceira etapa do happy path, a página do produto.
O que recomendamos?
Alinhado ao objetivo do squad, decidimos recomendar cursos relacionados ao curso selecionado, usando a frase “Quem viu este curso se interessou também”. Assim é possível explorar os cursos mais relacionados sem precisar voltar à página de busca, facilitando a escolha do aluno. Tenha em mente que a ideia geral é que a página de cada curso tenha cursos recomendados.
Além disso, todo bom marketplace possui recomendações na sua página de produto, não ficaríamos para trás.
Alinhado a um dos nosso valores, “Primeiro, o básico bem feito”, decidimos criar um MVP que buscasse atender os critérios:
1. Ser fácil de colocar em produção
2. Construir um modelo com lógica alinhada ao objetivo do squad
3. E claro, trazer resultados relevantes
Como você percebeu, o processo de criação do MVP de recomendação começou pelo final — colocar em produção.
Por se tratar de um MVP, foi importante não demandar um megaesforço de Engenharia para colocar o modelo em produção. Como já tínhamos um framework de relevância de busca funcionando bem, aproveitamos a mesma estrutura. Em linhas gerais, funciona assim:
- Crio o modelo em notebooks no Databricks, com todas queries e código
- Salvo em um banco intermediário uma tabela com as recomendações.
- Os Data Engineers criam um job para rodar os notebooks e atualizar essa tabela diariamente
- O job também copia a tabela do banco intermediário para o banco de produção
- Os desenvolvedores consultam essa tabela diariamente e populam os dados no site
Essa tabela tem três colunas principais: o curso da página em questão, os cursos recomendados nessa página e um score de recomendação (recommendation_score).
Então, colocar em produção foi uma etapa sem percalços. Alguns fatores contribuíram para isso:
- Aproveitamento de um framework existente
- Boa comunicação entre Data Science, Data Engineering e Engenharia
Incentivando a decisão do usuário
O próximo critério do MVP seria usar uma lógica alinhada ao objetivo do squad de melhorar e incentivar o processo de decisão do aluno.
Após estudar recomendações de sistemas e interagir com o Product Manager e Product Designer, decidi utilizar uma mistura dos métodos Item-Based Collaborative Filtering e Content- Based Filtering.
O primeira método, Item-Based Collaborative Filtering, recomenda itens relacionados com base no comportamento das pessoas.
Por exemplo, suponha que X% das pessoas que compraram o Item A visitaram a página (do produto) do Item B. Ou seja, o comportamento dos usuários nos diz que existe uma relação visita B — venda A. Então, faz sentido recomendar A na página de B.
A relação entre A e B vai ser tão forte quanto maior for a porcentagem X de pessoas que compraram A e visitaram B. Quanto maior a força ou quanto maior X, mais faz sentido a recomendação. Essa força é traduzida no score item_based_score, que varia entre 0 (pior recomendação) e 1 (melhor recomendação). O item_based_score é uma das partes do recommendation_score.
Extrapolamos as relações. Além de visita — venda, a relação pode ser visita — ordem iniciada (quando o aluno leva o item para o checkout — carrinho de compras) e visita — visita. A relação visita — venda é a mais forte e tem um peso maior na recomendação, ou seja, gera um item_based_score maior. A relação visita-visita é a menos forte, logo gera um item_based_score menor. Essa extrapolação foi necessária para aumentarmos a cobertura — porcentagem do estoque que participa das recomendações — pois uma parte relevantes dos itens podem não ter vendas, logo não ter a relação visita — venda.
Retomando ao objetivo, a abordagem Item-Based Collaborative Filtering ajuda o aluno no processo de decisão, pois recomenda o que faz mais sentido do ponto de vista do comportamento e dos interesses dos outros alunos que também viram aquele curso.
Vamos à segunda abordagem. O Content-Based Filtering recomenda itens relacionados com base na similaridade das características que os definem, que citei no início do artigo. Retomando, algumas dessas características ou variáveis são: nome do curso, Instituição de Ensino, localização do campus (ou distância relativa entre campus), nível (Graduação, Pós-Graduação), modalidade (Presencial, EaD), turno (manhã, tarde, noite, virtual), área, valor da mensalidade, etc.
Cuidado para não se perder com as variáveis! O excesso delas pode poluir a similaridade e esconder as características mais relevantes. Ou seja, selecionar as variáveis que serão usadas no Content-Based Filtering pode ser uma boa estratégia.
Essa seleção pode ser feita com diversas abordagens, como necessidade do negócio, conhecimento do negócio e técnicas de análise. Ainda, diminuir a quantidade de variáveis gera um benefício adicional — diminuir o custo computacional, que é crítico no cálculo de similaridade entre itens de uma base extensa.
Enfim, com as variáveis selecionadas em mãos, podemos entender a similaridade. As variáveis podem ser entendidas como categóricas ou numéricas. Nível, modalidade, turno, nome do curso e área são exemplos de variáveis categóricas; valor da mensalidade e distância relativa são exemplos de variáveis numéricas.
Num par de cursos, quanto maior a quantidade de variáveis categóricas coincidentes e quanto mais próximos forem os valores das variáveis numéricas, maior será a similaridade.
A similaridade é traduzida pelo similarity_score, que varia entre 0 e 1, assim como o item_based_score.
Por que escolher o Content-Based Filtering?
Primeiro: privilegiar cursos similares (similarity). O método Item-Based Collaborative Filtering pode recomendar cursos bastante diferentes, dado que as pessoas podem mudar de interesse ou se interessarem por assuntos bem distintos. Por exemplo, encontramos alunos que visitam páginas de Direito e também de Enfermagem. Pelo menos num primeiro momento, entendemos que seria mais relevante recomendar ao aluno cursos mais similares.
Segundo: aumentar a diversidade (diversity). Lembrando das relações do Collaborative filtering: visita — visita, visita — ordem, visita — venda, entendemos que a condição mínima para a recomendação acontecer é o curso ter visitas. Isso significa que cursos sem visitas não recebem recomendação em sua página e não são recomendados na página de outros cursos. Entretanto, isso prejudica marcas novas no site e marcas menos populares. Como a cauda longa (poucos cursos muito populares, e muitos cursos pouco populares, similar ao Princípio de Pareto) é uma característica do nosso negócio, é prudente não ignorá-la. Ainda, recomendar cursos pouco populares gera um benefício adicional, a exploração.
Terceiro: aumentar a cobertura (coverage). Como consequência do segundo motivo, ao incluir os cursos sem visitas, aumentamos a porcentagem de cursos no estoque que podem ser recomendados e que possuem recomendação.
Juntando as duas abordagens, nota-se que a página de cada curso possui outros cursos recomendados. A força de uma recomendação é medida pelo recommendation_score, que é uma ponderação entre item_based_score e similarity_score, obtidos das abordagens Item-Based Collaborative Filtering e Content-Based Filtering, respectivamente.
Resultados do nosso modelo
Finalmente, sabemos como o modelo foi construído e que foi para produção aproveitando um framework existente. Fizemos um teste A/B na página de produto mostrando as recomendações num carrossel e sem mostrar recomendações. Após cerca de um mês de teste, chegamos a um resultado expressivo de Revenue per User de +5,0% de uplift com probabilidade de vencer de 88% e perda esperada de R$ 0,02, pela análise Bayesiana feita pelo nosso Data Analyst. Assim, as recomendações aparecem para 100% dos alunos há cerca de um mês.
Até então, as recomendações evoluíram no seu modelo e nas aplicações:
- no cálculo de algumas variáveis do similarity_score
- para abranger páginas de produto de itens fora de estoque ou de marcas não parceiras
- o mesmo modelo está sendo usado em e-mail marketing
Os próximos passos são expandir o escopo para outras páginas do site com grande tráfego, e personalizar as recomendações para considerar o comportamento do próprio aluno. Assim, buscamos gerar resultados ainda mais expressivos.
Quer trabalhar conosco? Estamos com vagas abertas.