Core Reporting APIのdateOfSessionの怪

この投稿は Google Analytics Advent Calendar 2015 の 10日目の記事です。分析視点ですみません。

前回セグメント書きまくろうぜーヒャッハーという記事をアップしたものの、やはりヘルプ紛らわしいでしょという部分があるし、検証って必要だよねということで最近1番納得のいっていない「 dateOfSession 」について書きます。
※なお本記事で検証に利用しているアカウントは大規模サイトすぎてセグメントをかけるとサンプリングデータとなるため各自要検証です。

まずはGoogle先生のヘルプを見てみましょう。
セグメントでは、dateOfSession 構文を使用する分析手法がサポートされます。BETWEEN <> 演算子と組み合わせることにより、特定の期間内にセッションを開始したユーザーのグループにセグメントを制限できます。dateOfSession の最長期間は 31 日です。
これだけ読むとdateOfSessionはウェブ側の「最初のセッションの日付」と同じ条件のように見えます。ちなみに英語版でも全く同じ事が書かれています。



ウェブ側の「最初のセッションの日付」は「初回訪問日」と書かれている通り、初回訪問者が絞りこまれます。

同じ感覚でAPIを使ってみます。

まずは基準データとして以下データセットを取得します

start date : yesterday
end date : yesterday
metrics : ga:users,ga:newUsers

昨日一日のユーザー数と新規ユーザー数です。
では早速比較データを作成していきましょう。start dateとend dateは特に言及がない場合yesterdayを利用します。

単純にdateOfSessionをsegmentに当てて見ます。

segment : users::condition::dateOfSession<>2015-12-05_2015-12-05
※ yesterday = 2015-12-05 とする

そこで返ってきた値はyesterdayの users と一緒となるようです。
即ちdateOfSessions単体では初回訪問を意味しませんので、初回訪問を取得する場合にはsessionCountの指定が必ず必要となります。

では、次にこんなセグメントをかけてみましょう。

segment : users::condition::ga:sessionCount==1;dateOfSession<>2015-12-05_2015-12-05
※ yesterday = 2015-12-05 とする

この値はyesterdayのnewUsersと一緒の値となります。
同様に以下のsegmentをかけて検証してみます。

segment : users::condition::ga:sessionCount>1;dateOfSession<>2015-12-05_2015-12-05

この値はusers - newUsers(即ち既存ユーザ)の値が出力されるようです。
さて、ではこんな風にデータを取得してみると何が取得出来るのでしょうか?

start date : 2daysAgo
end date : yesterday
segment : users::condition::ga:sessionCount==1;dateOfSession<>2015-12-05_2015-12-05
※ yesterday = 2015-12-05 とする

このデータはyesterdayのnewUsersとイコールになるようです。逆に

start date : 2daysAgo
end date : yesterday
segment : users::condition::ga:sessionCount==1;dateOfSession<>2015-12-04_2015-12-04
※ 2daysAgo = 2015-12-04 とする

このデータは2daysAgoのnewUsersとイコールになるようです。
ということで、いったんの結論としては「 dateOfSession 」自体はその名前の通りセッションを絞り込む役割しか果たしません。
「初回訪問者」を特定するためには ga:sessionCount==1 と一緒に組み合わせて利用する必要があります。

もう少しデータ検証をしてみましょう。こんなデータの取得の仕方だとどうでしょうか?

start date : 2daysAgo
end date : yesterday
segment : users::condition::dateOfSession<>2015-12-05_2015-12-05
※ yesterday = 2015-12-05 とする

どうやらyesterdayのusersと同じ数値になるようです。
この理解が正しいと仮定すると、前回の設問には出しませんでしたがこういうものも可能になります。

設問

2015/4/1~2015年4/7にウェブページ www.foo.com/campaign/ にアクセスし、且つ2015/4/8~2015/4/14に再度同一ページへアクセスした人を絞り込むセグメントを書いてください。

解答例
users::sequence::ga:pagePath==www.foo.com/campaign/;dateOfSession<>2015-04-01_2015-04-07;->>ga:pagePath==www.foo.com/campaign/;dateOfSession<>2015-04-08_2015-04-14

実際にそれっぽいデータが返ってきたりしますが、その辺の利用はお任せしますw 厳密な値を取得したいわけではなかったりするので私自身はこれはこれで一つの指標として利用したりしていますが。

APIは基本的には「ga:」のprefixを意識しているので「 dateOfSession 」は後ろから形容詞的な役割で私個人理解していますが、ネット上でsegmentを組んでいる人を見ている感じ、 users::sequence::dateOfSession~ という書き方もアリっぽいですね。気持ち悪いので使いませんがw

さて、前回の設問7「2015/4/1~2015年4/7に初めてアクセスし、サイト滞在時間が600秒を超えるユーザを抽出」という問題に対して、回答が

users::sequence::^ga:sessionCount==1;dateOfSession<>2015-04-01_2015-04-07;->>ga:sessionDurationBucket>600

となる理由は何となく見えてきましたか?何度も考えつつ結局何となくしか理解できていませんが、とはいえ毎度こういう書き方を見ると「シーケンス」ってなんだっけ?とか凄く疑問を持ちます…
ではでは、こんなデータの取得は可能なのでしょうか?

start date : yesterday
end date : yesterday
segment : users::condition::ga:sessionCount==1;dateOfSession<>2015-12-04_2015-12-04
※2015-12-04は2daysAgo

ちなみにこれは可能で、start dateとend dateはあくまでデータの取得日なだけでsegmentのセッション期間は影響を受けないようです。
色々segmentを書いているうちに間違って指定したところからこれは見つけましたが、これも結構活用方法ありますよね。

実は前回と今回で1番感じてもらいたかった内容は…
GAというDBにデータが入っていれば何でも取得できる!
というメッセージだったりします(笑
もちろん色んなセグメントを書いてスポットで取得していると限界を感じることもありますが。

このブログの人気の投稿

ウェブサイトユーザビリティ評価のためのSUS(System Usability Scale)

離脱改善指標に関するメモ

[Google Spreadsheet]ある文字列を含むリストを表示させる