データ分析学習の進捗【2/8】

前書き

「データ分析100本ノック」と「東京大学データサイエンティスト育成講座」を使って勉強を進めます。

melheaven.hatenadiary.jp

こちらの本の一部の問題・コードを自分なりに改変して載せています。
「全て載せてください!」という方はご購入を。おすすめです。

データ分析100本ノック4章(前編)

前回生成したデータを使って今度はクラスタリング分析をしていきます。
クラスタリングの目的では、与えられたデータを類似性の高いグループに分けることを目的としています。

k-means法とは

k-means法はクラスタリング分析の最も基礎的な分析手法の一つです。
クラスタ数をNとすると、変数データに則って距離を算出し、N個のグループに分割してくれます。
k-meansは教師なし学習に分類され、一般的には顧客のセグメント分析に活用されます。

k-means法の流れと実装

  1. 各点xiについてランダムにクラスタを割り当てる
  2. クラスタの重心を計算
  3. 各点xiについてクラスタの重心を計算し、最も近いクラスタを探る
  4. 最も距離の近いクラスタに割り当て直す
  5. クラスタの割り当てに変更が無くなった時、終了

scikit-learnを使えば、簡単にK-Means法を実行できます。

from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
customer_clustering_sc = sc.fit_transform(customer_clustering)

kmeans = KMeans(n_clusters=4, random_state=0)
clusters = kmeans.fit(customer_clustering_sc)
customer_clustering['cluster'] = clusters.labels_

print(customer_clustering['cluster'].unique())
customer_clustering.head()

分析して4つのクラスタ別に顧客データを分類しました。
会員期間→3、0、1、2の順に長い
平均値→2、0、3、1の順に利用している事が分かります。

f:id:electric-city:20210209112642p:plain:w500:h200

PCA(主成分分析)

そういえば以前主成分分析と次元削減の関連性にまとめた記事を書きました。

主成分分析とは「多数の変数を統合し、元々の情報を損なわずに少数の変数で表現できるように試みる分析手法」です。
今回は複数の変数['mean', 'max', 'min', 'median', 'membership_period']で表現されたデータをn_components(=次元数)を2にして圧縮します。

melheaven.hatenadiary.jp

www.sejuku.net

from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
%matplotlib inline

X = customer_clustering_sc
pca = PCA(n_components=2)
pca.fit(X)
x_pca = pca.transform(X)
pca_df = pd.DataFrame(x_pca)
pca_df['cluster'] = customer_clustering['cluster']

for i in customer_clustering['cluster'].unique():
    tmp = pca_df.loc[pca_df['cluster']==i]
    plt.scatter(tmp[0], tmp[1])
f:id:electric-city:20210209113824p:plain:w400:h300
PCAの結果