アドバンスセグメントを使った上での、疑似目標到達プロセス

先週のアクセス解析ワークショップで、考えた事を元にこのエントリーを書いてます。今回のエントリーの内容としては、ROI revolutionの記事(funnels_on_the_fly_in_google_analytics)とほとんど同一です。参考にしました。

目標到達プロセスとアドバンスセグメント

目標到達プロセスで、目的達成を図示する

アクセス解析の目的は、ビジネスゴールの達成ができているのかを測定することです。もちろん、サイトによってゴールの種類はさまざまです。PVから始まって、直帰率、読んで欲しいコンテンツへの到達率、資料請求申し込み、商品販売、さまざまですが、解析の目的には、ゴールがついて回ります。ゴールの達成度を測るわけです。でも、その過程も評価できたら嬉しいです。Google Analyticsでは、この過程を図示する機能があります。目標到達プロセスと呼ばれるものです。(プロファイルごとに設定が必要です)

目標到達プロセス

* 数字の見方に気を付ける。途中のプロセスをすっ飛ばして、ゴールに来た奴はどうやってカウントしているかです。

  • 何もかもすっ飛ばしたものは、直接、横に表示される。
  • トップ(図の場合Home)に来て、途中を飛ばしてgoalしたもの。こういうものも、図の中では途中を経過しているように図示される。

となってます。フォームの離脱率など順番が保証されている場合は、心配はいりませんね。

数字の見方に気を付ける点はあるものの、ゴールの過程が図示されます。どこでセッションが切れている(到達してる)が分かりますので、離脱の多い所の改善を考えて、リンクの位置を変えようといった話につながります。

分析手段である、アドバンスセグメント

こうやって、道のりの過程を考えてデータを見る方法とは別に、ユーザ属性を仮定して特定の属性の人(セッション)の行動指標を見る事もGoogle Analyticsではできます。特定のセッションのみを抽出してレポートしてくれるアドバンスセグメントです。

検索してきたセッションはどうなんだろう? 特定のデバイスからのセッションはどうなんだろう? ページビューが5以上あるセッションはどうなんだろう? Google Analyticsで使うディメンジョン・指標のほとんどについて、セッションデータの切り出しができます。

目標達成プロセスがサイト全体でのセッションが、ゴールまでの到達(逆にいえば離脱)を見たのに対して、アドバンスセグメントでは、特定のセッション(複数)についていろんな指標面を見る、すなわち、これら(セッション)がいったいどんなものだったのかを見るわけです。目的達成のための調査をしてくれるわけです。

しかし、目標到達プロセスとアドバンスセグメントは同時に使えない

同時に使いたいですよね。僕もしたいです。でも、機能として出来ません。パフォーマンス上の理由なのか、特定の指標については、アドバンスセグメントが用意されていません。以前のエントリーで書いたユニークユーザー数もそうでした。

でも、セグメントしたデータでの目標到達プロセスを知りたいですよね?少し面倒ですが、やってみましょう。

アドバンスセグメントのテストを使った擬似的な離脱プロセス数

このサイトはデータが少ないので、分かり易いデータではないのですが、このサイトの3つのページ、what_are_visits…, top, profileで、what_are_visitsがランディングになったページで、profileをゴールとし、topをプロセスとします。what_are から topへいって、profileというイメージです(実は、それは出来ないのですが、便宜上そうさせておいて下さい、出すのは疑似的な数字です)

では、実際のデータをみていきましょう。

まずは、アドバンスフィルターでページ別セッション数をCHECK

特定の閲覧開始ページでのページ別セッション数

正規表現は覚えると便利です。僕も昔は、???でしたが、使えると便利です。Google Analyticsでは使う場面がチョコチョコ出てくるのが頑張りましょう。

それぞれのページがどれくらいのセッションを獲得したかが、ページ別セッションに現れます。”/”が9。”/profile”が4。ただこれは、ばらばらの数字で、ゴールの過程がどうかわかりません。ゴールに設定したprofileでは4セッションという目標を達成したのですが、トップの”/”が目標達成プロセスとして、何セッション数いたのかが不明です。

アドバンスセグメントの管理画面で、テスト機能を使う。

アドバンスセグメントの管理画面は、もちろん、設定をする場所なのでが、セグメントのテストを使うと、おもしろい数値が取れます。

セグメントのテスト1

上と同じ数字です。セッション数9ですね。

それではその中で、ゴールであるprofileまでは、どれだけのセッションが行ったのかというと、上の図に And条件を足して、

セグメントのテスト2

最終的には、セッション数1、、、です。上のセッション数9が、1になりました。最初にアドバンスセグメントで上位のコンテンツを見た時は、”/”が9セッションで、”/profile”が4セッションでしたが、両方を通過(到達)したセッションは、1となったわけです。

疑似的目標到達プロセス

整理しますと、/what_areで、169セッションありました。で、top と profileを同時に見られたセッションは、1セッションだった。

実際のプロセスなどで順番が仮定できる場合は、これでセグメントしたセッションで、離脱(到達)プロセスの数字が出せます。

Topがプロセスで、profileをゴールという順番を仮定すると、169 → 9 → 1となります。9/169=5.2%。最初に85%が離脱して、次に 1/9=11%なので、89%が離脱。

数字も1があったり、信頼性はないですが、フォ-ムなどのプロセスで分析できるデータをお持ちの方は、今回のような形で、セグメントされたセッションに対しての目標到達プロセスで見た離脱数を出せると思います。(プロセスの順番が想定できるものという条件になりますが)

まとめ

  • Google Analyticsで使う事の多い、アドバンスセグメントと目標到達プロセスがどういうものかの説明をしました。
  • その後、この二つは、同時に使う事ができない事を書きました。
  • 代替的手段として、アドバンスセグメントの条件を一つづつ増やす事で、疑似的(順番を仮定)に目標到達プロセス(プロセスでの離脱数)をだしました。
  • 順番さえ想定できれば、絞り込み条件を一つづつ増やす事で、3つ以上のプロセスにも適用が可能です。フォームなどの離脱プロセスを、アドバンスセグメントで見たいと思った場合に有効だと思います。

指標数値の補正とアドバンスセグメント

平均値が出発点になる

サマリ-画面で、いろんな数値を見る時に、多くの数値は平均値が出てきます。平均値に回数を掛ければ、全体の数字が出るわけですから、データをイメージする方法としては、とても合理的です。日常生活でも、平均にするといくら、というのは頻繁に出てきます。僕らは、どれくらいの確率で起きそう?と問われたら、過去の平均を即座に計算します。 webサイトなら、コンバージョン率。どれも、成功したものを試行回数で割った数字=平均値を議論のたたき台にしています。

それで、でてきた平均を元に、サイトには、毎日これくらいのユ-ザが来て、これくらいのペ-ジ数を見てくれると想像します。その後に、トラフィックをチェックしたり、特定ペ-ジの貢献度を分析したり、コンバージョンへの導線を見たりすると思います。

分布データが見れるモノもある

でも、平均は信用ならないので、実際のデータの散らばりぐあいが見たくなる時があります。Google Analyticsでは、個別のセッションがどういったモノかを見る場合は、リピート訪問数(*)にいくのがいいです。ここではリピートセッションに関する情報だけでなく、セッションの滞在時間分布、ページビュー分布が表示されます。あとは、前回セッションからの間隔日数、そのユーザの何回目かの訪問がでます。

*この名前の付け方はヘン(英語の方は:loyalty)だと思います。

分布データからは、中央値とか散らばりとかがわかる

分布データでは、自分の頭の中に、イメ-ジができます。これくらいのセッションが、こうなる、、と。平均値はこうだけど、実際にはこういう感じなのだな、、、とイメージを、ボンヤリながらも自分の記憶に保持する事が可能になります。

でも、言葉抜きのイメ-ジは人には伝えられない

議論したり、blogを書いたりするときには、言葉が大切です。ビジネス度が上がれば上がるほど、言葉・数字以外でなんとかする、、、とはいかなくなります。

平均値を少しはマシな数字にする

なので、なんとか、アウトプットする数字を、分布データ図からのイメージに近づけたいです。

方法としては、外れにある奴には退いてもらうわけです。アドバンスセグメントさんが、やってくれます

指標を使ったアドバンスセグメントの絞り込み

アドバンスセグメントの利用方法としては、ディメンジョン側での絞り込み(トラフィックタイプの限定、特定ページ群でのデータに絞る)事が多いのですが、指標側でも絞り込みが可能になっています。指標数字で、外れに居る奴には退いてもらいましょう。

1. イレギュラーなセッションに退いてもらう

Google Analyticsでは、データの整理が難しいページビューを、特殊なセッションとして処理しているようです。セッション中の外部ドメイン経由の流入を、

  • トラフィックとしては記録
  • コンテンツはなしとする

こういうセッションとして扱うようです。退いてもらうには、コンテンツに関する指標(ペ-ジ別セッション数、ページビュー、閲覧開始数)がゼロで見つけます。

WS000007 WS000008

ペ-ジビュ-、滞在時間などに変化が見られます。(こんなに違うのは、僕のサイトの計測がヘンだからです。普通はほとんど変わらないかもしれません)。

2.ペ-ジビュ-の多いものに退いてもらう

autopagenizeなどで閲覧してもらう時は、実態以上にペ-ジビュ-などが増えます間違いでした。でも、とりあえず、10ペ-ジ以上のものを外しましょう。

もちろん、10ペ-ジ以上のものを見るのもありです。

WS000010 WS000011

若干ですが、平均ペ-ジビュ-に変化がみられました。滞在時間があまり変わらないのは、10ページ以上のセッションが特殊という傍証かもしれません。

3.滞在時間の多いものに退いてもらう

僕のサイトはeventTrackを延々と出し続ける計測方法なので、ページが開いている限りは滞在時間がカウントされます。また、最終ページがカウント対象外になる事もないはずです。ただ、タブ型ブラウザで放置されているのも滞在時間にされているので、そういうのを除けておきます。

advanced_segment_wih_time_on_site WS000013

2割強のセッションが放置されるのは、多いような気がしますが、、、平均PVは、異常値なので、平均ペ-ジ別セッション数を出しますと、1.21(全体), 1.25(20分以下)で、放置セッションを含む全体の方がPVは少なめと、通常の数値とは逆転します。

まとめ

  • 平均値と分布図を見比べる必要性を書きました。
  • セッションに関する情報が、名前がヘンだけど、ユーザー > リピート訪問数 でみるとイイと書きました。
  • 言葉にならない分布図に代わって、平均値で議論するための前提として、外れた値を持つセッションを除外しました。
  • その方法として、アドバンスセグメントの指標で設定をしました。

今回の話は、アクショナブルでもないし、キーパフォ-マンスと直接関連するものでもないのですが、分析するときに、ワーキングメモリーに入る事が多い平均値には、留保を付けておく事の価値を書いたものだと思ってます。

だんだん、書くネタに行き詰まってる証拠かもしれません。(分析、解説記事まで昇華できなかった言い訳です)

ユニークユーザ数の話

Google Analyticsで、何人の人がサイトに来たかを知ろうと思うと、ユーザー > 概要のところで、ユニークユーザーの数字を見ます。指定した期間内での、ユーザー数が見られます。同じ人はダブルカウントしないという意味で、ユニークを使ってるんだと思います。

また、ユーザ > ユーザーの傾向 > ユニークユーザ数 でそのものの数字も見られます(ただし、アドバンスセグメントは無効)

absolute_unique_visitors_in_google_analyticsunique_visitors

2162人のユニークユーザ数。期間は、2009年9月から2010年2月13日ですね。

これで、ユニークユーザ数の話は終わりかもしれないですが、今回は新規ユーザとリピータの違いを見たり、セッション分析とユーザー分析の違いを意識しながら、具体的なサイトのユニークユーザ数をブレイクダウンする方法を解説したいと思います。

まずは、新規ユーザー数の話

新規ユーザーとリピーターという項目では、新規ユーザ(初めてcookieが付与された)として閲覧されたセッション数と、リピーターとして閲覧されたセッション数がでます。どんなユーザーでも、最初に新規ユーザとしてのセッションを一回のみ経験するので、新規ユーザーのセッション数を積み上げると、サイトのユーザ数になります。期間を全期間にして、確認しましょう。

new_visitors_visits_in_google_analytics

新規ユーザでのセッション数。全期間なので、冒頭の図のユニークユーザ数と一致するはず。

2162、2156と少し違いますけど、全期間では、新規ユーザのセッション数 = ユニークユーザ数 です。そうしましょう。

期間別にみたい場合は?

期間を区切って新規ユーザセッション数を見ることは、ユニークユーザ数(全期間でみた)の増加分を見る事になります。

ここでは、区切るというか、時系列でみてみましょう。アドバンスセグメントで、新規セッション数と全体を同時に見ます。見易いように週単位にします。(ユニークユーザ数の事は忘れてください、新規ユーザセッション数です)

advanced_segment_new_visits_in_google_analytics

黄色の部分の折れ線グラフ(新規ユーザとしてのセッション数)が、新規閲覧者獲得状況を示す事になります。

新規ユーザとリピーターの比率などの生かし方は、できる100ワザGoogle Analyticsなどに、目安の比率などがあります。

流入別に見たい場合は?

トラフィックの項目で獲得状況を見て、広告やSEO担当の人と、コンテンツ担当の人とで議論すれば、KPIの策定につながるかもしれません。

WS000007 WS000008

検索エンジンや、キャンペーンでの、新規ユーザ獲得数の状況。

ページ別に見る場合は?

ページ別での新規ユーザ獲得状況は、閲覧開始ページにいって、ユーザの種類をセカンダリーディメンジョンにして、アドバンスフィルターで、新規ユーザに絞ります。(上と同じようにアドバンスセグメントでもOKですが、趣向を変えました)

how_many_you_acquire_new_visitors

これで、ページ別の新規ユーザ獲得数が出ます。個別ページに絞っての時系列表示は、カスタムレポートまでやれば、いけますが、ここでは省略します。

グラフでなく、数字が欲しい場合は、ユーザー > ユーザーの傾向 > セッション数で、アドバンスセグメントで、新規ユーザにして、データをDownLoadしましょう。(日単位、週単位、月単位で出来ます)。冒頭で見たように、ユニークユーザー数はアドバンスセグメントで切る事ができません。

WS000006

一方、リピートユーザのセッション数は、そのままではリピートユーザ数にはなりませんね。

どうしましょうか? 実は、カスタムレポートに行くと、ユーザ数とユニークユーザ数という指標が用意されてます。

2009年の10月に導入されたもので、いままでセグメントした場合には見られなかった指標です。

http://www.marketmotive.com/training/tutorials/web-analytics/google-analytics-tracking-unique-visitors.html

(ここで、Avinashの簡単なuniqueVisitorsの紹介があるけど、本編は有料なので、見てません)

ユーザ数? ユニークユーザ数?

カスタムレポートの二つのユーザ指標のうち、ユーザ数は意味不明です。

strange_number_in_visitors_in_google_analytics

上図のように、ユーザ数は期間以外のディメンジョンに対応しない(リピートセッションだとゼロになってしまう)。かといって、期間での集計数字でユニークユーザ数との違いがわかりません。期間別のユーザ数?のみが出せるもの? 何か知っている方がいたら、教えて下さい。

一方、ユニークユーザ数は、上の同じ公式blogのコメントの中で、

Unique Visitor Metric: Now when you create a Custom Report, you can select Unique Visitors as a metric against any dimensions in Google Analytics. This allows marketers to see how many actual visitors (unique cookies) make up any user-defined segment.(どのディメンジョンでも、ユニークユーザ数が出せる)

と言ってます。

やっていきましょう。以後、ユニークユーザ数は、指定した期間での、指定したディメンジョンで集計したユーザ数という事で話しを進めます。

ページ別に見たユニークユーザ数

unique_visitors_in_custom_reporting

直近一ヶ月を期間にして、ページ別に見たユニークユーザ数、及びその他の指標です。ページの詳細にいきましょう。

WS000014

個別のページをクリックして、その後で、新規ユーザセッションと、リピータのセッションにわけましょう。

unique_visitors_with_custom_reporting

(二つの折れ線グラフにしたんですが、二つの線のスケール(両側の赤枠)が違うので、あまり意味ないですね、、、)

ここで気を付けたいのは、ユニークユーザ数は、新規セッションとリピータセッションでは、そのまま分かれないという事です。新規ユーザセッションを経験して、この集計期間内に再度訪問する場合は、リピータセッションになりますので、一人の人が新規セッションでのユニークユーザと、レピータセッションでのユニークユーザにカウントされます。

全体では36人、新規ユーザセッションでは31人、リピータセッションでは9人(図の赤枠)を、違う形の3つのグループに括り直します

  1. 27人が、新規ユーザで来て、二回目は無かった       (31) – ((31+9) – (36))
  2. 4人が、  新規ユーザで来て、二回目以上があった    ((31+9) – (36))
  3. 5人が、  以前に来てて(このページ以外でも)、今回、一回は来た人  (9) – ((36+9) – (36))

という分類にします。

こうすると、2の4人が、新規獲得読者(他のページでの新規かも知れない)で、短い間隔でもう一度来た人だとわかります。

閲覧開始ページをディメンジョンにした方が、ページを軸にした分析に向いてるかもしれないですね。そっちも見てみます。

WS000021

全体32人、新規27人、リピータセッション7人ですね、同じように違う形の3グループで括り直すと

  1. 25人が、新規ユーザで来て、二回目は無かった。(27) – ((27+7) – 32))
  2. 2人が、  新規ユーザで来て、二回目以上があった。 ((27+7) – 32))
  3. 5人が、以前に来てて(このページ以外でも)、今回一回以上はあった。(7) – ((27+7) – 32)

ページと閲覧開始を比べると、4人(1:(27-25),2:(4-2))の新規ユーザは違うページからこのページに来て、二人(4-2)は再来訪者になったことがわかります

ページ(ランディングか、通しのページかの両方)で集計した、新規ユーザ(期間内再来訪なし、あり)、前の期間から再来訪者で分けて、ユーザ像をイメージしました。

トラフィック別に見たユニークユーザ数

WS000022

同じ指標で、ディメンジョンを参照元に代えました。

キーワードにドリルダウンしていって、setcustomvarを選びました。

unique_visitors_with_a_keyword

今度は、全体のユニークユーザ数 = 新規ユーザセッションでのユーザ数 + レピータセッションでのユーザ数です。

“setcustomVar”で獲得した新規ユーザは、だれもリピータに転換していないという事ですね。書いた記事の内容が悪そうです。犯人を追及するために、セカンダリーディメンジョンで閲覧開始ページをみます。

WS000024

ずいぶん、昔に書いた奴です。最近書いたsetCustomVarの記事じゃないです。SEOに問題がありそうです。昔書いた奴でなく、最近の書いたsetCustomVarに関する記事なら、、、と思うのですが、、検索流入数も下がってます。リピータの獲得にも失敗し、最近の記事も上位表示されてないという事かもしれないです。検索ボリュームは、下がってないと考えます。SEO対策の記事は書けないので、これで閉めます。

まとめ

  1. ユニークユーザという期間で見たユーザ数の指標が有ることを確認しました。
  2. 新規ユーザセッションの数字は、ある期間での新規ユーザ獲得数になる事を見ました。また、全期間だと新規ユーザセッション数=(アブソルート)ユニークユーザ数(absolute unique visitors)という事も確認しました。
  3. ページ別、閲覧開始ページ別で、新規ユーザからのリピータ転換ユニークユーザ数をみました。
  4. また、キーワード別でも同様の転換ユーザ数をみました。

オマケ

  1. 新規ユーザのリピータ転換は、アドバンスセグメントで、recencyとセッション数を元にセグメントすれば、似たような数字がでると思います。ただ、ユニークユーザ数の全体の数字から、新規セッション、リピータセッションにセグメントして、ユニークユーザ数を出すと、全体的なイメージがつかみ易いと思います。

ABテストと統計数字(A smart bearのblogから)

カイ二乗値が4より上の組み合わせ(A,Bの回数)を緑色にしてる。
ちなみに、カイ二乗が自由度1で値が3の時、p値は0.92。4で0.97くらい?

僕を含めた大部分の人は統計が苦手。だって直感じゃだめだから。そこで、英語で書かれたblogで良い記事を見つけたので、紹介します。Adwordsを題材にしています。

http://blog.asmartbear.com/easy-statistics-for-adwords-ab-testing-and-hamsters.html(ハムスターの動画がかわいい)

* Google AnalyticsでABテストやりたい! という人は、Google Analyticsでのマルチカスタム変数を使ったA/Bテストの例があります。http://www.rowtheboat.com/archives/39 (AB Testing with Google Analytics)。参考として。

基本は、コインの裏表が出た回数が、どれくらい開けば、インチキと言っていいのかの話だと思います。ABに差があると。

数式は、http://blog.asmartbear.com/easy-statistics-for-adwords-ab-testing-and-hamsters.htmlの引用で、

Okay okay, we suck at math. So what’s the answer? Here’s the bit you’ve been waiting for:

The way you determine whether an A/B test shows a statistically significant difference is:

  1. Define N as “the number of trials.”
    For Hammy this is 8+4 = 12.
    For the AdWords example this is 32+19 = 51.
  2. Define D as “half the difference between the ‘winner’ and the ‘loser’.”
    For Hammy this is (8-4) ÷ 2 = 2.
    For AdWords this is (32-19) ÷ 2 = 6.5.
  3. The test result is statistically significant if D2 is bigger than N.
    For Hammy, D2 is 4, which is not bigger than 12, so it is not significant.
    For AdWords, D2 is 42.25, which is not bigger than 51, so it is not significant.

(For the mathematical justification, see the end of the post.)

AとBの回数を足したのがN。AとBの差を引いて半分にしたのがD。Dを二乗してD2。D2がNより大きくなれば、晴れてイカサマ(信頼度がある)と言っていい。adwordsなら、AとBで勝負が付いた!という話になる。

  • 条件はAとBのimpression回数が同じ(adwordsのデフォルトは、そうでなかったかも?)
  • Aのクリック回数がA,Bのクリック回数がBとして、
  • Nは、A+B。クリック総数。Dは(A-B)/2
  • 上の例だと、32と19という数字でも十分ではない。34対19までいけば十分イカサマ。

これで、終わり。34対19だと、差(D)が15/2=7.5なので、7*7=49, 8*8=64で、N=53を超えそうだなあ、、という感じです。

かけ算の九九で、ABテストの結果を判別する話でした。


ちなみに、この記事(http://www.fallinstar.org/2010/01/ab.html)での数字は、350/4963, 285/4953 ですね。

少し強引ですが、同じ回数の試行と考えるために、350, 286 とすると、

D=1024  > N=636 となり、

と晴れて有意に差があると言えます。仮に、350, 290でも、D:900 > N:640で、差(カイ二乗値が4超え)はあると言えます。

信頼度がどれくらいかみておきましょう。http://stattrek.com/Tables/ChiSquare.aspx

ここでみると、自由度1のカイ二乗値が6.15の場合は、98-99%の有意水準になります。逆に言うと、1ー2%くらいはこういう結果になり得るみたいなので、100回同じページでのABテストをやっても、1,2回くらいこういう結果がありそう、とも言えそうです。

とりあえず、テストを打ち切る場合には、信頼度はこれくらいだったとメモを残しておけば良いのだと思います。何かの御札になるかもしれません。


Q&A

でも、その記事が良いのは、その後のバックグランンドの説明と、コメントのやりとりが教育的な事。とても良い記事です。

詳しくは読んで頂くとして、 僕が理解したことは書いていきます。

インプレッション数は関係ないの?

(訂正: 同じインプレッション数という前提で) 関係ないです。クリックされなかったという事はA/Bの差に関する話には関連しません。今回は、AとBが同じ確率であるはずという前提で、Aがクリックされた数とBがクリックされた数を比較してるだけの話です。

カイ二乗値の出し方

我慢して数字を飲み込みましょう。

  • 出す数字は、(実際の結果の数字 – そうであるべき数字)を二乗して、回数で割ったものです。
  • 今回は、その数字をAとBについてやるので、AとBで出た数字を足し上げて、試行回数で割ります。
  • それぞれの試行期待回数が、N/2になるのは、A/Bテストだからですね。100回コインを投げたらN/2の50回になって欲しいですよね。

数式も引用させてもらいましょう、(nと小文字になってますが、見易いので、僕の文では大文字のNにしてます、総試行回数と結果回数がこっちゃになりますが、気になる人にはごめんなさいです)

分数の計算をして、

  • (A*A + B*B – AN – BN + N*N/2)/(N/2) で、
  • Dは、(A-B)の差を半分にしたものだったので、2D=(A-B)で、
  • N=A+Bなので、N*N=A*A+2AB+B*Bとして、
  • ガチャガチャして、
  • 4D*D/Nです。 カイ二乗の値が。

それで、自由度1(A/Bの二つを比べるので1)のカイ二乗値の表を引っ張りだす or Excelを使って(冒頭の図は、Google DocsにExcelからコピーしたもの)出します。このカイ二乗値(実際の値とあるべき値の差を取って、二乗して、割った値)は、大きくなればなるほど、あるべき値から離れていて、イカサマ具合が増す数字です。3.8までいくと、95%くらいは、、、、イカサマと言っていいです。A/Bが半々とは、とても信頼できないです。

以下、数字で感覚をつかみます。

カイ二乗値(自由度1)が6.6までいくと、99%あり得ない。

3.8とか6.6とかのカイ二乗値は、上でガチャガシャやって 4D*D/Nでした。Dは、1番最初にやった、とにかく、AとBの差を取って半分にしろ! と言って便宜的に決めた数字でしたね。D = (A-B)/2

4D*D/Nの計算値が、4くらいまで膨らめば(Dが大きくなる = 差が開く)、まあイカサマというか、あるべき数字からは外れてると考えると、4くらいまで来てる、4D*D/Nが、なので、4=4D*D/Nで、D*D = N ですね。

8くらいまで値が外れてる事になれば、4D*D/Nが8なので、   D*D = 2N ですね。(信頼区間の数字は限りなく100%でしょうが)

冒頭にやった 31対19でいくと、D=(31-19)/2=6, N=50で、 4でも 36と50,8だと 36と100で話にならないですね。

35対19でいくと、D=8,N=54で、 4(カイ二乗の値)だと、64と54で、イカサマラインをやっと超えました。

というわけで、あるべき数字からのズレを計算して、分布表から、これくらいズレてれば、OKという数字をみてみました。4という数字の信頼度はネットの分布表をみたら、96%でした。なので、差を取って、半分にして、二乗した値と、それぞれの回数を足したものを比較して、差を取った方が大きければ、会議で、こっちのがコンバージョンが取れるパターンといえますね。保険として、100回に4回くらいで、同じクオリティ(コンバージョンが取れる)でも、こういう結果は出ると言っておくべきかもしれません。

以下: ココらへんから怪しくなる(2013/04/08)

信頼度10%だと、カイ二乗値は2.7なので、概算で、回数の方を7掛けにして、比較しても良いかもしれません。31対19は、ちょうど2.7くらいになるので、9割方は、こっちで良い!と言える話になります。

ビジネスの算段は8割方OKでイケの話だと、カイ二乗値は1.6くらいなので、回数を4掛けでいいです。50回なら20ですね。30対20なら、((30-20)/2)^2は、25なので、8割方違うとなります。29対21になると、8割でもそうだと言えないです。

*あくまでも、二者択一で、お互いの結果の原因に関連が無い場合です。それでも29対21だと8割方と言えない、、、という話になります。普通は、お互いの結果の原因は出所が同じで、どの出所の量で結果が決まったりするので、その場合は別に考える事になります。この場合は、ユーザの偏りとかでしょうか?

冒頭のGoolge Docsのテーブル図は、ここらあたりをまとめたものです。

T分布の話

CTRの数字をT検定するのではだめなのか?という話ですが、adwords(AB)は二項分布だけど、確率小、回数大だからいけるとありますが、よくわからなくなったので、パス。だれか解説して下さい。

破産、ガケからの転落のメタファー

上で出した表ですが、有意ゾーンに入った瞬間にテストの打ち切りをすると、結果にバイアスがかかります。

メタファーとしては、崖から落ちる酔っぱらいの話がでてます。僕は、昔、相場の人だったので、破産確率の話と同じだと思いました。人の信頼みたいなのも、こういう感じでしょうか?数式は難しくて、分からないのでパスします。

a smart bearのblogでは、回数(コンバージョンの数)を予め決めておけ!という話になってますが、少なくとも、実際に判断に使う有意水準より、テスト期間中では、その水準を引き上げておくべきなのは確かでしょう。

サンプル数の話

5個以上はいる。統計的にそうらしいです。理由はわかりませんので、分かるように説明してくれる人がいたら嬉しいです。

テストは、現場の判断で切り上げる事は多いでしょうが、どれくらいの信頼度で、そのテストを切り上げたかをメモとして残せば、暗黙知から形式知への転換の可能性も残ると思います。

ページ別セッション、セッション、閲覧開始数

2010/03/04 閲覧開始のないセッションは、セッション中での新規の外部サイトの流入と、中で書いているけど、間違いな気がしてきました。イベントをむやみに発行させたせいかも、、、気を付けて下さい。

2010/02/24) ページ別セッション数は、ユーザ数という記述もありますが、ページ別にみた場合のセッション数です。全体やグループでのページ別セッション数は、個別ページでのページ別セッション数の単なる累計です。 下のエントリは、そのことを長々と説明したものです。それでも、Google Analyticsの数字が読めるようになるかどうかの分水嶺でもありますので、何のこと?という人はじっくりお読み下さい。

———————————————————————————————————————————

アクセス解析(Google Analytics)を始めた時に、最初に戸惑ったのは似たような用語の違いが分からなかった事でした。ページ別セッション? ページビュー? この数字どうやって出してるの?と思って、思考が止まってました。最近、やっと分かったので、それが伝われば良いです。まずは、

それぞれの単語の大まかな意味

  • セッションは、ユーザのサイト内行動の一回分のひとまとまり。セッションは数えた数ですね。
  • ページビュー()は、下図でいくと箱の数。サイト解析の立場から見れば、見られたページの総数。
  • ページ別セッション数は、丸で囲んだ数。同一セッション内での、同じページの閲覧を無視してるだけです。丸を数えてるだけです。結果、一つ一つのページで見たセッション数を累計した数字になります。

簡単ですね。でも、出てくる数字の分類(集め方)が違うと混乱するようになります。

  • 最初に、見てるデータの範囲が、サイト全体なのか? 個々のページなのか? と範囲の問題と
  • 個々のページに注目するときに、ディメンジョンの違いで区別する問題があります。
    • 閲覧開始ページなのか? 単なるページなのか? です。

ディメンジョンという言葉が頭になじまない人も多いと思いますが、我慢して下さい。ディメンジョンの説明がこの記事のテーマでもあります。理解できると、あたまの中で分類表ができます。

絵を使って具体的に数字をカウントしてみましょう。

2010年01月09日21時37分02秒0001

全体(セッション1ー5)の数字を見ます。

  • セッション1ーセッション5までなので、そのままで、セッション数(Visits)は 、5
  • ページ別セッション(Unique Views)は、10。全ての丸の数です。
  • ページビュー(Page Views)は、14。全ての箱の数です。
  • 閲覧開始数(Entrances)は、5(セッション数と同じ、ここでは意味はないけど、予告的に載せます)

個別のページについては、二つの切り口(ディメンジョン)があるのでしたね。単なるページと、開始ページです。ディメンジョンが違えば、指標は、違う数字になりますよね。

それで、ページがAというディメンジョンだと、全てのセッションの中から、

  • セッション数(Visits)は、4
  • ページ別セッション(Unique Views)は、丸で囲ったAの数。4
  • ページビュー(Page Views)は、箱がAの数。6
  • 閲覧開始数は(Enrances)、3

閲覧開始ページがAというディメンジョンでいくと、Aで始まるのはセッション1,3,5で、そのセッションのすべての箱を見るので、

  • セッション数(Visits)は、3
  • ページ別セッション(Unique Views)は、全て(セッション1,3,5)の丸の数。6(A:3 + B:1 + C:2)
  • ページビュー(Page Views)は、全て(セッション1,3,5)の箱の数。8 (A:5 + B:0 + C:3)
  • 閲覧開始数は(Enrances)は、(Aで始まった)全てのセッション数。3

セッション数が打ち消し線なのは、ページ別セッションに概念的に乗っ取られたからです。ページがAというディメンジョンなので、ページ別でカウントするセッションが適当です。閲覧開始ページがAというディメンジョンでは、セッションという概念は成立するのですが、閲覧開始数の方が適当です。(少し、言葉が弱いのは、理解があいまいなせいです)

もう一度、絵を貼り付けます。数をカウントして下さい。(中の言葉の、離脱・直帰はおまけです。話には関係ないです)

2010年01月09日21時37分02秒0001

B,Cも同じですが、書いて起きます。

Bの場合は、

ページでいくと、

全体の中で、Bを数える

  • セッション数(Visits)は、3
  • ページ別セッションは、3(Bの丸の数)
  • ページビューは、3 (Bの箱の数)
  • 閲覧開始数は、3
閲覧開始ページでいくと、

Bがスタート(ランディング)なのは、2、4

  • セッション数(Visits)は、3
  • ページ別セッションは、4(A:1 + B:2 + C:1)
  • ページビューは、5(A:1 + B:2 + C:2)
  • 閲覧開始数は、2

Cの場合は、同じように、

ページでいくと、

全体の中でCを数える

  • セッション数(Visits)は、3
  • ページ別セッションは、3 (Cの丸の数)
  • ページビューは、5(Cの箱の数)
  • 閲覧開始数は、3
閲覧開始ページでいくと、

Cがスタート(ランディング)なのは、ない。

  • セッション数(Visits)は、0
  • ページ別セッションは、0
  • ページビューは、0
  • 閲覧開始数は、0

現実には、Google Analyticsでは、イベント単体(trackPageviewなし)をページビューやセッションにカウントしてしまったり、セッション中の検索エンジン流入をページビューゼロのセッションとして組み入れるので、数字は、多少ずれます。

でも、数字がずれようがずれまいが、基本は上で説明した方法です。これが分かるとデータを見る時の景色が違ってきます。

実際の値を見る。

サイト全体での値

WS000019

ページ別セッションが787で、ページビュー数が1019。閲覧開始数は588(図にはないですが)です。セッションは無いですね、、、ユーザサマリーまで戻って、数字の載せておきます。セッションは611です。

WS000020

冒頭の赤い図で考えると、session1 – session611まで並ぶ感じですね。(ほとんど1個か二個しかないつながりですが、、)そのなかで、箱が1019個あって、丸で囲めるのが787個です。(閲覧開始数が少ないのは後で)

とりあえず、サイト全体の値をつかんだので、個別のページでの数字に移ります。二つの方法を説明しました。とにかく目的とするページの箱と丸を全体のセッション中で集めるタイプである、ページでのディメンジョン。目的のページが閲覧開始ページのものに絞り、そのセッション内のすべての種類のページの箱と丸を集めるタイプである閲覧開始ページでのディメンジョン。

ディメンジョンがページの場合

まずは上から順に、上位のコンテンツをクリックして、

WS000022

ページのURLが出てるが緑の枠で出てますね。箱(ページビュー)と丸(ページ別セッション数)を数え上げて、ページの名前で分類した数字です。attend_seminar_about_analytics_toolsというページで、データを見ると、ページ別セッションが64(丸の数)で、ページビューが74(箱の数)ですね。とにかく、attend_seminar_about_analytics_toolsというページが見られたのが64ページ別セッション(ページ別なので、ページ毎のセッション累計とも言える)あり、重複して見られたのが(74-64)の10ページ分です。下の図は、そのページをクリックして詳細を出した所。

WS000024

それじゃ、このページを目的に見に来た数(閲覧開始数)はというと、

ディメンジョンを閲覧開始ページに、、、

WS000027

*問題があるのですが、次の”個々のページに視点を移すと”まで持ち越します。

今度は全体のセッション数が出て588です。前に触れたように、最初に見た全体でのセッションの数字611と違いますね。閲覧開始のないセッションが23有る事になります。セッション中の外部リンク、検索エンジンからの流入です。(アドバンスセグメントで、閲覧開始数=0で絞って下さい。ページビュー=0でもいいです。今回示した差が出ると思います、その内訳はトラフィックを見ます)それ以外が原因かもしれないですうが、分かりません(2010/03/04 eventのせいのような気がしてきました。)

個々のページに視点を移すと

attend_seminar_about_analytics_toolsのページの閲覧開始数は、56です。先ほどの上位のコンテンツのデータと併せて、

  • 閲覧開始数は56,ページ別セッションは64、ページビューは74になります。

じつは、これには問題があって、両方とも、ディメンジョンがページなんです。閲覧開始数は閲覧開始ページでのディメンジョンじゃないです。ただ、閲覧開始ディメンジョンでも、閲覧開始数は同じになります。今回の56は、面倒な書き方だと、ページディメンジョンでattend_seminar_about_analytics_toolsのページ別セッションが64あって、そのうちの56が閲覧開始ページになったという順序になります。他の数字は変わってきます(それが、この記事の主題です)

下図は、セカンドディメンジョンで閲覧開始ページをだしたものです。セカンドではなく、メインのディメンジョンにすればいいのにと思いますが、設計側の人は、コンテントでのディメンジョンをページで統一したいのでしょう。僕には、そのおいしさは分かりません。

WS000028

閲覧開始ページの機能は、腐っている(機能不全)という事です。(僕は勘違してるのかなあ?)

では、閲覧開始ページを基点にする分析は、アドバンスセグメントで、個別の閲覧開始ページをセグメントするしかないのでしょうか?

(注意: 2010/03/01) 個別ページの詳細(コンテンツの詳細)の閲覧開始ページの最適化の参照元とキーワード、ナビゲーションの分析のページ遷移は、個別の閲覧開始ページをディメンジョンにしたレポートです。これを書いた時には、気づいてませんでした。流入元の分析はこれで十分ですね。

カスタムレポートで、データの組み立てを変える。

WS000029 WS000033

*カスタムレポートでの指標。全体を見る時は、ディメンジョンが、ページでも、閲覧開始ページでも、指標は同じになる。

*Google Analyticsには3つのデータ組成方法が用意されてます。レポート画面、カスタムレポート、Data Export APIです。レポート画面は、データの組み立て方(ディメンジョンと指標)が固定です。カスタムレポートはこの制限が外れます。組み立てが自由になります(データの整合が付く範囲で)。Export APIだと、もう少しだけデータ表示の粒度が小さくなります(SecondPagePathとか)。

カスタムレポートで、データの組み方を変え、データ集約し、イメージをつかみます。数字の確認をします。

1.全体の数字。

  • 前の通常のレポートでは、閲覧開始数588, ページ別セッション787,ページビュー1019でした。(セッション数は611)
  • このカスタムレポート(どちらでも)では、590, 789, 1021と2増加していますが、理由はわからないので無視します。いずれにせよ、データを集約したおかげで数字は一覧できてます。

2.ページで見る(attend_seminar_about_analytics_tools)。(attendとかaboutとか、英語が変かも、、)

今度は、ディメンジョンで、データが分かれてきます。

  • ページがディメンジョンの場合、
    • 通常レポートのページでこれは出せた数字でした。 ページ別セッション64,ページビュー74,閲覧開始数54
    • 今回のカスタムレポートでの数字は、ページ別セッション64,ページビュー76、閲覧開始数56。+2の問題が続いてますが無視。
  • 閲覧開始ページがディメンジョンの場合、
    • 通常レポートのページでは、出せない数字でした。
    • 今回のカスタムレポートでの数字は、ページ別セッション83,ページビュー95、閲覧開始数56。
    • この違いは、冒頭の赤字の絵のところでやりました。閲覧開始ページがディメンジョンの場合は、他のページのページ(箱や丸)もカウントするんでした。内訳を下でみます。

閲覧開始ページを基点に分析する。

WS000030

カスタムレポートは、サブディメンジョンを設定して、データをドリルダウンできます。

個別に見るために、前の図の青い線の所のリンクをクリックして、attend_seminar_about_analytics_toolsが閲覧開始ページとなったセッションに絞って、全てのページを対象にしたディメンジョンにしたのが上図です。

緑の部分を見ると、attend_seminar_about_analytics_toolsというページがランディングと成ったときに、他のページがどれだけ見られたかがわかります。先ほど、全ての箱と丸をカウントした数字が、83と95と言いましたが、内訳がここに出ました。他にも離脱数や、コンバージョン数の内訳もわかります。

これで、特定の閲覧開始ページ(ランディングページ)でのユーザの行動が大づかみにイメージできると思います。どれだけ来て、どのページで離脱して、コンバージョンはどれだけで、他に見たページはこれと、、

セカンドディメンジョン、ピボット、モーションチャートも使えて、参照元をクロスもできますし、カスタムレポートはタブも追加できます。付け足せる指標は、整理した上で、どんどん追加すればいいと思います。僕のは、ゴールとサイト内検索を二番目のタブで表示するようにしています。

下図は、ピボットでのメディアとのクロス表示、GORL+検索タブのテーブル表示の例

WS000031 image

最後に、このカスタムレポートのリンクです。閲覧開始ページ(ディメンジョン)ーページ(サブディメンジョン) http://www.google.com/analytics/reporting/edit_custom_report?share=D6gTFyYBAAA.5cmZVfTgv7FSDQaf3SApcFxLgrWtp6XX2b1j9gb1nX3izAa1wpJK_RQo77SGC-u9A-hXJr7Lb1iTimZhel0XfQ.mH8vnMlCM_O-0VGBJOIpcA

まとめ

  1. 言葉の意味を整理しました(定義や仕様は分からないので、僕自身で整理しました)
  2. まずは、セッションという概念をだしました。
  3. その次に、ページ別セッション、ページビューの数え方を書きました。
  4. その次に、ディメンジョンという概念で、データの数え方が違って来ることを書きました。
  5. 実際に、カスタムレポートを使って、数字を追う事で、ディメンジョンの概念が頭に浸透するようにしました。
  6. 結果、閲覧開始ページを基点にしたページ分析ができました。

感想をもらえると嬉しいです。

Asynchronous Trackingが導入された

2009/12/06 書き直した。2010/06/05 非同期読み込みの話について訂正した。

昨日発表されたGoogle Analyticsのtracking codeの読み込みを非同期にして、読み込み終了時に、指定した関数を実行させる方式。についてです。

経緯と背景(たぶん)

Google Analyticsはjavascriptを読み込んで、cookieをいじって、googleのサーバーにリクエストを飛ばす仕組みです。

このjavascript(GATC)は、今まで、</body>の直前の置く事が推奨されていました。理由は、javascritpはブラウザのレンダリング(もしくはparsing??同じタイミングで両者とも実行??)を停めるからです。停めるものは、最後におきましょうという事でした。javascriptは読み込み時間を遅くする要因になります。たくさんのjavascriptを実行する時に問題になる部分です。

ところで、HTML5では、scritpタグの属性としてasyncというものが出来ました。これはブラウザの読み込みを停めずに読み込みを行う方法が策定されています。また、ほとんどのブラウザで実装されてきました。そこで、この新しい機能のasyncを利用した形が今回のasynchronous trackingだと思います。

違った。 ここが詳しい。Google Analytics 非同期トラッキングコード再考

ブラウザの実行をblockしないテクニックの一つとして、Script要素をDOMで作って挿入する方法で読み込みを非同期にしていると。勉強になりました。

具体的には、上のリンク先かここにコードの例がいくつも載っているので、コピペするのが良いと思います。

実現方法は?

あらかじめ、htmlファイルの<head>内でメソッド名と引数をwindowプロパティの_gaqに入れておく。読み込んだコード(ga.js)が非同期で読み込みが終了すると、実行に移る。その時に、そのga.js内のオブジェクトのコンテキストで、_gaqに設定したメソッド、引数を実行する。メソッド名.apply(オブジェクト, [引数]) という形。

実際のコード(ga.js)部分を抜き出すと、(* これは、2009/12ごろのcode version4.5.9。2010/06/05では version4.7.2)

var $ = {
    ca: {},
    _createAsyncTracker: function (f, i) {
      i = i || "";
      f = new Z.aa(f);
      return $.ca[i] = f
    },
    _getAsyncTracker: function (f) {
      f = f || "";
      var i = $.ca[f];
      if (!i) {
        i = new Z.aa;
        $.ca[f] = i
      }
      return i
    },
    push: function () {
      for (var f = arguments, i = 0, b = 0; b < f[z]; b++) try {
        if (typeof f[b] === "function") f[b]();
        else {
          var j = "",
            c = f[b][0],
            p = c.lastIndexOf(".");
          if (p > 0) {
            j = P(c, 0, p);
            c = P(c, p + 1)
          }
          var m = $._getAsyncTracker(j);
          m.apply(m, f[b].slice(1))
        }
      } catch(q) {
        i++
      }
      return i
    }
  };
  window["_gat"] = Z;
  var la = window["_gaq"];

  function na() {
    var f = window["_gaq"],
      i = w;
    if (f && typeof f.push == "function") {
      i = f.constructor == Array;
      if (!i) return
    }
    window["_gaq"] = $;
    i && $.push.apply($, f)
  }
  na();

*番号は僕が勝手に付けたものです。

番号40より後ろのna()部分を見る。<head>の部分で設定した window[“_gaq”]の部分をfに退避させて、上で設定した$のメソッドpushを実行する。番号17からのpushでは関数オブジェクトならそのまま実行する。そうでないものは、pageTrackerオブジェクトのメソッド、引数として実行するようになっている。普通の関数も実行してくれるので、自分専用のgoogle analytics関数の定義が終了していたら、ここで実行してもOK.

ga.jsが非同期でloadされ実行されると、naが実行され、今、説明したような動きで、_gaqに設定したメソッド、引数を実行するという事です。_gaqの設定は、ドキュメントにあるように、

var _gaq = _gaq || [];

_gaq.push([])

の部分です。

なんらかの?状態で、先にコードが読まれた場合にも、pushはArrayのコンテキストではなく、$のコンテキストで実行されるようになっています。なので、順番が狂っても動くと思う。

思うこと

これで、ビーコン型の持つ弱点の一つが減ったと思います。サイトに手を入れていくと、javascriptが氾濫するようになるけど、こういう形は読み込みを邪魔しない。是非とも、他のアクセス解析ツールでも採用して欲しい。

おまけ。

このasynchronousは、コード自体は、versionが4.5.8の時に導入されていた(今は4.5.9)。

昨日、4.6.5というのも見かけたけど、いなくなった。10月以来の変更に伴うばたばた感?が続いてる感じもする。

登録メールアドレスに、google analyticsチームからメールが配信されて、10月以来導入された新機能の紹介が入っていた。移行に伴うタスクをいろいろとこなしてる最中なのかな?

他の機能では、CustomVariableが、アドバンスセグメントの所でしか登場しないけど、ユーザ定義が廃止されるので、代わりに通常のレポート画面に現れてくる事を期待。

外部リンクの計測も、近い内に実現するような気がしてきた。コード内での大まかな実装は済んでいる。

GAとsetAutoTrackOutbound

autoTrackOutBound

2010/01/08 この絵には間違いがある。setAutoTrackOutboundでは、javascriptによる遷移を行う関数が二個ある。ビーコンを飛ばした後に遷移処理がある。この絵では、それが書かれてない。(このトピックの最後で僕が書いたもので気づきました

google analytics には、公式documentがないけど、setAutoTrackOutboundというapiがある。

目的は、外部へのリンクを計測するためのもの。(documentが無いということは、使うなとう意味だと思う)

英語の方のhelp forumでは議論されているみたい。 で、なんでも、外部リンクの計測は二年前から言われてた事だと。

問題になっているのは、ga.jsの読み込みタイミングとか、hrefのrequestとpageTracker._trackPageviewのタイミングとかで、計測漏れなどの問題があるのかもしれないし、いろんな事情があるのかもしれない。

参考記事: Tracking Outbound Links — The Right Way

こちらは議論には関係ないけど、計測するのに参考になる記事: Google Analyticsで離脱リンクを自動計測する方法 (_trackEventを使ったもの。trackEventの方が利用状況を使って外部への離脱までの時間が計測できるので、有用かなと思います。)

利用方法(非推奨です)

2009/11/19 送ったデータは、レポートには反映されてなかった。tracking code側は動いても、レポートには反映されないよう。

ドキュメントに無いものなので、試す価値もないけど、調べたので、一応動かしてみた。

pageTracker._setAutoTrackOutbound([]);([]は、計測しないdomainを入れておく、今回はそのまま計測するので[])

した後に、

pageTracker._trackPageview();

とする。

これで、画面遷移前にビーコンが飛ぶ。

下図は、FireBugで見たビーコンのパラメータ(utmhn(ホスト名)と、utmeの中のurlのドメインが違う)

WS000002

具体的な処理は、冒頭の絵に留めて起きます。

使える設定としては、

  • 計測しないドメインの設定 (とりあえず、ビーコンが飛(ぶ/ばない)のは確かめた。)
  • onclickの処理の最後に、独自の関数を設定 (firefoxで確かめた)
  • linksを集める時の上限を設定???(ちょっと、ロジックが不明、utmbの値に関連するみたいだけど、毎回10にresetされる気がする、たぶん、1000回。試してないけど)

ぐらいができます。

*ちなみ、6はoutboundに割り当てられたkey(utmeに出てくる)だと思う。customVarやtrackEventにも使われれて、

  • 5 – trackEvent
  • 6 – outbound
  • 8 – name(customVar)
  • 9 –  value(customVar)
  • 11 – scope-level(customVar)

現状はそうなってます。

ドキュメントされてない機能は、情報もサポートもないので、おとなしくEventListenerに追加してく方が賢明なのは、言うまでもないです。