Aula 10: Sistemas de Recomendação: Fatoração de Matrizes (SVD e NMF)

Aprendizado Não Supervisionado

Marcos M. Raimundo — Instituto de Computação, UNICAMP

2026-11-04

Revisão e Introdução

Que filme recomendar para esta pessoa?

  • Considere o problema de recomendar filmes para uma pessoa com base nas notas que ela deu a outros filmes, e também nas notas de milhares de outras pessoas.
  • Cada linha é um usuário, cada coluna é um filme, e \(r_{ui}\) é a nota de \(u\) para \(i\).
  • O cinza são os filmes que a pessoa nunca avaliou. Recomendar é adivinhar o que há nas células cinza.
  • MovieLens (a base do trabalho final): 990.425 notas de 0,5 a 5, 0,14% da tabela preenchida, e o usuário mediano avaliou 8 filmes.
  • Nosso recorte: 2.000 usuários ativos × 1.000 filmes populares, 14,1% preenchido. É um cenário favorável.

O que já vimos que pode ajudar

  • Aula 6: a PCA resume uma tabela com poucos fatores, e a PPCA dá a versão probabilística, \(\mathbf{x}=\mathbf{W}\mathbf{z}+\boldsymbol\mu+\boldsymbol\epsilon\). Mas lá todos os atributos eram conhecidos.
  • Aula 9: tabelas discretas e quase vazias. O colisor mostrou que condicionar num efeito comum cria dependência entre as causas. Ele volta no fim da aula: toda nota existe porque alguém escolheu ver o filme.

Ideia central

Recomendação é parecida com a PCA da Aula 6, com boa parte da tabela escondida

  • Continua igual: supomos que poucos fatores explicam os dados.
  • Muda: o objetivo olha só para as células conhecidas.
  • No fim: um espaço em que usuários e filmes convivem, e que precisamos saber ler.

Roteiro: 5 perguntas

  1. Baselines: até onde vão a média e a SVD com os buracos preenchidos?
  2. Modelo: como colocar pessoas e filmes no mesmo espaço, separando gosto e generosidade?
  3. Treino: como ajustar esse modelo com SGD e com ALS?
  4. NMF: o que muda quando proibimos números negativos?
  5. Leitura e suposições: como interpretar o espaço aprendido, e o que estamos supondo?

Baselines

Primeiro, o mais simples

Como medir: 80% das notas para treino, 10% para validação, 10% para teste. Usamos o RMSE nas notas de teste, na mesma escala das estrelas.

Tentativa 1, a mesma nota para tudo: prever sempre a média \(\mu\). RMSE 0,979, cerca de uma estrela.

Tentativa 2, considerar quem dá a nota e qual é o filme: \[\hat r_{ui}=\mu+b_u+b_i\]

  • \(b_u\): o quanto \(u\) costuma dar notas acima ou abaixo da média.
  • \(b_i\): o quanto \(i\) costuma receber notas acima ou abaixo da média.

O primeiro modelo a vencer

Com os vieses, o RMSE cai para 0,769. Nenhum outro passo da aula reduz tanto o erro.

Temos uma ferramenta da Aula 6: a SVD

Teorema (Eckart-Young-Mirsky)

Seja \(R\in\mathbb{R}^{M\times N}\) com todas as entradas conhecidas, \(R=\sum_{k=1}^r\sigma_k\mathbf{u}_k\mathbf{v}_k^T\), e \(K<\operatorname{posto}(R)\). Entre as matrizes de posto no máximo \(K\), a soma dos \(K\) primeiros termos minimiza \(\|R-\hat R\|_F^2\).

O que é cada pedaço de \(PQ^T\)?

  • Usuários em \(P\), filmes em \(Q\): o produto herda as linhas da esquerda e as colunas da direita.
  • O que é \(K\): o tamanho que sobra no meio do produto, escolhido por nós. Cada posição é um fator.
  • A célula: \(\hat r_{ui}=\sum_{k=1}^K P_{uk}(Q^T)_{ki}=\mathbf{p}_u^T\mathbf{q}_i=1{,}5\cdot2{,}0+0{,}5\cdot1{,}0+1{,}0\cdot0{,}5=4{,}0\) (números ilustrativos).
  • Por que é um resumo: 2.000.000 células geradas por \((M+N)K=\) 60.000 números, com \(K=\) 20.

A SVD é a PCA da Aula 6

Seja \(X=U\Sigma V^T\) centrada.

Passo 1, covariância: \(\quad\frac1n X^TX=\frac1n V\Sigma U^TU\Sigma V^T\)

Passo 2, \(U^TU=I\): \(\quad\frac1n X^TX=V\frac{\Sigma^2}{n}V^T\)

As colunas de \(V\) são as direções principais, com autovalores \(\sigma_k^2/n\). \(P\) faz o papel de \(\mathbf{z}_n\), e \(Q\), o de \(\mathbf{W}\) (a menos da divisão de \(\Sigma\)).

Invariância: para \(G\) invertível, \((PG,\ QG^{-T})\) produz o mesmo \(PQ^T\). Os dados determinam o subespaço, mas os eixos ficam em aberto.

Tapando os buracos

O teorema supõe a tabela completa. A saída natural é preencher os buracos. Com quê?

Tentativa 3, com zero: a SVD passa a minimizar \[\underbrace{\sum_{(u,i)\in\Omega}\left(r_{ui}-\mathbf{p}_u^T\mathbf{q}_i\right)^2}_{\text{notas reais}}+\underbrace{\sum_{(u,i)\notin\Omega}\left(0-\mathbf{p}_u^T\mathbf{q}_i\right)^2}_{\text{zeros inventados}}\] A segunda soma tem cerca de 8 vezes mais termos. Nota real média no teste: 3,41. Previsão média: 1,25.

Tentativa 4, com a média: bem melhor, mas perde para os vieses, e a matriz fica densa (\(\mathcal{O}(MNK)\)).

Tentativa 5, com a previsão dos vieses: fatoramos o resíduo \(r_{ui}-\mu-b_u-b_i\). Nele, um buraco vale zero, ou seja, “nada além do esperado”. Para prever, somamos os vieses de volta: \(\hat r_{ui}=\mu+b_u+b_i+\hat Y_{ui}\), com \(\hat Y\) a SVD truncada dos resíduos. É o melhor até aqui, mas ainda ajusta células que ninguém avaliou.

As cinco tentativas lado a lado

Uma SVD ingênua erra mais que uma constante. Os vieses, com uma fórmula de três termos, superam a SVD com a média.

O que ainda falta

Com os vieses, todo mundo recebe a mesma lista

Para um usuário fixo, a ordem dos filmes em \(\mu+b_u+b_i\) depende só de \(b_i\). No nosso recorte, ela começa com Planet Earth II, Blue Planet II, It’s Such a Beautiful Day, Parasite, The Jinx: The Life and Deaths of Robert Durst.

O modelo sabe que o filme é bem avaliado e que você dá notas altas, mas não sabe se você gosta de animação. Falta estrutura no que sobra depois de tirar os vieses.

Intuição: Gostos Ocultos

Por que alguém gosta de um filme?

  • Um filme tem perseguições, é uma comédia leve, tem um roteiro complicado. Cada pessoa se importa mais com umas coisas que com outras.
  • \(\mathbf{q}_i\in\mathbb{R}^K\): quanto o filme \(i\) tem de cada fator (ação, romance…).
  • \(\mathbf{p}_u\in\mathbb{R}^K\): quanto o usuário \(u\) aprecia cada fator.

Muita ação e a pessoa adora ação: o produto sobe a previsão. Se ela detesta (\(p_{u1}<0\)), derruba. \[\mathbf{p}_u^T\mathbf{q}_i=\sum_{k=1}^K p_{uk}q_{ik}\]

Somando aos vieses, duas pessoas já podem receber listas diferentes: \[\hat r_{ui}=\mu+b_u+b_i+\mathbf{p}_u^T\mathbf{q}_i\]

Ninguém nos deu esses vetores

Na PCA: partimos de atributos conhecidos \(\mathbf{x}_n\) e calculamos o código \(\mathbf{z}_n\). Aqui: o dado é só “\(u\) deu a nota \(r_{ui}\) a \(i\)”. Usuário e filme são índices.

O que isso muda

  • As linhas de notas seriam atributos ruins: 86% delas não existem, mesmo no recorte.
  • Consequências: não precisamos de atributos; os eixos não vêm com nome; quem não tem histórico não tem vetor (cold start).
  • Primeira suposição, posto baixo: poucos fatores explicam os gostos. Sem isso, as células conhecidas não diriam nada sobre as desconhecidas.

Como é esse espaço na prática?

  • Dois primeiros fatores da SVD do resíduo, aprendidos sem gêneros.
  • Um eixo parece separar franquias de filmes autorais, e o outro destaca os super-heróis recentes. A leitura é nossa, feita depois de olhar os nomes.
  • A nuvem perto da origem volta no Bloco 5.

Bloco 1: Aprender Só com o que Foi Observado

Parar de inventar notas

As tentativas 3 a 5 ajustam valores que nós mesmos inventamos. A saída: célula vazia não entra na conta (Funk, 2006; Koren, Bell & Volinsky, 2009).

\[\mathcal{L}(P,Q)=\frac12\sum_{(u,i)\in\Omega}\left(r_{ui}-\mathbf{p}_u^T\mathbf{q}_i\right)^2+\frac\lambda2\sum_{u}\|\mathbf{p}_u\|^2+\frac\lambda2\sum_{i}\|\mathbf{q}_i\|^2\]

  • Por que \(\lambda\): quem tem poucas notas não determina \(K\) coordenadas. Sem esse freio, o modelo decora o que viu.
  • O que se perde: Eckart-Young-Mirsky não se aplica. Sem fórmula fechada, precisamos iterar (Bloco 2).

Os vieses de volta, e o que estamos supondo

\[\min_{P,Q,\mathbf{b}}\ \frac12\sum_{(u,i)\in\Omega}\left(r_{ui}-\hat r_{ui}\right)^2+\frac\lambda2\left(\|\mathbf{b}_u\|^2+\|\mathbf{b}_i\|^2+\|P\|_F^2+\|Q\|_F^2\right),\quad\hat r_{ui}=\mu+b_u+b_i+\mathbf{p}_u^T\mathbf{q}_i\]

Além do posto baixo, essa perda supõe:

  • Interação aditiva e bilinear: os efeitos se somam. Não há lugar para contexto nem para a ordem em que os filmes foram vistos.
  • Ruído Gaussiano com variância constante: justifica a perda quadrática, embora as notas sejam discretas e limitadas.
  • A falta não informa o valor: o motivo de uma célula estar vazia não diria nada sobre a nota. Já dá para desconfiar dessa (Bloco 5).

Pausa 1: Baseline e Dados Faltantes

Com \(\mu = 3{,}5\), \(b_u = -0{,}6\) (Carlos, crítico) e \(b_i = +0{,}8\) (Interestelar), qual é a nota de baseline? E a nota final, se \(\mathbf{p}_u^T \mathbf{q}_i = +0{,}5\)?

Some os efeitos sistemáticos antes de considerar qualquer afinidade latente. O que cada termo diz sobre Carlos e sobre o filme?

O Colapso da SVD e os Vieses

Julgue V ou F — a questão só conta se acertar os 4 itens:

  • □ O Teorema de Eckart-Young-Mirsky garante que a SVD truncada fornece a melhor aproximação de posto \(K\) mesmo quando a matriz possui \(90\%\) de entradas não observadas preenchidas com NaN.
  • □ Preencher as células vazias de uma matriz de recomendação com zero é equivalente a assumir que a ausência de avaliação representa insatisfação máxima do usuário com o item.
  • □ O preditor de baseline \(\mu + b_u + b_i\) consegue capturar o fato de que um usuário generoso tende a dar notas altas mesmo para filmes medianos.
  • □ A regularização \(L_2\) nos fatores latentes (\(\lambda \|\mathbf{p}_u\|^2\)) tem como objetivo principal forçar as coordenadas dos fatores a serem estritamente não-negativas.

Pausa 1: Baseline e Dados Faltantes — Resposta

O Colapso da SVD e os Vieses — Resposta

  • ✗ O teorema supõe todas as entradas reais e conhecidas; não se aplica a entradas indefinidas.
  • ✔ Na escala de 0,5 a 5, zero é pior que a pior nota possível, e o modelo passa a prever desinteresse por quase todo o catálogo.
  • ✔ \(b_u>0\) eleva de forma aditiva a nota base de todos os itens desse usuário.
  • ✗ A penalidade \(L_2\) limita magnitudes para evitar sobreajuste, sem restringir o sinal. Isso é papel da NMF.

Voltando à pergunta: a baseline é \(3{,}5-0{,}6+0{,}8=3{,}7\), e a nota final é \(3{,}7+0{,}5=4{,}2\). O filme aclamado compensa parte da exigência de Carlos, e a afinidade latente acrescenta meio ponto.

Bloco 2: Como Treinar: SGD e ALS

SGD: uma nota de cada vez (Funk-SVD)

A perda não é convexa em \((P,Q)\): \((1-pq)^2\) vale 0 em \((1,1)\) e \((-1,-1)\), mas 1 em \((0,0)\). Com um dos fatores fixo, ela é convexa. Os dois algoritmos clássicos exploram isso de jeitos diferentes.

Para cada nota \((u,i)\in\Omega\):

  1. Erro: \(e_{ui}=r_{ui}-\hat r_{ui}\).
  2. Vieses: \(\ b_u\leftarrow b_u+\gamma(e_{ui}-\lambda b_u),\quad b_i\leftarrow b_i+\gamma(e_{ui}-\lambda b_i)\)
  3. Fatores: \(\ \mathbf{p}_u\leftarrow\mathbf{p}_u+\gamma(e_{ui}\mathbf{q}_i-\lambda\mathbf{p}_u),\quad\mathbf{q}_i\leftarrow\mathbf{q}_i+\gamma(e_{ui}\mathbf{p}_u-\lambda\mathbf{q}_i)\)

Em voz alta: se a nota veio acima do previsto, aproximamos o gosto do usuário do perfil do filme.

  • Custo: \(\mathcal{O}(|\Omega|K)\) por passada. Depende só das notas conhecidas.
  • Cuidado: a penalidade aqui é por nota, e na perda global é por usuário e filme. O \(\lambda\) do SGD e o do ALS não são comparáveis.

ALS: um fator de cada vez

Fixou \(Q\), o problema em \(P\) é convexo e tem solução exata. Alternamos entre os dois. Com \(\tilde r_{ui}=r_{ui}-\mu-b_u-b_i\) e vieses fixos:

Passo 1, termos com \(\mathbf{p}_u\): \(\quad\mathcal{L}_u=\frac12\sum_{i\in\mathcal{I}_u}\left(\tilde r_{ui}-\mathbf{q}_i^T\mathbf{p}_u\right)^2+\frac\lambda2\|\mathbf{p}_u\|^2\)

Passo 2, gradiente: \(\quad\nabla_{\mathbf{p}_u}\mathcal{L}_u=-\sum_{i\in\mathcal{I}_u}\mathbf{q}_i\left(\tilde r_{ui}-\mathbf{q}_i^T\mathbf{p}_u\right)+\lambda\mathbf{p}_u\)

Passo 3, igualando a zero: \(\quad\left(\sum_{i\in\mathcal{I}_u}\mathbf{q}_i\mathbf{q}_i^T+\lambda I_K\right)\mathbf{p}_u=\sum_{i\in\mathcal{I}_u}\tilde r_{ui}\mathbf{q}_i\)

Passo 4, matriz definida positiva (\(\lambda>0\)): \(\quad\mathbf{p}_u=\left(\sum_{i\in\mathcal{I}_u}\mathbf{q}_i\mathbf{q}_i^T+\lambda I_K\right)^{-1}\sum_{i\in\mathcal{I}_u}\tilde r_{ui}\mathbf{q}_i\)

Cada usuário é uma regressão Ridge

Os atributos são os perfis dos filmes que ele viu, e os usuários podem ser resolvidos em paralelo (Spark MLlib). Para \(\mathbf{q}_i\) vale o mesmo com papéis trocados. Um filme sem avaliações fica com \(\mathbf{q}_i=\mathbf{0}\): é o cold start em forma de equação.

E na prática, quanto melhorou?

RMSE de teste, com \(K=\) 20 e hiperparâmetros escolhidos na validação.

  • Fatores: Funk-SVD 0,728 e ALS 0,733. Superam a SVD no resíduo (0,747).
  • Tamanho dos ganhos: média → vieses, de 0,979 a 0,769. Vieses → fatores, de 0,769 a 0,728. É menos, mas é o que permite listas diferentes.
  • SGD × ALS: o ALS estabiliza em poucas iterações. O SGD ainda estava caindo na época 20. A diferença de 0,005 não aponta um vencedor.

E se não houvesse \(\lambda\)?

  • Com \(K=50\), são 150.000 parâmetros para 225.605 notas.
  • Quase sem freio (\(\lambda=0{,}01\)): treino 0,284, teste 1,661, pior que a média global.
  • Com \(\lambda=\) 20 (validação): treino 0,647, teste 0,732.
  • Extremos: \(\lambda\to\infty\) volta aos vieses. Quem tem menos notas que fatores (a mediana da base é 8) só tem sistema invertível com \(\lambda>0\).

Pausa 2: Otimização e Atualização

Com \(\gamma = 0{,}05\), \(\lambda = 0{,}02\), \(\mathbf{p}_u = [0{,}8;\ 0{,}2]^T\), \(\mathbf{q}_i = [1{,}0;\ 0{,}5]^T\), \(r_{ui} = 5{,}0\) e baseline \(3{,}5\), quanto valem \(\hat{r}_{ui}\), \(e_{ui}\) e o novo \(\mathbf{p}_u\)?

Depois do cálculo, observe qual coordenada de \(\mathbf{p}_u\) cresce mais, e por quê.

Dinâmica de Otimização

Julgue V ou F — a questão só conta se acertar os 4 itens:

  • □ A função de custo da fatoração de matrizes regularizada \(\mathcal{L}(P, Q)\) é globalmente convexa em relação a todas as variáveis simultaneamente.
  • □ O algoritmo ALS resolve sistemas lineares exatos de forma alternada, garantindo que o valor da função de perda decresça (ou permaneça constante) a cada iteração.
  • □ No algoritmo SGD de Funk, se a predição para um item for exatamente igual à nota real observada (\(e_{ui} = 0\)), os fatores latentes \(\mathbf{p}_u\) e \(\mathbf{q}_i\) não sofrem alteração alguma.
  • □ Em sistemas de recomendação em larga escala, o ALS é preferido sobre o SGD quando o treinamento precisa ser distribuído em dezenas de máquinas via computação em memória (ex.: Spark).

Pausa 2: Otimização e Atualização — Resposta

Dinâmica de Otimização — Resposta

  • ✗ O termo bilinear \(\mathbf{p}_u^T\mathbf{q}_i\) torna a perda não-convexa em conjunto.
  • ✔ Cada passo resolve exatamente uma regressão Ridge em um bloco, então a perda não aumenta. Isso não garante mínimo global.
  • ✗ A regularização permanece ativa: \(\mathbf{p}_u\leftarrow(1-\gamma\lambda)\mathbf{p}_u\), uma pequena contração.
  • ✔ Fixado \(Q\), cada \(\mathbf{p}_u\) é um problema independente, fácil de distribuir.

Voltando à pergunta: \(\hat r_{ui}=3{,}5+0{,}9=4{,}4\) e \(e_{ui}=+0{,}6\). Assim, \(\mathbf{p}_u^{\text{novo}}=[0{,}8292;\ 0{,}2148]^T\). A primeira coordenada cresce mais porque é o fator mais forte do filme: a nota acima do previsto reforça o gosto que o filme mais expressa.

Bloco 3: E se Proibirmos Números Negativos? (NMF)

O incômodo com os sinais

O que quer dizer um filme ter \(-0{,}3\) de um fator? Na PCA de rostos, os componentes somam luz aqui e tiram ali, e nenhum parece um olho ou um nariz.

Massinha (PCA/SVD)

  • Colocamos massa em um lugar e tiramos de outro.
  • Cada passo isolado não representa nada reconhecível.

Lego (NMF)

  • Só podemos empilhar peças.
  • Se não dá para tirar, as peças precisam ser partes úteis.

\[V\approx WH,\quad W_{ik}\ge0,\ H_{kj}\ge0,\qquad\text{ou seja,}\quad\mathbf{v}_j\approx\sum_{k=1}^K H_{kj}\mathbf{w}_k\]

Lee & Seung (1999) relatam olhos e bocas em rostos, e tópicos em textos. Faz sentido para dados já não negativos: pixels, contagens, reproduções.

Por que a restrição levaria a partes?

Proposição

Se \(W,H\ge0\) e \((WH)_{ij}=\sum_k W_{ik}H_{kj}=0\), então \(W_{ik}H_{kj}=0\) para todo \(k\).

Demonstração. Uma soma de termos não negativos só é zero se todos forem zero. \(\square\)

  • Sem subtração, um fator não pode desfazer o excesso de outro.
  • Muitos zeros de verdade obrigam cada fator a atuar só em parte das linhas e colunas.
  • Isso explica uma tendência, mas não garante que ela apareça. Vejamos nos dados.

Onde dá para ver: MNIST

MNIST, \(K=16\): pixels não negativos, fundo zero de verdade.

  • NMF: traços e arcos, embora algumas bases pareçam dígitos inteiros. 81% dos pixels são praticamente nulos.
  • PCA: regiões positivas e negativas misturadas. 42% das cargas são negativas.
  • A limitação: Eckart-Young-Mirsky impede a NMF de superar a SVD em erro: 0,541 contra 0,491.

E nos filmes? Quem assiste ao quê

Outra pergunta: em vez de quanto alguém gostaria de um filme, quais são os padrões de consumo?

\[v_{ui}=\begin{cases}1 & \text{se } u \text{ avaliou } i,\\ 0 & \text{caso contrário}\end{cases}\]

Feedback implícito (Hu, Koren & Volinsky, 2008).

  • A nota sai de cena: 1 e 5 estrelas viram \(v_{ui}=1\). Falamos de consumo, e não de gosto, e o RMSE das notas não se aplica (métrica no Bloco 5).
  • Fatores mais fáceis de interpretar: filmes assistidos pelas mesmas pessoas tendem a cair no mesmo fator. O peso de um filme não precisa expressar ao mesmo tempo quem o viu e quanto gostou.
  • Novas suposições: “avaliou” aproxima “assistiu”, e um zero significa só “não interagiu”, o que é diferente de “não gostou”.

O que cada fator reúne

Cada linha é um fator. 4 de ação e 4 de drama: eles parecem separar públicos, e não só gêneros (leitura nossa).

Fator Filmes mais fortes Gênero mais comum Dos 20 mais fortes, têm esse gênero
1 Neighbors, 22 Jump Street, Horrible Bosses 2 Comédia 100%
2 Jason Bourne, Mission: Impossible - Rogue Nation, Furious 7 Ação 95%
3 Sully, Hidden Figures, Lion Drama 95%
4 Thor: Ragnarok, Avengers: Infinity War - Part I, Guardians of the Galaxy 2 Ação 95%
5 Frances Ha, Blue Jasmine, Inside Llewyn Davis Drama 85%
6 Don’t Breathe, The Conjuring 2, It Follows Terror 80%
7 Captain Marvel, Avengers: Infinity War - Part II, Ant-Man and the Wasp Ação 80%
8 Finding Dory, Moana, Frozen Animação 80%
9 The Favourite, Lady Bird, Roma Drama 75%
10 Olympus Has Fallen, Transcendence, Non-Stop Ação 70%
11 Whiplash, Nightcrawler, Gone Girl Drama 65%
12 Coherence, Predestination, Upgrade Suspense 65%

E se usássemos as notas?

NMF nas notas, só em \(\Omega\) (com máscara): os fatores também precisam reproduzir o valor da nota.

  • Nota mínima 0,5, média 3,42: em toda célula observada, \(\sum_k W_{uk}H_{ki}\) precisa chegar a esse nível, e sem vieses o nível geral também sai dos fatores.
  • Na matriz binária: os 86% de zeros pedem que os fatores se desliguem.

Comparando os dois dados

Medidas: fatores ativos (com pelo menos 5% da previsão, em média por célula observada); concentração (como na tabela anterior, em média sobre os fatores); cargas nulas (entradas de \(H\) abaixo de 0,1% do maior valor).

Dado fatorado Menor valor a reproduzir Fatores ativos por célula Concentração de gênero Cargas praticamente nulas
Binário (feedback implícito) 0 3,0 de 12 82% 58,1%
Notas com máscara 0,5 7,6 de 12 63% 0,2%
Referência: filmes aleatórios — — 44% —

Bloco 4: Como Treinar a NMF

Qual erro minimizar?

  • Frobenius (ruído Gaussiano): \[\ \mathcal{L}_{\text{Fro}}=\frac12\|V-WH\|_F^2 \qquad \text{s.t.} \quad W,H \geq 0.\]
  • KL generalizada (contagens, como palavras ou reproduções): \[\mathcal{D}_{KL}(V\parallel WH)=\sum_{i,j}\left(v_{ij}\ln\frac{v_{ij}}{(WH)_{ij}}-v_{ij}+(WH)_{ij}\right)\]

Leitura probabilística (ESL §14.6)

Minimizar a KL equivale a maximizar a log-verossimilhança de um modelo em que cada \(v_{ij}\) segue uma Poisson independente com média \((WH)_{ij}\). Escolher a perda é escolher uma suposição sobre os dados.

Como manter tudo positivo?

Um gradiente comum pode gerar negativos. Lee & Seung (2001) escolhem o passo para que o gradiente vire uma multiplicação (\(\odot\), \(\oslash\): entrada a entrada).

Passo 1, gradiente: \(\quad\nabla_H\mathcal{L}=W^TWH-W^TV\)

Passo 2, descida: \(\quad H\leftarrow H-\boldsymbol\eta\odot\left(W^TWH-W^TV\right)\)

Passo 3, \(\boldsymbol\eta=H\oslash\left(W^TWH\right)\): \(\quad H\leftarrow H-H\oslash\left(W^TWH\right)\odot\left(W^TWH-W^TV\right)\)

Passo 4, simplificando: o termo \(H\) se cancela. A regra de \(W\) sai por simetria: \[H_{kj}\leftarrow H_{kj}\frac{(W^TV)_{kj}}{(W^TWH)_{kj}},\qquad W_{ik}\leftarrow W_{ik}\frac{(VH^T)_{ik}}{(WHH^T)_{ik}}\]

  • Fica não negativo: multiplicamos por uma razão de números não negativos, sem projeção. Entrada zero fica em zero, então começamos com valores positivos.
  • Para no lugar certo: com \(WH=V\), a razão vale 1. A perda nunca aumenta (Lee & Seung, 2001).

A resposta não é única

Dada \(V=WH\) e \(A\) invertível: \[V=(WA)(A^{-1}H)=\tilde W\tilde H\]

  • É outra NMF válida sempre que \(WA\ge0\) e \(A^{-1}H\ge0\).
  • Se \(A\) só permuta e reescala, nada importante muda. Se houver folga entre os dados e os eixos, há infinitas soluções realmente diferentes (Donoho & Stodden, 2004).
  • Na prática, a solução pode depender da inicialização. \(L_1\) pode reduzir a ambiguidade, sem garantir unicidade, e trocar \(K\) exige reajustar tudo.

Vale medir

No MovieLens implícito, duas inicializações dão cosseno médio de 0,99 (mínimo 0,97). Aqui a ambiguidade foi pequena, mas isso é um resultado destes dados. No trabalho final, repitam o teste nos seus.

Bloco 5: O que Fazer com o Espaço Aprendido

Treinamos. E agora, como ler isso?

  1. Desconfie de um eixo sozinho. O modelo determina \(\mathbf{p}_u^T\mathbf{q}_i\), e os eixos ficam em aberto (\(G\)). Confira com algo que ele não viu, como os gêneros.
  2. A direção indica semelhança de padrão de avaliação, que nem sempre coincide com o gênero. Veja La La Land.
  3. A norma indica quanta informação há: Spearman de 0,87 entre \(\|\mathbf{q}_i\|\) e nº de avaliações. A nuvem do mapa é isso. A aprovação geral está em \(b_i\).
Filme Vizinhos em \(\mathbf{q}_i\) (cosseno)
Moana Coco (0,84), Finding Dory (0,79), Kung Fu Panda 3 (0,74), Inside Out (0,71)
Thor: Ragnarok Avengers: Infinity War - Part I (0,87), Untitled Spider-Man Reboot (0,85), Avengers: Infinity War - Part II (0,77), Ant-Man and the Wasp (0,74)
La La Land Cake (0,61), Louis C.K. 2017 (0,60), Before the Flood (0,58), White Bird in a Blizzard (0,52)

Colocando um usuário novo no mapa

Basta uma etapa do ALS, sem retreinar: \(\mathbf{p}=\left(\sum_i\mathbf{q}_i\mathbf{q}_i^T+\lambda I\right)^{-1}\sum_i(r_{i}-\mu-b_i)\mathbf{q}_i\), com \(b_u=0\). Usuário fictício: nota 5 em animação popular.

Notas \(\|\mathbf{p}\|\) Mais sobem com a parte latente (\(\mathbf{q}_i^T\mathbf{p}\)) Top 5 igual aos vieses
3 0,23 Frozen (+0,31), Moana (+0,27), Finding Dory (+0,23), Incredibles 2 (+0,20), Coco (+0,17) 5 de 5
30 0,72 Fantastic Beasts and Where to Find Them (+0,38), Hidden Figures (+0,38), The Theory of Everything (+0,36), Hacksaw Ridge (+0,34), Wonder (+0,33) 4 de 5
  • 3 notas: direção certa (100% de animação entre os que sobem), mas efeito pequeno (subida máxima de 0,31; \(b_i\) com desvio-padrão de 0,39). É o cold start em números.
  • 30 notas: sobem filmes de grande público de outros gêneros. O fator aprendeu quem assiste ao quê junto, o que é diferente de aprender um gênero.

Tudo o que supusemos até aqui

\(\lambda\) também é uma suposição. Com \(r_{ui}\) Gaussiana (variância \(\sigma^2\)) e fatores \(\mathcal{N}(\mathbf{0},\sigma_p^2 I)\), o MAP dá \(\lambda=\sigma^2/\sigma_p^2\) (PMF; Salakhutdinov & Mnih). Ao contrário da PPCA, que integra \(\mathbf{z}\), aqui a estimativa é pontual.

Suposição Onde aparece Quando pode falhar Como examinar
Posto baixo \(K\ll\min(M,N)\) Gostos de nicho somem Curva de validação por \(K\)
Interação bilinear e aditiva \(\mu+b_u+b_i+\mathbf{p}_u^T\mathbf{q}_i\) Contexto, ordem, sequência de consumo Erro por grupo de usuários e filmes
Ruído Gaussiano homogêneo Perda quadrática Notas discretas e limitadas Resíduo por nível de nota
A falta não informa o valor Soma só em \(\Omega\) Pessoas veem o que esperam gostar Ver a seguir
Preferências estáveis Um \(\mathbf{p}_u\) por usuário Gostos e catálogo mudam Partição temporal; Aula 11
Zero = não interagiu (NMF implícita) \(v_{ui}=0\) Ausência não é desinteresse Comparar com notas explícitas

Por que aquela célula está vazia?

  • Em geral, você assiste ao que espera gostar. Assim, a falta depende do valor faltante: MNAR (Marlin et al., 2007).
  • “Avaliou” é um colisor (Aula 9), e todo dado está condicionado a “avaliou = 1” (grafo ilustrativo).
  • No MovieLens, filmes mais avaliados têm nota maior (Spearman 0,29). Pode ser seleção, ou filmes bons atraem público. Os dados não separam as duas coisas, então simulamos.
Simulação: mecanismo de falta Média real Média observada RMSE nas notas retidas RMSE nas nunca observadas
Sorteio uniforme 3,00 3,00 0,33 0,33
Depende da nota 3,00 3,58 0,40 0,55

Quando a falta depende da nota, o erro nas notas retidas subestima o erro nas células nunca vistas. Coletar mais dados do mesmo jeito não corrige isso.

RMSE baixo não garante boa lista

Hit@10: fração dos usuários com ao menos um filme de teste com nota \(\ge4\) entre os 10 recomendados.

Para o trabalho final

RMSE quase igual (Funk-SVD e NMF nas notas) pode gerar listas bem diferentes. Mas o teste só tem filmes que as pessoas escolheram avaliar. Reportem as duas métricas e vençam primeiro os vieses e a popularidade.

Fechamento e Ponte para a Aula 11

Retomando as 5 perguntas

  1. Baselines: os vieses dão o maior ganho, mas a mesma lista para todos. Preencher os buracos resolve o problema errado: com zeros, 2,5 vezes pior que a média.
  2. Modelo: \(\mu+b_u+b_i+\mathbf{p}_u^T\mathbf{q}_i\), ajustado só nas células observadas, com \(L_2\).
  3. Treino: a perda é biconvexa. SGD: uma nota por vez, \(\mathcal{O}(|\Omega|K)\) por passada. ALS: Ridge por usuário e por filme, paralelizável.
  4. NMF: sem cancelamento. Com zeros reais, tende a dar partes. O erro nunca fica abaixo do da SVD.
  5. Leitura e suposições: desconfie de um eixo sozinho, direção é semelhança, norma é informação. Os RMSE valem para as células observadas.

Os métodos lado a lado

Entrada O que restringe os fatores Como ler as bases
SVD clássica Matriz completa Ortogonalidade Eixos de variância máxima, com cancelamentos
Funk-SVD Células faltantes \(L_2\) e vieses Afinidades, a conferir
NMF \(V\ge0\) Não negatividade Partes, quando há zeros reais

Em aberto: cold start, avaliação offline com seleção, teoria de matrix completion (Candès & Recht, 2009).

Próxima aula

Tudo aqui supôs que os gostos ficam parados. Como perceber que os dados mudaram, sem novos rótulos? Aula 11: detecção de data drift e domain shift com a MMD.