Polydesk-logotype
Polydesk.ai — Header

Matrix Factorization (Factorisation Matricielle)

La factorisation matricielle (matrix factorization, MF) est une famille d’algorithmes de filtrage collaboratif qui décompose la matrice d’interactions utilisateurs-articles en deux matrices de rang inférieur, révélant des « facteurs latents » qui capturent les préférences implicites des utilisateurs et les caractéristiques cachées des articles.

C’est l’algorithme qui a fait gagner le Netflix Prize. En 2006, Simon Funk a publié sur son blog une implémentation de factorisation matricielle par descente de gradient stochastique qui a révolutionné les systèmes de recommandation. L’équipe gagnante (BellKor’s Pragmatic Chaos) a combiné plus de 100 modèles, dont la MF était la brique centrale, pour améliorer les prédictions de Netflix de 10,06 %. Près de 20 ans plus tard, la factorisation matricielle reste utilisée en production chez Netflix (aux côtés du Foundation Model) et constitue la base conceptuelle sur laquelle les approches deep learning ont été construites. Les embeddings de NCF, DeepFM et LightGCN sont l’héritière directe des facteurs latents de la MF.

Factorisation Matricielle en bref
Définition
Décomposition d’une matrice creuse utilisateurs × articles en deux matrices denses de faible rang
Variantes clés
FunkSVD, SVD++, timeSVD++, ALS (Alternating Least Squares), NMF, PMF
Entrée
Matrice d’interactions (notes, clics, achats) très creuse (typiquement 1-5 % de remplissage)
Sortie
Vecteurs d’embeddings utilisateur et article de dimension k (typiquement 50-300)
Optimisation
SGD (descente de gradient stochastique) ou ALS
Bibliothèques
Surprise (Python), Implicit, LightFM, Spark MLlib (distribué)
Événement fondateur
Netflix Prize (2006-2009), prix de 1 million $

L’intuition derrière la factorisation matricielle

Imaginez une matrice où chaque ligne est un utilisateur Netflix et chaque colonne est un film. Chaque cellule contient la note (1 à 5 étoiles) que l’utilisateur a donnée au film, ou est vide s’il ne l’a pas vu. Cette matrice est gigantesque (des millions d’utilisateurs × des milliers de films) et extrêmement creuse (chaque utilisateur n’a vu qu’une infime fraction des films).

L’idée de la factorisation matricielle : cette matrice massive peut être approximée par le produit de deux petites matrices. La première matrice associe chaque utilisateur à un vecteur de k « facteurs latents » (par exemple, k = 50). La seconde associe chaque film à un vecteur de k facteurs latents. La note prédite d’un utilisateur pour un film est simplement le produit scalaire de leurs vecteurs respectifs.

Que représentent ces facteurs latents ? Le modèle les apprend automatiquement, mais on peut les interpréter intuitivement. Un facteur pourrait capturer l’appétence pour les films d’action, un autre la préférence pour les films indépendants, un troisième la sensibilité à l’humour. Chaque utilisateur est décrit par son « profil » dans cet espace de facteurs, et chaque film par sa « position » dans le même espace. Plus les vecteurs d’un utilisateur et d’un film sont alignés (produit scalaire élevé), plus la note prédite est haute.

Les variantes principales

FunkSVD (Simon Funk, 2006)

La forme la plus simple de factorisation matricielle pour les systèmes de recommandation. Malgré son nom, ce n’est pas une SVD au sens mathématique strict (la SVD classique n’est pas définie pour les matrices à valeurs manquantes). FunkSVD apprend les vecteurs utilisateur (P) et article (Q) en minimisant l’erreur quadratique moyenne entre les notes observées et les notes prédites, avec une régularisation L2 pour éviter le surapprentissage :

Fonction objectif : minimiser la somme, pour toutes les paires (utilisateur, article) observées, du carré de la différence entre la note réelle et le produit scalaire des vecteurs latents, plus un terme de régularisation lambda sur les normes des vecteurs.

L’optimisation se fait par descente de gradient stochastique (SGD) : pour chaque observation, on calcule l’erreur de prédiction, puis on met à jour les facteurs utilisateur et article proportionnellement à cette erreur. Simon Funk a popularisé cette approche sur son blog en 2006 pendant le Netflix Prize, et elle est devenue la base de toute la recherche qui a suivi.

SVD++ (Koren, 2008)

SVD++ étend FunkSVD de deux façons majeures. Premièrement, il ajoute des biais : un biais global (la note moyenne), un biais utilisateur (certains utilisateurs notent systématiquement haut ou bas), et un biais article (certains films sont globalement mieux notés). Deuxièmement, il intègre le feedback implicite : le simple fait qu’un utilisateur ait noté un film (indépendamment de la note) contient de l’information. La prédiction inclut donc un terme supplémentaire qui agrège les facteurs latents implicites de tous les articles avec lesquels l’utilisateur a interagi.

Un survey de 2025 publié dans Knowledge and Information Systems confirme que sur le dataset Netflix Prize, la performance s’ordonne SVD < SVD++ < timeSVD++, et que l’amélioration de timeSVD++ sur SVD++ est plus importante que celle de SVD++ sur SVD. timeSVD++ avec seulement 10 facteurs latents surpasse SVD avec 200 facteurs, démontrant l’importance des dynamiques temporelles.

timeSVD++ (Koren, 2009)

timeSVD++ ajoute la modélisation temporelle : les préférences des utilisateurs et la perception des films évoluent dans le temps. Un utilisateur qui adorait les comédies romantiques il y a cinq ans préfère peut-être les thrillers aujourd’hui. Les biais et les facteurs latents sont modélisés comme des fonctions du temps, capturant les tendances de long terme et les fluctuations. C’est un composant clé de la solution gagnante du Netflix Prize.

ALS (Alternating Least Squares)

Au lieu d’optimiser simultanément les facteurs utilisateur et article par SGD, ALS fixe alternativement une matrice et optimise l’autre par moindres carrés. Quand on fixe les facteurs articles, l’optimisation des facteurs utilisateurs devient un problème de régression linéaire avec solution analytique (pas de pas de gradient à choisir). Puis on inverse : on fixe les utilisateurs et on optimise les articles.

L’avantage principal de ALS : il se parallélise naturellement (chaque utilisateur ou article peut être optimisé indépendamment), ce qui le rend adapté aux systèmes distribués. Apache Spark MLlib utilise ALS comme algorithme de recommandation par défaut. C’est aussi l’algorithme de choix pour le feedback implicite, grâce à la formulation « weighted ALS » qui pondère différemment les observations positives et les non-observations.

NMF (Non-Negative Matrix Factorization)

NMF contraint les facteurs à être non négatifs (toutes les valeurs ≥ 0). Cette contrainte produit des représentations plus interprétables : un facteur latent représente un « thème » (par exemple, « comédie familiale ») et la valeur indique l’intensité de ce thème pour un film donné. L’absence de valeurs négatives empêche les annulations qui rendent les facteurs de SVD difficiles à interpréter. NMF est plus utilisé en analyse de texte (topic modeling) qu’en recommandation pure.

PMF (Probabilistic Matrix Factorization)

PMF formule la factorisation matricielle dans un cadre bayésien : les facteurs latents sont des variables aléatoires avec des distributions a priori (gaussiennes). Cela permet de quantifier l’incertitude des prédictions (pas seulement une note prédite, mais une distribution de probabilité). PMF est devenu l’un des modèles les plus extensibles de la littérature, servant de base à de nombreuses variantes incluant la modélisation de la confiance, des biais et des relations sociales.

Variante Caractéristique distinctive Optimisation Cas d’usage
FunkSVD Forme de base, produit scalaire pur SGD Baseline, prototypage rapide
SVD++ Biais + feedback implicite SGD Feedback explicite + implicite
timeSVD++ Dynamique temporelle des préférences SGD Systèmes où les goûts évoluent
ALS Parallélisable, adapté au feedback implicite Moindres carrés alternés Spark, grands volumes, implicite
NMF Facteurs non négatifs, interprétabilité Mise à jour multiplicative Analyse de texte, topic modeling
PMF Cadre bayésien, incertitude Inférence variationnelle / MCMC Recherche, quantification d’incertitude

Le Netflix Prize : l’événement fondateur

En octobre 2006, Netflix lance un concours ouvert avec un prix de 1 million de dollars pour l’équipe qui améliorerait son algorithme de recommandation (Cinematch) de 10 % en RMSE. Le dataset contient 100 millions de notes de 480 000 utilisateurs sur 17 770 films.

Le concours a duré trois ans et a attiré plus de 40 000 équipes de 186 pays. Il a propulsé la factorisation matricielle au premier plan de la recherche en systèmes de recommandation. Les principales contributions :

FunkSVD (Simon Funk, 2006). Premier algorithme à surpasser significativement les approches KNN sur le dataset Netflix. Funk a partagé son approche librement sur son blog, catalysant la recherche.

SVD++ et timeSVD++ (Yehuda Koren, 2008-2009). Koren, de l’équipe BellKor, a développé les extensions qui capturent le feedback implicite et la dynamique temporelle. Ces modèles sont devenus les références académiques.

L’ensemble gagnant (BellKor’s Pragmatic Chaos, 2009). L’équipe gagnante a combiné plus de 100 modèles (factorisation matricielle, KNN, modèles basés sur le voisinage, ajustements temporels) via un blending linéaire. Ce résultat a établi le principe que la combinaison de modèles (ensembling) surpasse systématiquement tout modèle individuel, un principe toujours valide en production.

Le paradoxe Netflix Netflix n’a jamais déployé en production l’algorithme gagnant du Netflix Prize. La complexité d’ingénierie de l’ensemble de 100+ modèles ne justifiait pas le gain marginal en conditions réelles. Cependant, les techniques fondamentales développées pendant le concours (factorisation matricielle, modélisation temporelle, ensembling) sont devenues la colonne vertébrale de tous les systèmes de recommandation modernes.

De la MF au deep learning : la filiation

La factorisation matricielle est l’ancêtre conceptuel direct des approches de deep learning en recommandation. Le lien est direct : les vecteurs de facteurs latents de la MF sont les précurseurs des embeddings appris par les réseaux de neurones.

NCF : remplacer le produit scalaire par un MLP

Neural Collaborative Filtering (He et al., 2017) conserve les embeddings utilisateur et article mais remplace le produit scalaire (interaction linéaire) par un Multi-Layer Perceptron (interaction non linéaire). NCF combine une composante GMF (Generalized Matrix Factorization, équivalente à la MF classique) et une composante MLP dans une architecture duale. C’est le pont explicite entre MF et deep learning.

DeepFM et factorization machines

Les Factorization Machines (Rendle, 2010) généralisent la MF en modélisant les interactions entre toutes les paires de features (pas seulement utilisateur-article). DeepFM combine des Factorization Machines (interactions de bas ordre) avec un réseau de neurones profond (interactions de haut ordre), en partageant les embeddings. C’est devenu le standard pour la prédiction de taux de clic en publicité.

GNN : la MF sur graphe

LightGCN (He et al., 2020) peut être vu comme une factorisation matricielle enrichie par la structure du graphe d’interactions. Les embeddings utilisateur et article sont initialisés puis affinés par agrégation de voisinage sur le graphe biparti utilisateurs-articles. La MF classique est un cas particulier de GNN sans propagation de voisinage.

Foundation Models : la MF à l’ère des Transformers

Le Netflix Foundation Model (2025-2026) peut être vu comme l’aboutissement de la vision initiée par la MF : apprendre des représentations latentes unifiées des utilisateurs et des articles. Mais au lieu d’un simple produit scalaire ou d’un MLP, la représentation est construite par un Transformer auto-régressif qui traite l’ensemble de l’historique d’interactions comme une séquence. Les « facteurs latents » sont devenus les « hidden states » du Transformer, mais l’intuition fondamentale (projeter utilisateurs et articles dans un espace latent partagé) reste identique.

Implémentation pratique

Bibliothèques Python

Surprise. La bibliothèque de référence pour la factorisation matricielle en Python. Elle implémente SVD, SVD++, NMF et les baselines KNN avec une API scikit-learn-like. Un modèle SVD avec 50 facteurs latents et régularisation s’entraîne en quelques lignes sur MovieLens 100K et atteint un RMSE d’environ 0,93.

Implicit. Spécialisée dans le feedback implicite (clics, vues, achats sans notes explicites). Implémente ALS et BPR (Bayesian Personalized Ranking) avec support GPU. Idéale pour les cas d’usage e-commerce et streaming où le feedback explicite est rare.

LightFM. Bibliothèque hybride qui combine factorisation matricielle et features de contenu (métadonnées utilisateur et article). Permet de résoudre partiellement le cold start en utilisant les features de contenu pour initialiser les embeddings des nouveaux articles.

Apache Spark MLlib. Implémentation distribuée d’ALS pour les très grands volumes (centaines de millions d’interactions). Fonctionne sur des clusters Hadoop/Spark et est le choix standard pour les entreprises avec des données massives.

Hyperparamètres clés

Nombre de facteurs latents (k). C’est l’hyperparamètre le plus important. Trop peu de facteurs (k = 5) : le modèle est trop simple pour capturer les préférences fines. Trop de facteurs (k = 500) : risque de surapprentissage. Les valeurs typiques en production sont k = 50 à 200. Sur Netflix, SVD++ avec k = 200 donne les meilleurs résultats en RMSE, mais timeSVD++ avec k = 10 surpasse SVD avec k = 200 grâce à la modélisation temporelle.

Taux de régularisation (lambda). Contrôle le compromis biais-variance. Une régularisation trop faible provoque le surapprentissage (le modèle mémorise le bruit). Une régularisation trop forte provoque le sous-apprentissage (le modèle est trop « lisse »). Valeurs typiques : 0,01 à 0,1.

Taux d’apprentissage (SGD). Contrôle la vitesse de convergence. Trop élevé : oscillations ou divergence. Trop faible : convergence lente. Valeurs typiques : 0,005 à 0,05. L’utilisation d’un scheduler (diminution progressive) est recommandée.

Nombre d’époques. Combien de fois le modèle parcourt l’ensemble des données d’entraînement. Typiquement 20 à 100, avec early stopping basé sur un ensemble de validation.

Limites de la factorisation matricielle

Interactions linéaires. Le produit scalaire ne capture que les interactions linéaires entre les facteurs latents. Deux utilisateurs aux préférences complexes (aiment les thrillers ET les comédies, mais pas les thrillers comiques) ne sont pas bien modélisés. C’est la motivation principale de NCF (remplacement par un MLP non linéaire).

Cold start. La MF classique nécessite des interactions pour apprendre les facteurs latents. Un nouvel utilisateur ou un nouvel article n’a pas de vecteur de facteurs. SVD++ atténue partiellement ce problème pour les utilisateurs (via le feedback implicite), et Asymmetric SVD permet de représenter les utilisateurs comme fonction de leurs interactions plutôt que par des facteurs fixes. LightFM résout partiellement le cold start article en intégrant les features de contenu.

Scalabilité. Sur des matrices de centaines de millions d’utilisateurs × millions d’articles, l’entraînement SGD est séquentiel et lent. ALS (parallélisable) ou les approches distribuées (Spark) sont nécessaires. En 2026, pour les très grandes échelles, les approches GNN et Transformer ont largement supplanté la MF classique.

Pas de modélisation séquentielle. La MF traite toutes les interactions comme un ensemble non ordonné. L’ordre dans lequel un utilisateur a consommé les articles (qui contient de l’information sur l’évolution de ses goûts) est ignoré, sauf dans timeSVD++. Les Transformers séquentiels (SASRec, BERT4Rec, Netflix Foundation Model) capturent cette dimension.

Applications au-delà de la recommandation

La factorisation matricielle n’est pas limitée aux systèmes de recommandation. Elle s’applique partout où une matrice creuse doit être complétée ou approximée.

Réduction de dimensionnalité. En NLP, la MF (via SVD) décompose les matrices terme-document ou les matrices de co-occurrences de mots pour produire des representations denses. Les embeddings de mots GloVe sont essentiellement une factorisation matricielle des co-occurrences.

Complétion de données manquantes. En bioinformatique, la MF complète les matrices d’expression génétique (gènes × conditions expérimentales). En imagerie, elle complète les pixels manquants. Des travaux de 2025 appliquent le filtrage collaboratif hybride à la réutilisation de médicaments (drug repurposing).

Analyse de sentiments et NLP. La décomposition des matrices utilisateurs × mots ou utilisateurs × sujets révèle les topics latents dans les avis et les commentaires, enrichissant la compréhension des préférences utilisateur.

Verdict

La factorisation matricielle est à la recommandation ce que la régression linéaire est au machine learning : une technique fondatrice, d’une élégance mathématique remarquable, qui reste pertinente même si des approches plus complexes l’ont surpassée en performance brute.

Son héritage est immense : les embeddings utilisateur et article que manipulent NCF, DeepFM, LightGCN et le Netflix Foundation Model sont la descendance directe des facteurs latents de FunkSVD. Comprendre la MF, c’est comprendre le socle conceptuel de toute la recommandation moderne.

En production en 2026, la MF pure (SVD, ALS) reste un choix solide pour les systèmes de taille moyenne ou comme composante d’un ensemble. Pour les systèmes à grande échelle, les GNN et les Transformers ont pris le relais, mais ils n’auraient pas existé sans la vision initiale de projeter utilisateurs et articles dans un espace latent partagé, née du Netflix Prize.

Pour un développeur, implémenter un SVD++ avec Surprise sur MovieLens est un exercice incontournable. C’est le meilleur moyen de comprendre les embeddings, la régularisation, et le compromis biais-variance avant de passer aux architectures deep learning.


Questions fréquentes sur la factorisation matricielle

Quelle est la différence entre SVD et FunkSVD ?

La SVD (Singular Value Decomposition) au sens mathématique décompose une matrice complète en trois matrices (U, Σ, V). Elle n’est pas directement applicable aux matrices creuses (avec des valeurs manquantes) car elle nécessite toutes les valeurs. FunkSVD, popularisé par Simon Funk pendant le Netflix Prize, est un algorithme d’apprentissage qui apprend deux matrices de facteurs latents en minimisant l’erreur sur les seules valeurs observées, par descente de gradient stochastique. C’est un abus de langage de l’appeler « SVD », mais le nom est resté. En pratique, quand on parle de « SVD pour la recommandation », on désigne presque toujours FunkSVD ou ses extensions (SVD++, ALS).

Combien de facteurs latents choisir ?

C’est l’hyperparamètre le plus critique. Les valeurs typiques vont de 50 à 200. Plus de facteurs permettent de capturer des préférences plus fines, mais augmentent le risque de surapprentissage et le temps de calcul. Sur le dataset Netflix, les meilleures performances sont atteintes autour de k = 200 pour SVD, mais timeSVD++ avec k = 10-20 (et modélisation temporelle) surpasse SVD à k = 200. La recommandation pratique : commencez avec k = 50, évaluez sur un ensemble de validation, puis augmentez si le modèle sous-apprend. Utilisez la validation croisée pour trouver la valeur optimale.

La factorisation matricielle est-elle encore utilisée en 2026 ?

Oui, mais rarement seule. Netflix utilise toujours SVD++ et la factorisation matricielle comme composantes de son système hybride. La MF reste un choix excellent comme baseline (pour évaluer si des modèles plus complexes apportent un gain réel), comme composante d’un ensemble (blending), ou pour les systèmes de taille modeste où le deep learning serait surdimensionné. Les concepts fondamentaux de la MF (embeddings, facteurs latents, régularisation) sont omniprésents dans les architectures modernes. On peut dire que les Transformers de Netflix « font de la MF » avec des moyens beaucoup plus sophistiqués.

ALS ou SGD : lequel choisir ?

SGD (Stochastic Gradient Descent) est plus rapide sur des données de taille moyenne et s’adapte bien au feedback explicite (notes). ALS (Alternating Least Squares) se parallélise naturellement et est le choix standard pour les systèmes distribués (Apache Spark MLlib) et le feedback implicite. Si vous travaillez avec des centaines de millions d’interactions sur un cluster, choisissez ALS. Si vous travaillez en local sur quelques millions d’interactions, SGD (via Surprise) est plus simple et plus rapide à itérer.

Comment la factorisation matricielle gère-t-elle le cold start ?

Mal, dans sa forme de base. Un nouvel article ou un nouvel utilisateur sans interaction n’a pas de vecteur de facteurs latents. Les solutions : SVD++ utilise le feedback implicite pour enrichir la représentation utilisateur. Asymmetric SVD représente les utilisateurs comme fonction de leurs interactions, permettant d’intégrer les premières interactions sans tout recalculer. LightFM intègre des features de contenu (métadonnées) pour initialiser les embeddings des nouveaux articles, résolvant partiellement le cold start article. Pour un cold start sévère, combiner la MF avec du filtrage par contenu reste la approche la plus fiable.

Polydesk.ai — Footer