本記事はWantedly 21新卒 Advent Calendar 2021の12日目の記事です!
なんとか半分まで来ました。後半戦もよろしくお願いします🙏
本記事では、入社してからデータ分析する中で先輩からいただいたフィードバックをまとめてみました。当たり前のことも多いですが、時間に追われ、焦ってしまうと意外とできないので、自戒の意味も込めてここに残しておきます。
集計前(目的理解・課題設計)編
集計の目的を理解する
「〇〇を集計して」と依頼された時は、なぜその集計が必要なのか理解してから、手を動かすようにしています。目的に応じてアウトプットが変わりうるからです。
例えば「プラットフォーム内のユーザ数を集計して」と言われた時に、「特定経路のユーザ流入が減っている懸念」が背景にあれば、アウトプットには「流入経路ごとのユーザ数」が必要です。
一方、「グロース施策の打ち手を決めたい」という背景があれば「セグメントごとのユーザ数」が必要でしょう。
出戻りを防ぐため、プロジェクト全体の流れから目的を推察し、集計を始める前にチームメンバーに確認してから進めると良いでしょう。
比較時は、あらかじめ解を出せる基準を定める
A/Bテストなど、複数の施策やモデルの比較をする場合、あらかじめ解を出せる基準を定めるようにしています。数字を見てから結論を出すと、「自分が作ったモデルや施策の方が良いだろう」というバイアスに引っ張られた解釈をしてしまうからです。
「一般的なメール開封率xx%より5%高かった場合、送信対象者はこのメールのコンセプト興味を持っていると言える」というような明確な基準を定めてから手を動すと良いでしょう。
集計方針・指標の定義・アウトプット形式を共有してから集計する
集計方針・指標の定義・アウトプット形式を共有し、認識を揃えてから、集計するようにしています。自然言語でのやりとりでは意外と齟齬が生まれやすく、出戻りの原因になるからです。
例えばメールのクリック率の集計をする場合、一口にクリック率と言っても、"クリック回数/開封数", "クリック人数/開封数", "クリック回数/送信数", "クリック人数/送信数"のように如何ようにも定義が作れてしまいます。
集計前にアウトプット形式を定められるくらい綿密に集計方針を決めることで、出戻りを防ぐことができます。また、方針をあらかじめ考えておくことで、クエリを書く作業と明確に切り分けることができ、効率が上がるという副次的な効果も得られます。
集計中(クエリ作成・評価)編
必ず定性評価する & 定性評価も基準を設けて定量的に測る
例えば機械学習モデルを作った時、オフライン評価値で定量評価をすると思います。この時必ず、定性評価(人の目で出力のチェック)もするようにしています。人間の知覚能力は意外に高く、定量的に評価しきれない部分に対して、洞察を得ることができるからです。
アイテムを推薦するランキングモデルであれば「Top10アイテムのURLに実際にアクセスしてチェック」のように、定性評価をします。
また、定性評価をモデルの選択などの意思決定に使う場合、「誰が見返しても同じように評価できる」、「手がけたモデルに対して、バイアスが働かせない」ために以下のように基準を設けて、定量的に測るようにしています。
悪い定性評価の例
- ランキング上位のアイテムを確認し、ユーザの嗜好にあったアイテムが出ているかチェックする
良い定性評価の例(もっといい例があったかも...)
- 新旧2つのランキングのtop10アイテムを以下の基準で採点し、この合計値が高い方を採用する
- 1: ユーザが過去閲覧したカテゴリと同じなど理由から、購入する確率が高いアイテム
- 0: 購入する確率について判断する材料がないアイテム
- -1: ユーザが既に購入しているなどの理由から、購入する確率が低いアイテム
ファクトとディメンションを意識してクエリを書く
集計クエリは、どんなファクト(=指標)とディメンション(=切り口)で集約すれば欲しい値が得られるかを考え、アウトプットに必要な中間テーブルを洗い出してから、クエリを書くようにしています。
クエリの集計ミスはほとんどがwhereやjoinで起こるため、集約に必要なkeyを揃えた中心となるテーブルを用意し、そのテーブルに各ファクトをjoinしていくと良いと思います。
必ずクエリ結果のセルフレビューをする
集計クエリは必ずセルフレビューするようにしています。アプリケーションのコードと違い、集計クエリは間違っていてもエラーを吐き出さず、ミスに気づきにくいからです。
セルフレビューする際は以下のようにチェックをしています。
- 集約前の中間テーブルを適当なkey(ex. user_id, やitem_id) で絞って、要件通りに値が入っているか確認する
- 集約結果のディメンション(ex. item_id, user_id)のURLを発行して正しそうか確認する
集計後(まとめ・レポート)編
報告時に必要な情報を落とさない
集計結果をもとにマネージャーに意思決定を依頼するときは、重要な部分に絞って共有する必要があります。その時は必要な情報を落とさないように、以下のことを心がけています。
- クリック率など、割合の指標は分子/分母を表記する
- 定量的な結果はdropしない
- 事実と解釈を明確に分けて書く
- 結果から考えうるNextActionを提示する
レポートには再現可能な情報を残す
集計結果をレポートする場合は、誰が見ても再現可能な情報を残すようにしています。検算や再度似た集計をする場合の足掛かりになるためです。具体的には、書いたクエリ、使った指標の定義をまとめています。
おわりに
入社直後は「高度な技術を学んで、複雑な分析ができるようになるぞ!」とか、「分析だけじゃなくてアプリケーション開発もできるようになるぞ!」とか意気込んでいたのですが、意外と基本的な項目を押さえ、ミスなく分析をすることだけで難しいんだなと気付かされました。
簡単に身につくことではないので、日々の業務を丁寧にこなして自然にできるようにやっていきたいです💪
参考書籍・記事
これまでのデータ分析・集計で参考になった記事や書籍を紹介しておきます。こちらも合わせてご覧ください🙏
SQLに関する書籍

達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ

ビッグデータ分析・活用のためのSQLレシピ
ロジカルシンキングに関する書籍

イシューからはじめよ──知的生産の「シンプルな本質」

論点思考 内田和成の思考

仮説思考 BCG流 問題発見・解決の発想法
文章の書き方

図解でわかる!理工系のためのよい文章の書き方 論文・レポートを自力で書けるようになる方法

コミュニケーション技術 実用的文章の書き方 (中公新書)
クエリに関する記事

分析用SQLを書くときの思考回路について|だみ〜|note

BigQuery を使って分析する際の tips (part2)

スタースキーマ(基礎)
