Upgrade to Pro — share decks privately, control downloads, hide ads and more …

スマートなランキングの作り方 / how_to_make_a_smart_ranking

CyberAgent
February 22, 2019

スマートなランキングの作り方 / how_to_make_a_smart_ranking

サイバーエージェントの技術者(エンジニア・クリエイター)向けカンファレンス『CA BASE CAMP 2019』
スマートなランキングの作り方〜 AWA、REQUへの適用事例〜

CyberAgent

February 22, 2019
Tweet

More Decks by CyberAgent

Other Decks in Technology

Transcript

  1. よくあるランキングの作成方法 ①データ抽出 ②集計 ③並び替え uid user_id product_id price 1 B8SbtiBOANqrwBRZNqBC

    77 854 2 UaT3oAhmpQISx2zcXCAa 37 224 3 uK1irdbRRiHiZ8BHpP7o 66 972 4 qUMBtHI26hXJYu7eBfFD 96 454 5 iwq0khAXZl1Jea8wWrx3 40 826 6 e5LLuieSvuq6F811U7OG 15 134 7 kXBqFpOONoo0P0Up4jaz 40 480 8 fMqQUsfgJvY1Nxwf7ZDt 28 578 9 KpR5bzLRQlnOpyi1mgUa 6 210 10 FioKcVD9U46y6dHky2Zr 67 774 product_id price 1 9,715 2 3,628 3 2,655 4 5,163 5 2,719 6 6,722 7 6,082 8 8,210 9 3,565 10 3,968 rank product_id price 1 1 9,715 2 66 9,654 3 20 8,807 4 88 8,351 5 8 8,210 6 28 7,981 7 16 7,770 8 86 7,646 9 40 7,624 10 57 7,194
  2. よくあるランキングの作成方法 ①データ抽出 ②集計 ③並び替え uid user_id product_id price 1 B8SbtiBOANqrwBRZNqBC

    77 854 2 UaT3oAhmpQISx2zcXCAa 37 224 3 uK1irdbRRiHiZ8BHpP7o 66 972 4 qUMBtHI26hXJYu7eBfFD 96 454 5 iwq0khAXZl1Jea8wWrx3 40 826 6 e5LLuieSvuq6F811U7OG 15 134 7 kXBqFpOONoo0P0Up4jaz 40 480 8 fMqQUsfgJvY1Nxwf7ZDt 28 578 9 KpR5bzLRQlnOpyi1mgUa 6 210 10 FioKcVD9U46y6dHky2Zr 67 774 product_id price 1 9,715 2 3,628 3 2,655 4 5,163 5 2,719 6 6,722 7 6,082 8 8,210 9 3,565 10 3,968 rank product_id price 1 1 9,715 2 66 9,654 3 20 8,807 4 88 8,351 5 8 8,210 6 28 7,981 7 16 7,770 8 86 7,646 9 40 7,624 10 57 7,194 こんな単純なのに 今日はいったい何話すの?
  3. よくあるランキングの作成方法 ①データ抽出 ②集計 ③並び替え uid user_id product_id price 1 B8SbtiBOANqrwBRZNqBC

    77 854 2 UaT3oAhmpQISx2zcXCAa 37 224 3 uK1irdbRRiHiZ8BHpP7o 66 972 4 qUMBtHI26hXJYu7eBfFD 96 454 5 iwq0khAXZl1Jea8wWrx3 40 826 6 e5LLuieSvuq6F811U7OG 15 134 7 kXBqFpOONoo0P0Up4jaz 40 480 8 fMqQUsfgJvY1Nxwf7ZDt 28 578 9 KpR5bzLRQlnOpyi1mgUa 6 210 10 FioKcVD9U46y6dHky2Zr 67 774 product_id price 1 9,715 2 3,628 3 2,655 4 5,163 5 2,719 6 6,722 7 6,082 8 8,210 9 3,565 10 3,968 rank product_id price 1 1 9,715 2 66 9,654 3 20 8,807 4 88 8,351 5 8 8,210 6 28 7,981 7 16 7,770 8 86 7,646 9 40 7,624 10 57 7,194 作ってみると思ったより考えること多くて 苦労したことないですか?
  4. よくあるランキングの作成方法 ①データ抽出 ②集計 ③並び替え uid user_id product_id price 1 B8SbtiBOANqrwBRZNqBC

    77 854 2 UaT3oAhmpQISx2zcXCAa 37 224 3 uK1irdbRRiHiZ8BHpP7o 66 972 4 qUMBtHI26hXJYu7eBfFD 96 454 5 iwq0khAXZl1Jea8wWrx3 40 826 6 e5LLuieSvuq6F811U7OG 15 134 7 kXBqFpOONoo0P0Up4jaz 40 480 8 fMqQUsfgJvY1Nxwf7ZDt 28 578 9 KpR5bzLRQlnOpyi1mgUa 6 210 10 FioKcVD9U46y6dHky2Zr 67 774 product_id price 1 9,715 2 3,628 3 2,655 4 5,163 5 2,719 6 6,722 7 6,082 8 8,210 9 3,565 10 3,968 rank product_id price 1 1 9,715 2 66 9,654 3 20 8,807 4 88 8,351 5 8 8,210 6 28 7,981 7 16 7,770 8 86 7,646 9 40 7,624 10 57 7,194 そんな人を増やさないために、、、 スマートなランキングの作り方を まとめてみました
  5. ①要件整理【メリット / デメリット】 ①要件整理 ②ロジック • 目的の明確化 • アウトプットの明確化 •

    評価方法の明確化 • モデルタイプを定義 • スコアリングロジックの定義 • ランキングロジックの定義 ポイント するメリット しないデメリット 目的の明確化 • プロジェクトがスムーズに進む • アウトプットも明確化する • 最終的にやりたいこととずれたランキングが できる • 進めていくときに話が脱線しやすくなる • スコープがどんどん広がってタスクが増える アウトプットの 明確化 • 関係者が安心する • 以下も明確化する • ロジック • 活用方法 • 運用イメージ • 夢と希望に溢れたアウトプットが出てくると 思われる • タスクが属人化しやすくなる • 手戻りが発生しやすくなる 評価方法の明確化 • 上長やチーム外の人に成果を伝えやすい • 担当者のモチベーションが上がる • よかったのか、よくなかったのかわからない ランキングができる • 成果を定義できないので評価されにくい
  6. ①要件整理【メリット / デメリット】 ①要件整理 ②ロジック • 目的の明確化 • アウトプットの明確化 •

    評価方法の明確化 • モデルタイプを定義 • スコアリングロジックの定義 • ランキングロジックの定義 ポイント するメリット しないデメリット 目的の明確化 • プロジェクトがスムーズに進む • アウトプットも明確化する • 最終的にやりたいこととずれたランキングが できる • 進めていくときに話が脱線しやすくなる • スコープがどんどん広がってタスクが増える アウトプットの 明確化 • 関係者が安心する • 以下も明確化する • ロジック • 活用方法 • 運用イメージ • 夢と希望に溢れたアウトプットが出てくると 思われる • タスクが属人化しやすくなる • 手戻りが発生しやすくなる 評価方法の明確化 • 上長やチーム外の人に成果を伝えやすい • 担当者のモチベーションが上がる • よかったのか、よくなかったのかわからない ランキングができる • 成果を定義できないので評価されにくい どうやって要件整理すればいいの?
  7. ①要件整理【ヒヤリングシート】 ①要件整理 ②ロジック • 目的の明確化 • アウトプットの明確化 • 評価方法の明確化 •

    モデルタイプを定義 • スコアリングロジックの定義 • ランキングロジックの定義 ポイント 項目 回答 目的の明確化 背景、課題 実現したいこと アウトプットの 明確化 既存システム ある / なし ユーザ表示方法 パーソナライズ / セグメント / 一律 更新頻度 なし / 月 / 日 / 時間 / リアルタイム ランキング対象 ※商品、人など ランキング対象数 ・ランキング候補数 ・ランキング数 ・ランキング表示数 ランキングの種類 ※総合、カテゴリ別など ランキング利用KPI ※2つ以上も可 ランキング利用データ 1つのDB内にある / ある / ない KPIの時系列変動 大きい / 小さい ランキングの表示場所 評価方法の 明確化 評価指標 評価方法 ABテスト / 前後比較 / その他 成功判断条件 ※目標など その他 スケジュール リソース 項目 回答 担当者 開始時期 問題点・課題 ロジック データフロー ※左のヒヤリングシートと同様 既存システム「ある」と回答した場合 既存ランキングシステムについて追加ヒヤリング
  8. ②ロジック【モデルタイプの定義】 1/2 ①要件整理 ②ロジック • 目的の明確化 • アウトプットの明確化 • 評価方法の明確化

    • モデルタイプを定義 • スコアリングロジックの定義 • ランキングロジックの定義 [森内一朗, & 木村和央. (2009). 格付モデルの構築と検証.]を参考に作成 タイプ 説明 利用用途 単純モデル 指標を1つ利用してランキングする 例)売上ランキング、ダウンロード数ランキングなど • シンプルにランキングしたとき • 早くランキングを作りたいとき 経験モデル 指標を複数利用して人の経験に基づいて重みづ けした 合計スコアを利用してランキングする 例)人気ランキング、影響力ランキングなど • 複数の指標を組み合わせたスコアでランキングしたいとき • スコアを定量評価ができないとき 統計モデル 指標を複数利用して統計学の知見に基いて重み づけした合計スコアを利用してランキングする 例)レコメンドなど • 複数の指標を組み合わせたスコアでランキングしたいとき • スコアを定量評価できるとき • ユーザごとにランキングを出し分けたいとき
  9. ②ロジック【モデルタイプの定義】 2/2 ①要件整理 ②ロジック • 目的の明確化 • アウトプットの明確化 • 評価方法の明確化

    • モデルタイプを定義 • スコアリングロジックの定義 • ランキングロジックの定義 [森内一朗, & 木村和央. (2009). 格付モデルの構築と検証.]を参考に作成 項目 単純モデル 経験モデル 統計モデル 工数 〇 △ △ 理解しやすさ 〇 〇 △ 根拠 〇 △ 〇 精度 △ △ 〇 必要なデータ規模 小 小 大
  10. ②ロジック【スコアリングロジックの定義】 ①要件整理 ②ロジック • 目的の明確化 • アウトプットの明確化 • 評価方法の明確化 •

    モデルタイプを定義 • スコアリングロジックの定義 • ランキングロジックの定義 • データの件数、合計値、平均値、欠損値などを確認しKPIを定義する • 異常値があるか確認し、必要であれば除外方法を定義する • 「rawデータ」「マスタデータ」「データ定義書」を担当者からもらう • データベースにある場合は、アクセス権限をもらう • 定義書とデータが一致しているか確認する • データ型、カラムずれ(区切り文字)などを確認する • ロジックを実装し、スコアを計算する • 評価指標を計算する • 責任者や担当者に結果を見せ評価してもらう • 承諾をもらえない場合は再度スコアリング データ受領・抽出 データアセスメント 基礎集計 スコアリング 評価 繰り返し
  11. ②ロジック【スコアリングロジックの定義】 ①要件整理 ②ロジック • 目的の明確化 • アウトプットの明確化 • 評価方法の明確化 •

    モデルタイプを定義 • スコアリングロジックの定義 • ランキングロジックの定義 • データの件数、合計値、平均値、欠損値などを確認しKPIを定義する • 異常値があるか確認し、必要であれば除外方法を定義する • 「rawデータ」「マスタデータ」「データ定義書」を担当者からもらう • データベースにある場合は、アクセス権限をもらう • 定義書とデータが一致しているか確認する • データ型、カラムずれ(区切り文字)などを確認する • ロジックを実装し、スコアを計算する • 評価指標を計算する • 責任者や担当者に結果を見せ評価してもらう • 承諾をもらえない場合は再度スコアリング データ受領・抽出 データアセスメント 基礎集計 スコアリング 評価 繰り返し 具体的にどんなロジック? • 単純モデル:指標の値 • 経験モデル:事例にて紹介 • 統計モデル:割愛
  12. ②ロジック【ランキングロジックの定義】 ①要件整理 ②ロジック • 目的の明確化 • アウトプットの明確化 • 評価方法の明確化 •

    モデルタイプを定義 • スコアリングロジックの定義 • ランキングロジックの定義 基本ロジック スコアの降順でランキング ⇒ スコアのままだと不都合が発生する場合に用いるロジック ※例外条件みたいなもの よくある不都合 対処方法案 スコアが同じ場合の扱い ランダムで並び替える (再現性を考えるならばプライマリキーをハッシュ化) サービスに適していない対象 マスタを作成して除外する(人力運用) 特定の対象で寡占してしまう 寡占率(Herfindahl-Hirschman Indexなど)を考慮する
  13. AWA事例とREQU事例の違い 項目 AWA REQU 実現したいこと 順位にもっと流動性を持たせたい あらゆる要素を加味したい 【訪問ユーザ向け】 人気セラー、人気商品を紹介したい 【セラー】

    上位掲載されることをモチベーション にして、活性化させたい 既存システム ある なし ランキング利用データ 1つのDBにある ある ※1つのDBにまとまっていない 評価指標 納得感、ユーザ利用率 納得感、送客率
  14. AWA事例の場合 項目 AWA 実現したいこと ①順位にもっと流動性を持たせたい ②あらゆる要素を加味したい 既存システム ある ランキング利用データ 1つのDBにある

    評価指標 納得感、ユーザ利用率 取り組む問題 1. ロジックの改善 2. 評価の実施 取り組まなくていい問題 • システムの検討 • データの受領 要件整理
  15. 実現したいこと① 満たすべき性質:流動性 順位にもっと流動性を持たせたい 順位 1/1 1/2 1/3 1/4 1/5 1

    A A A A A 2 B B B B C 3 C D C E B 4 D C E C E 順位 1/1 1/2 1/3 1/4 1/5 1 A A B E C 2 B B A B E 3 C D C A B 4 D C E C D これが、、、 世の中やAWA内の流りが、より反映されるようにしたい 順位 1/1 1/2 1/3 1/4 1/5 1 A C B E D 2 B D A B A 3 C B C D C 4 D A E C E ランダムに順位が変わって欲しいわけではない
  16. 順位 1/1 1/2 1/3 1/4 1/5 1 A A B

    E C 2 B B A B E 3 C D C A B 4 D C E C D 理想状態 世の中やAWA内の流りが、より反映されるようにしたい 順位 1/1 1/2 1/3 1/4 1/5 1 A C B E D 2 B D A B A 3 C B C D C 4 D A E C E ランダムに順位が変わって欲しいわけではない 要件整理 ・〇 っぽいパターン同士の比較基準は? ・他にも × なパターンあるかも? 方針案①:理想状態を、定量的に定義する 方針案②:理想状態を、担当者の「納得感」で定義する 案①:定量的に、結果を評価する 案②:担当者の「納得感」で、結果を評価する 評価方法 実現したいこと① 理想状態を定義する 理想状態を定義して、 タスクを明確に
  17. ロジック検討 基礎集計から垣間見るAWAらしさ 音楽の集合知(playlist文化) 再生 Playlist作成 時間(日次) 検索 発売 & 配信開始

    読み取れる「要素」 検索: 需要、話題性 Playlist作成:アーリーアダプター 再生: 全体からのフィードバック
  18. 参考 (音楽に限らない)人の集団行動分析の例 ・ R. Crane, D. Sornette , Robust dynamic

    classes revealed by measuring the response function of a social system(2008) Google Trends YouTubeの視聴データ 外因性のピーク 内因性のピーク
  19. ヒヤリングシートを使って要件整理 ポイント 項目 回答 アウトプットの 明確化 既存システム なし ユーザ表示方法 一律

    更新頻度 日 ランキング対象 商品とセラー ランキング対象数 ランキング対象は商品マスタすべて 表示数は未定 ランキングの種類 総合とカテゴリ別 ランキング利用KPI 閲覧数、販売数、売上金額、評価、鮮度 ランキング利用データ DBとGAに基本あるが「評価」はない KPIの時系列変動 ? ランキングの表示場所 ランキングページ 評価方法の 明確化 評価指標 納得感 ※サブ:回遊率 or 離脱率 評価方法 前後比較 成功判断条件 納得感があるランキングを作る ※サブ:回遊率 or 離脱率が改善される その他 スケジュール 2か月後くらいに作りたい リソース ディレクター1人、エンジニア1人 ポイント 項目 回答 目的の 明確化 背景、課題 【背景】 現状ランキングページはある が、KPIレポートを参考に担当者が 毎日、人手で並び替えている 【課題】 定量的でないランキングかつ人的コ ストがかかっている 実現したこと 【訪問ユーザ向け】 人気セラー、人気商品を紹介したい 【セラー】 上位掲載されることをモチベーショ ンにして、活性化させたい ⇒ これらを満たした ランキングを作りたい
  20. ヒヤリングシートを使って要件整理 ポイント 項目 回答 アウトプットの 明確化 既存システム なし ユーザ表示方法 一律

    更新頻度 日 ランキング対象 商品とセラー ランキング対象数 ランキング対象は商品マスタすべて 表示数は未定 ランキングの種類 総合とカテゴリ別 ランキング利用KPI 閲覧数、販売数、売上金額、評価、鮮度 ランキング利用データ DBとGAに基本あるが「評価」はない KPIの時系列変動 ? ランキングの表示場所 ランキングページ 評価方法の 明確化 評価指標 納得感 ※サブ:回遊率 or 離脱率 評価方法 前後比較 成功判断条件 納得感があるランキングを作る ※サブ:回遊率 or 離脱率が改善される その他 スケジュール 2か月後くらいに作りたい リソース ディレクター1人、エンジニア1人 ポイント 項目 回答 目的の 明確化 背景、課題 【背景】 現状ランキングページはある が、KPIレポートを参考に担当者が 毎日、人手で並び替えている 【課題】 定量的でないランキングかつ人的コ ストがかかっている 実現したこと 【訪問ユーザ向け】 人気セラー、人気商品を紹介したい 【セラー】 上位掲載されることをモチベーショ ンにして、活性化させたい ⇒ これらを満たした ランキングを作りたい
  21. 3つのポイント 1. 「人気」「モチベーション」といった定性指標を定量化する • 考慮してほしいKPIが多い(データが存在しないKPIもある) • 「納得感」という定性指標で評価する 2. 複数の新規システム開発が必要 •

    データ統合システムの開発(データソースがばらばらなのため) • ランキングロジックシステムの開発 • ランキング結果をサービスにつなぐシステムの開発 3. リソース不足 • エンジニア(別プロジェクトが同時進行) • 分析者(別プロジェクトが同時進行)
  22. 3つのポイント 1. 「人気」「モチベーション」といった定性指標を定量化する • 考慮してほしいKPIが多い(データが存在しないKPIもある) • 「納得感」という定性指標で評価する • ロジックがブラックボックスにならないように分かりやすくする 2.

    複数の新規システム開発が必要 • データ統合システムの開発(データソースがばらばらなのため) • ランキングロジックシステムの開発 • ランキング結果をサービスにつなぐシステムの開発 新規で開発しないよう既存システムを活用する 3. リソース不足 • エンジニア(別プロジェクトが同時進行) • 分析者(別プロジェクトが同時進行) 誰かがボトルネックにならないよう並列して進められるようにする 工夫ポイント① 工夫ポイント③ 工夫ポイント②
  23. データアセスメント 閲覧数 販売数 売上金額 評価 鮮度 × 定義書の確認 データベースの確認 KPI定義

    データマート作成 データが存在しない データマート ※KPIを1つのデータにまとめたもの • どんなテーブル構造? • どんなデータがある? • KPIが存在する? • アクセス権限がある? • 定義書の記載とあっている? • キーの紐づけできる? • 基本統計量の計算(違和感,NULL などある? ) • 売上は受注時?決済時? • 閲覧の対象ページはどこ? • キーを何にする? • カラムはどれを対象にする? • 元データと数値は一致する? 売上データ
  24. ロジックのたたき作成 1/2 モデルタイプ • 単純モデル • 経験モデル • 統計モデル 選択理由

    • 並び替える対象が多くない(レコード数が多くない) • ランキングはユーザ一律 ⇒ 統計モデルの適切な学習ができなさそう ⇒ 開発・運用工数を考えるとコスパが悪い 懸念事項 • 経験モデルは人力でパラメータをチューニングする • 考慮する要因が多すぎるとパラメータチューニングが非常に大変 ⇒ 考慮すべき要因とパラメータを最低限まで減らす 【モデルタイプの定義】
  25. ロジックのたたき作成 2/2 【スコアリングロジック】 : 商品, セラー : 対象日 : 日前

    工夫ポイント① , = 1 − × , + × , , = ෍ =1 (,− × ) Score, = , + , ※RE:residual effect ロジックをわかりやすくする
  26. , = 1 − × , + × , ロジックのたたき作成

    2/2 【スコアリングロジック】 残存効果 人気 n日前の人気 人気 残存効果 時間重み : 商品, セラー : 対象日 : 日前 人気の持続性を持たせることを「モチベーション」とし考慮する 売り切れが発生するので売り切れ後も残存効果としても考慮できる(鮮度) 閲覧数 売上金額 工夫ポイント① , = ෍ =1 (,− × ) Score, = , + , 売上重み ※RE:residual effect ロジックをわかりやすくする コマースKPI 閲覧数 売上金額 Cunsumer Business KPIツリー
  27. , = 1 − × , + × , ,

    = ෍ =1 (,− × ) ロジックのたたき作成 2/2 【スコアリングロジック】 残存効果 人気 n日前の人気 人気 残存効果 時間重み : 商品, セラー : 対象日 : 日前 パラメータは2つだけ 工夫ポイント① Score, = , + , 売上重み ※RE:residual effect ロジックをわかりやすくする
  28. ロジックのたたき作成 2/2 【スコアリングロジック】 残存効果 人気 n日前の人気 人気 残存効果 時間重み :

    商品, セラー : 対象日 : 日前 売上重み λ n λ^n 0.5 1 0.5 0.5 2 0.25 0.5 3 0.125 λは n前日前をどのくらい考慮するか? λが0.5の場合1日前の「Popularity」は半分考慮して2日前は半分の半分を考慮する 数値イメージ 工夫ポイント① , = 1 − × , + × , , = ෍ =1 (,− × ) Score, = , + , ※RE:residual effect ロジックをわかりやすくする
  29. システム全体像の設計 売上データ マスタデータ エクスポート機能を利用 データを転送 データを転送 マスタテーブル GAテーブル 売上テーブル データマート

    テーブル スコアリング結果 テーブル ロジック計算 ↓ 工夫ポイント③ ボトルネック解消 REQU システム テーブル作成フロー アカウント設定済みの 既存プロジェクトを利用 工夫ポイント② 既存システムの有効利用 スキーマを定義 ⇒ input, outputデータが明確化 SQL SQL レポーティング
  30. ロジックの決定 パラメータチューニング ロジックに関するレポーティング RANK ID Popularscore Re Popularity 1 149

    10.784 0.87 9.91 2 8352 10.759 0.98 9.78 3 8056 10.735 0.87 9.87 4 3234 10.623 0.65 9.97 5 2477 10.463 0.94 9.52 6 1165 10.423 0.84 9.58 7 4012 10.240 0.34 9.90 8 6349 10.168 0.45 9.72 9 4649 10.163 0.67 9.49 10 388 10.085 0.80 9.29 11 4564 9.980 0.61 9.37 12 6585 9.829 0.60 9.23 13 6827 9.649 0.29 9.36 14 7720 9.624 0.51 9.11 15 3608 9.581 0.74 8.84 16 8548 9.442 0.27 9.17 17 5598 9.432 0.79 8.64 18 9497 9.419 0.54 8.88 19 7491 9.408 0.33 9.08 20 6695 9.398 0.65 8.75 例)パラメータ探索範囲の提案 ID ※数値、パラメータはダミーの値です
  31. プロジェクト名 test_popularranking prd_popularranking dm_table dm_table popularscore_table popularscore_table ランキングシステムプロトタイプ開発 マスタテーブル GAテーブル

    売上テーブル データマート テーブル スコアリング結果 テーブル データセットを管理して プロトタイプと本番を切り分ける 分析者がバッチで本番同様にスコアリングを行う ※cronとかでもOK メリット • システム化するときのイメージが明確になる • 数値やシステムの挙動確認ができる • この後のタスク「レポート作成」を進めることができる デメリット • サーバーが必要(ローカルPCでもできなくはないが、、、) ※テーブル名は任意の名前です