Aprendizado de Máquina: Recomendação de Restaurantes com o Apache Mahout

O Apache Mahout nasceu como um subprojeto do Apache Lucene em 2008, onde possuía algoritmos de clustering, já em 2010 tornou-se um projeto onde incorporou o projeto Taste de filtragem colaborativa. O HDInsight, solução de Hadoop como serviço do Azure, facilita o uso do Mahout na infraestrutura da nuvem. O Mahout é uma implementação de aprendizado de máquina escalável. No entanto, não está restrito a escalabilidade, mas ele também executa algoritmos em modo autônomo. A empresa Foursquare utiliza o Apache Mahout para fazer a recomendação de lugares ao seus usuários, já o Twitter utiliza os algoritmos do Mahout para modelagem de “interesses” de usuários, na empresa Adobe usa o Mahout dentro de seu produto Adobe Media Player para gerar recomendações de vídeos para seus usuários.

Segundo Renata Ghisloti em 2014, “Sistemas de Recomendação podem ser vistos ao realizar buscas em sites de pesquisa da internet, em compras online, ou até mesmo ao visualizamos nossos emails. São o mecanismo por trás da propaganda personalizada que recebemos na web, com indicações de sites para visitarmos ou produtos para compramos.

Com o advento do consumo em dispositivos móveis e a propagação o e-commerce, sistemas de recomendação tornaram-se um tema extremamente atrativo. Através de algoritmos simples e facilmente integráveis a aplicações web, eles agregam valor ao negócio online, promovendo itens de consumo direcionados a um público alvo”.

O Apache Mahout foi desenvolvido para auxiliar nos volumosos processamento de dados para descoberta da informação, fazendo com que as máquinas se tornem capazes de aprender sem a interação humana para ajudar em decisões estratégicas ou simplesmente para auxiliar o cliente na escolha de um produto e seus semelhantes.

Dentro do Apache Mahout encontramos implementações de algoritmos para filtragem colaborativa, armazenamento em cluster e classificação. Além destas implementações o Mahout também oferece bibliotecas em Java para operações matemáticas comuns, tais como: álgebra linear e estatística. Com o Mahout é possível construir um ambiente para criação rápida de aplicativos de aprendizagem de máquina escaláveis de elevada performance. Na Figura 1 temos exemplificado os projetos ao qual se tornaram o projeto Apache Mahout.

Figura 1. Apache Mahout e projetos relacionados (2014)

Algumas das técnicas desenvolvidas são: armazenagem em cluster, filtragem colaborativa e categorização. Estas técnicas possibilitam localizar aspectos em comum entre grandes grupos de pessoas ou rotular automaticamente grandes volumes de conteúdo de web.

Neste artigo iremos abordar implementações de aprendizagem por máquina utilizando filtragem colaborativa (CF) e categorização, logo na filtragem colaborativa, existem duas variações principais da forma de se gerar a recomendação. Uma delas consiste em se recomendar comparando as preferências de um usuário com um grupo de outros usuários, para se recomendar os itens bem avaliados por pessoas semelhantes ao usuário ao qual a recomendação se destina. Esse modelo de filtragem colaborativa é chamado de baseado em usuário. O outro tipo de filtragem colaborativa busca filtrar os itens que o usuário demonstrou interesse anteriormente, para então identificar no sistema itens similares a esses, que então serão recomendados. Esse conceito de filtragem colaborativa é chamado de baseado em itens. O Slop-One é uma abordagem de recomendação baseada em item muito rápida e simples aplicável quando usuários possuem determinadas classificações (e não apenas preferências de variáveis booleanas).

No baseado em modelos fornece recomendações com base no desenvolvimento de um modelo de usuários e suas classificações.

Figura 2. Exemplo do processo de Filtragem Colaborativa (Fabiola, 2013)

Segundo Grant Ingersoll em 2009, filtragem colaborativa (CF) é uma técnica popularizada pela Amazon e outras, que utiliza informações de usuário, como por exemplo, classificações, cliques e compras para fornecer recomendações a outros usuários do site. Na Figura 1, vemos como ocorre o processo de recomendação sendo usado as informações do usuário em conjunto com as informações já armazenadas de outros usuários que buscaram por itens semelhantes. A CF geralmente é utilizada para recomendar ao cliente itens como livros, música e filmes, porém também é utilizada em outras aplicações onde agentes múltiplos precisam colaborar para restringir dados.

Segundo Grant Ingersoll em 2009, o objetivo da categorização (frequentemente também chamada classificação) é rotular documentos não visualizados, desse modo, reunindo-os. As abordagens de classificação em aprendizagem por máquina calculam uma gama de dados estatísticos que associam as características de um documento ao rótulo especificado, criando, assim, um modelo que pode ser usado mais tarde para classificar documentos não visualizados. Por exemplo, uma abordagem simples à classificação pode acompanhar as palavras associadas ao rótulo, bem como o número de vezes que essas palavras são visualizadas para um determinado rótulo. Então, quando um novo documento é classificado, as palavras no documento são visualizadas no modelo, as probabilidades são calculadas, e o melhor resultado é a saída, normalmente junto com uma pontuação indicando a certeza de que o resultado está correto.

Figura 3. Exemplo do processo de Categorização (Fabiola, 2013)

Experimentos

Nesta seção, são apresentados dois ensaios distintos que foram realizados para demonstrar o uso das técnicas anteriormente abordadas.

Ensaio 1 – Recomendação de Restaurantes com Filtro colaborativo

Neste ensaio utilizamos a técnica de filtro colaborativo pelo algoritmo do coeficiente de correlação de Pearson aplicado sobre a base de dados de avaliações de restaurantes disponível em: http://archive.ics.uci.edu/ml/datasets/Restaurant+%26+consumer+data.

Metodologia

O Apache Mahout contempla o algoritmo do coeficiente de correlação de Pearson através da implementação do método PearsonCorrelationSimilarity disponível na biblioteca Apache Maven. Aplicamos a base de dados neste método para analisar as avaliações de restaurantes e a mesma criar uma máquina de recomendações para os restaurantes listados em nossa base.
Este coeficiente permite medir o grau de correlação entre duas variáveis, resultando em valores entre [-1;+1], onde o valor -1 representa ausência total de correlação entre as variáveis, e o valor +1 representa forte correlação entre as mesmas.
O coeficiente de correlação é definido pela seguinte fórmula:

Figura 4. Fórmula do coeficiente de correlação (Ícaro, 2015)

Os dados que compõem a base não estão dentro do padrão estabelecido pelo método aqui em questão, por isso, efetuamos uma transformação nos dados para que o algoritmo possa interpretar os dados contidos no arquivo de entrada. Conforme exemplificado na figura 5 tem-se três variáveis para mensuração da avaliação do restaurante, porém este algoritmo somente permite uma variável para indicar o rating do restaurante.

Figura 5. Amostra da base de dados utilizada nos ensaios

Por haver a necessidade de diminuir a quantidade de variáveis optou-se por fazer uma média dos ratings já que os algoritmos para máquina de recomendações somente trabalham com uma coluna para avaliação e o resultado obtido pode ser demonstrado na figura 6:

Figura 6. Amostra da base de dados após a diminuição das variáveis

O arquivo completo possui um total de 1.161 registros.
Neste ensaio fez-se o uso da metodologia de User-based que é uma recomendação baseada na experiência do usuário referente a um produto ou serviço.

Ensaios

Neste ensaio utilizamos o algoritmo IREvaluatorIntro que usa a função PearsonCorrelationSimilarity para determinar o coeficiente de correlação entre as opiniões dos usuários perante aos restaurantes avaliados.
Para o parâmetro Neighborhood size que diz ao algoritmo o número máximo de vizinhos mais próximos foi utilizado o parâmetro 2, para indicar que somente deve ser considerado os 2 vizinhos mais próximos para que não haja uma sobrecarga no processamento.
Nos experimentos realizados dizemos ao algoritmo para que utilize 70% do total de registros da base para treinamento da máquina e os outros 30% para usar como testes para realmente validar se o aprendizado obteve ou não sucesso.

Resultados

Figura 7. Código-fonte do algoritmo IREvaluatorIntro

Figura 8. Resultado do processamento do algoritmo IREvaluatorIntro

Segundo Cazella and Correa and Reategui em 2008, “No contexto de sistemas de recomendação, diz-se que a precisão é a relação entre a nota dada pelo usuário a um conteúdo que lhe foi recomendado e a nota da predição do sistema”

Figura 9. Precision x Recall

Revocação é a fração dos documentos relevantes para que a consulta seja recuperada com sucesso. Em classificação binária, revocação é frequentemente chamada de sensibilidade. Então isto pode ser visto como a probabilidade de que um documento relevante seja recuperado pela consulta.
A precisão alcançada pelo algoritmo com esta base de dados foi de 19,23% e a revocação de 5,32%.

Ensaio #2 – Recomendação de Restaurantes com Logistic Regression

Breve resumo sobre o algoritmo utilizado e sobre os dados utilizados neste ensaio. No máximo 2 linhas.
Neste ensaio utilizamos o algoritmo Stochastic Gradiente Descent que é implementado dentro do projeto Apache Mahout e este algoritmo tem a técnica estatística de regressão linear embutida ao qual iremos utilizar neste ensaio.

Metodologia

Stochastic Gradiente Descente (CGD) é uma abordagem simples e muito eficiente para o aprendizado discriminativo de classificadores lineares sob funções de perda convexas, como Linear Support Vector Machines e Regressão Logística.
A regressão logística é uma técnica estatística que tem como objetivo produzir, a partir de um conjunto de observações, um modelo que permita a predição de valores tomados por uma variável categórica, frequentemente binária, a partir de uma série de variáveis explicativas contínuas e/ou binárias.
O modelo de regressão logística é semelhante ao modelo de regressão linear. No entanto, no modelo logístico a variável resposta é binária. Uma variável binária assume dois valores, como por exemplo, e denominados “fracasso” e “sucesso”, respectivamente.
Abaixo temos a função da regressão linear:

Figura 10. Fórmula da função da regressão linear

Para a realização deste ensaio utilizou-se a mesma base do ensaio 1, porém este algoritmo nos exige que tenhamos dois conjuntos de dados como arquivos de entrada, sendo um conjunto de treinamento que é utilizado para construir o classificador e o outro conjunto de testes para avaliar o modelo construído e então utilizar para prever o valor da variável alvo. Em ambos os arquivos foi necessário adicionar uma linha com o cabeçalho das colunas para que o algoritmo consiga reconhecer qual é o dado presente nas mesmas.

Ensaios

Neste ensaio foi utilizado a regressão logística para processar o arquivo de entrada com as avaliações dos clientes nos diferentes restaurantes contidos na base de dados.
Para este ensaio aplicou-se os métodos de Logistic e AdaptiveLogistic contidos no framework do Apache Mahout, para ambos os algoritmos foi necessário separar os dados em dois arquivos sendo um de treinamento e outro para testes. A separação dos dados para o arquivo de treinamento é representada por 70% da base total e outros 30% foram colocados no arquivo de teste.
A configuração de alguns parâmetros passados para o Mahout fez-se necessária para a execução dos algoritmos para que o mesmo pudesse ler o arquivo com os dados e gerar a saída. Os parâmetros de target, predictors, passes e rate foram alterados para a execução.
O parâmetro target é o qual queremos obter como resultado deste processo. No parâmetro predictors refere-se as colunas do arquivo de entrada ao qual o algoritmo irá ler para o processamento. Já o parâmetro passes é a quantidade de vezes que o algoritmo irá repetir antes de gerar o resultado. O parâmetro rate é a taxa de aprendizado que será usada, este parâmetro somente é usado no algoritmo Logistic.
No parâmetro target foi utilizado o rating como input do algoritmo, no parâmetro passes foi utilizado o valor de 100 com o rate em 50.
No algoritmo Logistic a saída gerada é um resultado com o percentual de acerto em relação ao conjunto de treinamento e teste em conjunto com a matriz de Confusão e a entropia (forma de medir a quantidade de informação). Já no algoritmo Adaptive Logistic o resultado é um arquivo onde cada linha representa o percentual de recomendação referente ao objetivo alvo dado no arquivo de entrada.

Resultados

No algoritmo Logistic houve um problemas quando o parâmetro categories foi alterado de 2 para 3, sendo que a avaliação dos restaurantes tem um range de 0 à 2, sendo representado por 3 categorias, porém o algoritmo não permite mais de 2 categorias para execução, este problema não ocorreu no algoritmo Adaptive Logistic, porém neste algoritmo é necessário indicar um arquivo de saída onde cada linha representa a linha do arquivo de entrada, sendo necessário fazer um agrupamento de informações para obter-se um resultado final.

Resultado do processamento do algoritmo Logistic:

Figura 11. Resultado do processamento do algoritmo AdaptiveLogistic

Após diversos testes com os algoritmos utilizados neste ensaio, o algoritmo Logistic se mostrou mais satisfatório devido ao seu tipo de saída, pois o mesmo já gera um resultado final na sua execução ao contrário do algoritmo AdaptiveLogistic que para cada linha lida do arquivo de entrada é gerada uma linha de saída com o score alcançado através do target.

Figura 12. Exemplo do arquivo de saída do algoritmo AdaptiveLogistic

Conclusão

Demonstrando a aplicação dos algoritmos de recomendação do Apache Mahout em uma base de dados de qualificação de restaurantes para recomendação automática, no artigo foram feitos dois ensaios utilizando diferentes métodos de recomendação, onde a filtragem colaborativa não se mostrou interessante neste projeto, já o método de recomendação utilizando o algoritmo de regressão logística se mostrou interessante devido ao resultado gerado pelo algoritmo.

Podemos realizar a implementação destas soluções de ciência de dados como esta solução de classificação baseada em aprendizado de máquina, para todos os seus sistemas de back-end. Aproveitando o valor de dados corporativos com técnicas de Big Data como Serviço no HD Insights.

 

 

Referências

Pereira, F. S. F. (2013) “Mineração de Dados com Apache Mahout”, http://pt.slideshare.net/fabs177/minerao-de-dados-com-apache-mahout, Dezembro.
Ingersoll, G. (2009) “Introdução ao Apache Mahout”, https://www.ibm.com/developerworks/br/java/library/j-mahout/#ibm-pcon. Dezembro.
Oliveira, Í. O., “Mahout”, 2015.
Cazella, S. C. e Reategui, E. D. e Machado, M. e Barbosa, J. L. V. (2009) “Recomendação de Objetos de Aprendizagem Empregando Filtragem Colaborativa e Competências”, http://www.niee.ufrgs.br/eventos/SBIE/2009/conteudo/artigos/completos/61791_1.pdf, Dezembro.
Cazella, S.C. and Corrêa, I. and Reategui, E. (2008) “Um modelo para recomendação de conteúdos baseado em filtragem Colaborativa para dispositivos móveis”. Revista Novas Tecnologias na Educação, v. 7, pages 12-22.

Jader Fabiano, Jeferson Braga & Juliano Direne.

Jeferson Braga é Cientista de Dados da Pragmatismo.

Posted in data science, nuvem and tagged , , , , , , .

Deixe uma resposta