Help us understand the problem. What is going on with this article?

目標指標に定義したAnalyticsEventを使用しFirebaseでA/BTestを行う手順(iOS向け)

More than 1 year has passed since last update.

概要

この記事ではiOS向けにFirebaseでA/BTestを行う際に、
AnalyticsEventをA/BTestの目標指数として使用してTestする方法の手順について説明します。

記事を書いた目的は、
開発者側がリリース前に仕込んだAnalyticsEventでA/BTestを行う方法について触れている記事がないなと思い記事にしてみようと思ったからです。

Firebaseプロジェクト作成の話は割愛し、
AnalyticsEventをA/BTestの目標指数として使用してTestする方法のみの内容になります。
Firebaseプロジェクトの作成はリンクより公式の説明を元に行なった方がわかりやすいのでやってみてください。

前置き

FirebaseでA/BTestを行う方法について説明する際に、とあるストーリーベースで進めていきたいと思います。

ストーリー

FirstViewからSecondViewへ遷移するアプリがある。
FirstViewには"Login"と書かれたボタンが配置されこのボタンを押すことでSecondViewへ遷移する。
SecondViewへ遷移した際のログを取っておりログを見る限りSecondViewへ遷移しているユーザ数が少ない。

そこで、FirstViewに配置してあるボタンを"FaceBookLogin"であることがわかるUIに差し替えた場合
SecondViewへ遷移するユーザは増えるのかどうかをテストする。

スクリーンショット 2018-08-14 0.24.47.png

FirebaseAnalyticsにEventを通知

Analytics.logEvent("showSecondView", parameters: nil)
この一行でSecondViewに遷移した際に、
showSecondViewというEventがFirebaseコンソールのEventへ通知されます。

FirstViewController.swift
import UIKit
import Firebase

class SecondViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        Analytics.logEvent("showSecondView", parameters: nil)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

EventをConversionに設定

showSecondViewがEventとして通知されているか確認しConversionとして設定

※通知が届くまで時間がかかります
1.png

showSecondViewがConversionに登録されているか確認

2.png

A/BTestを作成

テストを作成ボタンを押すと、NotificationsとRemoteConfigどちらか選択できるのでRemoteConfigを選択してください。
3.png

バリアントの設定

対象となるユーザから均等に分類されます。
50%がコントロールグループ(変更がない今までのバージョン)残りの50%がfaceBookBtn(変更があるバージョン)となります。
A/B/Cテストの場合はそれぞれ33.333%となります。

スクリーンショット 2018-08-13 22.57.25.png

目標設定

5.png

コードの準備

remoteConfig.setDefaults(["btnType": "typeA" as NSObject])
初期値として変更がない今までのバージョン(typeA)を設定しています。

remoteConfig.fetch(withExpirationDuration: TimeInterval(0)
TimeInterval(X)はX秒RemoteConfigの設定値をローカルキャッシュとしてもつことを示します。
今回は、0秒なのでSecondViewControllerに遷移するたびRemoteConfigから値を取ってくるのでその度通信が発生します。

FirstViewController.swift
import UIKit
import Firebase
class FirstViewController: UIViewController {

    var remoteConfig: RemoteConfig!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.remoteConfig = RemoteConfig.remoteConfig()
        let remoteConfigSettings = RemoteConfigSettings(developerModeEnabled: true)
        remoteConfig.configSettings = remoteConfigSettings
        remoteConfig.setDefaults(["btnType": "typeA" as NSObject])
        remoteConfig.fetch(withExpirationDuration: TimeInterval(0), completionHandler: { (status, error) -> Void in
            if status == RemoteConfigFetchStatus.success {
                self.remoteConfig.activateFetched()

                if let type = self.remoteConfig["btnType"].stringValue {
                    if type == "typeA"{
                        //何も変化無し
                    }else{
                        //FaceBookLogin
                    }
                }

            } else {
            }
        })
    }
}

計測結果

※通知が届くまで時間がかかります
この結果より、faceBookBtnグループの方がSecondViewControllerへ遷移することがわかります。
スクリーンショット 2018-08-13 20.26.16.png

全ユーザに適用するまでの手順

テストの範囲を広げていく

テストを配信するユーザの割合を設定します。
以下のスクショ通りであれば、全ユーザの50%にテストが実施されます。
全ユーザ数が100人とすると、50人のユーザがテスト対象となり、ABそれぞれのパターンが25人ずつ反映される
11.png

テスト結果が十分である場合、全ユーザに効果がある方を反映

22.png

まとめ

1:Eventを通知
2:EventをConversionとして設定
3:A/BTestを作成
4:A/BTestの結果より配信数を伸ばすか撤退か決める
5:十分に効果が見込める場合、全ユーザに配信

手順としては5つ!
今回は、A/BTestを行う方法についての説明でしたが、
重要なのは、どこをテストするか(どこにログを仕込むか)ということなので
テスト箇所についてはチームで議論して実装フェーズまで持っていければあとは環境を整える。
この環境作りの際にこの記事がお役にたてば幸いですmm

最後に

今回のA/BTestではRemoteConfigを用いてテストを行なっているので以下ライブラリを使ってみるとスマートにかけたりするのかなとも思ってたり(まだ試してはいないですが、ゆくゆくは試したい)
Lobster

Firebaseが絡むライブラリをOSSとして展開。。。イイなぁ!

giiiita
giiiita a.k.a 溜池山王の技師(26歳) ゲームからマッチングアプリの技師へ
diverse
結婚支援事業を中心に、友達・恋人探しのマッチング事業を展開。深刻化する恋愛離れ、未婚率の上昇を解決すべくWEB・アプリサービスを展開。すべての人へ出会いのプラットフォームを提供しています。
http://diverse-inc.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away