Introdução
Plataformas de streamming de vídeos usam os sistemas de recomendação para nos mostrar filmes ou programas de TV que não vimos antes, as de imagens, os usa para nos mostrar ideias e imagens em que podemos estar interessados, as de compra os usa para te informar sobre produtos que porventura não tenhamos comprado. Muitos desses sistemas de recomendação aproveitam um processo chamado filtragem colaborativa, que se refere ao processo de fazer recomendações e previsões sobre um usuário com base nos interesses e preferências de outros usuários. Alguns algoritmos populares de filtragem colaborativa incluem a decomposição de valor singular (SVD), os vizinhos mais parecidos com K (K Nearest Neighbor - KNN) e a fatoração de matriz não negativa (Non Negative Matrix Factorizaton - NMF).
Neste artigo, focarei em como aproveitar o NMF em um sistema de recomendação. Começarei explicando o que é o algoritmo, então o levarei a um breve exemplo demonstrando como aplicar o método a um pequeno conjunto de dados de usuários e livros para ilustrar os recursos do algoritmo, e terminarei explicando os principais benefícios deste método e coisas a serem lembrados ao se preparar para aplicá-lo aos seus dados. Não deixe de conferir este artigo para um exemplo NMF passo a passo no Python.
Non-negative Matrix Factorization
A Fatoração de Matrizes Não Negativas (NMF) é uma técnica amplamente utilizada em análise de dados e aprendizado de máquina. A NMF descompõe uma matriz não negativa $V$ (item do usuário) em dois fatores: matrizes não negativas $W$ e $H$: uma matriz de características (representa uma aproximação da matriz original) e uma matriz de pesos (componentes que representam um fator de participação). Essas duas novas matrizes são capazes de fornecer informações interpretáveis sobre os fatores latentes e os padrões subjacentes que não são necessariamente visíveis ou presente explicitamente nos dados originais e são úteis para identificar padrões em dados (ver Himanshu Sharma artigo para obter informações adicionais sobre encontrar padrões em dados com NMF) .
O algoritmo em si pode ser considerado um problema de otimização, onde procuramos minimizar o erro de $$\|V-WH\|$$ onde $V \in \mathbb{R}^{m \times n}$, $w \in \mathbb{R}^{m \times k}$, $H \in \mathbb{R}^{k \times n}$ e $k$ é a classificação da decomposição, que pode ser encontrada usando a raiz do erro quadrado médio.
O algoritmo de um dos métodos mais simples de cálculo de $W$ e $H$ consiste em
- inicializar com $W$ e $H$ não negativas
- atualizar, iterativamente, $W$ e $H$ de acordo com as equações: $$\begin{array}{rcl} H_{ij}^{n+1} &\leftarrow& H_{ij}^{n} \dfrac{\left((W^{n})^T V\right)_{ij}}{\left((W^{n})^T W^{n} H^{n}\right)_{ij}} \\[0.5cm] W_{ij}^{n+1} &\leftarrow& W_{ij}^{n} \dfrac{\left(V (H^{n+1})^T\right)_{ij}}{\left(W^{n} H^{n+1} (H^{n+1})^{T}\right)_{ij}} \end{array}$$ até atingirmos um número máximo especificado de iterações ou até que $\|V — WH\|$ seja menor que alguma tolerância que definimos.
Funções de atualização para o NMF
Depois que $W$ e $H$ terminarem a atualização, podemos usá-los para entender os padrões subjacentes e os fatores latentes que não conseguimos extrair do conjunto de dados original. Isso será mais fácil de ver quando examinarmos alguns números reais na seção de exemplos.
Uma vez calculados $W$ e $H$, podemos reconstruir a matriz $V$ tomando o produto de $W$ e $H$ para ter $WH$. Com esta nova matriz $WH$, agora podemos obter insights sobre as prováveis preferências dos usuários e até mesmo entender até que ponto eles podem gostar de um novo produto que não compraram ou usaram anteriormente. Para ilustrar esse fato, vamos examinar o seguinte exemplo:
Exemplo
Imagine que temos um conjunto de dados de nossos amigos e o quanto eles gostaram de determinados livros. Nas colunas temos nossos amigos, nas linhas temos os nomes dos livros e os valores da matriz são as classificações correspondentes em uma escala de $1$ a $10$, onde uma classificação de $10$ significa que eles adoraram o livro. Neste exemplo, usaremos uma classificação $0$ para indicar quando alguém não leu um livro. $$V = \begin{array}{|cccc|c} Paul & Jane & Fred & Kay & \\ 9 & 3 & 8 & 9 & \text{to Kill a Mokingybird} \\ 3 & 0 & 3 & 10 & \text{The Hobbit} \\ 7 & 2 & 10 & 0 & \text{The Great Gatsby} \\ 0 & 10 & 4 & 3 & \text{Jane Eyre} \\ 8 & 9 & 0 & 3 & \text{War and Peace} \\ \end{array}$$
Ao realizar NMF em $V$, temos as seguintes matrizes não negativas:
$$W = \begin{array}{|cccc|c} \text{Fator } 1 & \text{Fator } 2 & \text{Fator } 3 & \text{Fator } 4 & \\ 0.364 & 0.114 & 0.627 & 0.286 & \text{to Kill a Mokingybird} \\ 0.000 & 0.148 & 0.314 & 0.000 & \text{The Hobbit} \\ 0.677 & 0.000 & 0.136 & 0.130 & \text{The Great Gatsby} \\ 0.115 & 0.053 & 0.000 & 1.162 & \text{Jane Eyre} \\ 0.000 & 0.000 & 0.832 & 1.068 & \text{War and Peace} \\ \end{array}$$
$$H = \begin{array}{|cccc|c} Paulo & Jane & Fred & Kay & \\ 8.134 & 1.274 & 14.804 & 0.000 & \text{Fator } 1 \\ 0.000 & 0.000 & 21.574 & 59.708 & \text{Fator } 2 \\ 9.635 & 0.157 & 0.000 & 3.539 & \text{Fator } 3 \\ 0.000 & 8.511 & 0.540 & 0.000 & \text{Fator } 4 \\ \end{array}$$
Ambas as matrizes nos permitem ver os fatores latentes para cada uma das nossas dimensões (livros e amigos).
A Matriz $W$ nos mostra o quanto cada livro contribui para cada um dos fatores latentes. É interessante que O Grande Gatsby tenha um peso muito alto para o fator latente $1$, indicando que o fator latente $1$ foi amplamente determinado por O Grande Gatsby. O fator latente $4$ foi determinado principalmente por Jane Eyre e War and Peace.
A matriz $H$ nos mostra o quanto cada amigo pertence aos fatores latentes. O peso mais alto de Jane Eyre caiu no fator latente $4$, o que provavelmente se deve ao fato de ela ter dado classificações altas a Jane Eyre e War and Peace, os 2 livros que contribuíram fortemente para o fator latente $4$ na matriz $W$. Isto mostra que o fator latente $44 é uma boa representação das preferências de Jane Eyre.
Multiplicar $W$ e $H$ nos dá nossas recomendações na forma de uma matriz reconstruída $V$:
$$WH = \begin{array}{|cccc|c} Paul & Jane & Fred & Kay & \\ 8.999 & 3.000 & 7.999 & 9.000 & \text{to Kill a Mokingybird} \\ 3.024 & 0.049 & 3.127 & 9.932 & \text{The Hobbit} \\ 6.823 & 1.994 & 10.098 & 0.482 & \text{The Great Gatsby} \\ 0.936 & 10.033 & 3.483 & 3.187 & \text{Jane Eyre} \\ 8.020 & 8.964 & 0.560 & 2.946 & \text{War and Peace} \\ \end{array} \approx V$$
Observe que o algoritmo preencheu os zeros que estavam presentes nos dados originais. Conseguimos usar informações anteriores sobre as preferências de livros de um grupo de amigos para fazer previsões sobre como nossos amigos poderiam avaliar livros que não leram antes. Esse é o poder do algoritmo NMF e da filtragem colaborativa em geral. Isso se torna ainda mais poderoso quando temos um conjunto de dados maior que nos permite aprender melhor os fatores latentes em jogo e fazer previsões mais precisas em relação aos livros não lidos que um usuário pode avaliar bem. Por exemplo, se tivéssemos um conjunto de dados de livros maior contendo vários livros que Jane não leu antes, poderíamos realizar o NMF e usar os pesos que correspondem a Jane e os livros que ela não leu e recomendar os 5 livros com os maiores pesos.
Em nosso exemplo, aproveitamos os dados de classificação para recomendar livros que os usuários também possam avaliar bem, mas esse algoritmo pode ser aplicado a muitos outros conjuntos de dados. Poderíamos ter usado dados contendo o número de vezes que os clientes compraram certos tipos de plantas em uma loja de jardinagem, ou o número de postagens nas redes sociais de contas específicas que os usuários salvaram, ou mesmo a quantidade de vezes que os usuários ouviram certas músicas de um serviço de streaming de música.
Agora que expliquei o algoritmo e passei por um exemplo básico de como usá-lo, quero enfatizar brevemente os benefícios de usá-lo em um sistema de recomendação e destacar algumas coisas em que pensar antes de fazê-lo.
Benefícios
- Explicabilidade: o NMF é um algoritmo de aprendizado de máquina bastante simples, facilitando a explicação para as principais partes interessadas. O fato do algoritmo ser capaz de extrair fatores latentes permite explicar os pesos que estão presentes na matriz reconstruída final utilizada para recomendação e assim explicar porque um produto específico é recomendado a um determinado cliente.
- Escalabilidade: adicionar recursos e novos pontos de dados ao modelo é relativamente fácil e não tem impacto significativo no tempo de execução do modelo. Devido a esta robustez, o NMF é dimensionado de forma muito eficaz.
Cuidados
Formato dos dados: como o algoritmo exige que os dados de entrada estejam na forma da matriz $V$, você deve ter certeza de que é possível transformar seu conjunto de dados de acordo. Se for particularmente difícil realizar essa transformação, talvez seja melhor aproveitar um algoritmo diferente.
Desempenho: Dependendo do seu conjunto de dados, este algoritmo pode não superar outros métodos de filtragem colaborativa. É importante testar outros métodos para encontrar o algoritmo mais adequado aos seus dados e tarefa.
Conclusão
NMF é um método de aprendizado de máquina muito eficaz para aproveitar ao criar sistemas de recomendação, e espero que você considere usá-lo em seus projetos futuros!
Referências
[1] Daly, Quin. Recommending Products with NMF: Understanding NMF and its application as a recommendation algorithm. 2023. Disponível em: https://pub.towardsai.net/recommending-products-using-nmf-4fb7a9137a4c. Acesso: 13/03/2024
0 Comentários