Deux ans plus tard, on a arraché le cœur de SeenWant et on l'a refait.
Concrètement, on a refait le moteur de swipe — le système qui décide quel film, série, livre ou jeu vous est montré ensuite. Le moteur v1 fonctionnait correctement. C'était le « correctement » qui détruit les produits silencieusement. Les utilisateurs swipaient. Ils ne terminaient pas les listes. Ils regardaient leur Want grandir sans jamais y puiser. Le signal était bon mais la boucle cassée.
Ce post est ce qu'on a appris, ce qu'on a construit et pourquoi on pense que la plupart des feeds algorithmiques sont silencieusement mauvais.
Le moteur original
V1 était direct. Il tirait des candidats de quatre sources :
- Correspondances de genre
- Filtrage collaboratif
- Trending
- Remplisseurs cold-start
La deck était un mélange pondéré. Standard de l'industrie.
Ça marchait comme marche le standard de l'industrie : montrer des choses « assez bonnes » sans jamais surprendre.
Ce qu'on a remarqué
Six mois après le lancement, des signaux étranges :
- Conversion Want-vers-Seen basse
- Temps-jusqu'au-premier-Seen élevé
- Sessions de swipe répétées courtes
- Power-users moins engagés que casual
Le vrai job
Débat interne pendant des mois. Le job sous lequel on avait livré : « montrer des choses qui plairont ». Le bon job : « aider les utilisateurs à décider quoi consommer ensuite ».
Ça sonne pareil. Ce n'est pas pareil.
« Montrer ce qui plait » optimise swipe-right rate. Mauvaise cible.
« Aider à décider quoi consommer » optimise quelque chose de plus dur : la vitesse à laquelle un Want devient un Seen. La conversion d'intérêt à action.
Cinq choses qu'on faisait mal
1. On optimisait pour « plus de candidats »
V1 supposait que plus d'options = mieux. 30 candidats par session.
Faux. Après 12, fatigue. À 20, qualité du swipe baisse. À 30, les utilisateurs nettoient juste pour finir.
Fix v2 : plafonner à 12.
2. On traitait les quatre types de média pareil
Recommander un livre est différent de recommander un film. Livre = engagement de 10h. Film = 2h. Jeu = potentiellement 50h.
Fix v2 : pondération par type. Livres demandent un signal beaucoup plus fort.
3. On faisait trop confiance au système de genres
« Drame » est un genre. « Horreur » aussi. « Thriller psychologique » aussi. La taxonomie est un bazar.
Fix v2 : on a remplacé la correspondance de genre par des embeddings. Les films vivent maintenant dans un espace de similarité appris du comportement réel.
4. On ne modélisait pas la pièce
V1 traitait chaque recommandation comme si l'utilisateur était la seule audience.
Fix v2 : un mode « regarde avec ».
5. On surrécompensait la récence
Fix v2 : la récence est un petit bonus, pas un multiplicateur.
La nouvelle architecture
Le moteur v2 a quatre parties :
Espace d'embeddings
Chaque titre a un embedding — un vecteur 384-dim. On a appris l'espace des données de co-occurrence : titres souvent Wanted par les mêmes utilisateurs se regroupent.
Ce qui est nouveau : comment les embeddings sont entraînés — sur les transitions Want-vers-Seen, pas sur les Want seuls.
Vecteur de goût par utilisateur
Chaque utilisateur a un vecteur de goût. Moyenne pondérée glissante de leurs Seen. Met à jour après chaque Seen, pas chaque Want.
C'est la deuxième décision clé : on met à jour sur Seen, pas sur Want.
Sélection de candidats
L'ensemble : titres les plus proches du vecteur de goût, filtrés par :
- Pas Wanted, Seen, Skipped
- Disponible sur les streamings connectés
- Match les paramètres
Re-rankés avec : notes des amis, boost de récence, injection de diversité.
Injection de diversité
Un moteur pure embedding-similarity collapse.
On force la diversité en réservant 2-3 slots dans chaque session de 12 cartes pour des recommandations off-vector.
Ce qu'on mesure maintenant
- Conversion Want-vers-Seen (W2S). Cible : 35%. Actuel : 31%. Monté de 14%.
- Temps-jusqu'à-décision. Cible : moins de 3 min. Actuel : 2:48. Baissé de 4:12.
- Recommendation reuse rate. Cible : 70%/60 jours. Actuel : 64%.
Ce qui suit
- Recommandations conditionnées par l'humeur
- Amélioration cold-start
- Intégration du graphe d'amis
La leçon
La plus grosse chose qu'on a apprise n'était pas technique. C'était un recadrage.
Les moteurs de recommandation sont surtout mauvais parce qu'ils optimisent la mauvaise chose — engagement, swipe-rate, temps-sur-plateforme. La métrique plus dure et plus honnête : l'utilisateur a-t-il fini avec une meilleure expérience.
Si vous avez utilisé SeenWant avant le rebuild, vous sentirez la différence. Si non — donnez-lui un swipe et dites-nous.
Curieux de l'architecture en détail ? On publie un suivi sur le pipeline d'entraînement des embeddings. Abonnez-vous au RSS.


