Recomendação com Spark no HU

Problema?

16M usuários

1M compradores

4500 Pacotes

em média, simultaneamente no ar

500 destinos

em média, simultaneamente no ar

O que fazer?

  • Recomendar pacotes?
  • Recomendar destinos?

Vs

Destinos

Prós: é o principal atributo de um pacote

Contras: não capta atributos de hospedagem e outros

Pacotes

Prós: destino + atributos de hospedagem e outros

Contras: é "desligado" e número muito superior

Vs

Destinos

Prós: é o principal atributo de um pacote

Contras: não capta atributos de hospedagem e outros

Pacotes

Prós: destino + atributos de hospedagem e outros

Contras: é "desligado"

Datasets?

Compras e Navegação

Compras

1000000 x 500

Navegação

Depende do tamanho do histórico

Compras

1000000 x 500

Navegação

Depende do tamanho do histórico

m_{ij} \in M(1000000 \times500)
mijM(1000000×500)m_{ij} \in M(1000000 \times500)

e s p a r s o

 

Filtragem Colaborativa

Resumo

  • Modelo de fatores latentes
  • Fatoração de matrizes

Fator latente

Praia

Fatoração de Matrizes

Predição?

p_{ij} = x_{i}^{T} y_{j}
pij=xiTyjp_{ij} = x_{i}^{T} y_{j}

Na prática

Vou ter que fazer 500M predições?

"sim e não"

Sim

Não

Ninguém comprou Chernobil

Não vou gerar ratings pra lá!

Devo limitar pra quais destinos calcular a predição?

Recomendação em produção

Como isso roda?

  • Datasets limpos no S3
  • CSVs + Parquet files
  • Cluster Mesos
  • Spark 1.4

Datasets limpos

  • Evita tempo perdido com erros e depuração
  • Tem somente o necessário

(1222,6668,5)

(usuario,destino,feedback)

Parquet files

  • Bem menores que texto plano
  • Bom suporte no spark

Cluster Mesos

  • "Hadoopless"
  • Funciona muito bem
  • Usamos AWS com auto scaling configurável

Fluxo de Recomendação

  • Atributos
  • Parâmetros

Destino

  • Destino
  • Heurística de seleção de pacote

Pacote

  • Usuário
  • Pacotes

Recomendação

RBMs & CF 

RBM

  • Modelo generativo
  • Reconhece e completa padrões
  • Algoritmo de aprendizado eficiente

Modelo

  • Cada destino é uma unidade visível
    • 1 se comprou
    • 0 se não comprou

Também é possível usar atributos do usuário no modelo. Ex: tem filhos? Só compra pacotes de luxo? 

Treino - CD-k

  • Correção por erro
  • Gradiente aproximado
    • Diferença entre modelo e distribuição
  • Amigável ao paralelismo
    • Necessita apenas de operações simples com matrizes

Predição na RBM

Predição - input

profile = [0, 0, 0, 1, 0, 0, 0, 1]

(buzios e ilha grande)

Predição - output

pred = [0, 1, 0, 1, 0, 0, 1, 1]

(buzios, ilha grande, angra, balneário camboriú)

Na prática

  • Funciona com amostras do dataset
  • Perfis vazios voltam com destinos mais populares
  • Predição aleatoriezada
  • Pode ser usada antes de um modelo de Rating pra diminuir a quantidade de predições necessárias

Fim

Dúvidas?

felipe.cruz@hotelurbano.com.br

evandro.lopes@hotelurbano.com.br

robson.rodrigues@hotelurbano.com.br

carlos.rios@hotelurbano.com.br

Recomendação

By Felipe Cruz

Recomendação

  • 1,577