Em vez da filtragem colaborativa, eu usaria a abordagem de fatoração matricial, na qual usuários e filmes são representados por vetores de recursos latentes cujos produtos pontuais produzem as classificações. Normalmente, apenas se seleciona a classificação (número de características) sem levar em consideração o que as características representam, e o algoritmo faz o resto. Como o PCA, o resultado não é imediatamente interpretável, mas produz bons resultados. O que você deseja fazer é estender a matriz do filme para incluir os recursos adicionais mencionados e garantir que eles permaneçam fixos, pois o algoritmo estima as duas matrizes usando a regularização. As entradas correspondentes na matriz do usuário serão inicializadas aleatoriamente, depois estimadas pelo algoritmo de fatoração da matriz. É uma abordagem versátil e de alto desempenho, mas é preciso entender o aprendizado de máquina,
Vi um bom notebook ipython há um tempo, mas não o encontro no momento. Por isso, vou encaminhá-lo para outro que, embora não seja tão bom, ainda esclarece algumas das matemáticas.