はじめに
初めまして、ANDPADプロダクト部に所属している谷口と申します。
普段はプロダクトの要件定義や開発スケジュール管理をしながら、プロダクトの方向性をエンジニアと決めるプロダクトマネジメントの業務をしています。
今回の記事のテーマは「初心者でもできるデータ分析」です。
この「データ分析」に関して執筆するにあたって、安宅和人さんの『シン・ニホン AI×データ時代における日本の再生と人材育成』の記載を紹介したいと思います。
これ(データ分析のリテラシー)はこれからの『読み書きソロバン』なので、高等教育を受けるような人は基本的に全員、少なくとも8割ぐらいの人は学んでおくべきです。
これを読んで、自分は「"全員"か、マジか〜」と思いつつ、最近になって大慌てでデータ分析の勉強をはじめました。
もしかすると同じように「流石にデータ分析について何も知らないのはまずいかも」と考えている人もいるかもしれません。
そこで今回は、
- 「データ分析に興味はあるけれど、敷居が高いと思って手を出せていない」
- 「データ分析を勉強したいと思っても、分析対象となるデータがない」
という方向けに、手始めにサンプルデータを揃えてクラスター分析という機械学習の分類手法を試す方法をこの記事でお伝えしたいと思います。
かく言う自分もゴールデンウィーク前はPythonを触ったことすらなかったので、気構えずに記事を読んでいただければと思っております。
なお、今回の記事は自分が勉強用に使用した『Python実践データ分析100本ノック』を参考にしています。
前提
分析のゴール
Pythonの機械学習のライブラリ(scikit-learn)に入っているサンプルデータ「※アヤメのデータ」を使って※クラスター分析を行う。
※紺色の花を付ける多年草の一種
※外的数値から自動的に分類された、一定の特徴を持ったグループのこと。教師なしで自動的に分類されているため、人が気づかないような切り口で分類されることも多く、新しい気付きを得るヒントになる。
必要なライブラリ
Pythonでデータ分析するに当たって一通り必要なライブラリをご紹介します。
・Python3系
MacにはデフォルトでPython2.7が入っているのですが、古いバージョンのため、アップデートする必要があります。
・pandas
データ分析をサポートするためのツールが一通り揃っているライブラリです。
下記のようにデータをエクセルのような表形式に出力することができます。
・scikit-learn
機械学習系のライブラリです。
「線形回帰」「決定木分析」「クラスタリング」など聞いたことのある分析は大体このライブラリに一通り揃っています。
今回利用する「アヤメのデータ」のように、サンプルのデータが揃っているので、実データがない方も簡単にライブラリの挙動を試すことができます。
・matplotlib
グラフを描画するのに使用するライブラリです。
・jupyter notebook
下記のようにブラウザ上でPythonを使うことができるライブラリです。
分析手順
jupyter notebookで「アヤメのデータ」を加工する
scikit-learnの「アヤメのデータ」をインポート
# データ分析をサポートするためのツールが一通り揃っているライブラリ
import pandas as pd# scikit-learnに付属しているアヤメのデータ
from sklearn.datasets import load_irisdata = load_iris()
# アヤメのデータを集計できるようにpandasのDataFrameに変換
iris_data = pd.DataFrame(data.data, columns=data.feature_names)
print(iris_data.head())
scikit-learnには"Toy datasets"というデータ分析を学習する用のデータセットが一通り揃っています。
load_boston(ボストンの住宅の価格帯情報),load_boston(ワインの情報)なども用意されていますが、今回は分類のデータセットとしてよく使われるload_iris(アヤメのデータ)を使いたいと思います。
各項目の意味は下記の通りです。
sepal length (cm) | がく片の長さ |
---|---|
sepal width (cm) | がく片の幅 |
petal length (cm) | 花弁の長さ |
petal width (cm) | 花弁の幅 |
各項目の値の標準化
各項目の値はそれぞれ標準偏差が異なるので、利用回数の標準化してからクラスター分析を行います。
標準化にはscikit-learnにあるStandardScalerを利用することができます。
# データセット標準化機能のインポート
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()#標準化したアヤメのデータ
iris_data_sc = sc.fit_transform(iris_data)
K-means法でクラスター分析
クラスター分析の代表的な手法の一つであるK-means法という方法を使用して、がく片と花弁の特徴からアヤメを5つのクラスターに分けます。
# クラスター分析をするためのKMeansのインポート
from sklearn.cluster import KMeanskmeans = KMeans(n_clusters=5, random_state=0)
clusters = kmeans.fit(iris_data_sc)
クラスターを分けたら、そのクラスターを元データに項目として割り当てます。
iris_data["cluster"] = clusters.labels_
クラスターの特徴の洗い出し
クラスターごとのアヤメの数を出します
iris_data.groupby("cluster").count()
クラスターごとの各特徴の平均を出します
iris_data.groupby("cluster").mean()
集計結果はこちら。
クラスターごとの集計からわかることを整理
- クラスター4の数が一番多い
- クラスター0のがく片の幅が他クラスターと比較して広い
- クラスター2とクラスター4はがく片の長さが他クラスターと比較して長い
- クラスター0とクラスター3は花片の幅が他クラスターと比較して狭い
- クラスター0とクラスター3は花片の長さが他クラスターと比較して短い
- クラスター2とクラスター4は花片の長さが他クラスターと比較して長い
各クラスターの数値上の特徴を捉えることはできますが、実際にクラスターに所属しているアヤメが「何の品種か」「どういった特性を持っているのか」といったことは分かりません。
クラスター分析は自動的に分類されるため、各クラスターがどのような特徴を指しているのかはあくまで「質的」に判断する必要があります。
クラスターの分類を可視化する
今回分類したクラスターは4つの変数を使用しているので、二次元上で分布を確認したい場合には、次元削除という方法を使う必要があります。
次元削除の代表的な手法である主成分分析を使って、2つの変数でデータを表現できるようにしてみましょう。
#主成分分析
from sklearn.decomposition import PCA
X = iris_data_sc
pca = PCA(n_components=2)
pca.fit(X)
x_pca = pca.transform(X)
pca_df = pd.DataFrame(x_pca)#グラフで色付けするため
pca_df["cluster"] = iris_data["cluster"]# グラフ描画のロジック
import matplotlib.pyplot as plt
%matplotlib inline
for i in iris_data["cluster"].unique():
tmp = pca_df.loc[pca_df["cluster"]==i]
plt.scatter(tmp[0], tmp[1])
# 凡例の表示
plt.legend()
実行結果は下記の通りです。
二次元上に各分析単位の分布がプロットできたことによって、「クラスター0とクラスター3」「クラスター1とクラスター2とクラスター4」という単位でグルーピングができることがわかりました。
実際のデータ分析では、このクラスター分析をベースにして
- 「クラスター0とクラスター3」と「クラスター1とクラスター2とクラスター4」では品種的な観点で何が違うのか
- クラスター0とクラスター3の共通点と相違点は何か
- クラスター1とクラスター2とクラスター4の共通点と相違点は何か
を調査することで、さらに母集団(アヤメのデータ)の特徴を詳細に分析することになります。
最後に
今回の記事ではクラスター分析の触りの部分のご紹介をしました。
思っていたよりも簡単に機械学習を使ってデータをクラスターに分けることができることが分かったのではないでしょうか。
今回はサンプルデータを使ったクラスター分析のご紹介でしたが、実務に応用できる例としては下記のようなケースが挙げられると考えられます。
- プロダクトマネージャーがユーザーの各機能の利用回数から、今まで見えてこなかったユーザー像を可視化する
- 営業企画が営業メンバーの成績を様々な項目に分解してクラスター分析をすることで、「優秀な営業マン」の特徴を洗い出し、新人の営業マンの研修プログラム開発に役立てる
- カスタマーサクセスマネージャーがクライアントのヘルススコアを機械学習をかけることで、「継続するクライアント」はどのようなヘルススコアが高いのかを知り、カスタマーサクセスチームのKPI設定の参考にする
クラスター分析のメリットは、「経験」や「勘」ではなく、利用回数などのデータを使うことで、統計的な根拠を持って分析単位を分類することができるようになることです。しかもご紹介したとおり、機械学習自体は触りだけであればそこまで難しいものではありません。
まずは機械学習で何ができるのか体感するため、scikit-learnにあるデータセットを用いて、jupyter notebookで遊んでみてはいかがでしょうか?