Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Les motifs fréquents et le support

Après cette leçon: Je peux compter le support d’un groupe d’articles pour savoir s’il est fréquent.

Leçon de 55 min2 commandesLab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Quels articles vont ensemble ?

Un motif fréquent est un groupe d’articles que des clients achètent souvent ensemble, comme le pain et le beurre. La fouille de données (en anglais data mining) les cherche dans des milliers de paniers pour décider quoi ranger côte à côte.

Ici, vous apprenez à les compter à la main, puis avec un programme.

À la fin de cette leçon

Remarque

Je peux compter le support d’un groupe d’articles pour savoir s’il est fréquent.

Mots clés

MotCe que ça veut direExemple
Panierles articles d’un seul achat
Groupe d’articlesun ou plusieurs articles pris ensemblepain + beurre
Supportla part des paniers qui contiennent le groupe
Seuil de supportle support minimal pour être gardé
Motif fréquentun groupe dont le support atteint le seuil
Paireun groupe de deux articles

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un panier est une liste d’articles

Une épicerie garde la trace de chaque passage en caisse. Un panier est la liste des articles d’un seul achat. L’ordre ne compte pas : seule compte la présence de l’article.

Un groupe d’articles est un ou plusieurs articles pris ensemble. Le support d’un groupe est la part des paniers qui le contiennent tous. On compte ces paniers, puis on divise par le nombre total de paniers.

Exemple travaillé : huit paniers

PanierArticlesContient pain ?Contient pain et beurre ?
1pain, beurre, laitOuiOui
2pain, beurre, confitureOuiOui
3lait, yaourtNonNon
4pain, beurre, lait, confitureOuiOui
5pain, laitOuiNon
6beurre, confitureNonNon
7pain, beurreOuiOui
8lait, yaourt, sucreNonNon

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Le support se lit dans le tableau

Cinq paniers sur huit contiennent du pain : son support est 5 sur 8, soit 0,625. Quatre paniers sur huit contiennent à la fois le pain et le beurre : le support de la paire est 4 sur 8, soit 0,5.

Un groupe ne peut jamais avoir un support plus grand que celui d’un de ses articles. Ajouter un article ne fait que retirer des paniers.

Un seuil garde les groupes fréquents

Avec des milliers d’articles, le nombre de paires possibles est énorme. On fixe donc un seuil de support : un groupe est un motif fréquent s’il l’atteint.

Le seuil aide aussi à chercher moins. Si le lait est rare, aucune paire avec le lait ne peut être fréquente : on ne la compte même pas.

Compter les paires avec un seuil

Code: python
paniers = [
    ["pain", "beurre", "lait"],
    ["pain", "beurre", "confiture"],
    ["lait", "yaourt"],
    ["pain", "beurre", "lait", "confiture"],
    ["pain", "lait"],
    ["beurre", "confiture"],
    ["pain", "beurre"],
    ["lait", "yaourt", "sucre"],
]
seuil = 3
comptes = {}
for panier in paniers:
    for i in range(len(panier)):
        for j in range(i + 1, len(panier)):
            if panier[i] < panier[j]:
                paire = panier[i] + "+" + panier[j]
            else:
                paire = panier[j] + "+" + panier[i]
            if paire in comptes:
                comptes[paire] = comptes[paire] + 1
            else:
                comptes[paire] = 1
for paire in comptes:
    if comptes[paire] >= seuil:
        print(paire, comptes[paire], "sur", len(paniers))
# Changez seuil en 2 et relancez : quelles paires apparaissent ?

Exemple travaillé : les paires comptées

PairePaniersFréquente au seuil 3 ?
beurre + pain4Oui
beurre + confiture3Oui
lait + pain3Oui
beurre + lait2Non
confiture + pain2Non
lait + yaourt2Non

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une erreur fréquente

Attention

Beaucoup pensent qu’un groupe fréquent prouve que l’un des articles fait acheter l’autre. Ce n’est pas le cas : deux articles très populaires se retrouvent souvent ensemble par simple hasard. Le support dit seulement « souvent ensemble ». La leçon suivante donne l’outil pour aller plus loin.

Dans le labo, un jour est un panier

Le fichier hires.csv a une ligne par jour de 2025. Traitons chaque jour comme un panier de trois faits. Week-end si c’est un samedi ou un dimanche. Pluie si la météo est « rainy ». Plein si le loueur de vélos a fait 300 locations ou plus.

Les commandes suivantes comptent ces paniers. Elles lisent le fichier et n’écrivent rien.

Compter les jours de chaque fait

Commande
docker exec jupyter python3 -c "import csv; L = list(csv.DictReader(open('hires.csv'))); print(len(L), sum(1 for r in L if r['weekday'] in ('Sat', 'Sun')), sum(1 for r in L if r['weather'] == 'rainy'), sum(1 for r in L if int(r['hires']) >= 300))"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lire la ligne affichée

La commande affiche quatre nombres : le nombre de jours (365), puis les jours de week-end (104), de pluie (120) et pleins (131). Le support de « plein » est donc 131 sur 365.

Ces nombres ne disent encore rien des paires. La commande suivante compte les jours où deux faits arrivent ensemble.

Compter trois paires de faits

Commande
docker exec jupyter python3 -c "import csv; L = list(csv.DictReader(open('hires.csv'))); n = len(L); W = [r for r in L if r['weekday'] in ('Sat', 'Sun')]; R = [r for r in L if r['weather'] == 'rainy']; print([(k, round(k / n, 3)) for k in (sum(1 for r in W if int(r['hires']) >= 300), sum(1 for r in R if int(r['hires']) >= 300), sum(1 for r in W if r['weather'] == 'rainy'))])"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Pour aller plus loin

Dans votre carnet, ajoutez un quatrième fait à chaque jour : « soleil » si la météo est « sunny ». Comptez les paires avec « plein » et classez-les par support.

Dites laquelle est la plus fréquente, puis demandez-vous si elle prouve que le soleil fait louer des vélos.

À propos de ce labo et de sa source: Lab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.