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
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?
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