こんにちは。エンジニアのshobyです。
FablicではRedashを導入し、主にサーバーサイドのデータやログを分析してきましたが、最近ではRedashにFirebaseとBigQueryを組み合わせ、クライアントサイドのイベントも分析するようになりました。
直近では、クライアントサイドのイベントを、アプリの機能改善だけではなく、キャンペーンバナーなどのコンテンツの効果測定にも利用しています。
Fablicでのバナークリック率計測の事例を元に、Firebaseで計測し、BigQueryで集計し、Redashで可視化する方法をお伝えします。
概要
- Firebase+BigQueryイベント集計のメリット、デメリット
- Firebaseでのログ計測
- BigQueryでのログ集計
- Redashでの可視化
Firebase+BigQueryイベント集計のメリット、デメリット
コンテンツの効果測定を行う際、一般的なサーバー側でログを仕込む方法と比べ、Firebaseを利用する場合のメリット、デメリットをお伝えします。
計測は簡単、集計が大変というのが特徴になるかと思います。
メリット
サーバー側のログ計測と比べた主なメリットは以下の通りです。
- クライアントエンジニアだけの作業で完結する
- 計測コードを記述するのが短時間で済む
- カスタムイベントパラメータで柔軟な計測ができる
- 自動でBigQueryにエクスポートされるのでログの管理が不要
- 全イベントログの生データが参照できる
計測に関するエンジニアの実作業はほぼ必要なく、ログの管理が必要ないのが主なメリットです。
デメリット
デメリットは集計が大変なことです。 Firebaseからエクスポートしたデータは、BigQuery上ではRECORD型という非正規化されたスキーマで保存されており、WITHIN句などの独特な形式でクエリを書く必要があります。
実際のスキーマは以下をご参照ください。
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を生成しています。
Redashにはクエリの定期実行機能が付いているため毎日更新されるDashboardを生成でき、日々の改善に繋げることができます。
まとめ
Fablicでは、バナーのクリック率を計測にFirebaseとBigQueryを用いるようになりました。
サーバー側でログを仕込む方法と比べ、FirebaseとBigQueryを使うことで、計測に関するエンジニアの実作業はほぼ必要なく、ログの管理が不要になります。 ただし、集計は少々複雑です。
Firebaseでイベントを計測し、BigQueryで集計し、Redashで可視化することで、日々の改善に繋げることができます。