今回はPythonで“ペルソナ分析”について考えます。
業務中に何等か企画を考える際に、ペルソナを設定してターゲットを絞った分析をすることがあります。
その際、クラスタリングを活用したペルソナ分析が有効です。
ではこれをどのようにPythonを使って実現するかという点で下記整理します。
尚、クラスタリングの統計的な成り立ちや仕組については下記でまとめております。
目次
今回の論点整理
”ペルソナ分析“の使いドコ
今回は以下のようにクラスタリング×ピボットテーブルの2つの活用をしてペルソナを設定していきます。下記のようなアウトプットを想定します。
基本的には「エクセル読み込み」「クラスタリング実施」「ピボットテーブル活用」ができれば簡単にできます。
具体的な想定場面
今回の想定
このような時、「ペルソナ分析」という考え方が有効かと思います。
以下はこの知識を使う際に思い出すべき点を、後で振り返れるようにポイントを絞って備忘録としてまとめます。
今回の抑えドコ
そこで、今回は上記を実現する手順について下記に備忘録的にまとめたいと思います。
- 今回の焦点
▷大量のデータからペルソナの分析を行う
(想定場面:ECなどの大量データからペルソナを作って分析したいとき) - 今回の抑えドコ
▷ポイント①:データ読み込み・クラスタリング
▷ポイント②:ピボットテーブルで深堀り
▷ポイント③:簡易レポートでアウトプット
順に触れます。
”ペルソナ分析”のポイント
ポイント① データ読み込み・クラスタリング
まずはベースになるデータの読み込みとカテゴリ分けからにになります。読み込みは以下のとおり。
ここで、最初に留意しなければいけないのが、すでに複数のフラグを組み合わせ意味あるカテゴリ分けができる状態なのであれば、クラスタリングの対応は不要です。
あくまで前提は以下の状況です。
という時にクラスタリングという手法で人間の目では見えない傾向を機械がまとめあげるという手法を使うという形になります。
これで、パッと見の傾向が見えない場合でも、なんらかの傾向ごとのカテゴリ分け(フラグ付)をすることができました。これをもとに次は深掘りします。
ポイント②ピポットテーブルで深掘り
上記のクラスタリング(カテゴリ分けするためのフラグ付)が出来たあとは、カテゴリ事のデータをみていきます。
正直なところ、ここはエクセルで吐き出して、そちらでいじるでも問題はないです。(ピポットテーブルはエクセルで使うことが現業を考えると多く慣れていると思うので)
ただ、大量データを使ったり、その後も似たような対応が必要になることを考えると、式を一度つくってしまい、pythonでデータを置き換えて分析をする方が楽かと思います。
ここはデータを見ながらカラムを随時足したりすることも多くあると思うので、エクセルでいうvlookupのようなものもセットでできると分析の幅が広がります。
そして実際に色々と軸をいじくりながらそのカテゴリの傾向をみていきます。ここで分析を深める際のポイントは
ということです。ここがキャッチーな名付けができると、報告する際も共通言語にしやすかったりします。
ポイント③簡易レポートの型でアウトプット
最後の仕上げはパワポなどに落として報告用にまとめます。
ここは正直どういった体裁でも良いと思います。
個人的には以下のような視点がはいっていればいいのかなと思います。
- カテゴリー名
- 傾向/特徴の説明
- そこへの打ち手
例えば以下のような形でパワポにしたりなどです。
正直これはどういった体裁でもいいと思いますが、業務でつかっているテンプレにあわせて上記視点をいれこめばいいのかなと思います。
また、全く本質的でないですが、これを元に相談・報告・提案する過程で、上記ステップ①②の分析プロセスも触れると、“なんかやってる感”が出る気がします。
この雰囲気ってザ・昭和企業みたいなところの場合、大事だと思っており、イメージになります。イメージがつくと次も依頼を受けやすくなります。
成果が全ての外資系やベンチャーなどでは完全に無意味でしょうが、それ以外の組織ではもしかしたら大事な視点かもしれません。
おまけコード
上記、ピボットテーブルで傾向をいじる前までは以下のような形で対応できます。
# 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初心者のお勉強のお供
上記の内容と併せて実務で活かすという視点では下記の参考図書も合わせて確認すると理解が深まります(-_-)
▼オススメの参考書籍(Kindle)▼
▼おすすめの動画学習(Udemy)▼
>>ゼロからPythonで学ぶ人工知能と機械学習 【2023年最新版】
>>現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用
>>独学で身につけるPython〜基礎編〜【業務効率化・自動化】
【参考】Python初心者が抑えたいポイント集
Python(主にデータ分析・自動化)に関しては
下記に実践したポイントをまとめています。基本的にコピペするだけでそのまま使えます٩( ᐛ )و
業務効率化・自動化においてはGoogle Apps Scriptもセットで学ぶことをオススメ!
こちらもコピペしてすぐに使えます!
PythonとGoogle Apps Scriptどちらを深めようかを迷っていればこちら!
想定:自分はEC事業のマーケター、多くの顧客層がいそうだが明確にターゲティング出来ていない。
状況:データは多くあるも明確なターゲットフラグが設定出来ず潜在顧客の特徴が見えていない。
意図:クラスタリングで潜在顧客を分類分けし、その上でデータの特徴からターゲティングする。