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.
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.
[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.
J'ai utilisé le fichier de livre ci-dessus.
・ Informations sur l'historique des achats [buy.csv]
#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()
#Créer des données de ventes conjointes par tabulation croisée
buying_mat = pd.crosstab(buying['id'], buying['category'])
buying_mat.head()
#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()
#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()
#Obtenir la valeur du résultat du clustering
clustered = fcluster(linkage_result, threshold, criterion='distance')
#Vérifiez le résultat du clustering
print(clustered)
#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()
#Conversion DataFrame du résultat de l'analyse de cluster hiérarchique
_class = pd.DataFrame({'class':clustered}, index= buying_mat1.index)
_class.head()
#Combinez les données originales et les résultats d'analyse
buying_mat2 = pd.concat([buying_mat1, _class] ,axis=1)
buying_mat2.head()
#Vérifiez le nombre de clients dans chaque segment
buying_mat2.groupby('class').size()
#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()
#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()
#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)
#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)
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