Treasure Dataでユーザー属性ごとに一覧ページのクリック率を解析する方法


Webページを運営していたら、トップページなど何らかのコンテンツの一覧ページはあるはずです。今回は、クリック率はどう変化するかなどをGoogle Analyticsじゃなく、自前で実装してより細かい分析を出来るようにするという話。

実装する際の課題としては以下の2つ。

  1. 結果結果など何らかの一覧ページにおいて、表示した結果がクリックされたか、そのクリックはその次のアクションにつながったか、滞在時間はどのくらいかがなど知りたい

=> アクションが起こるタイミングが同時ではないので、複数のログをまとめた、各ユーザーセッションごとの結果を作成する方法が知りたい

  1. ユーザーの属性(ログというよりはDB上のデータ)によって結果の傾向が変わるかを知りたい

=> ログをDBの情報と紐付けて解析したい

1. クリック情報を含むインプレッションログを作成する方法

これは、トレジャーデータのドキュメントに、

アドネットワークで、インプレッションログとクリックログからクリック率などを算出する例
http://docs.treasuredata.com/articles/analyzing-adnetwork-logs

が存在していたのでこれを見れば一発。

取得するログとしては、概ね以下のもの。

  • 広告を出したページのURL
  • ユーザーID(ログインしている場合)
  • ユーザーのセッションハッシュ
  • ユーザーのデバイスなどの環境情報
  • 広告主のID
  • 出した広告のID
  • 広告単価

これらをImpression時とClick時にとっておくと必要なものは解析できそう。

ユーザーのセッションハッシュがなく、IPアドレスやユーザーIDなど、恒久的に同じ場合、
http://docs.treasuredata.com/articles/udfs#tdsessionize
を使うと、擬似的にセッションを作る事が出来る。

また、クリック順などが重要な場合、
http://docs.treasuredata.com/articles/udfs#tdxrank
を使うと何番目のクリックだったかなどを取ることが出来る。

2. ユーザーや属性ごとの分析をする方法

ログにユーザーのIDが入っているので、これとユーザ属性をJOINできれば良い。
TD側で分析するためには、DBにあるユーザー属性に関するデータをTDに送る必要があるが、その方法。

方法1:解析時に、ユーザーDBの内容をTDに全部入れる

まぁやるだけ。
必要なユーザーデータだけ入れるなどすれば、10万行ぐらいで、1時間もかからずに全部突っ込むことが出来た。

方法2:DBの情報更新時に、TDに入れ最後の情報のみ用いる

ユーザーの情報もログのように更新があるたびにTDに流す方法。解析前にバッチ処理を走らせる必要が無いのがこちらのメリット。

解析時には、TDは現状では、更新処理が出来ないので、
http://docs.treasuredata.com/articles/udfs#tdlast
を用いて最新のものだけを取得して使用すれば良い。

この関数がないとGROUP BYを使っためんどくさいクエリを書かないといけないので、これ知っているとだいぶ楽になる。