実務でデータを分析する際にはデータをグループ分けをする「クラスタリング」を行うことが多いです。その中でクラスタリングのアルゴリズムで代表的なものには「k-means」や「階層的クラスタリング」、種類として「ハードクラスタリング」「ソフトクラスタリング」があると思いますが、使い分けなどで迷うことがあるので今日は教師無し学習のクラスタリングアルゴリズムの種類や違いなどについて自分用にまとめておきます。おかしい部分があればコメントいただけると嬉しいです。
Contents
クラスタリングとは
クラスタリングとは、異なる性質を持った多くのデータから類似性を見て自動的に分類する、機械学習の教師なし学習における手法のこと。(複数のコンピュータを連動させることにより、1台のコンピュータとして利用できるようにする技術を言うこともある)マーケティングでは、顧客層の特性分析や店舗取り扱い商品の構成分析に利用されており、多くの顧客や商品を分類し、どのような顧客が多いのかを明確にし、ターゲットを決定する。
クラスタリングとクラス分類は混同しやすいが、別々のものである。大きな違いは、クラスタリングは教師なし学習で、クラス分類は教師あり学習という点である。教師あり学習であるクラス分類は、どのグループに属するかという”ラベル”がついている既知データが手元にあり、それを用いてモデルを作って、”ラベル”がついていないデータの分類に用いるという手法であることに対し、教師なし学習であるクラスタリングは、ラベル付きデータがない状態で、あるデータを分類するような手法である。
クラスタリングの種類
まずクラスタリングは「階層型クラスタリング・非階層型クラスタリング」と「ハードクラスタリング・ソフトクラスタリング」 の2つの基準で分類されます
引用:https://www.acceluniverse.com/blog/developers/2019/08/post-17.html
ハードクラスタリングとソフトクラスタリング
ハードクラスタリングとは、各データが1つのクラスのみに所属するようなクラスタリングで一般的にクラスタリングといえばハードクラスタリングをさすと思います。一方ソフトクラスタリングとは、各データが複数のクラスタに所属することを許すようなクラスタリングを指します。
実務だとユーザーや商品をクラスタリングでラベル付け~みたいなことを自分はたまに行うのですが、その際に1つのアイテムに対してラベルが複数付くと扱いにくいので1つのデータに対して1つのラベルが付与されるハードクラスタリングの方が使い勝手が良いので、ハードクラスタリングがよく使われます。
階層型クラスタリングと非階層型クラスタリング
※ここではそれぞれのハードクラスタリングの手法のみにフォーカスします。(=非階層型クラスタリングでソフトクラスタリングに分類される混合ガウスモデルなどについては取り上げません)
階層型クラスタリング
まず階層型クラスタリングとは、データ群のなかから最も近いデータ同士を順にまとめていき、徐々にクラスターの数を少なくしていく手法です。この際類似度を計算するために特定の距離測定法を使用します。そして似ている要素ごとに分類していく過程で「樹形図(デンドログラム)」を出力でき分類の経緯を理解しやすいため、クライアントへの説明にも使いやすいというのが特徴です。
階層型クラスタリングの手法は以下のとおりです。
・ウォード法:平方和が最小になるようクラスターを結合する。計算量が多く、高精度。大体これで問題ない
・群平均法:クラスター同士の全データの組み合わせの平均を求めて結合する。ウォード法より計算量が少ない。ウォード法でメモリが爆発するなどの場合はこっちを使うイメージ
非階層型クラスタリング
非階層型クラスタリングは、最終的なクラスター数を決めてから、自動グルーピングを行う手法です。ビックデータのような複雑で階層構造に分類できないようなデータ群の分析に適しており、代表的な手法はk-means法が挙げられます
・k-means法:あらかじめ決めておいたクラスター数に大まかに分類。次に、各データとクラスターの重心の距離が、別のクラスターの重心より小さくなるようにデータを再配置していく方法。
k-meansでのクラスタリングはあらかじめクラスタリングするクラスター数を任意で決める必要がありますが、これは などで最適なクラスター数を求めることも可能です。またk-meansは最終的に2次元・もしくは3次元にプロットしないといけないためビッグデータによくある多次元のデータを取り扱う際には主成分分析(PCA)で次元圧縮を行う必要があります。
参照:【Python】主成分分析(PCA)でのクラスタリングを実装する
クラスター分析の手順
クラスター分析の手順について、目標の設定から手法の選択、マーケティングへの活用までの流れを簡単に解説します。
1.目的の設定
クラスタリングは主に購買データなどでよく使われます。クラスタリングの目的としては商品のブランディングやユーザーの特徴把握など、どのような目的でクラスター分析をするのか決めます。
それに沿ってクラスター分析の対象が人や商品などの実体なのか、購買頻度や単語の出現数などの変数を分析するのかも決定します。
実務での採用基準について(持論)
結論になりますが、自分は実務でクラスタリング(k-means or 階層的クラスター)を使う際は、階層型クラスタリングが使用できるケースであればまずこちらを検討します。なぜかというと階層的クラスタリングのほうが説明性に優れていると考えているためです。
改めてそれぞれの特徴を箇条書きにします。
・階層的クラスターの特徴
- クラスタ数を最初に指定しなくてもいい。
- 分類結果をデンドログラムで図示でき、説明性が高い。
- 初期値依存性がない。
要はクラスタリングの過程や結果をデンドログラムで図示できるため、分類したいデータのクラスタがいくつ存在するかなど、対話的な分析やクライアントに対して説明がしやすく決定木と同じく、予測・分類精度よりも説明性が求められるケースがある実務では扱いやすいと感じています。また初期値に乱数依存もないためクラスタリング結果も常に同じになります。
一方k-meansは以下のような特徴から分析対象のデータに対して分類したいクラスタ数が分かっていない事が多い実務では、あらかじめクラスタ数を決めるk-means clusterの特性などのために利用しにくかったりします。
- クラスタ数を最初に指定する必要がある
- 分類結果を図示しにくいため、説明性が低い
- 分類結果に初期値依存性がある
これだけだと階層型クラスタリングが大正義みたく書いていますがそうでもないです。なぜかというと「階層型クラスタリングは説明性は高いもののビッグデータに対しては有効性が低い」からです。
というのもクラスタリングでの分類対象が数~数百種類のブランド商品、とかであれば階層型クラスタリングでデンドログラムをプロットしてこの商品とこの商品にはこういう特徴から類似性が高いと考えられます~みたいな考察や商品カテゴリー分類だけでは分からないようなクラスター内での新たな特徴を見つけることが可能ですが、クラスタリング対象が数百万人の購入ユーザーなどにした場合、数百万人のユーザーIDをデンドログラムでプロットしたところで何もわからないからです。こういう場合はとりあえずいくつかのクラスターに分類ができるK-Meansなどの非階層型クラスタリングでクラスタリングの方が適しています。
なので実務で階層型クラスタリングか非階層型クラスタリングのどちらを用いるか選ぶか決める際の基本的な検討項目は、「クラスタリングの目的」「サンプル数(計算量)」「分析過程を観測する必要の有無」などです。マーケティングオートメーションなどではビックデータを扱うのでほとんどのケースで非階層的方法を使うしかなく現実的には選択に迷うことはまずありませんがなんで?と言われたらこういう返しができると良いのではないかと思います。
まとめ
階層型クラスタリング・非階層型クラスタリングは優劣というよりもデータに合わせた使い分けが大切だと思います。そしてそういう判断ができるスキルこそがコピペで動くコードが氾濫している現在においてデータを取り扱う人間に必要な知識だと思います。自分もまだまだですが、業務を通してこういった知見をより身に着けていかないといけないなと痛感する日々です。では~
コメント