Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
LIMIAアプリにおける行動履歴を用いたコンテンツ配信の最適化
Search
gree_tech
PRO
September 18, 2020
Technology
930
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
LIMIAアプリにおける行動履歴を用いたコンテンツ配信の最適化
GREE Tech Conference 2020 で発表された資料です。
https://techcon.gree.jp/2020/session/Session-1
gree_tech
PRO
September 18, 2020
More Decks by gree_tech
See All by gree_tech
AI画像認識を活用したゲーム内決済処理検証の自動化
gree_tech
PRO
0
450
長期運営で肥大化したExcelマスターデータの解消に向けた移行事例
gree_tech
PRO
0
460
ゲームにおけるメディアミックス展開との向き合い方 -ヘブンバーンズレッドのメディアミックス企画の立て方-
gree_tech
PRO
0
460
課題発見から始めるプロダクト密着型TA組織立ち上げ 〜小規模TAチームが3Dアセットの生産性を倍にした方法〜
gree_tech
PRO
0
470
属人化を叩き割れ!「制作加速」と「安定化」の矛盾を打破する:8年目プロダクトが辿り着いた「ミスが起こり得ない」アセット制作フローの全貌
gree_tech
PRO
0
460
20年続く長寿タイトルが、15年目にして売上を伸ばせた理由
gree_tech
PRO
0
730
我々はどう生きるか
gree_tech
PRO
2
950
変わるもの、変わらないもの :OSSアーキテクチャで実現する持続可能なシステム
gree_tech
PRO
0
5.3k
マネジメントに役立つ Google Cloud
gree_tech
PRO
0
87
Other Decks in Technology
See All in Technology
英語が話せなくてもKubeConスタッフに参加した話
yusuke427
2
1.1k
AIに持続⼒を与える 判断の⻑期記憶設計
eiei114
1
690
AIで変わるエンジニアの働き方(仮)
naoinaoi
0
510
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
5k
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
12
85k
Bill One 開発エンジニア 紹介資料
sansan33
PRO
7
20k
RelayerというPHPのフレームワークを作った
polidog
PRO
0
140
도구에서 동료까지: 10년차 AI 스타트업의 AI 적응기
inureyes
PRO
1
350
AI時代の「OAuth認証」にどう物申すか?(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
120
電話に出る Python のログの話
shinnosuke_kishida
0
220
OAuth SPIFFE Client Authentication(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
120
パスキーでドライブする アカウント統合(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
110
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
520
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
240
Mind Mapping
helmedeiros
PRO
1
330
Optimising Largest Contentful Paint
csswizardry
37
3.9k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
740
Raft: Consensus for Rubyists
vanstee
141
7.6k
The Curious Case for Waylosing
cassininazir
1
480
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
57k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
420
Transcript
グリーライフスタイル株式会社 サーバーサイドエンジニア 田畠 知弥 iOSエンジニア 矢崎 雄人 LIMIAアプリにおける 行動履歴を用いた コンテンツ配信の最適化
2 自己紹介 田畠 知弥 • 2013年グリー株式会社に入社 • サーバーサイドエンジニア 矢﨑 雄人
• 2017年グリー株式会社に入社 • iOSエンジニア
3 ⓘ Start presenting to display the poll results on
this slide. LIMIAを知っていますか?
お手軽で、すぐ真似できるのに、ちゃんと暮らしやすい。 LIMIAは家事の工夫が大集合するライフスタイルメディアです。 お手軽工夫で家事上手 LIMIAの紹介
• ライフスタイルに関する多種多様なコンテンツを掲載 ◦ 記事 ▪ DIYのやり方 ▪ 100均グッズ紹介 ▪ 効率的な掃除方法
▪ etc. ◦ 写真投稿 ◦ SNS機能 LIMIAアプリの紹介
• アプリ上の行動から、ユーザーの興味を推測し、その人の興 味にあったコンテンツを表示するシステム ユーザーに興味に合ったコンテンツを届けたい アプリ内の イベントを収集 ユーザーごとに最適な コンテンツを配信
7 ⓘ Start presenting to display the poll results on
this slide. アプリのイベント計測やっていますか?
• アプリ内で起きたイベントをFirebase Analyticsへ送信 • イベント名、画面名、記事IDなど各種パラメータを付与 • データはBigQueryにエクスポート Firebase Analyticsでアプリ内のイベントを計測する Firebase向け
Google Analytics BigQuery 記事のタップなど
• アプリには記事リストがたくさん並ぶ • リストをスクロールして興味のある記事をタップ • 画面に表示されてもタイトルを読んだとは限らない • 興味がなくてタップしなかったのか • スクロールして読み飛ばしたのか
ユーザーがどんなコンテンツに 興味を持っているのか計測したい
• vCTRを指標に • 「Viewable Click-Through Rate」の略 • ユーザーが目視した記事リストの中から何を選択したか • ユーザーが目視した記事リスト
= Viewable Impression • ユーザーがタップした記事 = Click • Click ÷ Viewable Impression = vCTR ユーザーがどんなコンテンツに 興味を持っているのか計測したい
• vCTRを指標に • 「Viewable Click-Through Rate」の略 • ユーザーが目視した記事リストの中から何を選択したか • ユーザーが目視した記事リスト
= Viewable Impression • ユーザーがタップした記事 = Click • Click ÷ Viewable Impression = vCTR ユーザーがどんなコンテンツに 興味を持っているのか計測したい
• ネット広告業界で使われる指標 • ユーザーが目視可能である状態を定義 • サーバー側のアクセスログでは計測できない 「領域の50%以上が1秒以上連続して画面に表示されること」 Viewable Impressionとは 記事C
記事B 記事A 記事C 記事B 記事A 記事A~Cはどれも領域 50%を満たしていない 記事Cだけ領域が50%を 満たしていない 縦方向スクロール 横方向スクロール
デモ動画 Viewable Impressionが発生する様子
Viewable Impressionのフローチャート • 記事リスト1つ1つでひたすら このループを実行 • Viewable Impressionを Firebase Analyticsに送信
• ライブラリに記事リストのビューを渡して、 Viewable Impressionを通知するシンプルな構成 グリーメディアの他アプリにも導入するため、計測用ライブラリを開発 Viewable Impression計測用ライブラリの開発 アプリ ライブラリ Viewable判定
記事リストの ビュー生成 イベント送信
• 大量のイベントループが発生 • 各タブの記事リストを合計すると200以上になることも • ループ処理の一時停止、再開を適切に管理 • 画面単位でトラッカーを作成 • アクティブな画面だけトラッカーを有効に
• 「1秒以上連続表示」を測るため領域の計算が高頻度で発生 • 領域計算のオーバーヘッドをなるべく抑える • 計算頻度を調整 • CADisplayLink/TimeAnimatorを使用 • 画面描画の数フレームに1回のように調整 記事リストすべてを計測するには負荷がかかる Viewable Impression計測の難しさ
• Firebase Analyticsを利用 • アプリ内で起きたイベントをデータとして貯める • 記事のタップとViewable Impressionを計測 • vCTRが計測できるようになった
アプリのイベント計測まとめ
18 LIMIAでコンテンツを配信するまでの流れ アプリ内の イベントを収集 ユーザーごとに最適な コンテンツを配信
19 ユーザーの興味がある記事を届けたい • ユーザー一人一人の興味にあった記事を届ける • ログから、興味を推測して、適したコンテンツを配信
20 コンテンツを配信するまでのデータの流れ 記事情報 記事のImpression 記事のClick 記事の人気度 ユーザーの興味 記事の種別、特徴 ユーザーに見せる 記事を決定
21 システムのアーキテクチャ 記事情報 記事閲覧 記事閲覧履歴 記事特徴 ユーザーの特徴 ユーザーのimpression, click 人気の記事
ユーザーの興味に あったコンテンツを配信
22 人気の記事 • ユーザーに好まれている記事を知りたい ◦ Viewable Impressionを使うことで、ユーザーがアプリの記事リ ストで実際に目に止めて、Clickした記事がわかる • アプリからのログはFirebaseを使ってBigQuery保存
• 定期的にvCTRを計算してDynamoDBに保存 ユーザーのimpression, click 人気の記事
23 • 記事の特徴 ◦ 記事を作成する際に特徴を計算しDynamoDBに記事の特徴を保存 • 閲覧情報 ◦ ユーザーの記事を閲覧情報に履歴としてDynamoDBに保存 •
ユーザー特徴 ◦ 記事の特徴とユーザーの記事閲覧情報を使ってユーザー特徴を計 算 記事の特徴とユーザーの特徴 記事情報 記事閲覧 閲覧情報 記事特徴 ユーザーの特 徴
24 • ユーザーの特徴や人気の記事などを元に、ユーザーの興味に あった記事を計算 • 新しいロジックを導入する際はA/Bテストで評価 ユーザーにオススメのコンテンツを配信する 記事閲覧 記事特徴 ユーザーの特徴
人気の記事 ユーザーに コンテンツを配信
25 ユーザーに興味のあるコンテンツをだす難しさ • 検証の難しさ ◦ オフラインの評価が必ずしもオンラインで評価した時と一致しな い • システムの難しさ ◦
一個一個は小さいが、たくさんの処理がピタゴラスイッチのよう に動く • 自チームだけでは完結しない難しさ ◦ 必要なデータ収集を集めるのに、自チームだけで完結しない
26 どうやってるか • 検証の難しさ ◦ 実際にユーザーに提供して、A/Bテストで効果を測る ◦ 考えて、実装して、検証するサイクルを速く回すのが大事 • システムの難しさ
◦ 検証のサイクルを素早く回すには、データのパイプラインを簡単 に作れるような環境にしておく ▪ 適切なコンポーネントに分割して、コードで管理する • 自チームだけでは完結しない難しさ ◦ しっかりスケジュールを立てて、気軽に相談できる環境を作る
• アプリ内のイベントを収集 • 記事のタップイベント、Viewable Impressionを計測 • 計測用ライブラリについて • ユーザーごとに最適なコンテンツを配信 •
ユーザーの興味にあった記事の配信システム • 配信システムを運用する上で気をつけていること まとめ アプリ内の イベントを収集 ユーザーごとに最適な コンテンツを配信