Slide 1

Slide 1 text

メディアアプリの計測Tips

Slide 2

Slide 2 text

Masahiro Higuchi / 樋口雅拓 ● グリーグループのリミア株式会社で、LIMIA という住まい領域のメディアを 作っています。ゲーム会社ですが、最近はメディアに力を入れています。 ● 機械学習のエンジニアですが、iOS, Android,JSなどもやっている何でも屋 です。4歳の娘のパパ。twitter: @mahiguch1 ● https://limia.jp/ ● https://arine.jp/ ● https://aumo.jp/ ● https://www.mine-3m.com/mine/

Slide 3

Slide 3 text

LIMIAとは? ● メディアサービス ● 記事一覧を表示し、タップすると記事 詳細を閲覧できる。 ● Android(Kotlin), iOS(Swift), Web(TypeScript) ● AWS:90%、GCP:10%。 ● PHP/EC2 → Go/ECS移行中

Slide 4

Slide 4 text

背景と目的 ● 計測は超重要。 ● レポートを作成することで、運営による改善が可能。 ● 計測した指標で運営できるようになったら、機械に置き換えて効率化。 —> ハマりやすい「CTR」、「読了率」、「WebView」、「A/Bテスト」の計測 Tipsを共有します。

Slide 5

Slide 5 text

良い記事とは何か? (1) CTR 良い記事をユーザに提供することで、良い体験を届けた い。でも、良い記事って何だろう? 起動すると記事一覧画面が表示される。そこから選ば れないと読んでもらえない。 そこで、「一覧からタップされやすいもの」をユーザが一 覧表示することを望んでいるものと仮説を立て、それを 検証した。 「一覧からタップされやすいもの」 = CTR と定義した。

Slide 6

Slide 6 text

CTRとは? CTR(Click Through Rate) = タップ数 / 表示回数 【表示回数の定義】 ・広告が視聴可能なスクリーンに表示されていること ・広告の一定面積以上が見える状態にあること ・広告が一定の時間以上見える状態であること ・広告が人間によって視聴されていること つまり、一覧表示のChild/Cellが画面上に表示したうち、タップされた割合。 タップ数は簡単に取れるが、スクリーンに表示された回数はどう取れば良いのか?

Slide 7

Slide 7 text

スクリーンに表示されたログ送信 AndroidではRecyclerView.layoutManagerのpositionを取得する ことで実現した。 (obtainRecyclerView()?.layoutManager as? LinearLayoutManager)?.let { val first = it.findFirstVisibleItemPosition() val last = it.findLastVisibleItemPosition() if (first >= 0 && last >= 0) { for (position in first..last) { ログ送信 https://developer.android.com/reference/android/support/v7/widget/LinearLayoutManager.html#findFirstVisibleItemPositio n()

Slide 8

Slide 8 text

スクリーンに表示されたログ送信(ファーストビュー) いきなり走らせると更新される度にログが再送されてしまうので、 viewTreeObserver の Listnerに仕込むことで描画してからログ送信されるようにした。 obtainRecyclerView()?.viewTreeObserver?.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { override fun onGlobalLayout() { logImpressionForCurrentVisibleItems { obtainRecyclerView()?.viewTreeObserver?.removeOnGlobalLayoutListener(this) https://developer.android.com/reference/android/view/ViewTreeObserver

Slide 9

Slide 9 text

良い記事とは何か? (2) 読了率 リストをタップして表示した記事が期待 通りだった場合、記事を最後まで閲覧 する可能性が高い。そこで、記事を最 後まで読み切った比率(読了率)が高い ものを記事を表示するユーザが望ん でいると仮説を立て、それを検証した。

Slide 10

Slide 10 text

読了率: 読了イベントを発火 読了したらイベントを発火し、「読了率 = 読了イベント数 / 記事閲覧数」とした。 記事直下に執筆者名などが表示されるitemがあり、それが表示されたら、読了 イベントを飛ばした。 その後、半分まで読んだら「0.5」のような読了割合を取得し、「読了率 = SUM(読了割合) / 記事閲覧数」とした。

Slide 11

Slide 11 text

その他のTips: WebViewのイベント計測 ネイティブ Android コードを JavaScript から呼び出せるようにするには、@JavaScriptInterface を付けたメソッドを 定義してクラスを実装します。作成したネイティブ インターフェースを WebView に登録すると、WebView で実行される JavaScript コードからアクセスできるようになります。 https://firebase.google.com/docs/analyt ics/android/webview?hl=ja

Slide 12

Slide 12 text

WebViewイベント計測(Javascript側実装) JavascriptからWebViewの中に用意したメソッドを叩くことができるようになります。

Slide 13

Slide 13 text

その他のTips2: A/Bテストのどちらに振り分けられたか Firebase A/B Testingを使うと楽。 実装しなくてもA/Bテストでどちらのセ グメントに振り分けられたか、 UserPropertyに自動設定される。key は次のようになる。 firebase_exp_

Slide 14

Slide 14 text

まとめ ● 計測は機能開発が終わった後に実装する事が多いので、面倒に感じる。 ● Tipsをみんなで共有して、機能開発に集中したい! ● 計測結果を使って機械学習での最適化を行なっているので、どこかで話し たい。 ご静聴、ありがとうございました!