Research @ Mangaki Recommandation d'anime et de mangas

Wanna join? Contact us or say hi on Twitter!


Test our algorithms on Movielens!

You can run our 5-fold cross validation on the Movielens dataset.

Download the Movielens dataset prepared by our team:

Clone the GitHub repo and:

git clone git@github.com:mangaki/mangaki.git
cd mangaki
python3 -m venv venv
. venv/bin/activate
pip install -r requirements.txt
pip install -r requirements/dev.txt
# Put the ratings-ml.csv file in the data folder
cd mangaki
cp settings.template.ini settings.ini
./manage.py compare movies

It will run everything and display:

Final results
als-20: RMSE = 1.122326
svd-20: RMSE = 1.157234

Feel free to modify the mangaki/mangaki/management/commands/compare.py file to compare more algorithms.

In-flight entertainment systems

Je m’intéresse aux in-flight entertainment systems.

As these systems evolve, recommendations could become more sophisticated. “For example, [the system could say,] ‘The last time you were on board, you watched this movie, but you didn’t finish it. Would you like to finish it now?’” Rhoads suggests. “We can say: ‘The last 15 movies that you watched on flights for the past two months have been around these characters or themes. Here are recommendations from this month’s movie selections.’ These are things that are relatively easy to implement and we’re already seeing some in our companion app.”

Il faut les contacter !

Rhoads expects in-flight connectivity to revolutionize recommendations in the future. “Where it’s going to get interesting is the airline’s ability to use connectivity to the aircraft to load content dynamically, based on passenger experience or passenger requests,” he says.

Contact : Fabienne Regitz, IFE product manager for Lufthansa.

The companion app carries passenger-viewing data from one flight to the next to inform recommendations.

Contact : Cedric Rhoads, executive director, Corporate Sales and Product Management at Panasonic Avionics.

“We are able to see how individual content files … are performing each month and then use that information to curate the next cycle’s content set” – Megan Worley, American Airlines

Apparemment Panasonic ont leur propre système appelé eX2 qui est utilisé par Emirates, Singapore Airlines, Cathay Pacific Airways et qui a remporté en 2007 un prix de la World Airline Entertainment Association, à présent appelée Airline Passenger Experience Association. C’est une surcouche de Red Hat, je crois.

“We’re very proud of our customers,” says Paul Margis, CEO of Panasonic Avionics. “Each one has a very unique system.”

Nouveau, 25 octobre 2016

Emirates has selected Thales’ AVANT in-flight entertainment (IFE) solution for its fleet of 150 Boeing 777X aircraft.

Source : Thales’ AVANT IFE Platform to Foster Innovation on Emirates Boeing 777X Fleet

Donc apparemment il y a Panasonic, Thales et Zodiac Aerospace, ce dernier est open source développé par Open Wide racheté par Smile.

Sur une autre note, un mémoire (de master je crois) d’un Portugais à Amadeus (Sophia-Antipolis) : Design and Implementation of a Flight Recommendation Engine. Mais c’est différent, c’est pas pour les in-flight entertainment.

Idées

  • Contacter Fabienne Regitz de Lufthansa, ainsi que l’auteur des articles sur apex.aero pour lui dire ce qu’on fait.
  • Contacter Thalès.

Autre

Systèmes de recommandation

Vous connaissez le principe, un utilisateur s’inscrit, rentre ses préférences, le système lui recommande des œuvres susceptibles de lui plaire.

Les œuvres à Mangaki

Particularités de mangaki.fr

  • Les notes : j’adore / j’aime / neutre / je n’aime pas / je veux voir / je ne veux pas voir
  • On peut vous recommander des mangas même si vous n’avez noté que des séries animées

Plus proches voisins (KNN)

Principe. Trouver des utilisateurs qui vous ressemblent en matière de goûts pour vous recommander ce qu’ils ont aimé que vous n’avez pas vu.

  • Quelles valeurs assigner à chaque rating (favorite, like, willsee, etc.) ?
  • Combien de voisins choisir ? Pour estimer la valeur d’une œuvre, faut-il considérer les 15 plus proches voisins ayant noté cette œuvre ? C’est ce que @Karypis20081 conseille.

Voir le code de la KNN sur GitHub

SVD

Principe. Trouver des profils types et répartir les utilisateurs selon cette base de profils types.

  • Comment considérer les entrées manquantes ? On les replace par la moyenne.
  • Avantage : on peut construire le Top 8000 d’un individu.

Voir le code de la SVD sur GitHub, depuis scikit-learn

De l’intérêt de la fonction d’erreur

  • Quelle fonction d’erreur choisir ? La RMSE ou simplement compter le nombre de faux positifs et négatifs ? Dans @Karypis20081, ils suggèrent plutôt une sorte d’Expected Utility qui pénalise plus les faux positifs que les faux négatifs.
  1. @Karypis2008 Information Gain through Clustered Neighbors, dans Learning preferences of new users in recommender systems: an information theoretic approach, ACM SIGKDD 2008.  2

Démarrage à froid

C’est bien beau d’avoir un moteur de recommandation mais encore faut-il l’alimenter (le bootstrapper) avec un test de bienvenue : un nouvel utilisateur ne sait pas quoi noter.

Quels œuvres lui présenter de façon à obtenir en peu de questions une idée de ses goûts ? Il faut des œuvres controversées, mais populaires.

Démarrage à froid d’utilisateur

Bootstrapper un KNN

@Karypis20081 suggère de faire un k-means, où la fonction de cluster est la fonction de voisinage, puis d’ensuite essayer de trouver l’œuvre qui va permettre d’identifier le plus précisément possible le cluster dont l’utilisateur fait partie (donc, ses plus proches voisins). Donc ils font un arbre de décision qui maximise la réduction d’entropie de la distribution du groupe courant parmi les clusters.

Arbre de décision

Bootstrapper une SVD

J’aime bien l’approche de @Golbandi20012 : faire un arbre de décision en choisissant des œuvres qui trisectent au mieux selon la réponse « Like / Hate / Unknown », ça permet d’avoir un joli compromis entre populaire et controversé. Plus précisément, ils s’intéressent à trouver l’œuvre qui minimise la quantité MSE(ceux qui ont aimé) + MSE(ceux qui ont détesté) + MSE(ceux qui ne connaissent pas). On a essayé sur Mangaki mais on se fait un peu avoir à cause des Unknown.

Une autre approche dans @Gabillon20143 consiste à faire des épisodes test / recommandation / test / recommandation pour présenter de façon adaptative (test) k œuvres à noter de façon à maximiser les éléments suggérés (recommandation) qui seront proches de quelque chose que le newcomer a liké. Ils donnent un reward de 1 si la recommandation est proche d’un film liké par l’utilisateur, et un reward de 0.1 si la recommandation est proche d’au moins un film noté par l’utilisateur mais qu’aucun d’entre eux n’a été liké par l’utilisateur.

Mesurer la culture du nouvel utilisateur

On pourrait imaginer un test adaptatif à la modèle de Rasch (ce qu’ils utilisent pour le GMAT et PISA pour estimer le « score de culture » du nouveau venu, juste en demandant : « Et ça, tu connais ? — Ouais mais j’aime pas. »

Démarrage à froid d’œuvre

De façon similaire, comment faire lorsqu’une nouvelle œuvre rejoint la base de données afin d’avoir une petite idée de sa qualité ?

Ça c’est superbe mais pas encore adaptatif : @Anava20154 remarque que dans une SVD, la RMSE à la fin est une fonction supermodulaire. Donc ils cherchent l’ensemble de k œuvres qui va réduire la RMSE au mieux, en prouvant que le glouton se débrouille pas trop mal (à 1 - 1/e de l’optimal, c’est-à-dire 63 %).

  1. @Karypis2008 Information Gain through Clustered Neighbors, dans Learning preferences of new users in recommender systems: an information theoretic approach, ACM SIGKDD 2008. 

  2. @Golbandi2011 Adaptive bootstrapping of recommender systems using decision trees, WSDM 2011 (salaud de paywall). 

  3. @Gabillon2014 Large-Scale Optimistic Adaptive Submodularity, AAAI 2014. 

  4. @Anava2015 Budget-constrained item cold-start handling in collaborative filtering recommenders via optimal design, WWW 2015.