TP : Règles d’Association
Dans ce TP, nous découvrirons l’exploration de règles d'association en Python (ARM) et
nous ferons un exercice pratique sur un ensemble de données. Nous utiliserons l'algorithme
apriori et nous examinerons ses principaux composants. Nous commençons ce TP par une
brève introduction à l’exploration de règles d’association.
La règle d’association en Data Mining et ses avantages
La règle d’association en Mining est un processus qui utilise l'apprentissage automatique pour
analyser les données pour les modèles, la cooccurrence et la relation entre différents attributs
ou éléments de l'ensemble de données. Dans le monde réel, l'exploration des règles
d'association est utile en Python ainsi que dans d'autres langages de programmation pour le
regroupement d'articles, l'agencement des magasins et l'analyse du panier de consommation.
Les règles d'association comprennent deux parties, un antécédent (si) et une conséquence
(alors), qui est l'association si-alors qui se produit le plus fréquemment dans l'ensemble de
données.
Par exemple, {Bread} => {Milk} peut être une association dans un supermarché. Cette
relation implique que si (antécédent) une personne achète du pain, alors (par conséquent) le
client achètera très probablement du lait. Il peut y avoir de nombreuses relations entre
plusieurs ensembles d'articles qui peuvent être utilisés pour réaliser l'agencement du
magasin. Ainsi, les clients n’auraient plus besoin d’aller bien loin pour rechercher chaque
produit. Pour augmenter les ventes du magasin, ces produits peuvent bénéficier de réductions
combinées et ces associations peuvent être utiles de nombreuses autres manières.
Pour ce TP, nous utiliserons un ensemble de données contenant une liste de 20 commandes
comprenant le nom des éléments de commande. Vous pouvez télécharger l'ensemble de
données via votre code classroom.
Il existe de nombreux algorithmes qui utilisent des règles d'association comme AIS , SETM,
Apriori, etc. L’algorithme Apriori est le plus largement utilisé qui manipule des règles
d'association et nous l'utiliserons dans notre code. Importons maintenant les modules
nécessaires et modifions notre ensemble de données pour le rendre exploitable.
Importation et Modification de l’ensemble des données
Dans ce paragraphe, nous allons comprendre l'exploration de règles d'association à l'aide de la
bibliothèque apyori Python.
Installez la bibliothèque apyori à l'aide de la ligne de commande en exécutant la commande
pip suivante.
pip installer apyori
5
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from apyori import apriori
Maintenant, importons les données et appliquons quelques modifications aux données :
data = pd.read_csv("order_data.csv",delimiter=" ",header=None)
data.head()
Le paramètre delimiter=" " divisera les entrées des données chaque fois qu'un espace est
rencontré et header=None empêchera de prendre la première ligne comme en-tête et un en-
tête par défaut sera attribué. Notre bloc de données prendra la forme suivante :
Examinons quelques composants de l'algorithme Apriori qu'il est nécessaire de comprendre
pour créer un bon modèle.
Composants de l’algorithme Apriori
Il existe trois composants principaux de l’algorithme Apriori qui sont les suivants :
Support – C'est la mesure de la popularité d'un ensemble d'éléments, c'est-à-dire le
nombre de transactions dans lesquelles un élément apparaît par rapport au nombre
total de transactions. Il s’agit simplement de la probabilité qu’un client achète un
article. La formule mathématique pour représenter le support de l'élément X est :
Support(X) = ( Nombre de transactions dans lesquelles X apparaît)/ (Nombre
total de transactions)
Calcul de la valeur de support pour {Bread} dans notre ensemble de données :
5
Nombre de transactions dans lesquelles Bread apparaît = 11 ; Nombre total de
transactions = 20, alors : Support({Bread }) = 11/20 = 0,55
o Valeur du support minimale = Il s'agit d'une valeur seuil au-dessus de
laquelle le produit peut avoir un effet significatif sur le profit.
Confiance – Ce paramètre détermine l'impact d'un produit sur un autre, c'est-à-dire la
probabilité que si une personne achète le produit X, elle achètera également le produit
Y. Sa représentation en termes mathématiques est
Confiance({X} => {Y}) = (Transactions contenant à la fois X et
Y)/(Transactions contenant X)
Calcul de la confiance ({Bread} => {Milk}) dans notre ensemble de données
confiance ({Bread} => {Milk}) = la probabilité d'acheter du lait si le pain est déjà
acheté.
o Nombre de transactions dans lesquelles le pain et le lait apparaissent = 5
o Nombre de transactions contenant du Pain = 11
o Confiance ({Bread} => {Milk}) = 5/11 = 0,4545
Un inconvénient majeur de la confiance est qu’elle ne prend en compte que la popularité de
l’article X et non de Y. Ceci peut diminuer la valeur de la confiance et peut donc par la suite
induire en erreur la compréhension de l’association entre différents produits. Pour
surmonter cet inconvénient, nous disposons d’une autre mesure connue sous le nom de Lift.
Lift – Surmonte les limites de la mesure de la confiance et calculera une nouvelle
confiance qui tient compte de la popularité des deux éléments. La représentation
mathématique du Lift est :
Lift({X} => {Y}) = Confidence({X} => {Y}) / Support(Y)
Si la mesure Lift est supérieure à 1, cela signifie que Y est susceptible d'être acheté
avec X, tandis qu'une valeur inférieure à 1 indique qu'il est peu probable que Y soit
acheté avec X. Une valeur de Lift proche de 1 indique que les deux ensembles
d'éléments dans les transactions apparaissent souvent ensemble mais il n'y a aucune
association entre elles.
Calcul du Lift({Bread} => {Milk}) dans notre ensemble de données
Confiance ({Bread} => {Milk}= 0,4545
Support (Milk) = 9/20 = 0,45
Lift({Bread} => {Milk}) = 0,4545/0,45 = 1,01
Implémentation de l’algorithme Apriori
Pour utiliser l'algorithme Apriori, il est nécessaire de convertir l'ensemble des données
transactionnelles en une seule liste où chaque ligne sera une liste dans cette liste.
5
data_list = []
for row in range(0, 20):
data_list.append([str(data.values[row,column]) for column in range(0,
9)])
algo = apriori(data_list, min_support=0.25, min_confidence=0.2, min_lift=2,
min_length=2)
results = list(algo)
Nous avons créé une liste de listes, puis nous avons utilisé la méthode apriori du
module apriori et enfin transformé le type de données du générateur en une liste et
nous l'avons enregistré dans une variable nommée results. Pour prendre les bonnes
décisions et augmenter la vitesse de l'algorithme apriori, les méthodes apriori prennent
plusieurs arguments qui sont les suivants :
data - Le premier paramètre qui prend la liste qui contient les données
transactionnelles dans les listes intérieures.
min_support - Il s'agit de la valeur seuil de support pour les éléments à prendre
en compte. Supposons que nous voulions prendre des décisions pour notre
ensemble de données et que nous voulions inclure uniquement les éléments qui
apparaissent dans au moins 5 transactions sur le total, c'est-à-dire une valeur de
soutien de 5/20 = 0,25.
min_confidence - Il s'agit de la valeur seuil de confiance qui doit exister entre
chaque combinaison d'un ensemble d'éléments. Nous avons pris une valeur de
confiance de 0,2.
min_lift - Il s'agit de la valeur de lift minimale pour les règles sélectionnées.
Généralement, nous prenons une valeur de lift égale à 2 ou plus pour filtrer les
itemsets qui ont une association plus fréquente.
min_length - Nombre d'éléments à prendre en compte dans les règles.
Voyons la sortie du programme ci-dessous et imprimons les 3 premières règles que nous
avons obtenues.
for i in range(0,3):
print(f"Required Association No. {i+1} is: {results[i]}")
print('-'*25)
Required Association No. 1 is: RelationRecord(items=frozenset({'toothpaste',
'brush'}), support=0.25,
ordered_statistics=[OrderedStatistic(items_base=frozenset({'brush'}),
items_add=frozenset({'toothpaste'}), confidence=1.0, lift=2.5),
OrderedStatistic(items_base=frozenset({'toothpaste'}),
items_add=frozenset({'brush'}), confidence=0.625, lift=2.5)])
5
-------------------------
Required Association No. 2 is: RelationRecord(items=frozenset({'mouthwash',
'toothpaste'}), support=0.3,
ordered_statistics=[OrderedStatistic(items_base=frozenset({'mouthwash'}),
items_add=frozenset({'toothpaste'}), confidence=0.8571428571428572,
lift=2.142857142857143),
OrderedStatistic(items_base=frozenset({'toothpaste'}),
items_add=frozenset({'mouthwash'}), confidence=0.7499999999999999,
lift=2.142857142857143)])
-------------------------
Required Association No. 3 is: RelationRecord(items=frozenset({'honey',
'bread', 'butter'}), support=0.25,
ordered_statistics=[OrderedStatistic(items_base=frozenset({'butter'}),
items_add=frozenset({'honey', 'bread'}), confidence=0.625,
lift=2.0833333333333335), OrderedStatistic(items_base=frozenset({'honey',
'bread'}), items_add=frozenset({'butter'}), confidence=0.8333333333333334,
lift=2.0833333333333335)])
-------------------------
Explication des résultats
Si l'on considère l'association n° 1 de la sortie ci-dessus, on obtient tout d'abord une
association entre le dentifrice et la brosse et l'on constate que ces articles sont fréquemment
achetés ensemble. Ensuite, la valeur du Support est donnée (0,25) et nous avons les valeurs
de confiance et de Lift pour les ensembles d'éléments, un par un, en changeant l'ordre de
l'ensemble d'éléments. Par exemple, les mesures de confiance et de Lift pour la probabilité
d'acheter du dentifrice si une brosse est achetée sont respectivement de 1,0 et 2,5. Après
modification de l'ordre, les mesures de confiance et de Lift sont respectivement de 0,625 et
de 2,5.