Analyse d'association en Python

introduction

Lors de la construction d'un modèle d'apprentissage automatique avec Python, il existe de nombreux exemples sur le net s'il s'agit d'un modèle de traitement (classification, régression, clustering, etc.) inclus dans scikit-learn, et il peut être facilement implémenté en se référant à eux. Cependant, si ce n'est pas le cas, il peut être assez difficile de sélectionner une bibliothèque et d'obtenir un exemple d'implémentation. Un exemple typique est "** Analyse d'association **", qui est souvent utilisé dans l'analyse marketing. Avec R, vous pouvez facilement créer un modèle avec une bibliothèque souvent utilisée, mais avec Python, il existe étonnamment peu d'exemples de codes. Cet article présente cette partie. À propos, une série de procédures comprenant des cas d'utilisation d'un point de vue commercial plus en amont, des moyens de traitement à partir des données originales de l'échantillon de données UCI, et leurs explications sont décrites en détail dans la section 5.4 de mon livre «Profitable AI». Je suis. Si vous êtes intéressé, veuillez également consulter ce livre.

Livre Amazon https://www.amazon.co.jp/dp/4296106961/

Amazon Kindle https://www.amazon.co.jp/dp/B08F9P726T/

Réserver une page d'assistance https://github.com/makaishi2/profitable_ai_book_info/blob/master/README.md

Des données d'utilisation

Utilisez les données liées ci-dessous.

https://github.com/makaishi2/sample-data/blob/master/data/retail-france.csv

Ces données sont après un certain traitement à partir du jeu de données UCI. Veuillez vous référer au livre susmentionné pour la procédure de traitement jusqu'à présent.

Présentation du code d'implémentation

Voici un aperçu du code d'implémentation de l'analyse d'association utilisant ces données. Pour tout le notebook

https://github.com/makaishi2/sample-notebooks/blob/master/profitable-ai/association-sample.ipynb

Je l'ai téléchargé sur.

Traitement commun

Du prétraitement commun aux livres, la partie pertinente a été extraite dans cet échantillon.

#Prétraitement commun

#Masquer les avertissements supplémentaires
import warnings
warnings.filterwarnings('ignore')

#Importation des bibliothèques requises
import pandas as pd
import numpy as np

#Fonction d'affichage de trame de données
from IPython.display import display

#Réglage des options d'affichage
#Précision d'affichage en virgule flottante chez les pandas
pd.options.display.float_format = '{:.4f}'.format

#Afficher tous les éléments dans le bloc de données
pd.set_option("display.max_columns",None)

Lecture des données

Importez les données CSV prétraitées indiquées ci-dessus dans la trame de données.

url = 'https://raw.githubusercontent.com/makaishi2/sample-data/master/data/retail-france.csv'
df = pd.read_csv(url)
display(df[100:110])

Le résultat de la fonction d'affichage devrait ressembler à ceci.

スクリーンショット 2020-09-22 9.20.46.png

Traitement de l'information

Afin d'effectuer une analyse d'association sur les données ci-dessus, il est nécessaire de convertir les données au format horizontal. (Si vous voulez savoir ce qu'est la possession horizontale, veuillez vous référer au livre) Le code d'implémentation pour cela est le suivant.

#Agréger le nombre de produits en utilisant le numéro de commande et le numéro de produit comme clés
w1 = df.groupby(['numéro de commande', 'Numéro d'article'])['Nombre de produits'].sum()

#Vérifiez le résultat
print(w1.head())

L'état de w1 à ce stade est le suivant.

スクリーンショット 2020-09-22 9.25.11.png

Utilisez la fonction de dépilage pour déplacer le numéro d'article de la ligne vers la colonne.

#Déplacer le numéro d'article dans la colonne(Utilisation de la fonction de dépilage)
w2 = w1.unstack().reset_index().fillna(0).set_index('numéro de commande')

#Vérifier la taille
print(w2.shape)

#Vérifiez le résultat
display(w2.head())

Le résultat est le suivant:

スクリーンショット 2020-09-22 9.27.03.png

Enfin, utilisez la fonction apply de la trame de données pour convertir chaque élément d'une valeur numérique en une valeur binaire vrai / faux.

#Vrai selon que le résultat de l'agrégation est positif ou 0/Définir sur False
basket_df = w2.apply(lambda x: x>0)

#Vérifiez le résultat
display(basket_df.head())

Les résultats sont les suivants. Ceci termine le prétraitement pour l'analyse d'association.

スクリーンショット 2020-09-22 9.30.36.png

Construction de modèles

Utilisez mlextend comme bibliothèque pour l'analyse des associations. mlextend, moins célèbre que sckit-learn, est une bibliothèque pour l'apprentissage automatique Python, similaire à scicit-learn.

Tout d'abord, installez la bibliothèque mlxtend.

#Introduction de mlxtend
!pip install mlxtend

Ensuite, importez les fonctions «apriori» et «règles_association» utilisées dans l'analyse.

#Charger la bibliothèque
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules

Tout d'abord, une méthode appelée analyse apriori est utilisée pour extraire les relations entre les produits à haute valeur numérique appelée «** support **».

#Analyse Apriori
freq_items1 = apriori(basket_df, min_support = 0.06, 
    use_colnames = True)

#Vérifiez le résultat
display(freq_items1.sort_values('support', 
    ascending = False).head(10))

#Vérifiez le nombre d'éléments
print(freq_items1.shape[0])

Le résultat est le suivant.

スクリーンショット 2020-09-22 10.21.06.png

Extrait la relation avec une "** valeur de rehaussement **" élevée vers la dernière liste extraite.

#Extraction des règles d'association
a_rules1 = association_rules(freq_items1, metric = "lift",
    min_threshold = 1)

#Trier par valeur d'élévation
a_rules1 = a_rules1.sort_values('lift',
    ascending = False).reset_index(drop=True)

#Vérifiez le résultat
display(a_rules1.head(10))

#Vérifiez le nombre de règles
print(a_rules1.shape[0])

La liste suivante est le résultat final.

スクリーンショット 2020-09-22 10.22.15.png

Dans le livre, sur la base des résultats ci-dessus, j'utilise également NetworkX pour créer le graphique de relations suivant.

graph.png

Les termes techniques «** support » et « lift value **» mentionnés ici sont expliqués dans le livre, veuillez donc les consulter.

Recommended Posts

Analyse d'association en Python
Analyse de régression avec Python
Analyse des contraintes symétriques axiales avec Python
Analyse de régression simple avec Python
Première analyse de régression simple en Python
Analyse du squelette planaire dans Python (2) Hotfix
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
Méta-analyse en Python
Unittest en Python
Analyse de données python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python
FizzBuzz en Python
Étape AIC en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Tutoriel de recommandation utilisant l'analyse d'association (implémentation python)
Analyse résiduelle en Python (Supplément: règles Cochrane)
AtCoder # 36 quotidien avec Python
Texte de cluster en Python
Daily AtCoder # 32 en Python
Analyse de données avec python 2
Daily AtCoder # 6 en Python
Python: analyse des séries chronologiques
Daily AtCoder # 18 en Python
Modifier les polices en Python
Motif singleton en Python
Opérations sur les fichiers en Python
Lire DXF avec python
Daily AtCoder # 53 en Python