SlideShare uma empresa Scribd logo
1 de 9
Baixar para ler offline
Collaborative Filtering por Fatores
Latentes
Recomendação para o GlobosatPlay
Ciro Cavani
Globo.com - Personalização
ciro.cavani@corp.globo.com
Aprendizado de Máquina I - INF2979
Prof. Ruy Milidiú
2014-2
Abstract
Esse artigo descreve como foi feita a recomendação personalizada do GlobosatPlay usando
Collaborative Filtering por Fatores Latentes, inspirado pelos trabalhos publicados sobre o Netflix
Prize. A solução utiliza Mahout, Hadoop e Kafka para processar a recomendação para milhões de
usuários ativos, milhares de itens variados em fluxo e histórico esparso de interações. Os resultados
mostraram um ganho de 50% na conversão sobre Collaborative Filtering User-User e a expectativa
é usar esse algoritmo em outros produtos da Globo.com.
1 Introdução
A Globo.com[1] é o ramo Internet do Grupo Globo, o maior conglomerado de mídia da América
Latina, e tem alguns dos maiores portais do Brasil (G1, Globo Esporte, GShow e Vídeos). São
dezenas de milhões de acessos por dia aos portais, com a home da Globo.com sendo a principal
fonte de acessos com cerca de 45 milhões de acessos por dia. Também atua como prestadora de
serviços e suporte na Internet para todos os outros negócios de mídia do Grupo, incluindo TV Globo
e a Globosat.
O time de Personalização desenvolve a Plataforma de BigData usada no Sistema de Recomendação
para captura de dados e analise do perfil dos usuários. O objetivo é aumentar a permanência do
usuário no site, aumentar o número de páginas consumidas, aumentar o engajamento do usuário
(comentários, compartilhamentos, …). A proposta de valor é ser capaz de personalizar o conteúdo
da Globo.com em diversos produtos de forma contextualizada e prover as ferramentas necessárias
para tomar decisões baseadas em dados.
Esse artigo é sobre a recomendação personalizada do GlobosatPlay[2] usando Collaborative
Filtering[12] por Fatores Latentes, inspirado pelos trabalhos publicados sobre o Netflix Prize[3]. Os
resultados obtidos foram promissores e a expectativa é usar esse algoritmo em outros produtos da
Globo.com.
O conteúdo cobre: a apresentação do projeto; o desenvolvimento na plataforma da Globo.com; uma
discussão sobre a metodologia de avaliação e os resultados obtidos; uma proposta de otimização.
Esse trabalho foi desenvolvido durante o segundo semestre de 2014 para o site GlobosatPlay e
encontrasse em produção no endereço http://globosatplay.globo.com/ (trilha Recomendados).
Esse relatório foi produzido para matéria Aprendizado de Máquina I - INF2979, Prof. Ruy Milidiú,
2014-2.
2 Projeto
O projeto consistiu na implantação do algoritmo de Collaborative Filtering por Fatores Latentes
baseado no histórico dos usuários para a recomendação de vídeos personalizada do GlobosatPlay.
Esse algoritmo foi um dos que obteve melhores resultados no Netflix Prize e suas características são
ideais para a recomendação da Globo.com.
A expectativa é que o uso desse algoritmo em outros produtos também traga bons resultados como
os obtidos no GlobosatPlay.
2.1 Motivação
A demanda do time de Personalização foi desenvolver a recomendação para o GlobosatPlay, um site
de stream de vídeos desenvolvido na Globo.com, com uma solução que pudesse ser usada em todos
os produtos da empresa.
A Globo.com tem dezenas de milhões de acessos por dia aos portais com cerca de 10 milhões de
visitantes únicos e uma produção massiva de conteúdo bastante variado em Jornalismo, Esporte,
Variedades e Vídeos (juntamente com TV Globo, Editora Globo e demais empresas do Grupo).
Portanto o desafio é recomendar para milhões de usuários ativos milhares de itens variados em
fluxo com histórico esparso de interações (feedback implícito).
Esse cenário tem características similares ao problema que os algoritmos desenvolvidos no Netflix
Prize se propunham a resolver. Apesar do dataset do Netflix ser baseado no rating do usuário em
um filme (feedback explícito), trabalhos desenvolvidos foram extrapolados para feedback implícito.
Os trabalhos publicados sobre o Netflix Prize foram a inspiração para esse projeto.
2.2 Especificação
O projeto foi definido da seguinte forma:
• Problema:
Recomendação personalizada de vídeo baseado no histórico do usuário.
• Objetivo:
Recomendação no GlobosatPlay usando dados sobre os vídeos assistidos pelo usuário.
• Dataset:
Histórico dos vídeos assistidos pelo usuário.
Catálogo de Vídeos.
• Resultado:
Trilha de thumbnails pela qual o usuário pode navegar para assistir novos vídeos.
• Avaliação:
Teste A/B em Produção.
O algoritmo escolhido para esse trabalho foi o Collaborative Filtering por Fatores Latentes usando
fatoração por Alternating Least Squares com Weighted-lambda-Regularization (ALS-WR) [8,9].
Esse algoritmo teve um dos melhores resultados no Netflix Prize e tem as características necessárias
para a escala da Globo.com. Também é possível encontrar várias implementações de qualidade para
serem usadas em produção.
A implementação escolhida para esse trabalho foi a do Apache Mahout[4]. A plataforma de
recomendação de conteúdo personalizada da Globo.com tem um cluster Hadoop[5] onde são
armazenados os dados coletados da atividade dos usuários (feedback implícito). Nesse cluster, o
Mahout já é usado para processar o algoritmo de Collaborative Filtering User-User com histórico
de pageviews. Usar o Collaborative Filtering ALS-WR do Mahout com histórico de videoviews foi
considerada como a escolha que daria menos trabalho de mudar o setup da plataforma e mais rápida
de fazer.
3 Desenvolvimento
Esse trabalho foi desenvolvido durante o segundo semestre de 2014 para o site GlobosatPlay e
encontrasse em produção no endereço http://globosatplay.globo.com/ (trilha Recomendados).
A plataforma do sistema de recomendação da Globo.com foi usada nesse trabalho.
O trabalho consistiu em:
1. Captura de videoview
2. Pré-processamento de videoview
(cálculo de preferência do usuário pelo vídeo, papers do Netflix)
3. Fatoração com Mahout ALS
(otimização de parâmetros)
4. Pós-processamento da Recomendação
(metadados da resultado)
5. Testes A/B, Otimização
3.1 Sistema de Recomendação
O Sistema de Recomendação é projetado para coletar os sinais produzidos tanto pela dinâmica do
usuário quanto pela dinâmica do conteúdo e filtrar o que é relevante para o usuário no momento em
que isso é importante.
Nesse sistema, os dados coletados são processados e transformados em modelos de Usuário,
Conteúdo e Contexto. Esses modelos são usados para apresentar as melhores opções de acordo com
parâmetros do Produto. A interação do usuário com o conteúdo recomendado é avaliada através de
testes usados para orientar constantes mudanças em busca de melhorar a performance do sistema.
A plataforma desenvolvida na Globo.com para recomendação personalizada de conteúdo é
projetada para suportar milhões de usuários ativos, milhares de itens variados em fluxo, diversos
contextos de produtos.
Essa plataforma pode ser dividida em três partes: recebimento de dados em tempo real,
processamento de algoritmos de recomendação, e; consulta on-line combinando modelos.
O processo de recebimento de dados em tempo real é baseado no Kafka[6], um cluster de
distribuição de mensagens de alta performance que suporta bilhões de mensagens por dia. Esse
sistema é usado para receber todos os sinais coletados sobre o usuário possibilitando o
processamento stream em tempo real. Eventualmente, esse stream é armazenado permanentemente
no cluster Hadoop para processamento em lote e análise.
O processo dos algoritmos de recomendação varia para cada caso. Um caso típico é o
processamento em três etapas no cluster Hadoop. Na primeira etapa, é feito um condicionamento de
dados novos, seja para transformar em um formato específico ou para atualizar um pré-modelo
gerado na última execução. Na segunda etapa, é executado o algoritmo de recomendação. Na
terceira etapa, o resultado do algoritmo é verificado e transformado no formato que pode ser
consultado. Normalmente a execução é condicionada por vários parâmetros e é comum ter
diferentes configurações do mesmo algoritmo em teste.
A consulta on-line é a API que os desenvolvedores da Globo.com podem usar para recomendar
conteúdo personalizado. AAPI faz a combinação dos diversos modelos de recomendação e filtra o
conteúdo mais relevante para o usuário. AAPI permite criar testes A/B com combinações diferentes
dos modelos permitindo avaliar a performance de um algoritmo contra outro, ou o mesmo com
parâmetros diferentes.
Um exemplo de como esse sistema funciona:
(esse exemplo captura a essência, mas é só uma ilustração)
Collaborative Filtering User-User do Mahout
Toda vez que uma página da Globo.com é visitada, é gerado um sinal de pageview com o id do
usuário, a URL e o timestamp. Esse sinal passa pelo Kafka e é armazenado no Hadoop. Um job
MapReduce varre todos os sinais não processados na última execução (timestamp) gerando um
arquivo com o formato user-item-rating do Mahout (rating = número de visitas, por simplicidade).
O job do Mahout é executado e gera um arquivo com formato user-[lista-de-itens-com-score]. Mais
um job MapReduce é executado para transformar a saída do Mahout e salvar o resultado final no
HBase. Quando configurada para esse algoritmo, a API consulta o HBase e usa a lista com score
para combinar com outros resultados e fazer a recomendação.
3.2 Recomendação de Vídeo
3.2.1 Dataset
O dataset corresponde aos sinais de videoview gerados pelo player durante a exibição de um vídeo.
Esses sinais passam pelo Kafka e são armazenados no Hadoop.
O player de vídeo notifica eventos durante o tempo em que um vídeo é assistido. O primeiro sinal
vem do play seguido por sinais em posições específicas de progresso, incluindo pausa, seek e
parada.
Cada vez que um usuário assiste a um vídeo, um conjunto independente de valores de consumo
desse vídeo para esse usuário é registrado.
Formado:
1. id do usuário,
2. id do vídeo,
3. duração total do vídeo,
4. timestamp do play,
5. timestmap do último sinal
3.2.2 Mahout
A implementação do Collaborative Filtering por Fatores Latentes usando fatoração por ALS-WR é
dividida em duas partes no Mahout. A primeira é a fatoração e a segunda é o cálculo da
recomendação (itens com maior score)
O job de fatoração recebe um arquivo de entrada com formato: id do usuário, id do item,
preferência (preferência é um número que determina quanto o usuário 'gosta' do item, um rating). A
partir desse arquivo, o job produz as matrizes user-to-feature e item-to-feature.
Os parâmetros relevantes para esse job são:
• implicitFeedback: chave (true/false) para indicar o tipo de preferência
• alpha: confiança no feedback implícito
• lambda: regularização
• numFeatures: dimensão do espaço de features
• numIterations: número de iterações
Baseado nos resultados dos testes com o dataset do Netflix Prize e alguns testes de performance
(melhor resultado no menor tempo) com o dataset de videoview, os parâmetros foram ajustados
para os valores:
implicitFeedback=true, alpha=0.8
lambda=0.065, numFeatures=20, numIterations=10
…
O job de recomendação recebe as matrizes user-to-feature e item-to-feature e produz um arquivo
com o formato user-[lista-de-itens-com-score]
Os parâmetros relevantes para esse job são:
• numRecommendations: máximo número de recomendações por usuário, default é 10
• maxRating: maior rating geral calculado para preferência do usuário por um item
Esses valores são de livre escolha e foram ajustados para:
numRecommendations=50
maxRating=100
3.2.3 Preferências
O cálculo da preferência do usuário por um vídeo é o principal fator para a qualidade desse
algoritmo. Os papers sobre o Netflix Prize propõem soluções bastante elaboradas [10, 11]. Por
restrição de tempo, para essa primeira iteração do sistema, só foi usado um modelo.
A opção foi usar uma razão simples entre o tempo assistido e a duração do vídeo, acumulando para
o mesmo usuário-vídeo e normalizando o score de 0-100.
A proposta é incrementar essa fórmula e avaliar os resultados.
4 Resultados
A métrica de avaliação utilizada nesse trabalho foi conversão medida através de teste A/B. O
princípio do teste é separar os usuários em grupos e oferecer a cada grupo uma combinação
específica de modelos de recomendação.
A conversão é medida como o número de itens acessados pelos usuários dividido pelo número de
impressões que foram feitas.
O experimento realizado teve início no dia 26/11 e os resultados são do dia 08/12. Nesse
experimento foram consideradas três (3) combinações: CF User-User + Top24h (azul), CF User-
User + Recentes (verde) e CF Fatores Latentes + Top24h (preto).
Top24h é o ranking de matérias mais acessadas nas últimas 24h e tem peso 1/1000 na proporção
com outras recomendações, ou seja, na prática, só é usado no cold start. Recentes é a lista das
últimas matérias publicadas e também só é usado no cold start.
Esse experimento mostra uma taxa de conversão de 3,51% para algoritmo de CF Fatores Latentes
contra uma taxa de 2,32% para o CF User-User ambos combinados com Top24h, diferença de
1,19% ou um ganho de 50%.
Na prática, esses números são promissores mostrando ganho significativo. A expectativa é que esse
ganho seja um reflexo de uma recomendação de melhor qualidade. Ainda é necessário fazer mais
testes para entender melhor se é possível aumentar ainda mais a performance desse novo algoritmo.
5 Conclusão
Os testes inicias mostram que o uso do Collaborative Filtering por Fatores Latentes usando
Alternating Least Squares com Weighted-lambda-Regularization (ALS-WR) pode representar um
ganho qualitativo significativo na recomendação de vídeos. Contudo, esse algoritmo é mais lento
para processar e tem mais parâmetros que precisam ser ajustados.
Esse trabalho ainda vai ser estendido com melhorias no cálculo da preferência do usuário e o uso de
um otimizador caixa-preta para melhorar os parâmetros do algoritmo.
A próxima etapa desse trabalho consiste em usar o MOE (Metric Optimization Engine)[7] para
otimizar a função objetivo Taxa de Conversão para os parâmetros lambda, alpha, dimensão e vetor
de pesos da combinação.
Agradecimentos: esse trabalho só foi possível com a ajuda, o incentivo e a cobrança dos meus
colegas. Muito obrigado Tiago Motta, Marcos Sousa, Bruno Táboas e Nathalie Nader; pela revisão
desse relatório, Renan Oliveira e Juarez Bochi. Por possibilitar que todo esse sistema fosse
desenvolvido, Marcelo Medeiros muito obrigado! Agradeço a todos que participaram no acumulo
de conhecimento e experiência que estão materializados nesse sistema.
6 Referências
1. Globo.com http://globo.com/
2. GlobosatPlay http://globosatplay.globo.com/
3. Netflix Prize http://www.netflixprize.com/
4. Apache Mahout http://mahout.apache.org/
http://mahout.apache.org/users/recommender/matrix-factorization.html
http://mahout.apache.org/users/recommender/intro-als-hadoop.html
5. Apache Hadoop http://hadoop.apache.org/
6. Apache Kafka http://kafka.apache.org/
http://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-
should-know-about-real-time-datas-unifying
7. MOE (Metric Optimization Engine) http://yelp.github.io/MOE/
http://engineeringblog.yelp.com/2014/10/using-moe-the-metric-optimization-engine-to-
optimize-an-ab-testing-experiment-framework.html
8. Yifan Hu, Yehuda Koren, and Chris Volinsky. 2008. Collaborative Filtering for Implicit
Feedback Datasets. In Proceedings of the 2008 Eighth IEEE International Conference on
Data Mining (ICDM '08). IEEE Computer Society, Washington, DC, USA, 263-272.
DOI=10.1109/ICDM.2008.22 http://dx.doi.org/10.1109/ICDM.2008.22
9. Yunhong Zhou, Dennis Wilkinson, Robert Schreiber, and Rong Pan. 2008. Large-Scale
Parallel Collaborative Filtering for the Netflix Prize. In Proceedings of the 4th international
conference on Algorithmic Aspects in Information and Management (AAIM '08), Rudolf
Fleischer and Jinhui Xu (Eds.). Springer-Verlag, Berlin, Heidelberg, 337-348.
DOI=10.1007/978-3-540-68880-8_32 http://dx.doi.org/10.1007/978-3-540-68880-8_32
10. Yehuda Koren. 2008. Factorization meets the neighborhood: a multifaceted collaborative
filtering model. In Proceedings of the 14th ACM SIGKDD international conference on
Knowledge discovery and data mining (KDD '08). ACM, New York, NY, USA, 426-434.
DOI=10.1145/1401890.1401944 http://doi.acm.org/10.1145/1401890.1401944
11. Yehuda Koren. 2009. Collaborative filtering with temporal dynamics. In Proceedings of the
15th ACM SIGKDD international conference on Knowledge discovery and data mining
(KDD '09). ACM, New York, NY, USA, 447-456. DOI=10.1145/1557019.1557072
http://doi.acm.org/10.1145/1557019.1557072
12. John S. Breese, David Heckerman, and Carl Kadie. 1998. Empirical analysis of predictive
algorithms for collaborative filtering. In Proceedings of the Fourteenth conference on
Uncertainty in artificial intelligence (UAI'98), Gregory F. Cooper and Serafín Moral (Eds.).
Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 43-52.

Mais conteúdo relacionado

Semelhante a Collaborative Filtering por Fatores Latentes - Recomendação para o GlobosatPlay

Projeto Indiana
Projeto IndianaProjeto Indiana
Projeto Indiana
hellequin
 
Implementação de um módulo de gestão de projetos baseado em Scrum para o Expr...
Implementação de um módulo de gestão de projetos baseado em Scrum para o Expr...Implementação de um módulo de gestão de projetos baseado em Scrum para o Expr...
Implementação de um módulo de gestão de projetos baseado em Scrum para o Expr...
Wildtech
 
Personalização de programas de tv no contexto da tv digital portátil interativa
Personalização de programas de tv no contexto da tv digital portátil interativaPersonalização de programas de tv no contexto da tv digital portátil interativa
Personalização de programas de tv no contexto da tv digital portátil interativa
Elaine Cecília Gatto
 

Semelhante a Collaborative Filtering por Fatores Latentes - Recomendação para o GlobosatPlay (20)

Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de Software
 
Projeto Indiana
Projeto IndianaProjeto Indiana
Projeto Indiana
 
Big data e globo.com - Uma visão sobre a cultura de dados
Big data e globo.com - Uma visão sobre a cultura de dadosBig data e globo.com - Uma visão sobre a cultura de dados
Big data e globo.com - Uma visão sobre a cultura de dados
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
Big Data, JVM e Redes Sociais
Big Data, JVM e Redes SociaisBig Data, JVM e Redes Sociais
Big Data, JVM e Redes Sociais
 
Web Analytics para Desenvolvedores - TDC 2011
Web Analytics para Desenvolvedores - TDC 2011Web Analytics para Desenvolvedores - TDC 2011
Web Analytics para Desenvolvedores - TDC 2011
 
Falando sobre DevOps no azure
Falando sobre DevOps no azureFalando sobre DevOps no azure
Falando sobre DevOps no azure
 
Implementação de um módulo de gestão de projetos baseado em Scrum para o Expr...
Implementação de um módulo de gestão de projetos baseado em Scrum para o Expr...Implementação de um módulo de gestão de projetos baseado em Scrum para o Expr...
Implementação de um módulo de gestão de projetos baseado em Scrum para o Expr...
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
 
Personalização de programas de tv no contexto da tv digital portátil interativa
Personalização de programas de tv no contexto da tv digital portátil interativaPersonalização de programas de tv no contexto da tv digital portátil interativa
Personalização de programas de tv no contexto da tv digital portátil interativa
 
Colóquio Drupal na Universidade do Minho
Colóquio Drupal na Universidade do MinhoColóquio Drupal na Universidade do Minho
Colóquio Drupal na Universidade do Minho
 
Criando uma plataforma mundial para engajamento de usuários para a Copa do Mu...
Criando uma plataforma mundial para engajamento de usuários para a Copa do Mu...Criando uma plataforma mundial para engajamento de usuários para a Copa do Mu...
Criando uma plataforma mundial para engajamento de usuários para a Copa do Mu...
 
Selenium renato groffe + milton camara - mvp conf latam 2019
Selenium  renato groffe + milton camara - mvp conf latam 2019Selenium  renato groffe + milton camara - mvp conf latam 2019
Selenium renato groffe + milton camara - mvp conf latam 2019
 
Aplicando Testes Automatizados com Selenium e Azure DevOps - MVPConf LATAM 2019
Aplicando Testes Automatizados com Selenium e Azure DevOps - MVPConf LATAM 2019Aplicando Testes Automatizados com Selenium e Azure DevOps - MVPConf LATAM 2019
Aplicando Testes Automatizados com Selenium e Azure DevOps - MVPConf LATAM 2019
 
Drupal e o seu ecossistema
Drupal e o seu ecossistemaDrupal e o seu ecossistema
Drupal e o seu ecossistema
 
Servidor com processamento paralelo utilizando CUDA aplicado em uma urna elet...
Servidor com processamento paralelo utilizando CUDA aplicado em uma urna elet...Servidor com processamento paralelo utilizando CUDA aplicado em uma urna elet...
Servidor com processamento paralelo utilizando CUDA aplicado em uma urna elet...
 
Testes remotos de usabilidade
Testes remotos de usabilidadeTestes remotos de usabilidade
Testes remotos de usabilidade
 
Ai ad-tp3-g3
Ai ad-tp3-g3Ai ad-tp3-g3
Ai ad-tp3-g3
 
Resenha WoSida 2015
Resenha WoSida 2015Resenha WoSida 2015
Resenha WoSida 2015
 
Aula 3 - Engenharia de Software
Aula 3 - Engenharia de SoftwareAula 3 - Engenharia de Software
Aula 3 - Engenharia de Software
 

Collaborative Filtering por Fatores Latentes - Recomendação para o GlobosatPlay

  • 1. Collaborative Filtering por Fatores Latentes Recomendação para o GlobosatPlay Ciro Cavani Globo.com - Personalização ciro.cavani@corp.globo.com Aprendizado de Máquina I - INF2979 Prof. Ruy Milidiú 2014-2 Abstract Esse artigo descreve como foi feita a recomendação personalizada do GlobosatPlay usando Collaborative Filtering por Fatores Latentes, inspirado pelos trabalhos publicados sobre o Netflix Prize. A solução utiliza Mahout, Hadoop e Kafka para processar a recomendação para milhões de usuários ativos, milhares de itens variados em fluxo e histórico esparso de interações. Os resultados mostraram um ganho de 50% na conversão sobre Collaborative Filtering User-User e a expectativa é usar esse algoritmo em outros produtos da Globo.com. 1 Introdução A Globo.com[1] é o ramo Internet do Grupo Globo, o maior conglomerado de mídia da América Latina, e tem alguns dos maiores portais do Brasil (G1, Globo Esporte, GShow e Vídeos). São dezenas de milhões de acessos por dia aos portais, com a home da Globo.com sendo a principal fonte de acessos com cerca de 45 milhões de acessos por dia. Também atua como prestadora de serviços e suporte na Internet para todos os outros negócios de mídia do Grupo, incluindo TV Globo e a Globosat. O time de Personalização desenvolve a Plataforma de BigData usada no Sistema de Recomendação para captura de dados e analise do perfil dos usuários. O objetivo é aumentar a permanência do usuário no site, aumentar o número de páginas consumidas, aumentar o engajamento do usuário (comentários, compartilhamentos, …). A proposta de valor é ser capaz de personalizar o conteúdo da Globo.com em diversos produtos de forma contextualizada e prover as ferramentas necessárias para tomar decisões baseadas em dados. Esse artigo é sobre a recomendação personalizada do GlobosatPlay[2] usando Collaborative Filtering[12] por Fatores Latentes, inspirado pelos trabalhos publicados sobre o Netflix Prize[3]. Os resultados obtidos foram promissores e a expectativa é usar esse algoritmo em outros produtos da Globo.com. O conteúdo cobre: a apresentação do projeto; o desenvolvimento na plataforma da Globo.com; uma discussão sobre a metodologia de avaliação e os resultados obtidos; uma proposta de otimização.
  • 2. Esse trabalho foi desenvolvido durante o segundo semestre de 2014 para o site GlobosatPlay e encontrasse em produção no endereço http://globosatplay.globo.com/ (trilha Recomendados). Esse relatório foi produzido para matéria Aprendizado de Máquina I - INF2979, Prof. Ruy Milidiú, 2014-2. 2 Projeto O projeto consistiu na implantação do algoritmo de Collaborative Filtering por Fatores Latentes baseado no histórico dos usuários para a recomendação de vídeos personalizada do GlobosatPlay. Esse algoritmo foi um dos que obteve melhores resultados no Netflix Prize e suas características são ideais para a recomendação da Globo.com. A expectativa é que o uso desse algoritmo em outros produtos também traga bons resultados como os obtidos no GlobosatPlay. 2.1 Motivação A demanda do time de Personalização foi desenvolver a recomendação para o GlobosatPlay, um site de stream de vídeos desenvolvido na Globo.com, com uma solução que pudesse ser usada em todos os produtos da empresa. A Globo.com tem dezenas de milhões de acessos por dia aos portais com cerca de 10 milhões de visitantes únicos e uma produção massiva de conteúdo bastante variado em Jornalismo, Esporte, Variedades e Vídeos (juntamente com TV Globo, Editora Globo e demais empresas do Grupo). Portanto o desafio é recomendar para milhões de usuários ativos milhares de itens variados em fluxo com histórico esparso de interações (feedback implícito). Esse cenário tem características similares ao problema que os algoritmos desenvolvidos no Netflix Prize se propunham a resolver. Apesar do dataset do Netflix ser baseado no rating do usuário em um filme (feedback explícito), trabalhos desenvolvidos foram extrapolados para feedback implícito.
  • 3. Os trabalhos publicados sobre o Netflix Prize foram a inspiração para esse projeto. 2.2 Especificação O projeto foi definido da seguinte forma: • Problema: Recomendação personalizada de vídeo baseado no histórico do usuário. • Objetivo: Recomendação no GlobosatPlay usando dados sobre os vídeos assistidos pelo usuário. • Dataset: Histórico dos vídeos assistidos pelo usuário. Catálogo de Vídeos. • Resultado: Trilha de thumbnails pela qual o usuário pode navegar para assistir novos vídeos. • Avaliação: Teste A/B em Produção. O algoritmo escolhido para esse trabalho foi o Collaborative Filtering por Fatores Latentes usando fatoração por Alternating Least Squares com Weighted-lambda-Regularization (ALS-WR) [8,9]. Esse algoritmo teve um dos melhores resultados no Netflix Prize e tem as características necessárias para a escala da Globo.com. Também é possível encontrar várias implementações de qualidade para serem usadas em produção. A implementação escolhida para esse trabalho foi a do Apache Mahout[4]. A plataforma de recomendação de conteúdo personalizada da Globo.com tem um cluster Hadoop[5] onde são armazenados os dados coletados da atividade dos usuários (feedback implícito). Nesse cluster, o Mahout já é usado para processar o algoritmo de Collaborative Filtering User-User com histórico de pageviews. Usar o Collaborative Filtering ALS-WR do Mahout com histórico de videoviews foi considerada como a escolha que daria menos trabalho de mudar o setup da plataforma e mais rápida de fazer. 3 Desenvolvimento Esse trabalho foi desenvolvido durante o segundo semestre de 2014 para o site GlobosatPlay e encontrasse em produção no endereço http://globosatplay.globo.com/ (trilha Recomendados). A plataforma do sistema de recomendação da Globo.com foi usada nesse trabalho. O trabalho consistiu em: 1. Captura de videoview 2. Pré-processamento de videoview
  • 4. (cálculo de preferência do usuário pelo vídeo, papers do Netflix) 3. Fatoração com Mahout ALS (otimização de parâmetros) 4. Pós-processamento da Recomendação (metadados da resultado) 5. Testes A/B, Otimização 3.1 Sistema de Recomendação O Sistema de Recomendação é projetado para coletar os sinais produzidos tanto pela dinâmica do usuário quanto pela dinâmica do conteúdo e filtrar o que é relevante para o usuário no momento em que isso é importante. Nesse sistema, os dados coletados são processados e transformados em modelos de Usuário, Conteúdo e Contexto. Esses modelos são usados para apresentar as melhores opções de acordo com parâmetros do Produto. A interação do usuário com o conteúdo recomendado é avaliada através de testes usados para orientar constantes mudanças em busca de melhorar a performance do sistema. A plataforma desenvolvida na Globo.com para recomendação personalizada de conteúdo é projetada para suportar milhões de usuários ativos, milhares de itens variados em fluxo, diversos contextos de produtos. Essa plataforma pode ser dividida em três partes: recebimento de dados em tempo real, processamento de algoritmos de recomendação, e; consulta on-line combinando modelos. O processo de recebimento de dados em tempo real é baseado no Kafka[6], um cluster de distribuição de mensagens de alta performance que suporta bilhões de mensagens por dia. Esse sistema é usado para receber todos os sinais coletados sobre o usuário possibilitando o processamento stream em tempo real. Eventualmente, esse stream é armazenado permanentemente no cluster Hadoop para processamento em lote e análise.
  • 5. O processo dos algoritmos de recomendação varia para cada caso. Um caso típico é o processamento em três etapas no cluster Hadoop. Na primeira etapa, é feito um condicionamento de dados novos, seja para transformar em um formato específico ou para atualizar um pré-modelo gerado na última execução. Na segunda etapa, é executado o algoritmo de recomendação. Na terceira etapa, o resultado do algoritmo é verificado e transformado no formato que pode ser consultado. Normalmente a execução é condicionada por vários parâmetros e é comum ter diferentes configurações do mesmo algoritmo em teste. A consulta on-line é a API que os desenvolvedores da Globo.com podem usar para recomendar conteúdo personalizado. AAPI faz a combinação dos diversos modelos de recomendação e filtra o conteúdo mais relevante para o usuário. AAPI permite criar testes A/B com combinações diferentes dos modelos permitindo avaliar a performance de um algoritmo contra outro, ou o mesmo com parâmetros diferentes. Um exemplo de como esse sistema funciona: (esse exemplo captura a essência, mas é só uma ilustração) Collaborative Filtering User-User do Mahout Toda vez que uma página da Globo.com é visitada, é gerado um sinal de pageview com o id do usuário, a URL e o timestamp. Esse sinal passa pelo Kafka e é armazenado no Hadoop. Um job MapReduce varre todos os sinais não processados na última execução (timestamp) gerando um arquivo com o formato user-item-rating do Mahout (rating = número de visitas, por simplicidade). O job do Mahout é executado e gera um arquivo com formato user-[lista-de-itens-com-score]. Mais um job MapReduce é executado para transformar a saída do Mahout e salvar o resultado final no HBase. Quando configurada para esse algoritmo, a API consulta o HBase e usa a lista com score para combinar com outros resultados e fazer a recomendação. 3.2 Recomendação de Vídeo 3.2.1 Dataset O dataset corresponde aos sinais de videoview gerados pelo player durante a exibição de um vídeo. Esses sinais passam pelo Kafka e são armazenados no Hadoop. O player de vídeo notifica eventos durante o tempo em que um vídeo é assistido. O primeiro sinal vem do play seguido por sinais em posições específicas de progresso, incluindo pausa, seek e parada. Cada vez que um usuário assiste a um vídeo, um conjunto independente de valores de consumo desse vídeo para esse usuário é registrado. Formado: 1. id do usuário, 2. id do vídeo, 3. duração total do vídeo,
  • 6. 4. timestamp do play, 5. timestmap do último sinal 3.2.2 Mahout A implementação do Collaborative Filtering por Fatores Latentes usando fatoração por ALS-WR é dividida em duas partes no Mahout. A primeira é a fatoração e a segunda é o cálculo da recomendação (itens com maior score) O job de fatoração recebe um arquivo de entrada com formato: id do usuário, id do item, preferência (preferência é um número que determina quanto o usuário 'gosta' do item, um rating). A partir desse arquivo, o job produz as matrizes user-to-feature e item-to-feature. Os parâmetros relevantes para esse job são: • implicitFeedback: chave (true/false) para indicar o tipo de preferência • alpha: confiança no feedback implícito • lambda: regularização • numFeatures: dimensão do espaço de features • numIterations: número de iterações Baseado nos resultados dos testes com o dataset do Netflix Prize e alguns testes de performance (melhor resultado no menor tempo) com o dataset de videoview, os parâmetros foram ajustados para os valores: implicitFeedback=true, alpha=0.8 lambda=0.065, numFeatures=20, numIterations=10 … O job de recomendação recebe as matrizes user-to-feature e item-to-feature e produz um arquivo com o formato user-[lista-de-itens-com-score] Os parâmetros relevantes para esse job são: • numRecommendations: máximo número de recomendações por usuário, default é 10 • maxRating: maior rating geral calculado para preferência do usuário por um item Esses valores são de livre escolha e foram ajustados para: numRecommendations=50 maxRating=100 3.2.3 Preferências O cálculo da preferência do usuário por um vídeo é o principal fator para a qualidade desse algoritmo. Os papers sobre o Netflix Prize propõem soluções bastante elaboradas [10, 11]. Por restrição de tempo, para essa primeira iteração do sistema, só foi usado um modelo.
  • 7. A opção foi usar uma razão simples entre o tempo assistido e a duração do vídeo, acumulando para o mesmo usuário-vídeo e normalizando o score de 0-100. A proposta é incrementar essa fórmula e avaliar os resultados. 4 Resultados A métrica de avaliação utilizada nesse trabalho foi conversão medida através de teste A/B. O princípio do teste é separar os usuários em grupos e oferecer a cada grupo uma combinação específica de modelos de recomendação. A conversão é medida como o número de itens acessados pelos usuários dividido pelo número de impressões que foram feitas. O experimento realizado teve início no dia 26/11 e os resultados são do dia 08/12. Nesse experimento foram consideradas três (3) combinações: CF User-User + Top24h (azul), CF User- User + Recentes (verde) e CF Fatores Latentes + Top24h (preto). Top24h é o ranking de matérias mais acessadas nas últimas 24h e tem peso 1/1000 na proporção com outras recomendações, ou seja, na prática, só é usado no cold start. Recentes é a lista das últimas matérias publicadas e também só é usado no cold start. Esse experimento mostra uma taxa de conversão de 3,51% para algoritmo de CF Fatores Latentes contra uma taxa de 2,32% para o CF User-User ambos combinados com Top24h, diferença de 1,19% ou um ganho de 50%. Na prática, esses números são promissores mostrando ganho significativo. A expectativa é que esse ganho seja um reflexo de uma recomendação de melhor qualidade. Ainda é necessário fazer mais testes para entender melhor se é possível aumentar ainda mais a performance desse novo algoritmo.
  • 8. 5 Conclusão Os testes inicias mostram que o uso do Collaborative Filtering por Fatores Latentes usando Alternating Least Squares com Weighted-lambda-Regularization (ALS-WR) pode representar um ganho qualitativo significativo na recomendação de vídeos. Contudo, esse algoritmo é mais lento para processar e tem mais parâmetros que precisam ser ajustados. Esse trabalho ainda vai ser estendido com melhorias no cálculo da preferência do usuário e o uso de um otimizador caixa-preta para melhorar os parâmetros do algoritmo. A próxima etapa desse trabalho consiste em usar o MOE (Metric Optimization Engine)[7] para otimizar a função objetivo Taxa de Conversão para os parâmetros lambda, alpha, dimensão e vetor de pesos da combinação. Agradecimentos: esse trabalho só foi possível com a ajuda, o incentivo e a cobrança dos meus colegas. Muito obrigado Tiago Motta, Marcos Sousa, Bruno Táboas e Nathalie Nader; pela revisão desse relatório, Renan Oliveira e Juarez Bochi. Por possibilitar que todo esse sistema fosse desenvolvido, Marcelo Medeiros muito obrigado! Agradeço a todos que participaram no acumulo de conhecimento e experiência que estão materializados nesse sistema. 6 Referências 1. Globo.com http://globo.com/ 2. GlobosatPlay http://globosatplay.globo.com/ 3. Netflix Prize http://www.netflixprize.com/ 4. Apache Mahout http://mahout.apache.org/ http://mahout.apache.org/users/recommender/matrix-factorization.html http://mahout.apache.org/users/recommender/intro-als-hadoop.html 5. Apache Hadoop http://hadoop.apache.org/ 6. Apache Kafka http://kafka.apache.org/ http://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer- should-know-about-real-time-datas-unifying 7. MOE (Metric Optimization Engine) http://yelp.github.io/MOE/ http://engineeringblog.yelp.com/2014/10/using-moe-the-metric-optimization-engine-to- optimize-an-ab-testing-experiment-framework.html 8. Yifan Hu, Yehuda Koren, and Chris Volinsky. 2008. Collaborative Filtering for Implicit Feedback Datasets. In Proceedings of the 2008 Eighth IEEE International Conference on Data Mining (ICDM '08). IEEE Computer Society, Washington, DC, USA, 263-272. DOI=10.1109/ICDM.2008.22 http://dx.doi.org/10.1109/ICDM.2008.22 9. Yunhong Zhou, Dennis Wilkinson, Robert Schreiber, and Rong Pan. 2008. Large-Scale Parallel Collaborative Filtering for the Netflix Prize. In Proceedings of the 4th international
  • 9. conference on Algorithmic Aspects in Information and Management (AAIM '08), Rudolf Fleischer and Jinhui Xu (Eds.). Springer-Verlag, Berlin, Heidelberg, 337-348. DOI=10.1007/978-3-540-68880-8_32 http://dx.doi.org/10.1007/978-3-540-68880-8_32 10. Yehuda Koren. 2008. Factorization meets the neighborhood: a multifaceted collaborative filtering model. In Proceedings of the 14th ACM SIGKDD international conference on Knowledge discovery and data mining (KDD '08). ACM, New York, NY, USA, 426-434. DOI=10.1145/1401890.1401944 http://doi.acm.org/10.1145/1401890.1401944 11. Yehuda Koren. 2009. Collaborative filtering with temporal dynamics. In Proceedings of the 15th ACM SIGKDD international conference on Knowledge discovery and data mining (KDD '09). ACM, New York, NY, USA, 447-456. DOI=10.1145/1557019.1557072 http://doi.acm.org/10.1145/1557019.1557072 12. John S. Breese, David Heckerman, and Carl Kadie. 1998. Empirical analysis of predictive algorithms for collaborative filtering. In Proceedings of the Fourteenth conference on Uncertainty in artificial intelligence (UAI'98), Gregory F. Cooper and Serafín Moral (Eds.). Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 43-52.