# Sistema de recomendação

Um Sistema de Recomendação combina várias técnicas computacionais para selecionar itens personalizados com base nos interesses dos usuários e conforme o contexto no qual estão inseridos. Tais itens podem assumir formas bem variadas como, por exemplo, livros, filmes, notícias, música, vídeos, anúncios, links patrocinados, páginas de internet, produtos de uma loja virtual, etc. Empresas como Amazon, Netflix e Google são reconhecidas pelo uso intensivo de sistemas de recomendação com os quais obtém grande vantagem competitiva. Empreendimentos brasileiros também estão aderindo tecnologias que utilizam um sistema de recomendação, muitas vezes com machine learning, Deep Learning ou Inteligência Artificial

## Contextualização

Em resposta à dificuldade das pessoas em escolher entre uma grande variedade de produtos e serviços e entre as várias alternativas que lhe são apresentadas, surgem os sistemas de recomendação computacionais. A evolução destes sistemas e o fato deles trabalharem com grandes bases de informações permitiram que recomendações emergentes (não triviais) pudessem ser alcançadas, proporcionando ainda maior credibilidade que uma recomendação humana.
Os proponentes de um dos primeiros sistemas de recomendação, denominado Tapestry, desenvolvido no início dos anos 90, criaram a expressão “Filtragem Colaborativa” visando designar um tipo de sistema específico no qual a filtragem da informação era realizada com o auxílio humano, ou seja, através da colaboração entre os grupos interessados. Vários pesquisadores acabaram adotando esta terminologia para denominar qualquer tipo de sistema de recomendação subseqüente. Resnick, no seu artigo, defendeu o termo “sistemas de recomendação” como terminologia mais genérica do que filtragem colaborativa, já que sistemas de recomendação podem existir sem nenhuma colaboração entre as pessoas.

## Sistemas de Recomendação como área de Pesquisa

As raízes dos sistemas de recomendação podem ser encontradas nos trabalhos extensivos das ciências cognitivas, teoria de aproximação, recuperação da informação, teoria de previsões e também possuem influências das ciências de administração e marketing. A área de sistemas de recomendação emergiu como uma área de pesquisa independente, no meio da década de 90, quando a partir do sistema de recomendação Tapestry, os pesquisadores passaram a focar em problemas de recomendação que explicitamente invocavam estruturas de avaliação (ratings). A partir deste momento surgiram os primeiros artigos sobre filtragem colaborativa, nos quais o problema foi formalizado primeiramente e desde então estudado intensamente.

## Formalização do Problema

    Definição: Seja C o conjunto de todos os usuários de um determinado sistema, e seja S' o conjunto de todos os possíveis itens que podem ser recomendados como livros, filmes, restaurantes etc. Seja u a função utilidade que mede o quão útil é um determinado item s para um determinado usuário c, i.e., u:C x S → R, onde R é um conjunto totalmente ordenado. Então, para cada usuário c ∈ C, procura-se um item s' ∈ S que maximiza a utilidade do usuário. Isto pode ser expressado pela equação abaixo:
          ∀ c ∈ C, s'$_c$ = argmax$_{s∈S}$ u(c,s)
Em um sistema de recomendação a utilidade de um item é geralmente representada por uma avaliação que indica o quanto um determinado usuário gosta de um item (e.g. Rafaela deu ao filme "Harry Potter" a nota 7 em 10). No entanto, conforme descrito na definição acima, a função de utilidade pode ser uma função arbitrária.
Cada elemento do espaço de usuários C pode ser definido através de um profile que inclui as características do usuário, como a sua idade, sexo, estado civil, renda, etc. No caso mais simples, o profile pode conter um único elemento como o User ID. Da mesma forma, cada item do espaço S pode ser definido por um conjunto de características. Por exemplo, na recomendação de filmes, na qual S é a coleção de filmes, cada filme pode ser representado não apenas pelo seu ID, mas também pelo seu título, gênero, diretor, ano de lançamento, atores principais, etc.
O problema central dos sistemas de recomendação reside no fato da utilidade u geralmente não ser definida em todo o espaço C x S, mas apenas em um subconjunto deste. Isto significa que u precisa ser extrapolado para todo o espaço C x S. Geralmente em sistemas de recomendação, a utilidade é definida através de avaliações, e estas são definidas apenas nos itens previamente avaliados pelos usuários. Deste modo, o algoritmo de recomendação deve ser capaz de estimar (predizer) as avaliações não realizadas para os pares usuário-item e de fazer recomendações apropriadas baseadas nestas predições.
A extrapolação de avaliações conhecidas para avaliações inexistentes é geralmente feita pela 1) especificação de heurísticas que definem a função utilidade e validam empiricamente sua performance e 2) pelas estimativas da função utilidade através da otimização de algum critério de performance como o mean square error. Assim que avaliações desconhecidas são estimadas, o sistema de recomendação seleciona aquelas com maiores avaliações para serem recomendadas.
A predição de avaliações de itens ainda não avaliados pode ser feita de diferentes formas utilizando métodos de aprendizado de máquinas, teorias de aproximação e vários tipos de heurísticas. Os sistemas de recomendação são classificados de acordo com o método de predição utilizado, o que auxilia na pesquisa da área. Esta classificação é feita usualmente em três categorias propostas inicialmente por Shoham e Balabanovic [1997]. Contudo, a explicação de cada uma delas vem sendo complementada pelos diversos trabalhos conduzidos desde então:
* Recomendações Baseadas em Conteúdo: O usuário receberá recomendações de itens similares a itens preferidos no passado;
* Recomendações Colaborativas: O usuário receberá recomendações de itens que pessoas com gostos similares aos dele preferiram no passado. Este método é subdividido em duas catergorias: a primeira chamada de memory-based, e a segunda chamada de model-based;
* Métodos Híbridos: Estes métodos combinam tanto estratégias de recomendação baseadas em conteúdo quanto estratégias baseadas em colaboração.

## Avaliação de Sistemas de Recomendação

Na caracterização dos sistemas de recomendação como uma área de pesquisa científica, é fundamental entender as metodologias para avaliação dos sistemas. Uma forma eficaz para a avaliação de sistemas de recomendação é através da comparação das predições realizadas com as respectivas avaliações reais de usuários para as instâncias preditas. Este tipo de avaliação era considerada custosa e difícil antes do surgimento das grandes empresas de comércio eletrônico, que possuem grandes bases de dados com milhares de usuários e itens. Desta forma, com a supressão de uma determinada avaliação já feita, o sistema de recomendação é utilizado para fazer uma determinada predição e, então, esta é comparada com a avaliação real.
A obtenção de métricas para aferir o desempenho de um sistema de recomendação antes de uma ampla utilização comercial é fundamental para verificar se as predições realizadas serão adequadas para o propósito em questão. A seguir são apresentadas quatro das principais métricas utilizadas na literatura para a avaliação de sistemas de recomendação:
* Precisão I (Precision): A precisão de um sistema indica a quantidade de itens recomendados que são do interesse do usuário em relação ao conjunto de todos os itens que lhe são recomendados.
* Precisão II: A precisão de um sistema indica o quanto uma predição é próxima da avaliação real feita pelo usuário. Esta aferição só é possível de ser feita conforme ensaio explicado no início desta seção.
* Recuperação (Recall): O índice de recuperação indica a quantidade de itens de interesse do usuário que aparecem na lista de recomendações.
* Cobertura (Coverage): A cobertura é a proporção de itens que são passíveis de serem recomendados em relação ao conjunto de todos os itens conhecidos pelo sistema de recomendação.