Save 37% off PRO during our Black Friday Sale! »

メディアアプリの計測Tips

9a18f43cea38f204f59451b0b83430d1?s=47 mahiguch
June 28, 2019
120

 メディアアプリの計測Tips

Shibuya.apk #35でのLT資料です。

9a18f43cea38f204f59451b0b83430d1?s=128

mahiguch

June 28, 2019
Tweet

Transcript

  1. メディアアプリの計測Tips

  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. LIMIAとは? • メディアサービス • 記事一覧を表示し、タップすると記事 詳細を閲覧できる。 • Android(Kotlin), iOS(Swift), Web(TypeScript)

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

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

    「一覧からタップされやすいもの」 = CTR と定義した。
  6. CTRとは? CTR(Click Through Rate) = タップ数 / 表示回数 【表示回数の定義】 ・広告が視聴可能なスクリーンに表示されていること

    ・広告の一定面積以上が見える状態にあること ・広告が一定の時間以上見える状態であること ・広告が人間によって視聴されていること つまり、一覧表示のChild/Cellが画面上に表示したうち、タップされた割合。 タップ数は簡単に取れるが、スクリーンに表示された回数はどう取れば良いのか?
  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. スクリーンに表示されたログ送信(ファーストビュー) いきなり走らせると更新される度にログが再送されてしまうので、 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. 良い記事とは何か? (2) 読了率 リストをタップして表示した記事が期待 通りだった場合、記事を最後まで閲覧 する可能性が高い。そこで、記事を最 後まで読み切った比率(読了率)が高い ものを記事を表示するユーザが望ん でいると仮説を立て、それを検証した。

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

    = SUM(読了割合) / 記事閲覧数」とした。
  11. その他のTips: WebViewのイベント計測 ネイティブ Android コードを JavaScript から呼び出せるようにするには、@JavaScriptInterface を付けたメソッドを 定義してクラスを実装します。作成したネイティブ インターフェースを

    WebView に登録すると、WebView で実行される JavaScript コードからアクセスできるようになります。 https://firebase.google.com/docs/analyt ics/android/webview?hl=ja
  12. WebViewイベント計測(Javascript側実装) JavascriptからWebViewの中に用意したメソッドを叩くことができるようになります。

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

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