【Python入門】顧客データを読み込みクラスタリング・ペルソナ分析

Python
ワタシ

今回はPythonで“ペルソナ分析”について考えます。

業務中に何等か企画を考える際に、ペルソナを設定してターゲットを絞った分析をすることがあります。

その際、クラスタリングを活用したペルソナ分析が有効です。

ではこれをどのようにPythonを使って実現するかという点で下記整理します。

尚、クラスタリングの統計的な成り立ちや仕組については下記でまとめております。

【統計基礎】クラスタリングにおけるk-meansやエルボーメソッドとは

今回の論点整理

”ペルソナ分析“の使いドコ

今回は以下のようにクラスタリング×ピボットテーブルの2つの活用をしてペルソナを設定していきます。下記のようなアウトプットを想定します。

基本的には「エクセル読み込み」「クラスタリング実施」「ピボットテーブル活用」ができれば簡単にできます。

具体的な想定場面

今回の想定


想定:自分はEC事業のマーケター、多くの顧客層がいそうだが明確にターゲティング出来ていない。
状況:データは多くあるも明確なターゲットフラグが設定出来ず潜在顧客の特徴が見えていない。
意図:クラスタリングで潜在顧客を分類分けし、その上でデータの特徴からターゲティングする。

このような時、「ペルソナ分析」という考え方が有効かと思います。

以下はこの知識を使う際に思い出すべき点を、後で振り返れるようにポイントを絞って備忘録としてまとめます。

今回の抑えドコ

そこで、今回は上記を実現する手順について下記に備忘録的にまとめたいと思います。

抑えドコ!
  • 今回の焦点
    ▷大量のデータからペルソナの分析を行う
    (想定場面:ECなどの大量データからペルソナを作って分析したいとき)
  • 今回の抑えドコ
    ▷ポイント①:データ読み込み・クラスタリング
    ▷ポイント②:ピボットテーブルで深堀り
    ▷ポイント③:簡易レポートでアウトプット

順に触れます。

”ペルソナ分析”のポイント

ポイント① データ読み込み・クラスタリング

まずはベースになるデータの読み込みとカテゴリ分けからにになります。読み込みは以下のとおり。

【Python入門】エクセルファイルの読み込み方法

ここで、最初に留意しなければいけないのが、すでに複数のフラグを組み合わせ意味あるカテゴリ分けができる状態なのであれば、クラスタリングの対応は不要です。

あくまで前提は以下の状況です。

データだけ並んでいてパッと見の傾向がよく分からない

という時にクラスタリングという手法で人間の目では見えない傾向を機械がまとめあげるという手法を使うという形になります。

【統計基礎】クラスタリングにおけるk-meansやエルボーメソッドとは

これで、パッと見の傾向が見えない場合でも、なんらかの傾向ごとのカテゴリ分け(フラグ付)をすることができました。これをもとに次は深掘りします。

ポイント②ピポットテーブルで深掘り

上記のクラスタリング(カテゴリ分けするためのフラグ付)が出来たあとは、カテゴリ事のデータをみていきます。

正直なところ、ここはエクセルで吐き出して、そちらでいじるでも問題はないです。(ピポットテーブルはエクセルで使うことが現業を考えると多く慣れていると思うので)

ただ、大量データを使ったり、その後も似たような対応が必要になることを考えると、式を一度つくってしまい、pythonでデータを置き換えて分析をする方が楽かと思います。

ここはデータを見ながらカラムを随時足したりすることも多くあると思うので、エクセルでいうvlookupのようなものもセットでできると分析の幅が広がります。

【Python入門】エクセルの”ピボットテーブル”をプログラムする

そして実際に色々と軸をいじくりながらそのカテゴリの傾向をみていきます。ここで分析を深める際のポイントは

それっぽい名前を名付ける

ということです。ここがキャッチーな名付けができると、報告する際も共通言語にしやすかったりします。

ポイント③簡易レポートの型でアウトプット

最後の仕上げはパワポなどに落として報告用にまとめます。

ここは正直どういった体裁でも良いと思います。

個人的には以下のような視点がはいっていればいいのかなと思います。

必要となる要素
  • カテゴリー名
  • 傾向/特徴の説明
  • そこへの打ち手

例えば以下のような形でパワポにしたりなどです。

正直これはどういった体裁でもいいと思いますが、業務でつかっているテンプレにあわせて上記視点をいれこめばいいのかなと思います。

また、全く本質的でないですが、これを元に相談・報告・提案する過程で、上記ステップ①②の分析プロセスも触れると、“なんかやってる感”が出る気がします。

この雰囲気ってザ・昭和企業みたいなところの場合、大事だと思っており、イメージになります。イメージがつくと次も依頼を受けやすくなります。

成果が全ての外資系やベンチャーなどでは完全に無意味でしょうが、それ以外の組織ではもしかしたら大事な視点かもしれません。

おまけコード

上記、ピボットテーブルで傾向をいじる前までは以下のような形で対応できます。

# Kmeansでクラスターラベルを付与します
from sklearn.cluster import KMeans

# モデルを初期化
km =KMeans(n_clusters=3, random_state=1234)

# csv等でdataを読み込んだ上で、model.fit(data)で実行します
km.fit(data)

# ラベルを付与する場合も教師あり学習同様に model.predict(data)で実行します
cluster_label = km.predict(data)
cluster_label


# エルボーメソッドで適切なクラスタ数の算出
distortions = []

for i  in range(1,15):                # 1~14クラスタまで計算 
    km = KMeans(n_clusters=i, random_state=1234)
    km.fit(data)                       # クラスタリングの計算を実行
    distortions.append(km.inertia_)   # km.fitするとkm.inertia_が得られる

plt.plot(range(1,15),distortions,marker='o')
plt.xlabel('Number of clusters')
plt.ylabel('Distortion')
plt.show()


#上記で適切なクラスタ数(今回5)が分かった時点でクラスタリング
km =KMeans(n_clusters=5, random_state=1234)
km.fit(data)
cluster_label = km.predict(data)

#ラベル付け
data_with_cluster_label = copy.copy(data)
data_with_cluster_label['cluster_label'] = cluster_label

#エクセル出力で分析しやすくする
data_with_cluster_label.to_excel("data/kmeans_result.xlsx", index=False, encoding='cp932')

その後は、エクセルでいじるでもpython上のデータフレームをいじるでもどちらでも問題なく、いじったものをレポーティングするのみです。

まとめ 

上記を活用する際に、理解しておくべきポイントは以下3点

今回の抑えドコ
  • ポイント①:データ読み込み・クラスタリング
     ▷変数の解釈が難しくパッと見の傾向が読めない場合は機械に判別させる
  • ポイント②:ピボットテーブルで深堀り
     ▷機械が判別したものを元に、カテゴリ分けしてクロス集計する
  • ポイント③:簡易レポートでアウトプット
     ▷それっぽいフォーマットを作って、やってる感が出る報告をする

基本的に難しいことはなく、単純にpythonの基本操作の組合せでなんとでもなります。データフレームの型を使えば面倒な文法や基礎数値処理の知識がなくても感覚的にできます。

エクセルでやるとの違いは、一度やれば流用が楽、という点と、大量データでも対応可能、という点だと思います。

エクセルをいじることが飽きた人こそ、お試し程度に業務の延長でこういったところから手を出すのもいいのかなと思います。

ご精読頂きありがとうございました。
m(_ _)m

その他、Python初心者のお勉強のお供

上記の内容と併せて実務で活かすという視点では下記の参考図書も合わせて確認すると理解が深まります(-_-)

created by Rinker
¥2,138 (2021/04/11 03:01:22時点 Amazon調べ-詳細)

その他、Python初心者が抑えたいポイント集

Python(主にデータ分析・自動化)に関しては下記のポイントを抑えると実務力につながっていきますので合わせてご参照下さい(‘ω’)ノ

ーPythonのインストール、データ読み込み、各種分析を試すー

【Python入門】WindowsとiPad両方でプログラミング環境を整える

【Python入門】エクセルファイルの読み込み方法

【Python入門】エクセルの”ピボットテーブル”をプログラムする

【Python入門】データ分析の”ビジュアル化”で抑えるべきライブラリとは

【Python入門】回帰分析や分類問題が使えるsklearnの使い方

【Python入門】顧客データを読み込みクラスタリング・ペルソナ分析

【Python入門】画像データを元にディープラーニングで自動判別(CNN等)

【Python入門】WEB上のデータを抽出してテキストマイニング(スクレイピング)

【Python入門】Twitterデータでテキストマイニング(APIの利用)

【Python入門】機械に自動でモデル選定させる(AutoML活用)

【Python入門】iPad×Kaggleで手軽な学習環境を創る

【Python入門】iPad×Google Colabalatoryで手軽にtwitter分析

ーPythonを使ってExcelを扱う “openpyxl”の活用ー

【Python初心者】Python×効率化 社内のexcel作業の自動化を試みる①

【Python初心者】Python×効率化 社内のexcel作業の自動化を試みる②

【Python初心者】Python×効率化 社内のexcel作業の自動化を試みる③

【Python初心者】Python×効率化 社内のexcel作業の自動化を試みる④

【Python初心者】Python×効率化 社内のexcel作業の自動化を試みる⑤