[PYTHON] Ich habe versucht, eine Clusteranalyse von Kunden anhand von Kaufdaten durchzuführen

Überblick

Basierend auf den Kaufdaten haben wir eine Clusteranalyse der Kunden durchgeführt. Nach einer Clusteranalyse haben wir die Eigenschaften jedes Segments visualisiert.

Einführung

Beim maschinellen Lernen ist in vielen Situationen eine Datenanalyse erforderlich. Welche Perspektive betrachten Sie die Daten, die Sie haben, und wie werden Sie sie verarbeiten? Ich würde solche Abhebungen gerne erhöhen, aber die aktuelle Situation ist, dass es nicht viele Lehrmaterialien für die Datenanalyse gibt, die Python verwenden. (Ich bin es leid, über Ayame und Titanic zu sprechen ...) Also dachte ich: "Ist es nicht möglich, die Anzahl der Abhebungen zu erhöhen, indem Lehrmaterialien gekauft werden, mit denen Datenanalysemethoden erlernt und in Python reproduziert werden können, auch wenn es nicht Pthon ist?" Die Bücher, die ich dieses Mal bekam, sind wie folgt.

[** R Analyse der Unternehmensstatistik [Besuchen Sie Tech] **](https://www.amazon.co.jp/R%E3%83%93%E3%82%B8%E3%83%8D%E3%82% B9% E7% B5% B1% E8% A8% 88% E5% 88% 86% E6% 9E% 90-% E3% 83% 93% E3% 82% B8% E3% 83% 86% E3% 82% AF -% E8% B1% 8A% E6% betragen% A4-% E6% A0% 84% E6% B2% BB / dp / 4798149500 / ref = sr_1_1 adgrpid = 50883860102 & gclid = CjwKCAiAmNbwBRBOEiwAqcwwpa7BggXF27rE-sYlO1xvJXmMQn-PeUq6EHGRIMkxBD-lQKWtl7MmsRoC888QAvD_BwE & hvadid = 338.575.431.599 & hvdev = c & hvlocphy? = 009433 & hvnetw = g & hvpos = 1t2 & hvqmt = e & hvrand = 7508171191131142832 & hvtargid = aud-759377471893% 3Akwd-411533392957 & hydadcr = 13897_10891658 & jp-ad-% =% % B9% E7% B5% B1% E8% A8% 88% E5% 88% 86% E6% 9E% 90 & qid = 1578535237 & sr = 8-1)

[Zweck dieses Buches] In diesem Buch wird R aus einer großen Datenmenge verwendet, die im Geschäftsfeld gesammelt wurde. Eine geschäftsstatistische Analysemethode zum Auffinden von Big X, die direkt mit dem Umsatz Ihres Unternehmens verknüpft ist Es ist ein zusammengefasstes Buch. Ein leicht verständlicher Satz einer Einführung und einer tatsächlichen Analysemethode Ich erkläre.

Nutzungsdaten

Ich habe die obige Buchdatei verwendet.

・ Informationen zum Kaufverlauf [purchase.csv]

Tatsächlicher Code

1. Daten lesen

#Bibliothek importieren
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import japanize_matplotlib
%matplotlib inline
#Dateien lesen / anzeigen
buying = pd.read_csv("buying.csv",encoding='cp932')
buying.head()

Data1.jpg

2. Führen Sie eine Kreuztabelle durch

#Erstellen Sie gemeinsame Verkaufsdaten durch Kreuztabelle
buying_mat = pd.crosstab(buying['id'], buying['category'])
buying_mat.head()

Data2.jpg

3. Hierarchische Clusteranalyse nach dem Erstellen von Dummy-Variablen

#Machen Sie die gemeinsamen Verkaufsdaten zu einer Dummy-Variablen
#"1" bei mehrmaligem Kauf, andernfalls "0"
buying_mat1 = buying_mat.copy()
for i in range(len(buying_mat1)):
    for j in range(len(buying_mat1.columns)):
        if buying_mat1.iloc[i, j] > 1:
            buying_mat1.iloc[i, j] = 1

buying_mat1.head()

Data3.jpg

#Importieren einer Bibliothek mit Clusteranalysen
from scipy.cluster.hierarchy import dendrogram, linkage
from scipy.cluster.hierarchy import linkage, dendrogram, fcluster
#Implementierung von hierarchischem Clustering
#Stationsmethode x Euklidischer Abstand
linkage_result = linkage(buying_mat1, method='ward', metric='euclidean')
#Bestimmen Sie den Schwellenwert für das Clustering
threshold = 0.7 * np.max(linkage_result[:, 2])
#Visualisierung von hierarchischem Clustering
plt.figure(num=None, figsize=(16, 9), dpi=200, facecolor='w', edgecolor='k')
dendrogram(linkage_result, labels=buying_mat1.index, color_threshold=threshold)
plt.axhline(7, linestyle='--', color='r')
plt.show()

graph1.png

#Ruft den Wert des Clustering-Ergebnisses ab
clustered = fcluster(linkage_result, threshold, criterion='distance')
#Überprüfen Sie das Clustering-Ergebnis
print(clustered)

Data4.jpg

4. Hierarchische Clusteranalyse ohne Dummy-Variablen

#Implementierung von hierarchischem Clustering
#Stationsmethode x Euklidischer Abstand
linkage_result2 = linkage(buying_mat, method='ward', metric='euclidean')
#Bestimmen Sie den Schwellenwert für das Clustering
threshold2 = 0.7 * np.max(linkage_result2[:, 2])
#Visualisierung von hierarchischem Clustering
plt.figure(num=None, figsize=(16, 9), dpi=200, facecolor='w', edgecolor='k')
dendrogram(linkage_result2, labels=buying_mat.index, color_threshold=threshold2)
plt.axhline(23, linestyle='--', color='r')
plt.show()

graph2.png

5. Kombinieren Sie die Ergebnisse der hierarchischen Clusteranalyse mit den Originaldaten

#DataFrame-Konvertierung des Ergebnisses der hierarchischen Clusteranalyse
_class = pd.DataFrame({'class':clustered}, index= buying_mat1.index)
_class.head()

Data5.jpg

#Kombinieren Sie Originaldaten und Analyseergebnisse
buying_mat2 = pd.concat([buying_mat1, _class] ,axis=1)
buying_mat2.head()

Data6.jpg

#Überprüfen Sie die Anzahl der Kunden in jedem Segment
buying_mat2.groupby('class').size()

Data7.jpg

6. Erfassen Sie die Merkmale der gemeinsamen Verkaufstendenz in jedem Segment

#Berechnen Sie den Durchschnittswert aller Produktkategorien für jedes Segment
cluster_stats = np.round(buying_mat2.groupby('class', as_index=False).mean() ,2)
cluster_stats.head()

Data8.jpg

#Konvertieren Sie zum Zeichnen von Diagrammen in das Hochformat
mat_melt = pd.melt(cluster_stats, id_vars='class', var_name='Category',value_name='Rate')
mat_melt.head()

Data9.jpg

#Diagrammsegmentfunktionen
fig = plt.figure(figsize =(20,8))
ax1 = fig.add_subplot(1, 5, 1)
sns.barplot(x='Category', y='Rate', data=mat_melt[mat_melt['class'] == 1], ax=ax1)
plt.xticks(rotation=90)
plt.ylim(0, 1)

ax2 = fig.add_subplot(1, 5, 2)
sns.barplot(x='Category', y='Rate', data=mat_melt[mat_melt['class'] == 2], ax=ax2)
plt.xticks(rotation=90)
plt.ylim(0, 1)

ax3 = fig.add_subplot(1, 5, 3)
sns.barplot(x='Category', y='Rate', data=mat_melt[mat_melt['class'] == 3], ax=ax3)
plt.xticks(rotation=90)
plt.ylim(0, 1)

ax4 = fig.add_subplot(1, 5, 4)
sns.barplot(x='Category', y='Rate', data=mat_melt[mat_melt['class'] == 4], ax=ax4)
plt.xticks(rotation=90)
plt.ylim(0, 1)           
    
ax5 = fig.add_subplot(1, 5, 5)
sns.barplot(x='Category', y='Rate', data=mat_melt[mat_melt['class'] == 5], ax=ax5)
plt.xticks(rotation=90)

graph4.png

#Diagrammsegmentfunktionen(Diagrammzeichnung mit for-Anweisung)
groups = mat_melt.groupby('class')
fig = plt.figure(figsize =(20,8))

for name, group in groups:
    _ax = fig.add_subplot(1, 5, int(name))
    sns.barplot(x='Category', y='Rate', data=group , ax=_ax)
    plt.title('Class' + str(name))
    plt.xticks(rotation=90)
    plt.ylim(0, 1)

graph4.png

Schätzen Sie die Einkaufsgruppe anhand der Merkmale jedes Segments. · Klasse 1 ・ Hohe Kaufrate für verschiedene Waren ⇒ Eine Schicht verschiedener Warenliebhaber? · Klasse 2 ・ Die Kaufrate von Artikeln ohne Herrenartikel ist gleichmäßig hoch ⇒ Eine Familie mit Kindern / Kundinnen? ・ Klasse3 ・ Hohe Kaufrate für Babyprodukte, Mutterschafts- und Männerprodukte ⇒ Eine Familie mit Kindern / männlichen Kunden? ・ Klasse 4 ・ Hohe Kaufquote von Frauenwaren ⇒ Kundin? ・ Klasse 5 ・ Die Kaufquote von Frauenwaren ist hoch, die Kauftendenz unterscheidet sich jedoch von der der Klasse 4 ⇒ Kundinnen (Kauftendenz unterscheidet sich von Klasse 4)?

Recommended Posts

Ich habe versucht, eine Clusteranalyse von Kunden anhand von Kaufdaten durchzuführen
Ich habe versucht, scRNA-seq-Daten mithilfe der topologischen Datenanalyse (TDA) zu analysieren.
Ich habe versucht, mit Pandas eine Pferderenn-Datenbank zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck für "Betrag" zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Zeit" zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Datum" zu erstellen
Ich habe versucht, mit Boto3 eine Liste der AMI-Namen zu erhalten
Ich habe versucht, die Wetterkarte einer Clusteranalyse zu unterziehen
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
Ich habe versucht, eine verdächtige Person mithilfe von Geolonia-Adressdaten schnell zu einem MAP zu machen
Ich habe versucht, Daten aus einer Datei mit Node.js zu lesen.
Ich habe versucht, Python (3) anstelle eines Funktionsrechners zu verwenden
Ich habe versucht, ein Konfigurationsdiagramm mit Diagrammen zu zeichnen
Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.
Ich wollte viele Bilder sammeln, also habe ich versucht, "Google Image Download" zu verwenden.
Ich habe versucht, Videos mit der Youtube Data API (Anfänger) zu suchen.
Ich habe versucht, [eine bestimmte Aufgabe] mit einem Raspeltorte zu automatisieren
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Ich habe mit PyQt einen einfachen Texteditor erstellt
Ich habe versucht, mit pypyodbc schnell Daten von AS / 400 abzurufen
Ich habe eine Funktion zum Abrufen von Daten aus der Datenbank spaltenweise mithilfe von SQL mit SQLite3 von Python [SQLite3, SQL, Pandas] erstellt.
Ich habe versucht, die Genauigkeit von Modellen für maschinelles Lernen mit Kaggle als Thema zu vergleichen.
Ich habe versucht, GrabCut von OpenCV zu verwenden
Empfehlung zur Datenanalyse mit MessagePack
Ich habe versucht, mit PI Fu aus einem Bild ein 3D-Modell einer Person zu erstellen
Ich habe versucht, die Erstellung einer praktischen Umgebung mithilfe der SoftLayer-API der IBM Cloud zu automatisieren
Ich habe versucht, den Index der Liste mithilfe der Aufzählungsfunktion abzurufen
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich habe versucht, BigQuery-Daten mit Jupyter Lab mit GCP zu visualisieren
Ich habe versucht, in 3 Jahren 5 Muster der Analysebasis zu erstellen
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
[Python] Ich habe versucht, mithilfe der YouTube-Daten-API verschiedene Informationen abzurufen!
Ich habe versucht, mit pypyodbc Preparation 1 schnell Daten von AS / 400 abzurufen
Ich habe versucht, mit Go einen exklusiven Kontrollmechanismus zu erstellen
Ich habe versucht, einen Linebot zu erstellen (Implementierung)
Ich habe versucht, Azure Speech to Text zu verwenden.
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
Ich habe versucht, ○ ✕ mit TensorFlow zu spielen
Ich habe versucht, YOUTUBE Data API V3 zu verwenden
Ich habe versucht, Faktoren mit Titanic-Daten zu analysieren!
Ich habe versucht, mit einer Schildkröte eine Linie zu ziehen
Erstellen einer Datenanalyseanwendung mit Streamlit
Ich habe eine Web-API erstellt
Ich habe versucht, pipenv zu verwenden, machen Sie sich also eine Notiz
Ich habe versucht, ein Auto in 3D zu erkennen
Ich habe versucht, das Gesichtsbild mit sparse_image_warp von TensorFlow Addons zu transformieren
Ich habe versucht, die Trefferergebnisse von Hachinai mithilfe der Bildverarbeitung zu erhalten
Ich habe versucht, die Ähnlichkeit der Frageabsicht mit Doc2Vec von gensim abzuschätzen
Ich habe versucht, fMRI-Daten mit Python zu analysieren (Einführung in die Dekodierung von Gehirninformationen)
Ich habe versucht, den Höhenwert von DTM in einem Diagramm anzuzeigen
[Kaggle] Ich habe versucht, mithilfe von tsfresh das Feature-Quantity-Engineering mehrdimensionaler Zeitreihendaten durchzuführen
Ich habe die übliche Geschichte ausprobiert, Deep Learning zu verwenden, um den Nikkei-Durchschnitt vorherzusagen
Mit COTOHA habe ich versucht, den emotionalen Verlauf des Laufens von Meros zu verfolgen.
Ich habe ein Beispiel für den Zugriff auf Salesforce mit Python und Bottle erstellt
Ich habe versucht, das Ergebnis des A / B-Tests mit dem Chi-Quadrat-Test zu überprüfen
Ich habe versucht, Trumps Kartenspiel in Python zu implementieren
Django super Einführung von Python-Anfängern! Teil 2 Ich habe versucht, die praktischen Funktionen der Vorlage zu nutzen
Ich habe versucht, die Verschlechterung des Lithium-Ionen-Akkus mithilfe des Qore SDK vorherzusagen