kaggle | 商城客戶細分數據

@Author:BY Runsen

@Date:2019年06月09日

無聊看下kaggle,發現了一個不錯 的數據集

您有超市購物中心和會員卡,您可以獲得有關客戶的一些基本數據,如客戶ID,年齡,性別,年收入和支出分數。消費分數是您根據定義的參數(如客戶行為和購買數據)分配給客戶的分數。

問題陳述 您擁有購物中心並希望瞭解哪些客戶可以輕鬆融合目標客戶,以便可以向營銷團隊提供意見並相應地制定策略

數據集是要根據最後兩個特徵,來判斷是否給會員卡,在生活挺常見的,典型的無監督學習,用k-means他們分類

<code>import numpy as np # linear algebra import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv) import os print(os.listdir("../input")) /<code>

<code>['Mall_Customers.csv'] /<code>

<code>import numpy as np import matplotlib.pyplot as plt import pandas as pd import warnings import seaborn as sns from sklearn.preprocessing import LabelEncoder warnings.filterwarnings('ignore') /<code>

<code>data=pd.read_csv('../input/Mall_Customers.csv') data.head() /<code>

<code>X=data.iloc[:,[3,4]].values # 將年度收入和支出分數作為特徵 /<code>

求最優聚類數

<code>from sklearn.cluster import KMeans wcss=[] for i in range(1,11): kmeans=KMeans(n_clusters=i,init='k-means++',max_iter=300,n_init=10,random_state=0) kmeans.fit(X) wcss.append(kmeans.inertia_) plt.plot(range(1,11),wcss) plt.title('The Elbow Method') plt.xlabel('Number of clusters') plt.ylabel('WCSS') plt.show() /<code>

看出就是5,因為5是折點

<code>kmeans=KMeans(n_clusters=5,init='k-means++',max_iter=300,n_init=10,random_state=0) y_kmeans=kmeans.fit_predict(X) /<code>

<code>plt.scatter(X[y_kmeans==0,0],X[y_kmeans==0,1],s=100,c='magenta',label='Careful') plt.scatter(X[y_kmeans==1,0],X[y_kmeans==1,1],s=100,c='yellow',label='Standard') plt.scatter(X[y_kmeans==2,0],X[y_kmeans==2,1],s=100,c='green',label='Target') plt.scatter(X[y_kmeans==3,0],X[y_kmeans==3,1],s=100,c='cyan',label='Careless') plt.scatter(X[y_kmeans==4,0],X[y_kmeans==4,1],s=100,c='burlywood',label='Sensible') plt.scatter(kmeans.cluster_centers_[:,0],kmeans.cluster_centers_[:,1],s=300,c='red',label='Centroids') plt.title('Cluster of Clients') plt.xlabel('Annual Income (k$)') plt.ylabel('Spending Score (1-100)') plt.legend() plt.show /<code>

五個分類

<code>Cluster 1- High income low spending =Careful Cluster 2- Medium income medium spending =Standard Cluster 3- High Income and high spending =Target Cluster 4- Low Income and high spending =Careless Cluster 5- Low Income and low spending =Sensible /<code>

比較男和女

<code>sns.lmplot(x='Age', y='Spending Score (1-100)', data=data,fit_reg=True,hue='Gender') plt.show() /<code>

年齡分佈

<code>data.sort_values(['Age']) plt.figure(figsize=(10,8)) plt.bar(data['Age'],data['Spending Score (1-100)']) plt.xlabel('Age') plt.ylabel('Spending Score') plt.show() /<code>

男人和女人花在20多歲和30多歲的時候,因為在以後的階段,消費變小了。

男變為1,女0

<code>label_encoder=LabelEncoder() integer_encoded=label_encoder.fit_transform(data.iloc[:,1].values) data['Gender']=integer_encoded data.head() /<code>

<code>hm=sns.heatmap(data.iloc[:,1:5].corr(), annot = True, linewidths=.5, cmap='Blues') hm.set_title(label='Heatmap of dataset', fontsize=20) hm plt.ioff() /<code>

看了下其他人的代碼,學習一下

有人分成3類

<code>dataset_1 = data.iloc[:,1:5] dataset_1.head(10) /<code>

<code>results = [] for i in range(1,10): kmeans = KMeans(n_clusters=i, init='k-means++') res = kmeans.fit(dataset_1) results.append(res.score(dataset_1)) plt.plot(range(1,10),results) plt.xlabel('Num Clusters') plt.ylabel('score') plt.title('Elbow Curve') /<code>

應該是無關數據影響了

<code>dataset_2 = dataset[:,3:5] dataset_2.head(10) /<code>

<code>results = [] for i in range(1,10): kmeans = KMeans(n_clusters=i, init='k-means++') res = kmeans.fit(dataset_2) results.append(res.score(dataset_2)) plt.plot(range(1,10),results) plt.xlabel('Num Clusters') plt.ylabel('score') plt.title('Elbow Curve') /<code>

數據集鏈接:

https://www.kaggle.com/vjchoudhary7/customer-segmentation-tutorial-in-python