Une méthode qui recommande les produits les plus proches, par leurs caractéristiques, de ceux que le client a déjà choisis. On transforme chaque description en vecteur, on construit le profil du client, puis on cherche les produits les plus ressemblants. Elle marche dès le premier jour d'un nouveau produit, sans attendre d'avis.
Un libraire qui ne connaît pas ses autres clients, mais lit très bien les quatrièmes de couverture : vous avez aimé deux polars nordiques, il vous tend le troisième.
Ici, la description de chaque formation est transformée en TF-IDF : un poids par mot, fort pour les mots rares et caractéristiques, faible pour les mots courants.
Le profil est la moyenne des vecteurs des produits déjà choisis. Un apprenant qui a suivi Excel avancé et SQL a un profil tourné vers les tableaux, les rapports et les données.
La similarité cosinus mesure la proximité entre le profil et chaque produit. On propose les plus proches, en retirant ceux déjà suivis.
Huit formations décrites en une phrase, et les formations déjà suivies par l'apprenant : Excel avancé et SQL. Aucun avis, aucune note : seul le contenu compte. Le catalogue est écrit directement dans le code.
Dans l'exemple Python, la formation Python analyse arrive en tête, devant Data storytelling et Power BI. IA générative et Machine learning ferment la marche : aucun mot en commun avec le profil.
Hors ligne, un expert métier vérifie que les suggestions ont du sens. En ligne, on compare le taux d'inscription aux formations recommandées à celui d'une sélection par popularité, par test A/B.
Pas d'entraînement à proprement parler : les choix portent sur la représentation des produits et du client.
TF-IDF pour du texte simple, attributs codés (catégorie, gamme, prix) pour des fiches structurées, embeddings pour capter le sens au-delà des mots exacts.
Les mots sans contenu (de, les, pour) doivent être retirés. scikit-learn n'intègre qu'une liste anglaise : il faut fournir la liste française, que tm propose en R avec stopwords("french").
Moyenne des produits choisis, ou moyenne pondérée qui donne plus de poids aux choix récents et aux produits bien notés.
Retirer les quasi-doublons et glisser quelques suggestions plus éloignées évite une liste de cinq variantes du même produit.
# Catalogue de formations : recommandation par contenu en R
library(tm)
catalogue <- data.frame(
formation = c("Excel avancé", "Power BI", "SQL", "Python analyse", "Machine learning",
"IA générative", "Statistiques", "Data storytelling"),
description = c("Tableaux croisés dynamiques, formules avancées et automatisation des rapports sous Excel",
"Tableaux de bord interactifs, modélisation des données et visualisation sous Power BI",
"Requêtes SQL, jointures et agrégations pour interroger les bases de données",
"Préparation des données avec pandas, visualisation et automatisation des rapports en Python",
"Modèles prédictifs en Python : régression, classification et évaluation des modèles",
"Rédiger, résumer et analyser des documents avec les assistants IA générative",
"Moyennes, tests statistiques et lecture des indicateurs pour décider avec les données",
"Raconter les données : visualisation, tableaux de bord et présentation aux décideurs"))
# Chaque formation devient un vecteur de mots pondérés (TF-IDF)
dtm <- DocumentTermMatrix(VCorpus(VectorSource(catalogue$description)),
control = list(weighting = weightTfIdf, removePunctuation = TRUE,
stopwords = stopwords("french")))
X <- as.matrix(dtm)
X <- X / sqrt(rowSums(X^2)) # vecteurs de longueur 1 : le produit scalaire devient le cosinus
# Profil de l'apprenant = moyenne des formations déjà suivies
suivies <- c(1, 3) # Excel avancé et SQL
profil <- colMeans(X[suivies, ])
score <- as.vector(X %*% profil) / sqrt(sum(profil^2))
names(score) <- catalogue$formation
print(round(sort(score[-suivies], decreasing = TRUE), 2))
# Catalogue de formations : recommandation par contenu en Python
import numpy as np
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
catalogue = pd.DataFrame({"formation": ["Excel avancé", "Power BI", "SQL", "Python analyse", "Machine learning",
"IA générative", "Statistiques", "Data storytelling"],
"description": ["Tableaux croisés dynamiques, formules avancées et automatisation des rapports sous Excel",
"Tableaux de bord interactifs, modélisation des données et visualisation sous Power BI",
"Requêtes SQL, jointures et agrégations pour interroger les bases de données",
"Préparation des données avec pandas, visualisation et automatisation des rapports en Python",
"Modèles prédictifs en Python : régression, classification et évaluation des modèles",
"Rédiger, résumer et analyser des documents avec les assistants IA générative",
"Moyennes, tests statistiques et lecture des indicateurs pour décider avec les données",
"Raconter les données : visualisation, tableaux de bord et présentation aux décideurs"]})
# Chaque formation devient un vecteur de mots pondérés (TF-IDF)
mots_vides = ["de", "des", "du", "la", "le", "les", "et", "en", "pour", "avec", "sous", "aux"]
X = TfidfVectorizer(stop_words=mots_vides).fit_transform(catalogue.description)
# Profil de l'apprenant = moyenne des formations déjà suivies
suivies = [0, 2] # Excel avancé et SQL
profil = np.asarray(X[suivies].mean(axis=0))
catalogue["score"] = cosine_similarity(profil, X).ravel()
print(catalogue.drop(index=suivies).sort_values("score", ascending=False)[["formation", "score"]].round(2))
Elle fonctionne pour un produit tout juste ajouté, n'a pas besoin des autres clients et s'explique facilement. Son défaut : elle enferme le client dans ce qu'il connaît déjà, faute de s'appuyer sur les goûts des autres.
Une mesure de ressemblance entre deux vecteurs, fondée sur l'angle qui les sépare. Avec des vecteurs TF-IDF, elle vaut 1 pour deux textes aux mots identiquement pondérés et 0 pour deux textes sans mot commun. Elle ne dépend pas de la longueur des textes.
Un système qui combine plusieurs approches, en général le contenu et le filtrage collaboratif. Le contenu couvre les nouveaux produits, le collaboratif apporte la découverte. On mélange les scores ou on bascule de l'un à l'autre selon l'historique disponible.
Pondère les mots rares et fréquents pour transformer une description en vecteur.
Voir la fiche → pour capter le sensReprésentent un texte par son sens : « tableur » et « Excel » deviennent proches même sans mot commun.
Voir la fiche → le complémentS'appuie sur les comportements des autres clients plutôt que sur le contenu. Les deux se combinent souvent.
Voir la fiche →Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.
Nous utilisons des cookies de mesure d'audience et de suivi publicitaire pour comprendre la fréquentation du site et l'efficacité de nos annonces. Rien n'est déposé sans votre accord. En savoir plus