Gunosy Tech Blog

Gunosy Tech Blogは株式会社Gunosyのエンジニアが知見を共有する技術ブログです。

A/B テストの管理基盤刷新とレポートの自動化(自動化編)

はじめに

こんにちは、 Gunosy Tech Lab 所属の m-hamashita です。最近はほぼ毎日モブプロで開発をおこなっており、刺激的で楽しいです。 今回は「A/B テストの管理基盤刷新とレポートの自動化」をおこなった話について紹介します。 基盤編と自動化編の 2 部構成で、本記事では A/B テストのレポート自動化について紹介したいと思います。

A/B テストの管理基盤を刷新した話については @hyamamoto さんが紹介した記事をご覧いただけると幸いです。

tech.gunosy.io

既存の A/B テスト集計での課題

既存の A/B テスト集計では以下のような課題がありました。

  • クエリはすべて手動で書いており、集計者がストレスを感じていた*1
    • ほとんど同じクエリを使いまわして、集計期間・対象メディアを変更して集計・その結果のスクリーンショットを貼って A/B テストのレポートを作成していた*2
    • また、履歴として A/B テストの設定が保存されていなかったため、集計者がデプロイ情報を見て集計期間を入力していた
  • 共通のクエリがあるわけではなく、集計者各々がクエリを作成していて非効率だった
    • 作成したクエリが間違っていることもあった

そこで、今回は集計を自動化することでこれらの課題を解決しようと試みました。

解決策

解決策として、大きく分けて 2 つのことをおこないました。

A/B テストの ID と統計量が格納された集計テーブルを作成

A/B テストを識別する ID と各種統計量が格納された集計テーブルを作成しました。 集計テーブルを作成するクエリは GitHub 上でレビューを受けるため、クエリの品質がある程度保証されます。 また、A/B テストの開始/終了時刻が RDS に格納されているため、集計期間を指定する必要がなくなりました。

余談ですが、当初は Athena view といった論理テーブルをいくつか作成して同等のテーブルを実現していました。 しかし、論理テーブルだとテーブルを遡って読み込み、出力されるまでに時間がかかるため、物理テーブルを作成するようにしました。 一方で先に論理テーブルを活用したことで、リリース初期の検証・修正を繰り返すことができました。

Confluence 上に A/B テストレポートが作成されるようにした

弊社では BI ツールとして Amazon QuickSight を利用していることから、最初はダッシュボード上に A/B テストの集計結果を出力していましたが、以下の理由から不十分だと判断しました。

  • 表形式のデータを見るのに向いていなかった
  • 追加の分析や考察、集計時の状態を残すことができない
  • A/B テストの集計結果は毎日見るようなものではない

そこで、GitHub Action で workflow を実行し、Confluence 上に A/B テストレポートが作成されるようにすることで、これらの問題に対処しました。 今回は以下の理由からレポートの作成先として Confluence を採用しました。

  • レポートとして状態を保存できる
  • 考察などの加筆ができる
  • 変更履歴が残る

A/B テストレポート作成の workflow の内容は以下のようになっています。 主に分析などをおこなうため、Python で実装しています。

  1. 指定された A/B テストに対する統計量を Athena 経由で取得
  2. A/B テストのまとめを記述するためのページを Confluence 上に作成
  3. 各メディアの A/B テストの集計結果をまとめページの下に作成
    • 統計量の差分の計算やフォーマットを整える
    • テンプレートに従って HTML をレンダリング

親ページには A/B のまとめや今後の方針、子ページには集計結果や追加の分析を記述するようにすることで、A/B テストレポートの見通しがよくなりました。 また、基本的な集計を自分でおこなう必要がなくなるため、A/B テストレポートを記述する負荷を軽減することができました。

A/B テストレポート作成の流れ

実際の A/B テストレポート作成の流れを紹介します。

まず、GitHub Action Workflow の入力欄に規則に従ってサービス名*3や A/B テストの種類を入力して実行します。

GitHub Action Workflow を実行

そうすると、Confluence 上に A/B テストレポートが作成されます。

生成された A/B テストレポート(親ページ)
生成された A/B テストレポート(子ページ)

子ページには追加の分析や各メディアでの考察を、親ページにはまとめや今後の方針を記述して A/B テストレポートを完成させます。 このように一定のフォーマットで A/B テストレポートを作成されるため、記述する人、それを見る人の双方にとってうれしいものになったと思っています。

まとめ

今回は、A/B テストレポートを Confluence に自動的に作成するためのツールを作成しました。これにより、集計者の負担が軽減され、A/B テストの結果をより見やすくまとめることができるようになりました。 このツールを作成した後、同じチームのメンバーに使ってもらったところ「素晴らしすぎる」という感想をいただき、とてもうれしかったです。

今回 GitHub Action を手動で実行しましたが、今後は A/B テスト計画に沿って自動で実行されるようにしようと考えています。 また、画像のレンダリングも可能なので、よくおこなう分析を matplotlib 等でグラフ生成することも検討しています。

*1:主に自分が感じていました

*2: 1 回の A/B テストは複数のメディアに対しておこなうことが多く、各メディアに対して集計が必要

*3:Gunosy Ads or Gunosy Network Ads