Aprendizado Não Supervisionado
2026-11-04
Recomendação é parecida com a PCA da Aula 6, com boa parte da tabela escondida
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\]
O primeiro modelo a vencer
Com os vieses, o RMSE cai para 0,769. Nenhum outro passo da aula reduz tanto o erro.
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\).
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.
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.
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.
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.
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\]
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.
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\]
\[\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:
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 Colapso da SVD e os Vieses — Resposta
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.
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\):
Em voz alta: se a nota veio acima do previsto, aproximamos o gosto do usuário do perfil do filme.
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.
RMSE de teste, com \(K=\) 20 e hiperparâmetros escolhidos na validaçã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:
Dinâmica de Otimização — Resposta
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.
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.
\[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.
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\)
MNIST, \(K=16\): pixels não negativos, fundo zero de verdade.
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).
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% |
NMF nas notas, só em \(\Omega\) (com máscara): os fatores também precisam reproduzir o valor da nota.
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% | — |
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.
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}}\]
Dada \(V=WH\) e \(A\) invertível: \[V=(WA)(A^{-1}H)=\tilde W\tilde H\]
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.
| 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) |
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 |
\(\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 |
| 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.
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.
| 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).
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.
UNICAMP — Instituto de Computação