データを眺めるだけでは、何も見えてこないときはありますよね。そんな時は、何かきっかけが欲しくなるはず。その解決方法の一つが、データを似た者同士でグループ分けする「クラスタリング」です。
クラスタリングには様々な手法がありますが、データの類似度に基づいてグループに分けるため、それぞれのクラスタを見れば、データを眺めるだけでは分からなかった属性や分け方を可視化できます。それらの見えなかった属性にアプローチすることで売り上げが上がったり、新たな分析の観点が生まれるのだとか。
特に、実用的なのがクラスタリングの手法の中でも大規模なデータにも比較的導入が可能なk-means(k平均法)です。とはいえ、実際にk-means(k平均法)とはどう行うのか、などを知らない方は結構いるでしょう。
そこで今回は、k-means(k平均法)の理論と実装の仕方について解説します。ぜひ、k-means(k平均法)をマスターしてデータを違う角度から見られるようにしましょう。
そもそもクラスタリングとは
クラスタリングとは、類似度に基づいてデータをグループ分けすることです。分けられたグループのことはクラスタと呼びます。
※詳しい説明はこちらへ
またクラスタリングは、機械学習における教師なし学習に分類されます。教師なし学習は、教師なし学習は、正解となるデータを用いずに、データから共通する特徴を見つけたりする手法のことです。データを分析するときに、最初にクラスタごとの分布などを見て、データの特徴をつかむ際に利用します。
クラスタリングは、分類されたクラスタからデータの特徴をつかめます。しかし、直感的に理解しやるし一方で、データの分類の妥当性を他者に説明する場合は様々な統計処理を組み合わせる必要があります。
クラスタリングの中のk-means(k平均法)とは
クラスタリングの種類は大きく分けて、階層的クラスタリング(hierarchical clustering)と非階層的クラスタリング(non-hierarchical clustering)があります。この2つの手法の違いは、クラスタ数を指定するかしないかです。
階層的クラスタリングは、データの類似度からいくつかのクラスタに自動的に分類する方法です。逆に非階層的クラスタリングは、クラスタ数を指定してそのクラスタ数になるようにクラスタリングを行います。k-means(k平均法)は非階層クラスタリングの代表的な手法の1つです。
非階層的クラスタリングは、クラスタ数を自分で決め、そのクラスタ数になるように分割を行う手法のことです。例えば、あるデータがあり、6つのクラスタに分けたいと思った際などに利用します。特にビジネスの場面では多くのデータ量をクラスタリングするため、この非階層的クラスタリングが用いられます。
k-means(k平均法)のアルゴリズム
では、k-means(k平均法)がどのようなアルゴリズムでクラスリングをしているのかについて説明します。
まずは、あらかじめクラスタ数を設定しましょう。データの決め方は、まずはデータ数に対して解釈をしやすい分量で設定するのがよいでしょう。
その後、
- ランダムな位置にクラスタの重心をあらかじめ決めたクラスタ数だけ設定
- それぞれのクラスタの重心と各データの距離を計算
- 各データとクラスタの重心の距離で一番近いクラスタの重心にデータを分類
- 2と3を繰り返し
このようにして、あらかじめ設定した回数を繰り返すか、クラスタの変更がなくなった時点でクラスタリングを終了します。
k-means(k平均法)を使った例
k-means(k平均法)はビジネスの場で様々利用されています。代表的な事例として、「会員カードの顧客情報の分析」の事例をご紹介しましょう。
会員カードの購買履歴や年齢、性別などの項目から、k-means(k平均法)を用いてクラスタリングを行い、データの特徴から、分類したクラスタの詳細なデータを分析しました。そして、それぞれのクラスタを「高級品志向層」「流行追求層」、「保守層」などと定義しました。
k-means(k平均法)を実装する方法
k-means(k平均法)は、Pythonのscikit-learn(サイキットラーン)というライブラリを用いると容易に実装できます。scikit-learnのライブラリをインストールしていない場合は、pip install scikit-learnでインストールを行いましょう。
次に、sklearn.clusterからKMeansをimportし、Kmeansの引数で、クラスタ数や繰り返し回数の最大値を指定します。分析したいデータを変数として宣言し、fit_predictに渡してk-meansを実装しましょう。具体的なコードは以下です。
data = hogehoge #実際に分析したいデータを宣言してください。
clf = KMeans(n_clusters=3, max_iter = 100) #n_clustersでクラスタ数、max_iterで繰り返しの最大の回数を指定してください。
cluster = clf.fit_predict(data)
上記コードを実行すると、クラスタリングができます。
k-means(k平均法)を使うときの注意点
k-means(k平均法)を使うときの注意点はクラスタ数を自分で設定する必要がある点とそのクラスタ数が適切なのかを検証する必要があるため、クラスタリング結果の評価が難しくなる点です。
正しくクラスタリングの評価を行う場合は、結局クラスタリング結果が事前に想定した分類結果と一致しているかという正解データを用いて評価をする方法が多く用いられます。そうでないと、クラスタリングで非常に労力がかかる可能性があります。
そのため、k-means(k平均法)は、データの特徴をなんとなくつかむことや、自分では気づいていない観点をあぶりだすことに利用すると非常によいでしょう。
さて、今回はk-means(k平均法)の理論や実装方法についてお伝えしました。(それでは今回の内容を振り返りましょう。
- クラスタリングとは、クラスタリングとは、データの類似度に基づいて、データをグループに分けること
- クラスタリングの種類は大きく分けて、階層的クラスタリング(hierarchical clustering)と非階層的クラスタリング(non-hierarchical clustering)に分けられ、k-means(k平均法)は非階層的クラスタリングの代表的な手法である
- k-means(k平均法)は、ランダムな位置にクラスタの重心をあらかじめ決めたクラスタ数だけ設定、それぞれのクラスタの重心と各データの距離を計算、各データとクラスタの重心の距離で一番近いクラスタの重心にデータを分類、その繰り返しをする
- k-means(k平均法)はscikit-learn(sklearn)で容易に実装できる
- k-means(k平均法)をおこなうときの注意点は、適切なクラスタ数を決める必要
k-means(k平均法)を使うと、データの概観を把握できます。k-means(k平均法)の理論と実装方法を理解して、様々なデータをクラスタリングして分析しましょう!
【お知らせ】
当メディア(AIZINE)を運営しているAI(人工知能)/DX(デジタルトランスフォーメーション)開発会社お多福ラボでは「福をふりまく」をミッションに、スピード、提案内容、価格、全てにおいて期待を上回り、徹底的な顧客志向で小規模から大規模ソリューションまで幅広く対応しています。
御社の悩みを強みに変える仕組みづくりのお手伝いを致しますので、ぜひご相談ください。