Usando Machine Learning Para Prever o Primeiro Destino de 60 mil Usuários da AirBnB

A AirBnB é uma empresa de tecnologia que oferece um ambiente virtual onde os usuários podem reservar locais para se hospedar em diversos lugares do mundo, e também anunciar seus imóveis para a comunidade de viajantes.

Visando encontrar candidatos para compor seu time de cientistas de dados, eles decidiram patrocinar uma competição na qual o objetivo era prever qual o primeiro país em que um novo usuário fará sua reserva de hospedagem.

A parte mais interessante, para mim, desta competição, é que foi possível chegar a uma boa posição (Top 7%) com apenas um modelo, que poderia ser utilizado em produção.

Informações dos Dados

Foram disponibilizados dados anônimos sobre o perfil do usuário, como idade, gênero, data de criação da conta, idioma, e o canal utilizado para chegar ao site. Estes dados vinham desde 2010.

Além disso, dados sobre as sessões dos usuários, identificadas pelo id, que descreviam qual a ação executada (clique, mensagem para o dono do imóvel, visualização de resultados de busca, etc) e quantos segundos se passaram entre aquela ação e a anterior. Estes dados existiam apenas a partir de janeiro de 2014.

Existiam outros dois arquivos, com dados sobre as características dos países, mas não encontrei utilidade para eles.

A métrica utilizada era o NDCG. Basicamente vai de 0 a 1 e mede a relevância dos resultados do modelo ordenados pelo ranking. Mais informações neste link (em inglês).

Um usuário poderia escolher entre 12 países, mas quase 90% deles ia para os Estados Unidos ou não marcava viagem.

Logo ficou claro, devido à métrica utilizada, que valeria mais a pena se concentrar em modelar o fato do usuário marcar ou não a viagem, ficando o destino em segundo plano.

Validação

Os dados disponibilizados para treino e validação se referiam a usuários que criaram suas contas antes de 1 de julho de 2014. E os dados de teste, na leaderboard, eram os três meses após esta data.

Vários participantes utilizaram validação cruzada, sorteando aleatoriamente os exemplos, mas por uma questão de tempo para rodar o modelo durante o desenvolvimento, e também porque as características dos dados dependiam do tempo, decidi usar dados de maio e junho de 2014 como validação.

Algumas características dos dados, como a proporção de usuários que possuíam dados sobre sessões mudavam com o tempo, então decidi usar um período bastante próximo do teste para validar. E este período se mostrou bastante robusto.

Variáveis

Perfil do Usuário

Utilizei as variáveis padrões do perfil do usuário já descritas acima. Como eu planejava usar um modelo baseado em árvores de decisão, transformei cada variável categórica em ordinal, pois estes modelos conseguem aproximar bem os padrões mesmo que estas variáveis não tenham um ordenamento real.

Além disso, procurei computar o tempo que um usuário gastava entre eventos das sessões, e quantos tipos diferentes de ações ele executou no site.

Datas

Extraí informações básicas das datas, criando colunas individuais para o dia, mês, ano e dia da semana. Isto ajuda o modelo a capturar efeitos sazonais da série temporal.

Comportamento do Usuário

Esta é uma parte essencial na maior parte dos modelos para e-commerce. Neste caso específico, criei uma coluna com o tempo que o usuário passou em cada ação executada por ele no site. Além disso, fiz o mesmo procedimento calculando quantas vezes o usuário executou uma determinada ação.

Modelo

Utilizei uma Random Forest com 300 árvores que foi boa o bastante para conquistar um lugar no Top 7% (91 de 1463).

No total eu tinha cerca de 1100 colunas, e a maior parte delas bastante esparsa (a maioria dos valores eram zero). Algumas pessoas dizem que estes modelos baseados em árvores de decisão não se dão bem com este formato de dados, mas a minha experiência sugere que é uma questão de ajuste de parâmetros.

Infelizmente não tive tempo de treinar um bom modelo de Gradient Boosted Trees, que certamente teria uma performance melhor, e pela diferença pequena de scores entre a Random Forest e o topo da tabela, é quase certo que seria bom o bastante para pegar um lugar no Top 10.

  1. Lucas Murtinho

    Oi Mario, tudo bem?

    Não sei se você aceita “fan requests” para análises, mas participei da competição da Telstra no Kaggle e queria saber mais sobre os métodos que você usou. Fiquei no top 25%, mas bem atrás de você.

    Abraços e parabéns!

  2. Olá Mário,
    Uma dúvida, o seu score final é baseado na base inteira de treino ou somente de maio e junho?
    Obrigado,
    Marcos

    • Mario Filho

      Marcos, o score final é baseado nos dados a partir de julho, que faziam parte da leaderboard privada no Kaggle.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *