階層型クラスタリング完全ガイド:デンドログラムの読み方と実務での活用ポイント
階層型クラスタリングとは — 概要と位置づけ
階層型クラスタリング(hierarchical clustering)は、データ集合を木構造(デンドログラム)として表現し、データポイント間の類似度に基づいて段階的にクラスタを構築・分割していく手法群の総称です。代表的なアプローチには、個々の点から始めて類似クラスタを逐次結合していく凝集型(agglomerative)と、全データを一つのクラスタと見なして逐次分割する分割型(divisive)があります。非階層的手法(例:k-means)があらかじめクラスタ数を決めて最適化するのに対し、階層型は複数スケールのクラスタ構造を可視化できる点が特徴です。
基本概念と用語
- デンドログラム(dendrogram):クラスタの結合/分割履歴を木(ツリー)状に可視化した図。切断する高さを変えることで任意のクラスタ数を得られる。
- 距離(類似度):点間の差を表す尺度。ユークリッド距離、マンハッタン距離、コサイン類似度、ガワー距離(混合データ用)など。
- 結合法(linkage):二つのクラスタ間の距離を定義する方法。single, complete, average, centroid, Ward などがある。
- 凝集型(agglomerative):最初は各点が1クラスタ。最も近いクラスタ対を反復的に結合。
- 分割型(divisive):最初は全体が1クラスタ。最も「不均質」なクラスタを分割していく。
主な距離尺度と結合法の特徴
適切な距離・結合法の選択は結果に大きく影響します。代表的なものを整理します。
- Single linkage(最短距離法):クラスタ間の最小距離で結合。長い鎖状(chaining)になりやすい。ノイズや外れ値に弱いが、計算的には MST(最小全域木)と関連し高速化が可能。
- Complete linkage(最長距離法):クラスタ間の最大距離で定義。コンパクトなクラスタを作る傾向があるが、外れ値に敏感。
- Average linkage(平均連結法):クラスタ間の全てのペア距離の平均を用いる。バランス型で実務でよく使われる。
- Centroid linkage(重心法):クラスタ重心間の距離を用いる。時に「逆転(inversion)」現象が起きる(距離が減少することがある)。
- Ward法:クラスタ内誤差平方和(SSE)の増加を最小にする合併を選ぶ。球状クラスタを作りやすく、数値データで人気。
アルゴリズムと計算量の注意点
凝集型の一般的な手順は次の通りです。初期に全ペアの距離行列(n×n)を計算し、最小距離のクラスタ対を結合。距離行列を更新して繰り返す、という流れです。
- 時間計算量:実装に依存しますが、単純実装では O(n^3)(距離更新のコスト)になることがあります。特定の結合法や高度に最適化されたアルゴリズムでは O(n^2) まで下げられる場合があります。single linkage は MST を使えば O(n^2) あるいは近似的にさらに効率化可能です。
- メモリ:距離行列を保持するために O(n^2) のメモリが必要になるのが一般的で、大規模データ(数万点以上)には不向きです。
- 分割型:一般に計算コストが高く、実務では凝集型の方が多く使われます。
デンドログラムの読み方とクラスタ数の決定
デンドログラムを用いることで、どの高さで木を「切る(cut)」かによって得られるクラスタ数を決定できます。切断高さの選び方は自動的に一意ではありません。一般的な手法:
- 目視での“肘(elbow)”検出:結合高さが急に大きくなる箇所を探す。
- クラスタの安定性解析:ブートストラップにより再現性を確認。
- シルエット係数、Davies–Bouldin 指数、Calinski–Harabasz 指数などの外部/内部評価指標で比較する。
- コフェネティック相関係数(cophenetic correlation)でデンドログラムが元の距離行列をどれだけうまく表現しているかを評価する。
実装上の実務的ポイント
- スケーリング:ユークリッド距離などを使う場合は標準化(zスコア等)が必須。スケールの異なる特徴量が存在すると結果が歪む。
- 欠損値の扱い:距離計算前に補完(平均補完、KNN補完等)するか、距離定義を工夫する(部分的に定義するなど)。
- カテゴリカル変数:そのままユークリッド距離を使えない。ガワー距離やダミー変換、混合距離を用いる。
- 大規模データ:全点で計算するのが難しければ、まず k-means 等で代表点(セントロイド)に圧縮し、それに階層クラスタを適用する、またはサンプリング/近似法を使う。
- ライブラリ:Pythonではscikit-learnのAgglomerativeClustering(デンドログラムを直接出力しない)、SciPyのscipy.cluster.hierarchy(linkage, dendrogram, cophenet など)がよく使われます。Rでは hclust が標準。
階層型クラスタリングの長所と短所
- 長所:
- クラスタ数を事前に決める必要がなく、マルチスケールの構造を可視化できる。
- 非凸形状のクラスタや異なる大きさのクラスタを検出しやすい(結合法に依存)。
- 解釈性が高く、デンドログラムを通じてなぜ結合されたかを説明可能。
- 短所:
- 計算量・メモリ消費が大きく、大規模データに不向き。
- 外れ値やノイズに敏感(結合法で影響度が変わる)。
- 結合の順序は不可逆で、局所最適に陥る可能性がある。
実用例と応用領域
- 市場セグメンテーション、顧客プロファイリング(購買履歴の類似度に基づくクラスタ)
- 生物学・系統学(遺伝子の類縁関係をデンドログラムで表すことが多い)
- テキストクラスタリング(文書のコサイン類似度を用いて階層化)
- 異常検知(小さな孤立クラスタや長いチェーンを外れ値とみなす)
- 前処理(まず階層クラスタで粗分類し、その後詳細分析というワークフロー)
チェックリスト:実務で階層型を使う前に確認すべきこと
- データサイズは許容範囲か(nが数千〜数万の場合は注意)
- 特徴量のスケール統一や欠損処理が適切に行われているか
- 距離尺度と結合法は目的に合っているか(例:緊密なグループを見たいか、鎖状構造を検出したいか)
- クラスタの妥当性評価(シルエット等)を準備しているか
- 可視化(デンドログラム、ヒートマップ等)で解釈可能か
まとめ
階層型クラスタリングは、データの多層的なクラスタ構造を可視化・解析する強力なツールです。距離の定義、結合法の選定、スケーリングや欠損処理といった前処理が結果を左右します。また、計算量とメモリの制約を踏まえた実装戦略(サンプリング、代表点による圧縮、近似アルゴリズムの利用)を計画することが重要です。用途やデータ特性に合わせて手法を選び、複数の評価指標を用いて解釈の妥当性を確かめながら使うとよいでしょう。
参考文献
- scikit-learn — Hierarchical clustering
- SciPy — scipy.cluster.hierarchy (linkage, dendrogram, cophenet)
- Wikipedia — Hierarchical clustering
- Wikipedia — Ward's method
- Jain, A. K., & Dubes, R. C., "Algorithms for Clustering Data"(主要なクラスタリング理論)


