inFablic

Fablic開発者ブログ

バナーのクリック率をFirebaseで計測し、BigQueryで集計し、Redashで可視化する

f:id:shoby:20170523195419p:plain

こんにちは。エンジニアのshobyです。

FablicではRedashを導入し、主にサーバーサイドのデータやログを分析してきましたが、最近ではRedashにFirebaseとBigQueryを組み合わせ、クライアントサイドのイベントも分析するようになりました。

直近では、クライアントサイドのイベントを、アプリの機能改善だけではなく、キャンペーンバナーなどのコンテンツの効果測定にも利用しています。

Fablicでのバナークリック率計測の事例を元に、Firebaseで計測し、BigQueryで集計し、Redashで可視化する方法をお伝えします。

概要

  • Firebase+BigQueryイベント集計のメリット、デメリット
  • Firebaseでのログ計測
  • BigQueryでのログ集計
  • Redashでの可視化

Firebase+BigQueryイベント集計のメリット、デメリット

コンテンツの効果測定を行う際、一般的なサーバー側でログを仕込む方法と比べ、Firebaseを利用する場合のメリット、デメリットをお伝えします。

計測は簡単、集計が大変というのが特徴になるかと思います。

メリット

サーバー側のログ計測と比べた主なメリットは以下の通りです。

  • クライアントエンジニアだけの作業で完結する
  • 計測コードを記述するのが短時間で済む
  • カスタムイベントパラメータで柔軟な計測ができる
  • 自動でBigQueryにエクスポートされるのでログの管理が不要
  • 全イベントログの生データが参照できる

計測に関するエンジニアの実作業はほぼ必要なく、ログの管理が必要ないのが主なメリットです。

デメリット

デメリットは集計が大変なことです。 Firebaseからエクスポートしたデータは、BigQuery上ではRECORD型という非正規化されたスキーマで保存されており、WITHIN句などの独特な形式でクエリを書く必要があります。

実際のスキーマは以下をご参照ください。

support.google.com

Firebaseでのログ計測

バナーのクリック率を計測する場合、クライアントで、表示とクリックそれぞれのアクションに対して、バナーのIDをパラメータとして付与しつつ計測します。

フリルでは、以下のようなイベントを投げています。

  • show_banner
    • banner_id
  • click_banner
    • banner_id

banner_idを元に2つのイベントを突き合わせ、クリック率を計測することができます。

BigQueryでのログ集計

イベントを集計するのに関係するフィールドは以下の部分になります。

フィールド名 データタイプ 説明
event_dim RECORD このバンドル内のイベントに関する情報を格納する繰り返しレコード。
event_dim.name STRING このイベントの名前。
event_dim.params RECORD このイベントに関連付けられたパラメータを格納する繰り返しレコード。
event_dim.params.key STRING イベント パラメータのキー。
event_dim.params.value.int_value INTEGER イベント パラメータの整数値。

BigQuery Export のスキーマより一部抜粋

event_dim および event_dim.params はrepeatedな RECORD 型であり、WITHIN RECORD 句を用いた集計が必要です。

実際の集計クエリは以下のような形です。

SELECT
  banner_id,
  total_show_count,
  total_click_count,
  total_click_count/total_show_count as click_rate
FROM (
  SELECT
    banner_id,
    SUM(show_count) as total_show_count,
    SUM(click_count) as total_click_count,
  FROM (
    SELECT
      event_dim.params.value.int_value as banner_id,
      SUM(event_dim.name = 'show_banner') WITHIN RECORD AS show_count,
      SUM(event_dim.name = 'click_banner') WITHIN RECORD AS click_count
    FROM  your_table_name
    WHERE (event_dim.name = 'show_banner' OR event_dim.name = 'click_banner')
      AND event_dim.params.key = 'banner_id'
  )
  GROUP BY banner_id
)
ORDER BY banner_id

1レコードごとに表示回数、クリック回数を計測し、それらをまとめて総表示回数、総クリック回数を計測しています。

Redashでの可視化

FablicではBigQueryとRedashを接続し、Dashboard機能を用いて可視化しています。

以下のように、デバイスごとのクリック率を、データとグラフを元に、一覧で見られるようなDashboardを生成しています。

f:id:shoby:20170523192228p:plain

Redashにはクエリの定期実行機能が付いているため毎日更新されるDashboardを生成でき、日々の改善に繋げることができます。

まとめ

Fablicでは、バナーのクリック率を計測にFirebaseとBigQueryを用いるようになりました。

サーバー側でログを仕込む方法と比べ、FirebaseとBigQueryを使うことで、計測に関するエンジニアの実作業はほぼ必要なく、ログの管理が不要になります。 ただし、集計は少々複雑です。

Firebaseでイベントを計測し、BigQueryで集計し、Redashで可視化することで、日々の改善に繋げることができます。