K-Meansクラスタリングって何?図表を使って説明

K-Means クラスタリングは、データの中の似ている行をグループにまとめる手法です。計算が速く、結果も読み取りやすいのが特徴です。この記事では、手法のしくみを1ステップずつ図で追い、うまくいく条件と、Exploratory での使い方を説明します。

こちらに5分ほどにまとめた動画も用意しております。

この記事の途中にはインタラクティブにK-Meansがクラスターを作る過程を見ることができるチャートも用意していますので、ぜひお試しください。

データの中のグループを見つける

データの中には、似た行が集まったグループがあることがよくあります。たとえば、よく買い物をする顧客もいれば、割引があるときだけ買う顧客もいます。しかし、何千行もある表を眺めていても、こうしたグループは見えてきません。

K-Means クラスタリングは、このグループを見つけてくれます。まず、グループの数 k を決めます。すると K-Means は k 個の中心を見つけ、各行を最も近い中心のグループに割り当てます。このグループをクラスターと呼びます。

各クラスターの中心は、そのクラスターに入った行の平均です。名前の由来もここにあります。k 個のクラスターが、それぞれ平均(Mean)を持つということです。

左:1色で描いた15個のデータ点。右:同じ点を3つのクラスターに分けた図。各クラスターに十字で示した中心があり、クラスターどうしの境界が点線で描かれています。
左:1色で描いた15個のデータ点。右:同じ点を3つのクラスターに分けた図。各クラスターに十字で示した中心があり、クラスターどうしの境界が点線で描かれています。

図1. 左:分析の前のデータ。各点は、2つの数値の変数を持つ1行です。右:k = 3 の結果。各中心(+)は、そのクラスターの平均です。点線はクラスターどうしの境界です。

よい結果とは、各クラスターがまとまっている結果です。これを測るために、K-Means は各データ点からそのクラスターの中心までの距離を2乗します。すべてのクラスターについてこの値を足したものが、クラスター内平方和です。K-Means は、この合計をできるだけ小さくします。

各クラスターには中心があり、中心はそのクラスターのデータ点の平均です。K-Means は、クラスターができるだけまとまるようにします。

K-Means はどうやってクラスターを見つけるか

最初の時点では、K-Means はクラスターを知りません。とりあえず k 個の中心を置き、それを少しずつよくしていきます。手順の中心となるのは2つのステップだけで、K-Means はこれをくり返します。

  1. k 個のデータ点を、最初の中心として選びます。

  2. 各データ点を、最も近い中心のクラスターに割り当てます。

  3. 各中心を、そのクラスターのデータ点の平均に動かします。

  4. 手順2と3をくり返します。クラスターが変わるデータ点がなくなったら、止めます。

15個のデータ点で試してみましょう。次のステップをクリックすると、1ステップずつ進みます。右のグラフには、各ステップの後のクラスター内平方和が表示されます。グラフの下の表には、各クラスターの中心が表示されます。

スタート1では、最初の中心のうち2つが同じグループにあります。中心のない右のグループへ、1つの中心が少しずつ移っていく様子を見てください。境界を表示を選ぶと、各中心の範囲が表示されます。

各ステップで、クラスター内平方和は減るか、同じままです。クラスターが変わるデータ点がなくなると、K-Means は止まります。

最初の中心が大切な理由

K-Means は必ず止まりますが、いつも最良の結果にたどり着くとはかぎりません。エクスプローラーでスタート2かスタート3を選んでみてください。どちらも、1つのグループを2つに分け、ほかの2つのグループを1つのクラスターにまとめたところで止まります。

この状態では、クラスターを変えるデータ点がないので、K-Means は結果を直せません。各スタートの最終結果を比べてみましょう。

k = 3 での3つのスタートの最終結果。スタート1は3つのグループを見つけ、クラスター内平方和は14.4です。スタート2は左下のグループを2つに分けて73.1、スタート3は右のグループを2つに分けて94.6です。
k = 3 での3つのスタートの最終結果。スタート1は3つのグループを見つけ、クラスター内平方和は14.4です。スタート2は左下のグループを2つに分けて73.1、スタート3は右のグループを2つに分けて94.6です。

図2. エクスプローラーの各スタートの最終結果(k = 3)。数字はクラスター内平方和です。小さいほど良い結果です。

解決策はかんたんです。最初の中心を変えて K-Means を何度か実行し、クラスター内平方和が最も小さい結果を残します。上の例では、スタート1の結果がそれにあたります。

Exploratory では、試行回数でスタートの数を設定します。デフォルトは1です。また、ランダム・シード(デフォルトは1)を使うので、分析を実行するたびに同じ結果が得られます。

ヒント: 最終的な分析では、試行回数を10以上にしてください。ランダム・シードを変えると結果が変わる場合は、試行回数を増やします。

スタートは複数使いましょう。Exploratory は、クラスター内平方和が最も小さくなるスタートの結果を採用します。

変数を標準化する

K-Means は距離を使います。距離は、すべての変数の差を足し合わせたものです。そのため、ほかよりずっと大きな数値を持つ変数があると、その変数だけで結果が決まってしまいます。

年齢(歳)と年収(ドル)の2つの変数を持つ18人の顧客を見てみましょう。若い顧客、年配の顧客、収入の高い中年の顧客という3つのグループがあります。

標準化しない場合:クラスターは収入の帯になり、どの帯にも若い顧客と年配の顧客が入ります。標準化した場合:クラスターは実際の3つのグループになります。
標準化しない場合:クラスターは収入の帯になり、どの帯にも若い顧客と年配の顧客が入ります。標準化した場合:クラスターは実際の3つのグループになります。

図3. 標準化しないと、1,000ドルの差が1,000歳の差と同じ重みになるため、収入だけでクラスターが決まります。標準化では、各変数を平均0、標準偏差1に変換します。

単位の異なる変数を使うときは、標準化してください。Exploratory では、「変数を標準化する」がデフォルトで TRUE になっています。

K-Means が苦手なこと

各データ点は、最も近い中心のクラスターに入ります。そのため、2つのクラスターの境界は、必ず2つの中心のちょうど真ん中を通る直線になります。速くてシンプルですが、限界もあります。

3つのケース。丸いグループ:K-Means は正しく見つけます。曲がったグループ:まっすぐな境界線が各グループを切ります。大きなグループと小さなグループ:境界線が大きなグループの中に入ります。
3つのケース。丸いグループ:K-Means は正しく見つけます。曲がったグループ:まっすぐな境界線が各グループを切ります。大きなグループと小さなグループ:境界線が大きなグループの中に入ります。

図4. K-Means が見つけられるのは、大きさの似た丸いグループです。まっすぐな境界線は曲がったグループを切り、小さなグループの隣では大きなグループの中に入り込みます。

外れ値も問題になります。どのグループからも離れたデータ点は、そのクラスターの平均を引っ張ります。外れ値のあるデータには、K-Medoids のほうが向いています(後の比較表を参照)。

K-Means が得意なのは、大きさの似た丸いグループです。クラスターをチャートで確認し、グループが曲がっていたり、大きさが大きく違っていたりする場合は、別の手法を使いましょう。

クラスターの数をどう決めるか

k は分析の前に決めます。k を選ぶには、いくつかの値で分析を実行し、エルボー曲線やシルエットスコアで結果を比べます。下の2つのチャートは、どちらもエクスプローラーの15点を使っています。

左:k = 1〜6 のクラスター内平方和のエルボー曲線。ひじは k = 3 にあります。右:k = 2〜6 の平均シルエットスコア。k = 3 が最も高くなります。
左:k = 1〜6 のクラスター内平方和のエルボー曲線。ひじは k = 3 にあります。右:k = 2〜6 の平均シルエットスコア。k = 3 が最も高くなります。

図5. 左:k = 3 までは大きく減り、k = 3 を過ぎると減り方が小さくなります。右:平均シルエットスコアは k = 3 が最も高くなります。

エルボー法:クラスターを増やすほど、クラスター内平方和は必ず小さくなります。そのため、最も小さい値を探すのではなく、「ひじ」を探します。ひじとは、その k を過ぎると減り方が小さくなる点です。

シルエット法:各データ点について、a は同じクラスターのほかの点までの平均距離、b は最も近いほかのクラスターの点までの平均距離です。

\[\begin{aligned} s(i) = \frac{b - a}{\max(a, b)} \end{aligned}\]

スコアが1に近いほど、その点はよいクラスターに入っています。0より小さいスコアは、その点がほかのクラスターのほうに近いことを示します。平均スコアが最も高い k を選びます。

Exploratory は、デフォルトでシルエット法を使います。クラスターの数を2〜10で比べ、レポートにスコアを表示します。

15点の例では、エルボーは k = 3 にあり、シルエットスコアも k = 3 が最も高くなります。あわせて、クラスターを説明できるかどうかも確認しましょう。

K-Means、K-Medoids、階層クラスタリングのどれを使うか

Exploratory には、いくつかのクラスタリング手法があります。データに合った手法を、この表で選んでください。

項目 K-Means K-Medoids 階層クラスタリング
クラスターの中心 平均。ふつうはデータ点ではありません。 Medoid。実在するデータ点です。 中心はありません。クラスターの木を作ります。
クラスターの数 分析の前に k を決めます。 分析の前に k を決めます。 分析の後で木を切ります。
外れ値 平均が大きく影響を受けます。 Medoid はほとんど影響を受けません。 連結法によって変わります。
尺度の値(たとえば1〜5) 中心が3.7のような、ありえない回答になることがあります。 中心は、ありえる回答になります。 中心はありません。
データの大きさ 速く、とても大きなデータにも使えます。 遅めです。大きなデータには CLARA を使います。 大きなデータでは遅くなります。すべての行の組の距離を計算します。
向いているケース 丸いグループを持つ、大きな数値データ。 アンケートデータと、外れ値のあるデータ。 k がわからないときの、小さなデータ。

大きな数値データには K-Means を使います。外れ値や尺度の値があるデータには K-Medoids、すべてのグループを木の形で見たいときは階層クラスタリングを使います。

活用例:顧客セグメンテーション

K-Means の最も一般的な活用例は、顧客セグメンテーションです。各行が1人の顧客で、変数には注文回数や注文単価など、その顧客の購買の情報が入ります。

このようなデータに、K-Means はよく合います。データは数値で、行数が多いことがよくあり、結果も読み取りやすいからです。各中心は、変数ごとの平均を並べたものです。

顧客セグメンテーション

各行は1人の顧客で、過去1年間の購買についての4つの数値の変数を持ちます。k = 3 の K-Means で、3つのセグメントに分かれます。

3つの顧客セグメントの、4つの変数の平均(標準化後)。セグメント1は注文が多く最近も注文しています。セグメント2は注文単価が高く、セグメント3は注文が少なく、最後の注文が古く、割引をよく使います。
3つの顧客セグメントの、4つの変数の平均(標準化後)。セグメント1は注文が多く最近も注文しています。セグメント2は注文単価が高く、セグメント3は注文が少なく、最後の注文が古く、割引をよく使います。

図6. セグメントごとの各変数の平均(標準化後)。0 はすべての顧客の平均です。例として作ったデータです。

セグメント 顧客の割合 年間注文回数 注文単価 最終注文からの日数 割引の利用率
1 · 常連客 42% 10.0 74ドル 28 24%
2 · 高額購入客 18% 4.8 128ドル 56 18%
3 · 離れかけのセール客 40% 2.4 65ドル 96 42%
すべての顧客 100% 6.0 80ドル 60 30%

セグメントごとに、必要な施策が変わります。常連客には感謝を伝えます。高額購入客には新商品を紹介します。離れかけのセール客には、離れてしまう前にオファーを送ります。

そのほかの活用例

どの例でも、データは数値で、特徴のはっきりした少数のグループに分けたいという点が共通しています。

活用例 データの例 K-Means でわかること
顧客セグメンテーション(最も一般的) 注文回数、注文単価、最終注文からの日数、割引の利用率。 マーケティングやサービスに使える、特徴のはっきりしたセグメント。
商品や店舗のグループ 商品や店舗ごとの売上、利益率、規模、成長率。 価格、在庫、人員について同じ計画が必要なグループ。
利用パターン アプリのユーザーごとのセッション数、利用時間、使った機能。 ヘビーユーザーやたまに使うユーザーといった、ユーザーのタイプ。
地域やエリア エリアごとの人口、収入、年齢のデータ。 販売計画や新店舗のための、特徴の似たエリア。
センサーや機械のデータ 機械ごとの温度、圧力、速度。 通常の運転モード。どの中心からも遠い点は、問題の可能性があります。

別の手法を使うとき

データや知りたいこと 手法
値が尺度の段階(たとえば1〜5のアンケート回答)の場合や、データに外れ値がある場合。 K-Medoids
値が順序のないカテゴリ(たとえば地域や、はい・いいえ)の場合。 K-Modes(カテゴリ)
クラスターの数がわからず、すべてのグループを木の形で見たい場合。 階層クラスタリング

K-Means は、多くの行を持つ数値データを、少数のセグメントに分けるのに使います。各クラスターの平均を読んで、セグメントに名前を付けましょう。

Exploratory での K-Means クラスタリング

Exploratory では、アナリティクスで K-Means クラスタリングを使えます。コードを書く必要はありません。Exploratory は、R の kmeans 関数を使っています。

手順

  1. データフレームのアナリティクス・ビューを開き、新しいアナリティクスを追加します。

  2. タイプのメニューで、クラスタリング分析 › K-Means(数値) を選びます。

  3. 変数に、数値の列を選びます。

  4. (任意)設定を開き、クラスターの数と試行回数を設定します。

  5. 実行をクリックします。

デフォルトの設定: クラスターの数は3、アルゴリズムは Hartigan-Wong、試行回数は1、ランダム・シードは1、変数は標準化します。シルエット法では、クラスターの数を2〜10で比べます。

Hartigan-Wong は、上で説明した手順を改良したアルゴリズムです。クラスター内平方和が減る場合に、データ点を1つずつ別のクラスターに移します。ふつうは、基本の手順と同じか、それよりよい結果が得られます。

結果の例

例として、仕事についての7つの質問を持つ従業員アンケートを使います。クラスターの数はデフォルトの3です。

クラスター数の選択で、シルエットスコアを比べます。必要なら、クラスターの数を変えてもう一度実行します。Exploratory のシルエットスコアの表。クラスターの数2〜10について、シルエットスコアの平均、負のシルエットスコアの割合、シルエットスコアの最小値の列があります。

図7. クラスター数の選択 › シルエットスコア(クラスターの数2〜10)。Exploratory の画面です。

  1. シルエットスコアの平均:クラスターの数ごとの平均シルエットスコアです。ここでは、クラスター2つのスコア0.30が最も高く、3つでは0.23です。

  2. 負のシルエットスコアの割合:別のクラスターのほうに近い行の割合です。3.9%〜6.9%と低いままです。

  3. シルエットスコアの最小値:クラスターの数ごとの、1行のシルエットスコアの最小値です。

注意: アンケートデータでは、回答者どうしの答えが重なるため、シルエットスコアが低くなりがちです。スコアだけでクラスターの数を決めないでください。ここでは、3つのクラスターのスコアは2つより低くなっています(0.23と0.30)が、次のチャートのとおり、3つのクラスターは説明しやすい結果です。

クラスターの特徴で、クラスターの違いを確認します。クラスターの特徴 › 変数の平均値のレーダーチャート。3つのクラスターについて、7つのアンケートの質問の平均(標準化後)を示しています。

図8. クラスターの特徴 › 変数の平均値。値は標準化されていて、0 はすべての行の平均です。Exploratory の画面です。

  1. クラスター2:「Passionate about current work(今の仕事に情熱を持っている)」と「Consider current job is important(今の仕事は重要だと思う)」が平均よりずっと高く、給与と上司からのフィードバックも高めです。

  2. クラスター3:「Support company’s mission(会社のミッションを支持している)」、仕事の量、残業の水準が平均より高く、情熱は平均より低めです。

  3. クラスター1:ほとんどの質問で平均より低く、「Boss gives appropriate feedback(上司が適切なフィードバックをくれる)」だけが平均に近い値です。

クラスターの特徴のバイプロット。3つのクラスターの行が、第1主成分(45.8%)と第2主成分(23.1%)の2つの軸上にあり、質問ごとに灰色の線があります。
クラスターの特徴のバイプロット。3つのクラスターの行が、第1主成分(45.8%)と第2主成分(23.1%)の2つの軸上にあり、質問ごとに灰色の線があります。

図9. クラスターの特徴 › バイプロット。各点が1行、灰色の線がそれぞれの質問です。Exploratory の画面です。

  1. クラスター2は左側にあり、情熱、仕事の重要性、給与の線と同じ方向にあります。

  2. クラスター3は上側にあり、会社のミッション、仕事の量、残業の線と同じ方向にあります。

  3. クラスター1は右側にあり、すべての線と反対の方向にあります。ほとんどの質問で値が低い行です。

この例では、クラスター2は仕事に意欲的な従業員です。クラスター3は、働く条件には満足していますが、仕事への情熱はそれほど高くありません。クラスター1は、ほとんどの項目に満足していません。会社には、クラスターごとに異なる対応が必要です。

レポートの読み方

実行をクリックすると、Exploratory は次のセクションを持つレポートを表示します。

レポートのセクション 表示される内容
サマリ 分析条件。クラスターごとの行数、割合、2乗和、シルエットスコア。クラスターごとの平均値と、分析から除外された行も表示されます。
クラスター数の選択 シルエットスコア、またはエルボー曲線とばらつきの減少度。
クラスターの特徴 平均値のレーダーチャート、クラスター内のばらつき、クラスターの違いを特徴づける変数(η²)、バイプロット。
カテゴリ変数との関係 カテゴリの列の値が、クラスターごとにどう分布しているか。カテゴリの列を選んだときだけ表示されます。
出力データ データの各行と、そのクラスター。

まとめ

  • K-Means は、各データ点を最も近い中心のクラスターに入れます。各中心は、そのクラスターの平均です。

  • 点をクラスターに割り当て、中心を動かす、という2つのステップを、クラスターが変わる点がなくなるまでくり返します。

  • 最初の中心がよくないと、結果もよくなくなります。試行回数を増やして、複数のスタートを試しましょう。

  • 単位の異なる変数は標準化します。K-Means が得意なのは、大きさの似た丸いグループです。

  • シルエットスコアを比べつつ、説明できるクラスターの数を選びましょう。

Exploratory で試してみる

K-Means クラスタリングを、お手持ちのデータで Exploratory を使って試してみてください。

👉 最新版の Exploratory をダウンロード

https://exploratory.io/download

Exploratory のアカウントをまだお持ちでない場合は、こちらからサインアップして、30日間の無料トライアルを始められます。

https://exploratory.io/

トライアルの期間が終わっている場合は、最新版を起動して「トライアルを延長」をクリックすると、もう一度お試しいただけます。