Assoziationsanalyse in Python

Einführung

Wenn Sie ein Modell für maschinelles Lernen mit Python erstellen, gibt es im Internet viele Beispiele, wenn es sich um ein Verarbeitungsmuster (Klassifizierung, Regression, Clustering usw.) handelt, das in scikit-learn enthalten ist, und das einfach durch Bezugnahme auf diese implementiert werden kann. Ist dies jedoch nicht der Fall, kann es schwierig sein, eine Bibliothek auszuwählen und ein Implementierungsbeispiel zu erhalten. Ein typisches Beispiel ist "** Assoziationsanalyse **", die häufig in der Marketinganalyse verwendet wird. Mit R können Sie problemlos ein Modell mit einer häufig verwendeten Bibliothek erstellen. Mit Python gibt es jedoch überraschend wenige solcher Beispielcodes. Dieser Artikel stellt diesen Teil vor. Übrigens werden in Abschnitt 5.4 meines Buches "Profitable AI" eine Reihe von Verfahren beschrieben, darunter Anwendungsfälle aus einer vorgelagerten Geschäftsperspektive, Verarbeitungsmittel aus den Originaldaten aus dem UCI-Beispieldatensatz und deren Erläuterungen. Ich bin. Wenn Sie interessiert sind, lesen Sie bitte auch dieses Buch.

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

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

Buchunterstützungsseite https://github.com/makaishi2/profitable_ai_book_info/blob/master/README.md

Nutzungsdaten

Verwenden Sie die unten verlinkten Daten.

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

Diese Daten stammen nach einiger Verarbeitung aus dem UCI-Datensatz. Informationen zum bisherigen Verarbeitungsverfahren finden Sie im oben genannten Buch.

Übersicht über den Implementierungscode

Das Folgende ist eine Übersicht über den Implementierungscode der Assoziationsanalyse, der diese Daten verwendet. Für das gesamte Notebook

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

Ich habe es auf hochgeladen.

Gemeinsame Verarbeitung

Von der für Bücher üblichen Vorverarbeitung wurde in dieser Stichprobe der relevante Teil extrahiert.

#Gemeinsame Vorverarbeitung

#Zusätzliche Warnungen ausblenden
import warnings
warnings.filterwarnings('ignore')

#Import der benötigten Bibliotheken
import pandas as pd
import numpy as np

#Datenrahmen-Anzeigefunktion
from IPython.display import display

#Anpassung der Anzeigeoptionen
#Gleitkomma-Anzeigegenauigkeit bei Pandas
pd.options.display.float_format = '{:.4f}'.format

#Alle Elemente im Datenrahmen anzeigen
pd.set_option("display.max_columns",None)

Daten lesen

Importieren Sie die oben gezeigten vorverarbeiteten CSV-Daten in den Datenrahmen.

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

Das Ergebnis der Anzeigefunktion sollte so aussehen.

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

Datenverarbeitung

Um eine Assoziationsanalyse für die obigen Daten durchzuführen, müssen die Daten in das horizontale Format konvertiert werden. (Wenn Sie wissen möchten, was horizontaler Besitz ist, lesen Sie bitte das Buch) Der Implementierungscode dafür lautet wie folgt.

#Aggregieren Sie die Anzahl der Produkte anhand der Bestellnummer und der Produktnummer als Schlüssel
w1 = df.groupby(['Bestellnummer', 'Artikelnummer'])[''].sum()

#Überprüfen Sie das Ergebnis
print(w1.head())

Der Zustand von w1 in diesem Stadium ist wie folgt.

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

#Verschieben Sie die Artikelnummer in die Spalte(Verwendung der Entstapelfunktion)
w2 = w1.unstack().reset_index().fillna(0).set_index('Bestellnummer')

#Größe prüfen
print(w2.shape)

#Überprüfen Sie das Ergebnis
display(w2.head())

Das Ergebnis ist wie folgt:

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

Verwenden Sie schließlich die Apply-Funktion des Datenrahmens, um jedes Element von einem numerischen Wert in einen True / False-Binärwert umzuwandeln.

#True, abhängig davon, ob das Aggregationsergebnis positiv oder 0 ist/Auf False setzen
basket_df = w2.apply(lambda x: x>0)

#Überprüfen Sie das Ergebnis
display(basket_df.head())

Die Ergebnisse sind wie folgt. Damit ist die Vorverarbeitung für die Assoziationsanalyse abgeschlossen.

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

Modellbau

Verwenden Sie mlextend als Bibliothek für die Assoziationsanalyse. mlextend, weniger bekannt als sckit-learn, ist eine Bibliothek für maschinelles Python-Lernen, ähnlich wie scicit-learn.

Installieren Sie zunächst die mlxtend-Bibliothek.

#Einführung von mlxtend
!pip install mlxtend

Importieren Sie als Nächstes die Funktionen apriori und assoziationsregeln, die in der Analyse verwendet werden sollen.

#Bibliothek laden
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules

Zunächst wird eine Methode namens Apriori-Analyse verwendet, um Beziehungen zwischen Produkten mit hohen numerischen Werten zu extrahieren, die als "** Unterstützung **" bezeichnet werden.

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

#Überprüfen Sie das Ergebnis
display(freq_items1.sort_values('support', 
    ascending = False).head(10))

#
print(freq_items1.shape[0])

Das Ergebnis ist wie folgt.

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

Extrahiert die Beziehung mit einem hohen "** Lift-Wert **" zur zuletzt extrahierten Liste.

#Extraktion von Assoziationsregeln
a_rules1 = association_rules(freq_items1, metric = "lift",
    min_threshold = 1)

#Nach Hubwert sortieren
a_rules1 = a_rules1.sort_values('lift',
    ascending = False).reset_index(drop=True)

#Überprüfen Sie das Ergebnis
display(a_rules1.head(10))

#Überprüfen Sie die Anzahl der Regeln
print(a_rules1.shape[0])

Die folgende Liste ist das Endergebnis.

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

In dem Buch verwende ich basierend auf den obigen Ergebnissen auch NetworkX, um das folgende Beziehungsdiagramm zu erstellen.

graph.png

Die hier erwähnten technischen Begriffe "** Support " und " Lift Value **" werden im Buch erläutert. Bitte beziehen Sie sich darauf.

Recommended Posts

Assoziationsanalyse in Python
Regressionsanalyse mit Python
Axialsymmetrische Spannungsanalyse mit Python
Einfache Regressionsanalyse mit Python
Erste einfache Regressionsanalyse in Python
Planare Skelettanalyse in Python (2) Hotfix
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
Metaanalyse in Python
Unittest in Python
Datenanalyse Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python
Schritt AIC in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Empfehlungs-Tutorial mit Assoziationsanalyse (Python-Implementierung)
Restanalyse in Python (Ergänzung: Cochrane-Regeln)
Täglicher AtCoder # 36 mit Python
Clustertext in Python
Täglicher AtCoder # 32 in Python
Datenanalyse mit Python 2
Täglicher AtCoder # 6 in Python
Python: Zeitreihenanalyse
Täglicher AtCoder # 18 in Python
Bearbeiten Sie Schriftarten in Python
Singleton-Muster in Python
Dateioperationen in Python
Lesen Sie DXF mit Python
Täglicher AtCoder # 53 in Python