Python3 エンジニア認定データ分析試験の学習 -pandas-の知識と実務での活用 (後編)~「なぜ離脱したのか」を探るセグメント分析入門~

はじめに

皆さま、こんにちは。グローバルウェイのOです。
前編では、ファネル分析を題材に「どこでユーザーが離脱しているのか」を分析する考え方について紹介しました。
ファネル分析を行うことで、

  • 商品詳細ページで大きく離脱している
  • カート画面で離脱している
  • 会員登録画面で離脱している

といった課題箇所を見つけることができます。
しかし、分析はそこで終わりではありません。
むしろ本当に重要なのはここからです。
例えば、
「商品詳細ページからカート画面への遷移率が低い」
という結果が分かったとしても、それだけでは改善できません。
なぜなら「なぜ離脱しているのか」が分からないからです。
実際のサービス改善では、課題箇所を特定した後に原因を分析し、改善策を検討していく必要があります。
今回は、Python3エンジニア認定データ分析試験で学ぶpandasを利用しながら、
"どこで離脱したのか"ではなく"なぜ離脱したのか"を考える分析手法について紹介したいと思います。

この記事は以下の方を対象としています。

★5 Djangoの開発経験が3年以上。
★4 Djangoの開発経験が1年以上。
★3 Webサイト開発経験あり。これからDjangoを学習します。
★2 Python 初級者。簡単なプログラムコードが書けます。
★1 プログラミング未経験。

ファネル分析だけでは原因は分からない

前編で紹介したファネル分析の結果が次のようになっていたとします。

ページユーザー数
TOP10,000
LIST8,000
DETAIL5,000
CART1,200
BUY800

この結果を見ると、
DETAIL → CARTの区間で大きくユーザーが減少しています。
しかし、この数字だけでは原因は分かりません。
例えば、

  • 商品説明が分かりにくい
  • 価格が高い
  • ボタンが見つけにくい
  • スマホだけ表示崩れしている
  • 特定ブラウザでエラーが発生している

など、様々な可能性が考えられます。
つまり、ファネル分析は問題箇所を見つける分析であり、原因を特定する分析ではありません。
そこで、原因を探るための仮説を絞り込む方法の一つとして利用できるのがセグメント分析です。

セグメント分析とは

セグメント分析とは、
ユーザーを特定の条件で分類し、それぞれの特徴を比較する分析方法です。
例えば、

  • PC利用者
  • スマートフォン利用者

に分けて分析できます。
また、

  • 新規ユーザー
  • リピーター

に分けることもできます。
さらに、

  • Google検索流入
  • SNS流入
  • 広告流入

といった流入経路別の比較も可能です。
サービス全体を見るだけでは見えなかった問題が、セグメント分析によって見つかることは珍しくありません。

pandasでセグメント分析をしてみる

試験範囲でも頻出のgroupbyを利用します。
例えば、以下のようなデータがあるとします。

import pandas as pd

df = pd.DataFrame({
    "device": [
        "PC",
        "PC",
        "SP",
        "SP",
        "SP"
    ],
    "purchase": [
        1,
        1,
        0,
        0,
        1
    ]
})

購入率を確認する場合は、

df.groupby("device")["purchase"].mean()

のように集計できます。
実際の試験でも、

  • groupby
  • mean
  • count
  • sum

といった処理が登場します。
学習中は単なる問題演習に見えるかもしれませんが、実務ではこうした集計の積み重ねが分析になります。

デバイス別に分析してみる

仮に分析した結果が以下だったとします。

デバイスCVR
PC8%
スマートフォン2%

サービス全体のCVRだけ見ていると、
「CVRは3%」
という結果しか見えません。
しかし、デバイスごとに分解すると、
PCと比較してスマートフォン利用者のコンバージョン率が低いことが分かります。
この時点で、スマートフォン向け画面に問題がある可能性という仮説が立てられます。
もし、スマホ画面のレイアウト崩れやボタン不具合があれば、優先的に改善を検討すべき課題の一つになります。

初心者が見落としやすい落とし穴

データ分析を学び始めた頃は、「平均値」ばかり見てしまいがちですが、
実際には平均値が全体像を隠してしまうことがあります。
例えば、

  • 一部ユーザーだけ離脱している
  • 特定地域だけ利用率が低い
  • 特定時間帯だけエラーが発生している

といったケースです。全体平均では問題が見えません。
これは業務システムでも同じです。
システム全体では正常に見えていても、ある顧客環境だけで障害が発生しているということは珍しくありません。
だからこそ、まず全体を見る
次に細かく分解するという視点が重要になります。

コホート分析という考え方

さらに一歩進んだ分析として、コホート分析があります。
同じ時期にサービスへ登録したユーザーを一つの集団として分析します。
例えば、

  • 1月登録ユーザー
  • 2月登録ユーザー
  • 3月登録ユーザー

で比較します。
すると、3月登録ユーザーだけ継続率が低いといった傾向を発見できる場合があります。
このような分析は、

  • キャンペーン評価
  • UI変更評価
  • サービス改善効果測定

などで活用されています。

matplotlibによる可視化

分析結果は可視化して初めて価値が生まれることもあります。
例えば、継続率を折れ線グラフにすると、ユーザー数の継続傾向
が一目で分かります。
試験学習では、「グラフを描画するライブラリ」という理解でしたが、
実務では、分析結果を他人へ伝えるためのツールとして必要になります。
どれだけ優れた分析でも、関係者へ伝わらなければ改善にはつながりません。

まとめ

Python3エンジニア認定データ分析試験の学習を始めた頃は、

DataFrame
groupby
pivot
matplotlib

といった用語を暗記することに意識が向いていました。
しかし、ファネル分析やセグメント分析を学ぶうちに、
「この知識はユーザー行動を理解するための道具なのだ」と感じるようになりました。
試験学習では、コードやデータ処理の方法を理解することに意識が向きます。
一方、実務では課題を発見し改善することが目的です。
目的は違いますが、使う技術は共通しています。

今後は実際に手元のデータを題材に、ファネル分析やセグメント分析を試してみたいと思います。
試験勉強のために覚えていたgroupbyやDataFrameも、実際の課題解決という視点で見ると違った面白さが見えてきます。
現在学習中の方は、ぜひ身近なデータを分析対象として、実務とのつながりを意識しながら学習してみてください。