Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

メディアアプリの計測Tips

232 views

Published on

「Shibuya.apk #35」で発表された資料です。

https://shibuya-apk.connpass.com/event/133727/

Published in: Engineering
  • Be the first to comment

メディアアプリの計測Tips

  1. 1. メディアアプリの計測Tips
  2. 2. Masahiro Higuchi / 樋口雅拓 ● グリーグループのリミア株式会社で、LIMIA という住まい領域のメディアを 作っています。ゲーム会社ですが、最近はメディアに力を入れています。 ● 機械学習のエンジニアですが、iOS, Android,JSなどもやっている何でも屋 です。4歳の娘のパパ。twitter: @mahiguch1 ● https://limia.jp/ ● https://arine.jp/ ● https://aumo.jp/ ● https://www.mine-3m.com/mine/
  3. 3. LIMIAとは? ● メディアサービス ● 記事一覧を表示し、タップすると記事 詳細を閲覧できる。 ● Android(Kotlin), iOS(Swift), Web(TypeScript) ● AWS:90%、GCP:10%。 ● PHP/EC2 → Go/ECS移行中
  4. 4. 背景と目的 ● 計測は超重要。 ● レポートを作成することで、運営による改善が可能。 ● 計測した指標で運営できるようになったら、機械に置き換えて効率化。 —> ハマりやすい「CTR」、「読了率」、「WebView」、「A/Bテスト」の計測 Tipsを共有します。
  5. 5. 良い記事とは何か? (1) CTR 良い記事をユーザに提供することで、良い体験を届けた い。でも、良い記事って何だろう? 起動すると記事一覧画面が表示される。そこから選ば れないと読んでもらえない。 そこで、「一覧からタップされやすいもの」をユーザが一 覧表示することを望んでいるものと仮説を立て、それを 検証した。 「一覧からタップされやすいもの」 = CTR と定義した。
  6. 6. CTRとは? CTR(Click Through Rate) = タップ数/ 表示回数 【表示回数の定義】 ・広告が視聴可能なスクリーンに表示されていること ・広告の一定面積以上が見える状態にあること ・広告が一定の時間以上見える状態であること ・広告が人間によって視聴されていること つまり、一覧表示のChild/Cellが画面上に表示したうち、タップされた割合。 タップ数は簡単に取れるが、スクリーンに表示された回数はどう取れば良いのか?
  7. 7. スクリーンに表示されたログ送信 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()
  8. 8. スクリーンに表示されたログ送信(ファーストビュー) いきなり走らせると更新される度にログが再送されてしまうので、 viewTreeObserver の Listnerに仕込むことで描画してからログ送信されるようにした。 obtainRecyclerView()?.viewTreeObserver?.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { override fun onGlobalLayout() { logImpressionForCurrentVisibleItems { obtainRecyclerView()?.viewTreeObserver?.removeOnGlobalLayoutListener(this) https://developer.android.com/reference/android/view/ViewTreeObserver
  9. 9. 良い記事とは何か? (2) 読了率 リストをタップして表示した記事が期待 通りだった場合、記事を最後まで閲覧 する可能性が高い。そこで、記事を最 後まで読み切った比率(読了率)が高い ものを記事を表示するユーザが望ん でいると仮説を立て、それを検証した。
  10. 10. 読了率: 読了イベントを発火 読了したらイベントを発火し、「読了率 = 読了イベント数 / 記事閲覧数」とした。 記事直下に執筆者名などが表示されるitemがあり、それが表示されたら、読了 イベントを飛ばした。 その後、半分まで読んだら「0.5」のような読了割合を取得し、「読了率 = SUM(読了割合) / 記事閲覧数」とした。
  11. 11. その他のTips: WebViewのイベント計測 ネイティブ Android コードを JavaScript から呼び出せるようにするには、@JavaScriptInterface を付けたメソッドを 定義してクラスを実装します。作成したネイティブ インターフェースを WebView に登録すると、WebView で実行される JavaScript コードからアクセスできるようになります。 https://firebase.google.com/docs/analyt ics/android/webview?hl=ja
  12. 12. WebViewイベント計測(Javascript側実装) JavascriptからWebViewの中に用意したメソッドを叩くことができるようになります。
  13. 13. その他のTips2: A/Bテストのどちらに振り分けられたか Firebase A/B Testingを使うと楽。 実装しなくてもA/Bテストでどちらのセ グメントに振り分けられたか、 UserPropertyに自動設定される。key は次のようになる。 firebase_exp_<ABテスト番号>
  14. 14. まとめ ● 計測は機能開発が終わった後に実装する事が多いので、面倒に感じる。 ● Tipsをみんなで共有して、機能開発に集中したい! ● 計測結果を使って機械学習での最適化を行なっているので、どこかで話し たい。 ご静聴、ありがとうございました!

×