顧客や商品を自動でグループ分け!無料ColabとPythonで実践するクラスター分析入門
導入:データの中に隠された「グループ」を見つけ出す
データ分析を進める中で、「似た特徴を持つ顧客をまとめて、それぞれに合ったアプローチをしたい」「売れ行きのパターンが似ている商品をグループ化して、陳列やプロモーションを最適化したい」といった課題に直面することは少なくありません。しかし、手作業でデータの全体像からこうした共通点を見つけ出すのは非常に困難です。
このような場合に役立つのが「クラスター分析」という手法です。クラスター分析は、与えられたデータの中から、互いに似ているものを集めて「クラスター(集団)」を形成する分析手法です。これにより、データの中に自然に存在するグループやパターンを自動的に発見することができます。
データ分析に関心があり、表計算ソフトは使っているものの、プログラミングや高度な分析はこれからという方もいらっしゃるかと思います。高価な専門ツールを導入しなくても、無料で利用できるツールと基本的なコードを使って、このクラスター分析を始めることができます。この記事では、Google Colaboratory(以下、Google Colab)とPythonという無料ツールを使って、クラスター分析の基本と実践方法を解説します。
クラスター分析とは?なぜ無料ツールで始めるのか
クラスター分析の概要
クラスター分析は、多変量解析(複数の変数を持つデータを分析する手法)の一つで、観測対象(この場合は顧客や商品など)を、変数に基づいた類似性によってグループ分けする手法です。例えば、顧客の年齢、性別、居住地域、購入履歴などのデータを使って、似たような購買行動をとる顧客層を自動的に特定することができます。
この分析の目的は、データ全体をいくつかのグループに分割することで、それぞれのグループが持つ特徴を理解し、その特徴に基づいた戦略や施策を考えることにあります。人間の目では見つけにくい、データの中に潜む構造やパターンを浮かび上がらせることができるのが大きなメリットです。
無料ツールで始めるメリット
クラスター分析のような多変量解析を行うには、通常、統計解析ソフトウェアやプログラミング言語が必要になります。専門的なツールは高価な場合が多く、導入に躊躇する方もいらっしゃるかもしれません。
しかし、Google ColabとPythonを使えば、これらの高度な分析をコストをかけずに始めることが可能です。
- Google Colab: Googleが提供するブラウザ上でPythonコードを実行できるサービスです。特別な環境構築が不要で、インターネットに繋がっていればすぐに始められます。データ分析に必要な多くのライブラリ(後述)が最初からインストールされています。
- Python: データ分析分野で広く使われているプログラミング言語です。学習しやすく、豊富なデータ分析用ライブラリが無料で提供されています。
これらのツールを組み合わせることで、専門ツールなしにクラスター分析を実行できる環境が手に入ります。もちろん、Pythonのコードを書く必要がありますが、基本的なコードであれば、この記事で紹介する手順に沿って進めることで実行可能です。
メリット・デメリット
メリット:
- コスト不要: Google ColabもPythonも無料で利用できます。
- 環境構築不要: ブラウザがあればすぐに分析を始められます。
- 豊富なライブラリ: Pythonにはデータ分析、統計解析、機械学習のための強力なライブラリ(Pandas, Scikit-learnなど)が豊富に用意されています。
- 再現性と共有: 分析手順をコードとして残せるため、同じ分析を何度でも実行したり、他の人と共有したりすることが容易です。
デメリット:
- Pythonの学習が必要: 基本的なプログラミングの概念や、Pythonの文法を理解する必要があります。
- コードの記述: 分析のたびにコードを書く必要があります。(ただし、一度書けば再利用可能です。)
- 大規模データへの制限: Google Colabは無料枠の場合、計算リソースや実行時間に制限があるため、非常に大規模なデータ分析には向かない場合があります。(数十万行程度のデータであれば十分に分析可能です。)
Google ColabとPythonでクラスター分析を実践する
ここでは、最も一般的なクラスター分析の手法の一つである「K-Means(K平均法)」を例に、具体的な手順を解説します。
1. Google Colabを起動する
Googleアカウントがあれば、以下のURLからGoogle Colabにアクセスできます。
https://colab.research.google.com/
「ノートブックを新規作成」を選択すると、コードを記述・実行できる画面が開きます。これがColabのノートブック環境です。
2. データを用意する
クラスター分析を行うためには、分析対象のデータが必要です。ここでは、顧客データ(例: 顧客ID、購入金額、アクセス頻度、サイト滞在時間など)を想定します。データはCSV形式で用意するのが一般的です。
例として、以下のような架空の顧客データをCSVファイルとして作成し、ファイル名を customer_data.csv
とします。
| CustomerID | PurchaseAmount | AccessFrequency | StayDuration | | :--------- | :------------- | :-------------- | :----------- | | 1 | 10000 | 20 | 300 | | 2 | 30000 | 5 | 100 | | 3 | 5000 | 30 | 500 | | 4 | 25000 | 8 | 150 | | 5 | 8000 | 25 | 400 |
Colabのノートブック環境の左側にあるファイルアイコンをクリックし、「セッションストレージにアップロード」から作成したCSVファイルをアップロードします。
3. Pythonコードを記述・実行する
Colabのノートブックは、コードセルとテキストセルで構成されています。コードセルにPythonコードを記述し、実行ボタン(セルの左側にある再生マーク)をクリックして実行します。
Step 1: 必要なライブラリのインポート
まず、データ分析に必要なライブラリをインポートします。
* pandas
: データの読み込みや操作に使います。
* sklearn.cluster.KMeans
: K-Meansクラスター分析を実行するためのライブラリです。
* sklearn.preprocessing.StandardScaler
: 分析前にデータを標準化するために使います。
* matplotlib.pyplot
: 結果をグラフで可視化するために使います。
# 必要なライブラリをインポート
import pandas as pd
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
このコードセルを実行してください。エラーが出なければ成功です。
Step 2: データを読み込む
アップロードしたCSVファイルを読み込みます。
# CSVファイルを読み込む
# ファイル名はアップロードしたファイル名に合わせてください
df = pd.read_csv('customer_data.csv')
# 最初の5行を表示してデータを確認
print(df.head())
pd.read_csv()
関数でファイルを読み込み、df
という変数に格納します。df
はデータフレームと呼ばれ、表形式のデータを扱うのに便利です。df.head()
でデータの冒頭部分を確認できます。
Step 3: 分析に使う変数を選択し、前処理を行う
クラスター分析では、各データ間の「距離」を計算して類似性を判断します。変数(PurchaseAmount, AccessFrequency, StayDurationなど)のスケール(値の範囲)が大きく異なると、スケールが大きい変数の影響が過剰になってしまうことがあります。これを防ぐために、データを「標準化(Standardization)」することが一般的です。標準化とは、データの平均を0、標準偏差を1に揃える処理です。
ここでは、CustomerID以外の数値変数を選択し、標準化を行います。
# 分析に使う変数を選択 (CustomerIDは除く)
# ここでは 'PurchaseAmount', 'AccessFrequency', 'StayDuration' を使用
X = df[['PurchaseAmount', 'AccessFrequency', 'StayDuration']]
# データの標準化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 標準化されたデータの最初の5行を表示 (numpy配列になる)
print("\n標準化されたデータ:")
print(X_scaled[:5])
df[['変数名1', '変数名2', ...]]
で分析に使う列を選択します。StandardScaler()
を初期化し、fit_transform()
メソッドでデータの標準化を実行します。結果は X_scaled
に格納されます。
Step 4: K-Meansモデルを作成し、クラスター分析を実行する
K-Meansでは、事前にクラスターの数(Kの値)を決める必要があります。最適なKの値を決定する方法もありますが、ここでは例としてK=3として分析を進めます。
# クラスター数 (K) を設定
# 分析者がビジネス要件やデータの性質から決める必要があります。
k = 3
# K-Meansモデルを作成
kmeans = KMeans(n_clusters=k, random_state=42, n_init=10) # n_init=10で安定化
# クラスター分析を実行
kmeans.fit(X_scaled)
# 各データがどのクラスターに属するかを取得
labels = kmeans.labels_
# 分析に使った元のデータフレームにクラスターラベルを追加
df['Cluster'] = labels
# クラスターラベルが追加されたデータの最初の5行を表示
print("\nクラスターラベルが追加されたデータ:")
print(df.head())
KMeans(n_clusters=k, random_state=42, n_init=10)
でK-Meansモデルを作成します。n_clusters
でクラスター数を指定します。random_state
は結果を固定するための設定です。n_init=10
は、初期値を10回ランダムに選び、最も良い結果を採用するための設定です。
kmeans.fit(X_scaled)
で分析を実行します。
kmeans.labels_
には、各データが割り当てられたクラスターの番号(0, 1, 2, ...)が格納されています。これを元のデータフレーム df
に新しい列 'Cluster'
として追加します。
Step 5: 分析結果を確認し、解釈する
各データがどのクラスターに属するかはわかりましたが、それぞれのクラスターがどのような特徴を持つグループなのかを理解することが重要です。これは、元のデータフレームにクラスターラベルを追加したものを使って、クラスターごとの平均値などを比較することで行います。
# クラスターごとの平均値を計算
# CustomerID列は含めずに集計
cluster_means = df.groupby('Cluster')[['PurchaseAmount', 'AccessFrequency', 'StayDuration']].mean()
print("\nクラスターごとの平均値:")
print(cluster_means)
df.groupby('Cluster')
でデータをクラスターごとにグループ化し、.mean()
で各変数の平均値を計算します。この平均値を見ることで、例えば「クラスター0は購入金額が高く、アクセス頻度も高い」「クラスター1は購入金額は低いが、滞在時間が長い」といった特徴を読み取ることができます。
Step 6: 結果を可視化する(オプション)
分析結果を視覚的に確認することも、クラスターの特徴を掴むのに役立ちます。ただし、3次元以上のデータは平面に図示するのが難しいため、ここでは例として2つの変数(AccessFrequencyとPurchaseAmount)の関係を、クラスターごとに色分けして散布図で表示します。
# 結果の可視化 (例として2つの変数で散布図を描画)
plt.figure(figsize=(8, 6))
# クラスターごとに色分けして散布図を描画
for cluster_id in sorted(df['Cluster'].unique()):
cluster_data = df[df['Cluster'] == cluster_id]
plt.scatter(cluster_data['AccessFrequency'], cluster_data['PurchaseAmount'], label=f'Cluster {cluster_id}')
# グラフのタイトルと軸ラベルを設定
plt.title('Cluster Analysis of Customers (AccessFrequency vs PurchaseAmount)')
plt.xlabel('Access Frequency')
plt.ylabel('Purchase Amount')
plt.legend()
plt.grid(True)
plt.show()
matplotlib.pyplot
を使ってグラフを作成します。df.groupby('Cluster')
でクラスターごとにデータを抽出し、それぞれのクラスターに属するデータの散布図を異なる色で描画します。plt.show()
でグラフが表示されます。
この散布図から、「特定の領域に固まっているグループ(クラスター)」が存在することが視覚的に確認できます。例えば、右上にいる顧客は「アクセス頻度も高く、購入金額も多い優良顧客」といったように解釈できます。
分析結果を業務に活かすには?
クラスター分析で得られたグループ(クラスター)は、ビジネスにおける具体的なアクションに繋げることができます。
- 顧客セグメンテーション: 購買金額や行動パターンが似た顧客グループに対し、それぞれの特徴に合わせたマーケティング施策(例: 特定のクラスター向けメールキャンペーン、ロイヤルティプログラム)を展開する。
- 商品分析: 販売パターンが似た商品をまとめて陳列したり、クロスセル(関連商品を合わせて提案する)戦略を考えたりする。
- リスク評価: 不良顧客になる可能性のあるクラスターを特定し、早期に対応策を講じる。
よくある疑問や注意点
- 最適なクラスター数(K)の決め方: K-MeansではKを事前に決める必要があります。データの性質やビジネス上の要件から仮説を立てたり、「エルボー法」や「シルエット分析」といった統計的な手法を参考にしたりしますが、最終的には分析結果の解釈のしやすさや、ビジネス上の意味合いを考慮して判断することが重要です。入門としては、いくつか異なるKの値で試してみて、どのグループ分けが最も腑に落ちるかを確認するのも良い方法です。
- データの前処理の重要性: クラスター分析の結果は、使用する変数や前処理の方法に大きく影響されます。分析に適した変数を選ぶこと、そしてスケールが異なる変数がある場合は標準化や正規化といった処理を適切に行うことが非常に重要です。
- 「クラスター」は絶対的な正解ではない: クラスター分析はあくまでデータの特徴に基づいてグループを「提案」するものです。得られたクラスターが常にビジネス上の意味を持つとは限りません。分析結果を鵜瞰みにせず、なぜそのようなグループになったのか、ビジネスの視点から深く考察することが大切です。
結論:無料ツールでデータの中の宝物を見つけよう
この記事では、無料のGoogle ColabとPythonを使って、データの中に隠された類似グループを見つけ出すクラスター分析の基本的な流れを解説しました。データを用意し、必要なライブラリをインポートし、K-Meansを実行、そして結果を解釈するという一連のステップを、コード例と共に示しました。
クラスター分析は、顧客セグメンテーションや商品分析など、ビジネスの様々な場面で非常に強力なツールとなります。これまでデータ分析は難しい、高価なツールが必要だと思っていた方も、Google ColabとPythonを使えば、手軽に実践を始めることができます。
この記事で紹介した内容はクラスター分析の入門に過ぎませんが、まずは小さなデータで試してみて、データがどのようなグループに分かれるのか、どのような特徴を持つのかを観察してみてください。データの中に眠る新しい発見や、ビジネス上の課題解決のヒントが見つかるはずです。
今回のK-Means以外にも様々なクラスター分析の手法や、最適なクラスター数を決めるための発展的な手法があります。ぜひ、この記事を足がかりに、無料ツールを使ったデータ分析の世界をさらに深く探求してみてください。