汎用性のあるユーザー行動分析(データ分析)の設計

データ分析の専門家ではないのであしからず
このスクラップは、備忘録として

AIとの対話
どのようにすればデータ分析からユーザーの詳細な行動が理解できる?
例えば、アンケートによる従業員のエンゲージメント測定サービスがあったとして、今次の仮説があるんだけど、それをデータ分析によって裏付けたい。
仮説:
アカウント作成者数に対して
- 興味をもって管理者等がアカウントを作って終わり
- アンケートも自分1人で答えてレポート眺めて終わり
が大多数なのでは?
サービスの概念モデル:
- アカウント
- 従業員名簿
- エンゲージメントアンケート
- エンゲージメントレポート

ChatGPTの回答
やるべきことは「仮説を行動データで検証できる指標(メトリクス)に落とし込む」こと。
次に 「ユーザー行動のパス(流れ)」 と 「ドロップオフ(離脱点)」 を分析する。
以下に中学生でもわかるレベル+専門家水準で「具体的ステップ」を示す。
1. サービス上の主要アクションを洗い出す
あなたの概念モデルなら、行動はこう整理できる:
アクション | 説明 |
---|---|
A. アカウント作成 | 管理者が最初にアカウント登録 |
B. 従業員名簿アップロード | 管理者が社員データを登録(CSV等) |
C. アンケート作成 | アンケートを作成・配信設定 |
D. アンケート実施 | 従業員がアンケートに回答 |
E. レポート閲覧 | 集計レポートを管理者が確認 |
2. パス(流れ)をモデル化する
典型的な理想パス (Happy Path)
→ A → B → C → D → E
仮説が示す「実態」は:
→ A → C → D (自分1人で回答) → E → 終了
もしくは
→ A → 終了 (アカウント作っただけ)
3. メトリクス設計
a. ファネル分析用メトリクス
ステージ | メトリクス例 | 検証できること |
---|---|---|
A→B | アカウント作成後に名簿登録した割合 | 名簿未登録多数なら「作って終わり」多い |
B→C | 名簿登録後にアンケート作成した割合 | 名簿登録までは行くが活用されてない |
C→D | アンケート作成後の回答者数 (自分含む) | 回答者=1が多いなら「自分だけ回答」証拠 |
D→E | レポート閲覧回数 | レポート見て終わりの証拠 |
b. 補助メトリクス
-
従業員名簿の登録人数
→ 1人なら「自分だけ活用」の可能性高い -
アンケート回答者数の中央値・平均
→ 1人〜少人数なら仮説支持 -
アクティブ日数・継続利用率
→ 長期活用されてないなら仮説支持
4. 実データ取得・SQL設計 (例)
-- アカウント作成数
SELECT COUNT(*) FROM accounts;
-- 名簿登録アカウント数
SELECT COUNT(DISTINCT account_id) FROM employee_rosters;
-- アンケート作成アカウント数
SELECT COUNT(DISTINCT account_id) FROM surveys;
-- 自己回答 (アンケート回答者がアカウント所有者のみ)
SELECT survey_id, COUNT(DISTINCT respondent_id)
FROM survey_responses
GROUP BY survey_id
HAVING COUNT(DISTINCT respondent_id) = 1;
5. 可視化
-
ファネル図 (アカウント→名簿→アンケート→回答→レポート)
ドロップオフ率が一目でわかる -
ヒートマップ・リテンション曲線
継続率・アクティブ率が視覚的にわかる
結論
- ユーザー行動を5アクションで分解
- ファネル分析+人数・回答数分布を集計
- 「名簿登録なし」or「回答者=1」or「短期離脱」が多ければ仮説支持
次に 「どこまで詳細に分析したいか(期間別・業種別など)」 も考えると良い。
細かく知りたい?それともざっくり仮説検証でOK?

メトリクスを発生時刻で、窓集計するようにしたらよさそうだな
それでhappy pathを分析すればファネル分析できそう

まてよ、このとりかただと
- 今月のアカウント作成数
- そのうち、アンケート作成数
- そのうち、アンケート回答数
といった、正確な数値がわからないのでは?
アンケート作成数はあくまで、その期間に作られたアンケートであって、今月作られたアカウントによるアンケート作成数ではない

ChatGPTが提案するやり方は、pathを切り替えることで、様々な分析ができるのは確かに魅力的だ。ただし、前述するデメリットはある。
逆に正確に、以下3つを測定しようとすると、汎用的でない目的特化のSQLを大量に作成することになる
- 今月のアカウント作成数
- そのうち、アンケート作成数
- そのうち、アンケート回答数

ChatGPTくんの回答
その通り。
「今月作成アカウントが今月どこまで進んだか?」=
「コホート別ファネル」
これが必要。
単純な集計やファネルでは「同一母集団の絞り込み」ができない。
つまり:
目的 | 必要な集計手法 |
---|---|
今月アカウント作成数 → その後の行動追跡 | コホート分析 (by account_created_at) |
解決策
1. アカウントの作成年月 (account_created_at) を全体に持たせる
全テーブルにJOINでアカウント作成年を付ける
→ 全行動に「そのアカウントがいつ作られたか」が載る
-- アンケート作成 (今月作成アカウント限定)
SELECT COUNT(*)
FROM surveys s
JOIN accounts a ON s.account_id = a.id
WHERE DATE_TRUNC('month', a.created_at) = '2025-05-01';
これで「今月作成アカウントによるアンケート作成数」が正確に出る
2. コホート別ファネル表 (まとめ)
コホート月 | アカウント作成 | 名簿登録 | アンケート作成 | 回答発生 | レポート閲覧 |
---|---|---|---|---|---|
2025-05 | 100 | 60 | 30 | 15 | 10 |
2025-04 | 80 | 50 | 40 | 20 | 15 |
→ **「今月作成アカウントの挙動」vs「先月作成アカウントの挙動」**も比べられる
技術的コツ
- accounts.created_at は必ずすべての集計JOINのキーにする
- コホート月別 (DATE_TRUNC('month', created_at)) で区切ると扱いやすい
-
期間切り替え簡単 →
WHERE DATE_TRUNC('month', created_at) = 'YYYY-MM-01'
結論
「今月作成アカウントの行動分析」も十分可能。
必要なのは
**「全イベントにアカウント作成年コホートを付与して集計する」**だけ。
この設計なら正確な数もパス分析も両立できる。
やろうと思えば「アカウント作成週・日コホート」もすぐできる。
必要なら「実際のSQLテンプレート」も出せるよ。続ける?