Rista Tech Blog

株式会社リスタの技術?ブログ

Google Analyticsのディメンションを使ってABテストをする

Ristaの4人目エンジニアを募集中! iOS Android Rails

おはようございます、辻(@dim0627)です。 最近英語の勉強にと思って英語の本を読んでるんですが、1ヶ月かかってやっと読み終わりました。 心が折れそうです。

さて、今回は弊社で行っているABテストについて、Google Analyticsのディメンションについての説明から始めて書いてみたいと思います。

ディメンション?

Google Analyticsにはカスタムディメンション、カスタム指標というものがあります。 今回使うのはディメンションなので、指標については言及しません。

ディメンションと指標 - アナリティクス ヘルプ

ディメンションというのは、サイトに対するアクセスや、ユーザ、セッションといった単位に異なる側面を与える機能です。 指標の場合は更に細かい数値まで設定できるもの、くらいに考えておけばだいたいあってます。

ほとんどのアナリティクス レポートの表では、ディメンション値は行に、指標は列に表示されます。

ディメンションと指標 - アナリティクス ヘルプ

ものすごくわかりづらいと思うのですが、よく使われているのは「ログイン済みのユーザかそうでないか」というディメンションではないかと思います。

ディメンションのスコープ

ディメンションは結構ややこしいので、どこまでを理解しておくべきかが曖昧だったりします。 なので本記事では、スコープまで言及してあとは公式ドキュメントにおまかせしようかと思います。

ディメンションにおけるスコープというのは、「ディメンションを設定する単位」です。 実際に設定できるのは次の4つで、

  • 商品
  • ヒット
  • セッション
  • ユーザ

「商品」は拡張eコマースのプラグインを設定している場合のみなので、ECサイトでなければヒット、セッション、ユーザの3つが対象になります。

拡張 e コマース  |  ウェブ向けアナリティクス(analytics.js)  |  Google Developers

ヒットレベルのスコープ

ヒットレベルというのは、アクセスがあるたびに設定されるディメンションの単位です。 1回目のアクセスではAというディメンションがついても、2回目のアクセスでBがつけばそれぞれがそのまま適用されます。

セッションレベルのスコープ

セッションというのは、「1ユーザが当該サイトに訪れてから出るまで」を1とする単位です。 Webアプリでよくつかわれる「セッション」とは違うので気をつけましょう。

Webアプリでよくつかわれる「セッション」は、Google Analyticsのスコープでいうとユーザレベルのスコープに該当します。 ややこしいですね。

セッションレベルのスコープでは、1セッション内でAというディメンションとBというディメンションが設定された場合、後に設定されたディメンションが勝ち、過去に設定されたディメンションを打ち消します。

ユーザレベルのスコープ

ユーザレベルのスコープはユーザ単位に設定され、セッションをまたいでもディメンションの値が適用されるスコープです。

こちらもセッションレベルのスコープ同様、後に設定されたディメンションが過去に設定されたディメンションを打ち消します。

Google AnalyticsにおけるABテスト

実は、Google Analyticsには、わざわざディメンションを使わなくともABテスト用の機能がついています。

ウェブテスト - アナリティクス ヘルプ

弊社でも最初はこれを使おうとしたのですが、PCだけとか、MOBILEだけとかでテストをしたいときにうまく要件を満たすことができませんでした。

また、最近ではGoogle Optimizeもあるので、テストしたい内容によってはこちらを使うのが簡単かもしれませんね。

Website, AB Testing & Personalization Solutions - Google Optimize – Google

GUIでテスト内容が設定できるのがすごい!

Google AnalyticsでABテストを設定する

では、実際にGoogle Analyticsのディメンションを使ってABテストを設定してみます。

ディメンションでのABテストは、基本的にGoogle Analytics側の設定とシステム側の設定にわかれます。

Google Analytics側の設定

Google Analytics側ではディメンションを作り、テストの結果確認用のセグメントを作っておくくらいです。

ディメンションの作成

テストの単位となるディメンションを作成します。 弊社では改善対象のページ単位にディメンションを作っています。

f:id:dim0627:20170714094634p:plain

f:id:dim0627:20170714093220p:plain

スコープについては前述したとおりですが、ディメンションの割当処理はシステム側でセッションを用いるので、Google Analytics側ではヒットレベルにしています。

気をつけなければいけないのが、ディメンションは一度作ったら削除できないということです。 また、作成できるディメンションの数もプランによって異なるので、制限があるということだけ覚えておくと良いと思います。

各プロパティごとに、カスタム ディメンションのインデックスを 20、カスタム指標のインデックスを 20 利用できます。プレミアム アカウントの場合は、カスタム ディメンションのインデックスを 200、カスタム指標のインデックスを 200 利用できます。

カスタム ディメンションを削除することはできませんが、無効にはできます。ただし、再利用はお避けください。カスタム ディメンションの名前、範囲、値を編集する際は、新しい値と古い値の両方を、新しいディメンション名または古いディメンション名と組み合わせることができます。これにより、レポートのデータはフィルタによって細かく分割されない形式でまとめられます。

カスタム ディメンション / 指標 - アナリティクス ヘルプ

セグメントの作成

セグメントはGoogle Analyticsのグラフ描画におけるユーザの区分のことです。 標準で豊富な量のセグメントが用意されていますが、今回はABテストユーザを識別するための「Aユーザ」、「Bユーザ」というセグメントを作ります。

f:id:dim0627:20170714093308p:plain

f:id:dim0627:20170714093414p:plain

セグメントは他にもいろいろな切り口で追加できるので、サービスに応じて必要な切り口のセグメントを作っておくと便利です。

僕はだいたいどのサイトにもこんな感じのディメンションを追加してます。(標準で作っといてくれよ!)

f:id:dim0627:20170714093444p:plain

システム側の設定

ABテストをする上で必要になるシステム側の設定は、ユーザ単位にA/Bを判定することと、それによってViewを切り替え、ディメンションを適用するスクリプトを書き込むことです。

ユーザ単位のA or B判定

ABテストは要件によって、ヒットレベル、セッションレベルのいずれかになると思うのですが、弊社では基本的にセッションレベルでテストしてます。 1ユーザがページを見るたびに要素が変わるのは、あまり良いユーザ体験とは言えないと考えているからです。

というわけで弊社ではセッションIDをもとにA/Bの振り分けをしています。

def ab_id(*ids)
  ids[session.id.to_i(16) % ids.size]
end

ab_id(:a, :b)
=> :a

はじめはセッションにA/Bを格納してたんですが、@mikedaにそんなん無駄やろって突っ込まれたのでやめました😗(その通りです)。

Viewの切り替え

A/Bの振り分けをしたらViewの切り替えをします。 要件によって、Viewまるごと切り替えてもいいですし、Viewの一部だけをifで切り替えてもいいと思います。

スクリプトによるディメンション切り替え

A/Bの値によってGoogle AnalyticsにJSからディメンションの設定を行います。

ga('set', 'article_page_abtest', 'A');

ABテストの結果を見る

ABテストがある程度進んだら、先に設定したセグメントによってA/Bそれぞれをグラフに描画できます。 例えば直帰率改善をはかるABテストであればこんな感じに。

f:id:dim0627:20170714093643p:plain

サンプル数はある程度必要なので、アクセスが少ないページだと少し長い期間テストをしなきゃいけないかもしれないですね。

終わりに

さて、駆け足でGoogle AnalyticsでのABテストについて書いてみました。ちょっと概念的な要素が強いのでわかりづらかったかもしれないですね、すみません。

なぜ駆け足かというと、人が足りてないからです。しょうがねえなあ手伝ってやるよって方、助けてください。

ネイティブアプリエンジニアも募集してるよ!

営業や在宅ライターの募集はこちら!