#10 - Comment Brut a boosté l'adoption de son application grâce à un algorithme de recommandation de vidéos ?

L'algorithme de recommandation de vidéos développé par Brut décrypté

Robin Niel

11/14/20236 min read

👋 Bonjour la communauté Dataque

🚀 Dans cette édition de notre newsletter, nous avons la chance de pouvoir échanger avec Robin Niel, Data Engineer chez Brut. Robin et l'équipe Data ont développé un algorithme de recommandation de vidéos dans l'application, permettant aux utilisateurs de trouver plus rapidement les vidéos susceptibles de les intéresser.

🎥 Brut est un média français en ligne axé sur le journalisme vidéo. Il se distingue par ses reportages percutants et ses contenus engagés, couvrant une gamme variée de sujets sociaux, politiques et culturels. Il est reconnu pour sa capacité à susciter des débats et à donner la parole à des voix marginales.

👨‍💻 Robin va partager avec nous son expérience et nous parler de la fonctionnalité de recommandation de vidéos en temps réel dans l'application Brut.

Les termes clés pour comprendre cet article :

  • Data Engineer: Conçoit, développe et maintient les flux de données pour collecter, stocker, traiter et transformer les données de manière efficace.

  • Cloud computing¹: Services informatiques (stockage, traitement, bases de données) disponibles via Internet, éliminant la nécessité de posséder et de gérer des ressources informatiques localement.

  • Amazon Web Services (AWS) ou Google Cloud Platform (GCP)²: Services de cloud computing¹.

  • Terraform³: Logiciel qui utilise du code pour définir et configurer les ressources informatiques, telles que des serveurs, des bases de données et des réseaux, dans des environnements de cloud computing¹ comme AWS² ou GCP². Cela simplifie le déploiement et la gestion de l'infrastructure de manière reproductible et évolutive.

  • Continuous Integration/Continuous Delivery (CI/CD)⁴: Processus automatisé qui permet de développer, tester et déployer des logiciels plus rapidement et de manière plus fiable en utilisant des outils informatiques pour minimiser les erreurs.

  • API (Application programming interface)⁵: Ensemble de règles et de protocoles qui permettent à différentes applications ou services de communiquer et d'échanger des données de manière structurée. Elle définit comment les données doivent être demandées, envoyées et reçues, ce qui permet à des logiciels distincts de partager et d'accéder à des informations de manière coordonnée.

  • FastAPI⁶ : Un framework web puissant et performant qui rend la création d'API web en Python plus facile et plus rapide, tout en s'appuyant sur les principes de REST pour une communication efficace entre les clients et les serveurs.

  • REST(Representational State Transfer) : Un style d'architecture logicielle qui définit un ensemble de contraintes pour la conception de services web.

  • A/B Test⁸: Expérience où deux versions (A et B) d'un élément sont comparées pour voir laquelle fonctionne mieux en fonction de critères prédéfinis, en utilisant deux groupes aléatoires de participants. Cela permet d'optimiser et d'améliorer les performances de l'élément testé en se basant sur des données réelles plutôt que sur des suppositions.
    Exemple : Un site web affiche deux versions différentes de sa page d'accueil à des visiteurs sans qu'ils en aient connaissance. Le site analyse ensuite les interactions pour déterminer la version la plus efficace.

👋 Bonjour Robin,

Peux-tu nous parler de ton parcours professionnel et expliquer pourquoi tu as choisi de devenir Data Engineer ?

J’ai fait une école d’ingénieur en informatique avec une spécialisation en Data Science. En sortie d’école, je m’imaginais devenir Data Scientist, mais j’ai réalisé mon stage de fin d’étude au sein du ministère des Armées pendant lequel j’ai découvert beaucoup de technologies importantes (Docker, Kafka, Scala, Spark…) en lien avec la Data Ingénierie ainsi que le métier en lui-même. J’ai tout de suite accroché et comme c’était un domaine mêlant autant d’informatique que de data, j’ai continué comme Data Engineer par la suite.

J’ai ensuite travaillé pour une plateforme de streaming vidéo en tant que seul responsable Data, ce qui a été très enrichissant sur le plan technique notamment avec la découverte du cloud AWS² et Terraform³. J’ai fait un passage par une entreprise d’affiliate marketing (iGraal) pour terminer chez Brut, où je suis depuis un an maintenant.

Ce que j’aime dans le Data Engineering, c’est le constant renouvellement de la discipline. De nouvelles technologies et de nouveaux modèles architecturaux émergent constamment, ce qui nécessite de rester à jour et d'apprendre en permanence. Ce qui est aussi très gratifiant, c'est que chaque entreprise cherche à acquérir des données différentes et à en faire des produits nouveaux, ce qui me plaît particulièrement.

Peux-tu nous présenter la fonctionnalité de recommandation que vous venez de lancer chez Brut ?

Le besoin initial était d'avoir un feed de vidéos ressemblant à ce qui se fait sur les différentes plateformes de contenus courts (comme TikTok par exemple), mais avec des vidéos Brut.

Nous avons donc implémenté un système permettant la collecte en temps réel des interactions des utilisateurs (temps de visionnage, likes, etc.) afin de déduire leurs préférences et de proposer un feed de plus en plus adapté à leurs goûts.

Quels défis avez-vous rencontrés lors du déploiement de cette nouvelle fonctionnalité ?

Le défi principal a été de répondre au volume important de demandes de manière rapide et efficace. Initialement, notre API était construite avec Flask, un framework Python. Cependant, lors des premiers tests de charge, nous avons constaté que les performances étaient insuffisantes, c'est-à-dire que l'API ne répondait pas de manière rapide aux demandes nombreuses et simultanées des utilisateurs de notre application.

Pour résoudre ce problème, nous avons décidé de passer à FastAPI, un autre framework Python, offrant la capacité de traiter les demandes de manière asynchrone. L'utilisation de l'asynchronicité a entraîné une amélioration significative des performances de notre système, bien au-delà de ce qui était nécessaire pour répondre au trafic attendu. Cela signifie que notre application est désormais en mesure de gérer efficacement un grand nombre de demandes en parallèle, tout en maintenant des temps de réponse rapides.

Un autre défi a été la coordination avec les différentes équipes chargées du développement de l’application (iOS, Android et backend). L’équipe Data étant récente chez Brut, très peu de processus de communication et de gestion de projets étaient en place entre les différentes équipes techniques et produit, ce qui a mené à certaines incompréhensions et certains délais. Néanmoins, ce projet a permis de créer une vraie cohésion et des processus clairs, ce qui a été très positif pour le long terme.

Quelles technologies avez-vous utilisées pour mettre en place cette fonctionnalité, et quel a été le rôle de chacune d'entre elles ?

Comme le reste de notre stack technique, nous hébergeons nos différents process sur GCP².

Un service qui nous a été très utile pour le cache de notre API a été Cloud Memorystore, qui est le Redis managé de GCP². Cloud Memorystore est un service qui vous permet de stocker des données importantes en mémoire pour qu'elles soient rapidement accessibles par vos applications. Cela signifie que vos applications peuvent obtenir des données plus rapidement, ce qui les rend plus réactives pour les utilisateurs.

L’API est hébergée sur Cloud Run, qui permet de gérer les ressources, la sécurité ainsi que le scaling.

Pour déclarer ces nombreuses ressources GCP², nous utilisons Terraform³, qui est la technologie d’infrastructure as code (IAC) la plus utilisée à ce jour. Nous avons beaucoup de processus de CI/CD liés à notre code Terraform³, ce qui nous permet automatiquement de provisionner nos différents environnements.

Enfin, nous avons implémenté les différentes logiques nécessaires en Python, car c’est le langage utilisé par le reste de notre stack et aussi le plus connu au sein de l’équipe. Comme dit précédemment, nous avons utilisé le framework REST Fast API, qui nous a permis d’atteindre de très bonnes performances malgré certaines limitations de Python.

Si tu avais la possibilité de repartir de zéro, que ferais-tu différemment ?

Je pense que partir directement sur le bon framework REST nous aurait fait gagner un certain temps. Peut-être envisager un autre langage plus adapté à la performance d’une API publique aurait pu être intéressant.

Implémenter un premier modèle “simple” de recommandation et itérer dessus aurait pu aussi nous permettre de mettre en place des processus d’automatisation de l’apprentissage qui nous auraient été utiles par ailleurs.

Comment mesurez-vous le succès de la fonctionnalité, et cette dernière a-t-elle déjà eu un impact sur vos KPI ?

Afin de mesurer l’impact de la feature, nous l’avons déployée avec un A/B test. Nous avons commencé par tester la feature sur 20% des utilisateurs pour voir si les performances augmentaient comme attendu. Lorsque nous avons observé l’augmentation des différents KPIs, nous sommes passés à 80% de l’audience, afin de garder un groupe contrôle mais de diffuser la feature au public le plus large possible.

Concernant l’impact que la feature a eu, nous avons observé beaucoup de différences de comportement, mais les deux plus gros impacts ont été une augmentation de plus de 40% des sessions pour les utilisateurs ayant de la recommandation et une augmentation du temps de visionnage moyen de près de 70%.

Merci beaucoup pour votre lecture et à la semaine prochaine pour un nouvel article.

🚨 PS: Si vous aimez notre newsletter, n'hésitez pas à la partager autour de vous et à nous suivre sur Linkedin pour ne rater aucune de nos aventures.