[PYTHON] J'ai essayé d'effectuer une analyse de cluster de clients à l'aide des données d'achat

Aperçu

Nous avons effectué une analyse groupée des clients en fonction des données d'achat. Après avoir effectué une analyse de cluster, nous avons visualisé les caractéristiques de chaque segment.

introduction

Lors de l'exécution de l'apprentissage automatique, l'analyse des données est nécessaire dans de nombreuses situations. Quel genre de perspective allez-vous examiner les données dont vous disposez et comment allez-vous les traiter? Je voudrais augmenter ces retraits, mais la situation actuelle est qu'il n'y a pas beaucoup de matériel pédagogique d'analyse de données utilisant Python. (J'en ai assez de parler d'Ayame et du Titanic ...) Alors je me suis dit: "N'est-il pas possible d'augmenter le nombre de retraits en achetant du matériel pédagogique permettant d'apprendre les méthodes d'analyse des données et de les reproduire à ma manière en Python, même si ce n'est pas Pthon?" Les livres que j'ai reçus cette fois sont les suivants.

[** R Business Statistics Analysis [Visit 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% BE% A4-% E6% A0% 84% E6% B2% BB / dp / 4798149500 / ref = sr_1_1 adgrpid = 50883860102 & gclid = CjwKCAiAmNbwBRBOEiwAqcwwpa7BggXF27rE-sYlO1xvJXmMQn-PeUq6EHGRIMkxBD-lQKWtl7MmsRoC888QAvD_BwE & hvadid = 338575431599 & hvdev = c & hvlocphy? = 009433 & hvnetw = g & hvpos = 1t2 & hvqmt = e & hvrand = 7508171191131142832 & hvtargid = aud-759377471893% 3Akwd-411533392957 & hydadcr = 13897_10891658 & jp-ad-ap = 0 & 3% mots-clés % B9% E7% B5% B1% E8% A8% 88% E5% 88% 86% E6% 9E% 90 & qid = 1578535237 & sr = 8-1)

[Objectif de ce livre] Ce livre utilise R à partir d'une grande quantité de données accumulées dans le domaine des affaires. Une méthode d'analyse statistique commerciale pour trouver Big X directement lié aux ventes de votre entreprise C'est un livre résumé. Un ensemble facile à comprendre d'une introduction et d'une méthode d'analyse réelle J'explique.

Des données d'utilisation

J'ai utilisé le fichier de livre ci-dessus.

・ Informations sur l'historique des achats [buy.csv]

Code réel

1. Lire les données

#Importer la bibliothèque
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import japanize_matplotlib
%matplotlib inline
#Lecture / affichage de fichiers
buying = pd.read_csv("buying.csv",encoding='cp932')
buying.head()

Data1.jpg

2. Effectuer une tabulation croisée

#Créer des données de ventes conjointes par tabulation croisée
buying_mat = pd.crosstab(buying['id'], buying['category'])
buying_mat.head()

Data2.jpg

3. Analyse de cluster hiérarchique après avoir créé des variables fictives

#Faire des données de ventes conjointes une variable fictive
#"1" si acheté plus d'une fois, "0" sinon
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

#Importer une bibliothèque d'analyse de cluster
from scipy.cluster.hierarchy import dendrogram, linkage
from scipy.cluster.hierarchy import linkage, dendrogram, fcluster
#Mise en œuvre du clustering hiérarchique
#Méthode de Ward x distance euclidienne
linkage_result = linkage(buying_mat1, method='ward', metric='euclidean')
#Déterminer le seuil de clustering
threshold = 0.7 * np.max(linkage_result[:, 2])
#Visualisation du clustering hiérarchique
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

#Obtenir la valeur du résultat du clustering
clustered = fcluster(linkage_result, threshold, criterion='distance')
#Vérifiez le résultat du clustering
print(clustered)

Data4.jpg

4. Analyse par grappes hiérarchiques sans variables factices

#Mise en œuvre du clustering hiérarchique
#Méthode de Ward x distance euclidienne
linkage_result2 = linkage(buying_mat, method='ward', metric='euclidean')
#Déterminer le seuil de clustering
threshold2 = 0.7 * np.max(linkage_result2[:, 2])
#Visualisation du clustering hiérarchique
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. Combinez les résultats de l'analyse hiérarchique des clusters avec les données d'origine

#Conversion DataFrame du résultat de l'analyse de cluster hiérarchique
_class = pd.DataFrame({'class':clustered}, index= buying_mat1.index)
_class.head()

Data5.jpg

#Combinez les données originales et les résultats d'analyse
buying_mat2 = pd.concat([buying_mat1, _class] ,axis=1)
buying_mat2.head()

Data6.jpg

#Vérifiez le nombre de clients dans chaque segment
buying_mat2.groupby('class').size()

Data7.jpg

6. Saisir les caractéristiques de la tendance commerciale commune dans chaque segment

#Calculez la valeur moyenne de toutes les catégories de produits pour chaque segment
cluster_stats = np.round(buying_mat2.groupby('class', as_index=False).mean() ,2)
cluster_stats.head()

Data8.jpg

#Convertir au format de données portrait pour le dessin graphique
mat_melt = pd.melt(cluster_stats, id_vars='class', var_name='Category',value_name='Rate')
mat_melt.head()

Data9.jpg

#Fonctionnalités du segment de graphique
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

#Fonctionnalités du segment de graphique(Dessin graphique avec instruction for)
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

Estimez le groupe d'achat à partir des caractéristiques de chaque segment. ・ Classe1 ・ Taux d'achat élevé de produits divers ⇒Une couche d'amateurs de produits divers? ・ Classe2 ・ Le taux d'achat d'articles à l'exclusion des articles pour hommes est également élevé ⇒Une famille avec enfants / clientes? ・ Classe3 ・ Taux d'achat élevé pour les produits pour bébés, les produits de maternité et les produits pour hommes ⇒Une famille avec enfants / clients masculins? ・ Classe4 ・ Taux d'achat élevé de produits pour femmes ⇒ Cliente féminine? ・ Classe5 ・ Le taux d'achat de produits pour femmes est élevé, mais la tendance d'achat est différente de la classe 4 ⇒ Les clientes (la tendance d'achat est différente de la classe 4)?

Recommended Posts

J'ai essayé d'effectuer une analyse de cluster de clients à l'aide des données d'achat
J'ai essayé d'analyser les données scRNA-seq en utilisant l'analyse des données topologiques (TDA)
J'ai essayé d'obtenir une base de données sur les courses de chevaux en utilisant Pandas
J'ai essayé de créer une expression régulière de "montant" en utilisant Python
J'ai essayé de créer une expression régulière de "temps" en utilisant Python
J'ai essayé de créer une expression régulière de "date" en utilisant Python
J'ai essayé d'obtenir une liste de noms AMI en utilisant Boto3
J'ai essayé l'analyse par grappes de la carte météo
J'ai créé un jeu ○ ✕ avec TensorFlow
J'ai essayé de faire MAP rapidement une personne suspecte en utilisant les données d'adresse Geolonia
J'ai essayé de lire les données d'un fichier en utilisant Node.js.
J'ai essayé d'utiliser Python (3) au lieu d'un calculateur de fonctions
J'ai essayé de dessiner un diagramme de configuration à l'aide de diagrammes
J'ai essayé de notifier la mise à jour de "Devenir romancier" en utilisant "IFTTT" et "Devenir un romancier API"
Je voulais collecter beaucoup d'images, j'ai donc essayé d'utiliser "google image download"
J'ai essayé de rechercher des vidéos à l'aide de l'API de données Youtube (débutant)
J'ai essayé d'automatiser [une certaine tâche] à l'aide d'une tarte à la râpe
[Python] J'ai essayé de collecter des données en utilisant l'API de wikipedia
J'ai fait un chronomètre en utilisant tkinter avec python
J'ai créé un éditeur de texte simple en utilisant PyQt
J'ai essayé d'obtenir rapidement des données d'AS / 400 en utilisant pypyodbc
J'ai créé une fonction pour récupérer les données de la colonne de base de données par colonne en utilisant sql avec sqlite3 de python [sqlite3, sql, pandas]
J'ai essayé de comparer la précision des modèles d'apprentissage automatique en utilisant kaggle comme thème.
J'ai essayé d'utiliser GrabCut d'OpenCV
Recommandation d'analyse des données à l'aide de MessagePack
J'ai essayé d'utiliser PI Fu pour générer un modèle 3D d'une personne à partir d'une image
J'ai essayé d'automatiser la construction d'un environnement pratique à l'aide de l'API SoftLayer d'IBM Cloud
J'ai essayé d'obtenir l'index de la liste en utilisant la fonction énumérer
J'ai essayé de créer une liste de nombres premiers avec python
J'ai essayé de visualiser les données BigQuery à l'aide de Jupyter Lab avec GCP
J'ai essayé de faire 5 modèles de base d'analyse en 3 ans
J'ai essayé de créer une application todo en utilisant une bouteille avec python
[Python] J'ai essayé d'obtenir diverses informations en utilisant l'API de données YouTube!
J'ai essayé d'obtenir rapidement des données d'AS / 400 en utilisant pypyodbc Préparation 1
J'ai essayé de créer un mécanisme de contrôle exclusif avec Go
J'ai essayé de créer un linebot (implémentation)
J'ai essayé d'utiliser Azure Speech to Text.
J'ai essayé de créer un linebot (préparation)
J'ai essayé de jouer au jeu ○ ✕ en utilisant TensorFlow
J'ai essayé d'utiliser l'API de données YOUTUBE V3
J'ai essayé l'analyse factorielle avec des données Titanic!
J'ai essayé de dessiner une ligne en utilisant une tortue
Création d'une application d'analyse de données à l'aide de Streamlit
J'ai créé une API Web
J'ai essayé d'utiliser pipenv, alors prenez note
J'ai essayé la détection 3D d'une voiture
J'ai essayé de transformer l'image du visage en utilisant sparse_image_warp de TensorFlow Addons
J'ai essayé d'obtenir les résultats de Hachinai en utilisant le traitement d'image
J'ai essayé d'estimer la similitude de l'intention de la question en utilisant Doc2Vec de gensim
J'ai essayé l'analyse de données IRMf avec python (Introduction au décodage des informations cérébrales)
J'ai essayé d'afficher la valeur d'altitude du DTM dans un graphique
[Kaggle] J'ai essayé l'ingénierie de quantité de caractéristiques de données de séries chronologiques multidimensionnelles à l'aide de tsfresh
J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
En utilisant COTOHA, j'ai essayé de suivre le cours émotionnel de la course aux meros.
J'ai créé un exemple pour accéder à Salesforce en utilisant Python et Bottle
J'ai essayé de vérifier le résultat du test A / B avec le test du chi carré
J'ai essayé d'implémenter le jeu de cartes de Trump en Python
Django super introduction par les débutants Python! Partie 2 J'ai essayé d'utiliser les fonctions pratiques du modèle
J'ai essayé de prédire la détérioration de la batterie lithium-ion en utilisant le SDK Qore