Tracks
クラスタリングは、教師なし機械学習の手法で、パターン認識、画像解析、顧客分析、セグメンテーション、ソーシャルネットワーク分析など多くの分野で活用されています。航空業界からヘルスケアまで、幅広い業界で用いられています。
これは教師なし学習の一種であり、クラスタリング手法ではラベル付きデータが不要です。これは、教師あり学習である分類などに比べたクラスタリングの大きな利点のひとつです。本記事では、クラスタリングとは何か、どのようなビジネスのユースケースで有用かを解説し、必須の5つのアルゴリズムを紹介します。
TL;DR
- クラスタリングは教師なし学習:ラベル付きデータは不要
- K-Meansは最も広く使われる手法。DBSCANはノイズや不規則な形状に強く、階層型は探索的分析に適する
- 万能の最良手法は存在しない。データの形状、想定クラスタ数、ノイズの程度に基づいて選択する
- クラスタ品質は教師ありモデルのようには測れない。シルエットスコアやDavies-Bouldin指数は判断材料であって絶対評価ではない
- scikit-learnには本記事で扱う5手法に加えて、さらに5手法が実装されている
クラスタリングとは?
クラスタリングとは、同じグループ(クラスタ)内の対象同士が他のグループ内の対象よりも互いに似ているように、対象を並べ替えるプロセスです。データの新たな情報やパターンを発見するために、探索的データ分析の段階でよく用いられます。教師なし学習であるため、ラベル付きデータセットは必要ありません。
クラスタリング自体は特定のひとつのアルゴリズムではなく、解くべき一般的なタスクです。この目的はさまざまなアルゴリズムで達成できますが、「クラスタとは何か」という捉え方や、効率的な見つけ方が大きく異なります。
クラスタリングの直感づけ
アルゴリズムの詳細に入る前に、フルーツのデータセットという簡単な例で直感をつかみましょう。いちご、洋なし、りんごの3種類のフルーツ画像が大量にあるとします。
データセットではすべての画像が混在しており、似たフルーツ同士をまとめる、すなわち3つのグループを作り、それぞれが1種類のフルーツだけを含むようにしたい。この処理を行うのがクラスタリングアルゴリズムです。

クラスタリング分析の成功条件
分類や回帰のような教師あり学習と異なり、クラスタリングは端から端まで完全に自動化できるわけではありません。必要な結果を得るために、ドメイン知識と人間の判断を基にデータやモデルパラメータを繰り返し調整する、情報発見の反復的プロセスです。
とりわけ重要なのは、クラスタリングは教師なし学習であり、ラベル付きデータを使わないため、精度、AUC、RMSEといった指標でアルゴリズムや前処理を比較できないことです。その結果、クラスタリングモデルの評価は難しく、主観的になりがちです。
クラスタリングモデルの主要な成功基準は次の通りです。
- 解釈可能か?
- クラスタリングの出力はビジネスに有用か?
- クラスタリング前には気づかなかった新たな情報やパターンを学べたか?
クラスタリング品質の測定
ラベル付きデータがなければ、精度やAUCは計算できません。クラスタ間の分離の良さを定量化するのに役立つ指標が2つあります。代表的なものは次の通りです。
- シルエットスコアは、ある点が所属クラスタにどれだけ適合しているかを、最も近い別クラスタとの比較で測ります。-1から1の範囲で、0.5を超えると分離が良好と示唆されます。
- Davies-Bouldin指数は、各クラスタと最も類似するクラスタとの平均的な類似度を測定します。低いほど良好です。
いずれも scikit-learn で利用可能です:sklearn.metrics.silhouette_score(X, labels) と sklearn.metrics.davies_bouldin_score(X, labels)。
1. K-Means
K-Meansはクラスタリングで最も広く使われる手法で、手順が理解しやすく、scikit-learnでの実装も簡単です。セントロイド(重心)に基づくアルゴリズムで、作成したいクラスタ数をユーザーが指定します。
この数はビジネス要件から決めるか、いくつかの値を試して出力を評価して決めるのが一般的です。
K-Meansクラスタリングは反復アルゴリズムで、重なりのないクラスタを作ります。つまり各データは1つのクラスタにのみ所属します。K-Meansの直感をつかむには、以下の例図とともに手順を理解するのが最も簡単です。詳細はPythonによるK-MeansクラスタリングやRによるK-Meansクラスタリングのチュートリアルも参照してください。
- ユーザーがクラスタ数を指定する。
- クラスタ数に基づいてセントロイドをランダムに初期化する。下図の反復1では、青・赤・緑の3つのセントロイドがランダムに初期化されている。
- 各データ点と各セントロイドの距離を計算し、最も近いセントロイドに割り当てる。
- 割り当てられたデータ点に基づいてセントロイドの平均を再計算し、位置が更新される。反復2〜9でセントロイドが移動し、最終的に収束する。
- セントロイドの平均に変化がなくなるか、学習時にユーザーが定義する最大反復回数 max_iter に到達するまで繰り返す。scikit-learnではデフォルトで max_iter=300。

画像出典: Learnbymarketing.com
2. MeanShift
K-Meansと異なり、MeanShiftはクラスタ数の指定が不要です。アルゴリズム自身がクラスタ数を自動的に決定するため、データ内のクラスタ数が不明な場合に明確な利点があります。
MeanShiftもセントロイドに基づき、各データ点を反復的にクラスタへ割り当てます。最も一般的なユースケースは画像セグメンテーションです。
MeanShiftはカーネル密度推定に基づきます。K-Meansと同様に、ランダムに初期化されたクラスタのセントロイドに各データ点を反復的に移動させますが、点が最も密集する方向、すなわちモード(その領域での最も高い点密度)へと動かしていきます。
このため、MeanShiftはモード探索(Mode-seeking)アルゴリズムとも呼ばれます。手順は次の通りです。
- 任意の点を取り、その点の周りにウィンドウを作る。
- そのウィンドウ内のすべての点の平均を計算する。
- モードの方向に従ってウィンドウをシフトする。
- 収束するまで繰り返す。

画像出典: ResearchGate
MeanShiftの実践的な手順は、Mean Shift Clustering チュートリアルを参照してください。
3. DBSCAN
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)は、密度の高い領域が低密度の領域で分離されているという前提で動作する教師なしクラスタリング手法です。
この手法の最大の利点は外れ値に対して堅牢であることです。外れ値はどのクラスタにも含めません。
DBSCANにはユーザーが指定するパラメータが2つだけあります。
-
各データ点の周囲に作る円の半径。
epsilonと呼ばれます。 -
minPoints。その円内に必要な最小点数で、その点をコア点と判定するための閾値です。
各データ点は半径 epsilon の円で囲まれ、DBSCANはそれらをコア点、境界点、ノイズ点のいずれかに分類します。minPointsで指定した最小点数以上が円内にある場合、その点はコア点とみなされます。
必要数に満たなければ境界点、どの点の epsilon 半径内にも追加の点がなければノイズ(外れ値)です。ノイズ点はどのクラスタにも属しません。
DBSCANの代表的なユースケースは次の通りです。
- 高密度と低密度のクラスタ分離が得意
- 非線形なデータセットに強い
- 異常検知に利用可能(ノイズ点を分離し、クラスタに割り当てない)
DBSCAN と K-Means の比較
DBSCANとK-Meansの主な違いは次の通りです。
- K-Meansはデータセット内の全インスタンスをクラスタに割り当てるが、DBSCANはノイズ点(外れ値)を有効なクラスタに割り当てない
- K-Meansは非グローバルなクラスタを苦手とする一方、DBSCANはうまく扱える
- K-Meansはデータがガウス分布に従うという仮定を置くのに対し、DBSCANはデータに関する仮定を置かない
パラメータ調整や実例は、DBSCANクラスタリングガイドで詳しく解説しています。

画像出典: Medium
4. 階層型クラスタリング
階層型クラスタリングは、クラスタの階層構造を構築する手法です。次の2種類があります。
- 凝集型(Agglomerative):ボトムアップ方式。各観測を最初は独立したクラスタとして扱い、下から上に進むにつれて観測をペアに統合し、さらにクラスタへとまとめていく。
- 分割型(Divisive):トップダウン方式。すべての観測が1つのクラスタから始まり、上から下に進むにつれて再帰的に分割する。
ソーシャルネットワークのデータ分析では、階層型クラスタリングが最も一般的で人気の高い手法です。グラフのノード(枝)は類似度に応じて相互に比較され、関連する小さなノード群を結びつけて大きなグループを形成します。
階層型クラスタリングの最大の利点は、理解と実装が容易なことです。通常、この手法の出力は下図のような画像(デンドログラム)で分析します。
Pythonでのデンドログラムの作成と読み方は、階層型クラスタリングのチュートリアルで学べます。

画像出典: ResearchGate
5. BIRCH
BIRCHは Balanced Iterative Hierarchical Based Clustering の略で、K-Meansが実用的にスケールできない非常に大規模なデータセットに用いられます。BIRCHは大規模データを小さなクラスタに分割し、可能な限り多くの情報を保持しようとします。最終結果は、巨大なデータセットを直接クラスタリングするのではなく、より小さなグループをさらにクラスタリングして得られます。
BIRCHは他のクラスタリング手法を補完する目的でもよく使われ、他手法が利用できる情報の要約を生成します。学習にはK-Means同様、クラスタ数をユーザーが指定します。
BIRCHを使う利点のひとつは、多次元データ点を漸進的かつ動的にクラスタリングできることです。これは与えられたメモリと時間の制約内で、最も質の高いクラスタを作るためです。多くの場合、BIRCHはデータベースを1回スキャンするだけで済むため、スケーラブルです。
最も一般的なユースケースは、メモリ効率に優れたK-Meansの代替として、メモリや計算制約によりK-Meansで扱えない大規模データのクラスタリングに用いることです。
クラスタリングのビジネス活用
クラスタリングは、メディア、ヘルスケア、製造、小売など、ラベルなしデータが大量にあるあらゆる業界で広く活用できます。以下に実例を挙げます。
顧客セグメンテーション
購買行動や関心に基づいてクラスタリングを行い、ターゲットを絞ったマーケティング施策を設計します。
例えば1,000万人の顧客がいて、個別最適なキャンペーンを実施したい場合、1,000万通りの施策は現実的ではありません。クラスタリングで1,000万人を25のクラスタに分け、25種類のキャンペーンを設計する、といった使い方ができます。

画像出典: Medium
小売クラスター分析
小売業にはクラスタリングの機会が多数あります。例えば、各店舗のデータを集めて店舗単位でクラスタリングし、来店者数、平均売上、SKU数などの属性に基づいて類似店舗を特定できます。
別の例として、カテゴリ単位のクラスタリングがあります。下図では8店舗があり、色の違いがクラスタの違いを示します。ここでは4つのクラスタがあります。
店舗1のデオドラントカテゴリは赤いクラスタ、店舗2の同カテゴリは青いクラスタに属しています。これは、デオドラントに関して店舗1と店舗2のターゲット市場が大きく異なることを示しています。

画像出典: dotactiv.com
臨床ケア/疾病管理におけるクラスタリング
ヘルスケアや臨床科学はクラスタリングの有望な活用領域です。例えば Komaru & Yoshida ら(2020)は、101名の患者の人口統計および検査データを収集し、3つのクラスタに分割しました。
各クラスタは異なる状態を表します。例えば、クラスタ1は低WBCと低CRP、クラスタ2は高BMPと高血清、クラスタ3は低血清の患者で構成されます。各クラスタは、透析後1年死亡率に基づく生存軌道が異なります。

画像出典: elsevierhealth.com
画像セグメンテーション
画像セグメンテーションは、画像を複数のグループに分類することです。クラスタリングを用いた研究が盛んに行われています。画像内の物体を分離し、それぞれを個別に解析したい場合に有用です。
下図の例では、左が元画像、右がクラスタリング結果です。4つのクラスタ(トラ、草、水、砂)がピクセルに基づいて明確に分離されています。
クラスタリング手法の比較
Pythonの人気ライブラリであるscikit-learnには、教師なしのクラスタリング手法が10種類実装されています。各手法は、データセット内でのクラスタの決め方・割り当て方に本質的な違いがあります。
これらの数理的な違いは、次の4つの観点に集約できます。
- 必要なパラメータ
- スケーラビリティ
- ユースケース
- 幾何学(距離計算に用いる指標)
下図では、各列がK-Means、アフィニティ伝播、MeanShiftなど異なるクラスタリング手法の出力を表します。同一データセットに対して合計10手法を学習しています。
同じ出力になっている手法もあります。凝集型クラスタリング、DBSCAN、OPTICS、スペクトラルクラスタリングは同じクラスタに収束しています。
一方、K-MeansとMeanShiftの出力を比べると、結果が異なることがわかります。K-Meansでは2つのクラスタ(青とオレンジ)ですが、MeanShiftでは3つ(青、緑、オレンジ)になっています。

画像出典: scikit-learn
残念ながら(あるいは幸いに)、クラスタリングに絶対的な正解・不正解はありません。「このデータではXアルゴリズムが最良」と簡単に言い切れるものではないのです。
これが、クラスタリングが非常に難しいタスクである理由でもあります。
最終的に「どの手法が良いか」は、容易に測れる指標ではなく、解釈やユースケースに対する有用性に依存します。
最適なクラスタリング手法の選び方
各手法は、異なるデータ条件に適しています。まずはこの表を出発点として、実データで少なくとも2手法を試し、確信を持ってから選定してください。
| アルゴリズム | 適用する場面 | 主な制約 | 必要なパラメータ |
|---|---|---|---|
| K-Means | 大規模データで、概ね球状のクラスタ | 外れ値に敏感;kを事前指定 |
クラスタ数(k) |
| MeanShift | クラスタ数が不明;画像セグメンテーション | 大規模データで遅い;バンド幅の設定が難しい | バンド幅(自動推定可) |
| DBSCAN | ノイズが多いデータ;不規則な形状;異常検知 | クラスタ密度が大きく異なると苦戦 | epsilon、minPoints |
| 階層型 | 探索的分析;ソーシャルネットワークデータ;小規模データ | メモリを多く消費;数百万行規模には非スケーラブル | 連結法(ward、complete、average) |
| BIRCH | K-Meansがメモリ不足になる非常に大規模なデータ | 小規模データではK-Meansより精度が劣ることがある | 分岐係数、しきい値、クラスタ数 |
実践的な出発点:まずは高速なK-Meansを試し、不規則な形状や外れ値が多い場合はDBSCANへ切り替え、デンドログラムで構造を可視的に探索したいときは、kを決める前に階層型クラスタリングを使うとよいでしょう。
まとめ
クラスタリングは、分類や回帰のような教師あり手法に比べて適用が難しい側面があります。理由は2つで、ラベルに対する性能評価ができないこと、クラスタ数などのパラメータがアルゴリズムではなくドメイン判断に依存することです。
それでもクラスタリングは、データサイエンティスト、MLエンジニア、アナリストなど幅広い職種にとって価値の高いスキルです。
クラスタリングや教師なし学習についてさらに学び、PythonやRでの実装を身につけたい方は、以下のコースが役立ちます。
よくある質問(FAQ)
クラスタリングは教師なし学習ですか、教師あり学習ですか?
クラスタリングは教師なし機械学習の手法です。学習にラベル付きデータは不要です。
クラスタリングにラベル付きデータは必要ですか?
いいえ、クラスタリング手法にラベル付きデータは必要ありません。ラベル付きデータがある場合は、教師ありの分類アルゴリズムを用います。
カテゴリデータでクラスタリングはできますか?
はい。教師あり学習と同様に、データにカテゴリ変数がある場合は、ワンホットエンコーディングなどでエンコードする必要があります。K-Modesのように、エンコードなしでカテゴリデータを直接扱えるアルゴリズムもあります。
クラスタリングは機械学習ですか?
はい、クラスタリングは機械学習です。具体的には教師なし機械学習です。
クラスタリングは記述的分析ですか、それとも予測ですか?
クラスタリングは記述的分析と予測的分析の両方に使えますが、より一般的には探索的データ分析(記述的分析)の文脈で用いられます。
クラスタリング手法の性能は測定できますか?
教師あり学習のように(AUC、精度、R2など)確実な性能指標で評価する方法はありません。モデルの質は出力の解釈とユースケースに依存します。ただし、ホモジニティスコアやシルエットスコアなどの代替指標はあります。
教師あり機械学習の特徴量エンジニアリングにクラスタリングは使えますか?
はい。クラスタリングはデータセット内のグループという形でラベルを付与します。最終的には新しいカテゴリ列が追加されるイメージです。そのため、クラスタリングは教師あり学習の特徴量エンジニアリングにしばしば用いられます。