応用KPI分析: パス分析とは
前回までは、

しかし、

応用KPI分析をするためには、
そして、
- パス平均長
- コンバージョンまでにいくつのページを遷移したのかを算出します。これにより、
コンバージョンの効率に関して理解することができます。 - コンバージョン時間
- Webサイトにきてからコンバージョンに至るまでの時間を算出します。これも同様にコンバージョンの効率に関して理解することができます。
- パス類型
- 長さや組み合わせが膨大なパスに対して、
特定のルールに従ってパスを分類し、 その分類の中でどのパス類型がコンバージョンに寄与しているかを知ることができます。 - スコアリング
- パスの概念をもって改めてページを評価するには、
パスの中でどの位置に出現するかによって重みを変えることによってパスの中でも重要度を発見できます。
パス分析をするためのテーブル情報
パス分析をするにあたり、
- アクセスログ
- コンバージョンマスタ
アクセスログは基本KPI分析で使ったテーブルです。コンバージョンマスタは、
下記のテーブルの例は、
cv_ | cv_ | description |
---|---|---|
3 | /treasuredata. | プレスリリース参照 |
3 | /treasuredata. | プレスリリース参照 |
3 | /treasuredata. | サクセスストーリ閲覧 |
3 | /treasuredata. | サクセスストーリ閲覧 |
3 | /treasuredata. | ケーススタディ閲覧 |
3 | /treasuredata. | ケーススタディ閲覧 |
4 | /treasuredata. | ホワイトペーパーDL |
4 | /treasuredata. | ホワイトペーパーDL |
4 | /treasuredata. | webinar参加 |
5 | /treasuredata. | サインアップ |
5 | /treasuredata. | サインアップ |
5 | /treasuredata. | トライアル登録 |
5 | /treasuredata. | トライアル登録 |
CREATE TABLE IF NOT EXISTS `testdb`.`master` (
`cv_level` INT,
`cv_path` VARCHAR(255) NOT NULL ,
`description` TEXT);
## descrptionは省いています
INSERT INTO `testdb`.`master` (cv_level, cv_path, description)
VALUES
(3,'/treasuredata.com/en/press-releases',null),
(3,'/treasuredata.com/jp/press-releases',null),
(3,'/treasuredata.com/en/success-stories',null),
(3,'/treasuredata.com/jp/success-stories',null),
(3,'/treasuredata.com/en/case-studies',null),
(3,'/treasuredata.com/jp/case-studies',null),
(4,'/treasuredata.com/en/whitepapers ',null),
(4,'/treasuredata.com/jp/whitepapers ',null),
(4,'/treasuredata.com/jp/webinars',null),
(5,'/treasuredata.com/en/signup',null),
(5,'/treasuredata.com/jp/signup',null),
(5,'/treasuredata.com/en/tryal',null),
(5,'/treasuredata.com/jp/tryal',null);
これらのテーブルを見てわかる通り、
- ユーザIDやCookieなどの個人を分別できるローデータをもっていること
- ローデータの中でコンバージョンとなるIDやURLを時系列情報とともにもっていること
つまりここでのコンバージョンマスタは、
さて、
コンバージョンパステーブルを作る
さきほどの2つのテーブルから、
- cookieでグルーピングして、
時系列にソート - コンバージョンページで区切ってコンバージョン1回目、
2回目、 …と設定
上記のコンバージョンパステーブルは、

全要素を結合したテーブルを作った方が便利ですが、
それではそのためにいくつかの中間テーブルを作っていきます。
コンバージョンの履歴テーブルの作成
まずは、
CREATE TABLE conversion
SELECT MAX(path) AS path, MAX(cv_level) AS cv_level, cookie, time
FROM
(
SELECT path, cv_level, cv_path, cookie, log.time
FROM
(
SELECT path, cookie, time, 1 AS one
FROM accesslog
WHERE cookie != '-'
) log
JOIN (
SELECT cv_path, cv_level, 1 AS one
FROM master
) master_t
ON ( log.one=master_t.one )
) log_master
WHERE path = cv_path
GROUP BY cookie, time
次に、
CREATE TABLE conversion_history
SELECT
path,
cv_level,
cookie,
(SELECT COUNT(*) FROM conversion conv WHERE conv.cookie = conversion.cookie AND conv.time <= conversion.time) AS cv_id,
time
FROM conversion
ORDER BY cookie, time
コンバージョンテーブルの作成
次に、
CREATE TABLE conv_temp
SELECT
cookie, cv_id, cv_flag, cv_level, path, time, cv_time, cv_path
FROM
(
SELECT
cookie, path, cv_level, time,
MIN(cv_id) AS cv_id,
MIN(cv_time) AS cv_time,
IF((MIN(UNIX_TIMESTAMP(cv_time))-UNIX_TIMESTAMP(time))=0,1,0) AS cv_flag,
IF((MIN(UNIX_TIMESTAMP(cv_time))-UNIX_TIMESTAMP(time))=0,path,'') AS cv_path
FROM
(
SELECT raw_data.cookie, raw_data.path, cv_id, cv_level, raw_data.time, cv_history.time AS cv_time
FROM (
SELECT
cookie, path, time
FROM accesslog
WHERE cast(time as date)= '2015-01-01'
GROUP BY 1,2,3
) raw_data JOIN (
SELECT cookie, cv_id, path, cv_level, time
FROM conversion_history
WHERE cast(time as date)= '2015-01-01'
GROUP BY 1,2,3,4,5
) cv_history ON raw_data.cookie=cv_history.cookie
WHERE raw_data.time <= cv_history.time
) t1
GROUP BY cookie, path, cv_level, time
ORDER BY cookie, time
) t2
ORDER BY cookie, cv_id, time
各コンバージョンと各ユーザを1つのパスとして、
CREATE TABLE conversion_path
SELECT cookie, cv_id, cv_flag, cv_level, path, time, cv_time,
( SELECT COUNT(*) FROM conv_temp conv
WHERE conv.cookie = conv_temp.cookie
AND conv.cv_time = conv_temp.cv_time
AND conv.time <= conv_temp.time
) AS node_id
FROM conv_temp
ORDER BY cookie, cv_id, node_id
cookie | 44dc29b9-6b43- | 44dc29b9-6b43 | 44dc29b9-6b43 |
---|---|---|---|
cv_ | 1 | 1 | 1 |
cv_ | 1 | 0 | 0 |
cv_ | 5 | 5 | 5 |
path | /treasuredata. | /treasuredata. | /treasuredata. |
time | 2015-01-01 | 2015-01-01 | 2015-01-01 |
cv_ | 2015-01-01 | 2015-01-01 | 2015-01-01 |
node_ | 2826 | 2825 | 2824 |
非コンバージョンテーブルの作成
先ほどコンバージョンパスからは失われてしまった重要な情報があります。それは、
まずは、
CREATE TABLE non_conv_temp
SELECT cookie, path, time
FROM
(
SELECT
raw_data.cookie, raw_data.path, raw_data.time AS time
FROM
(
SELECT cookie, path, time
FROM accesslog
WHERE cast(time as date) = '2015-01-01'
) raw_data
LEFT OUTER JOIN
(
SELECT cookie, cv_id, cv_level, time
FROM conversion_history
WHERE cast(time as date) = '2015-01-01' AND path = '/treasuredata.com/jp/sighup'
GROUP BY 1,2,3,4
) cv_history
ON
( raw_data.cookie=cv_history.cookie )
WHERE cv_history.cookie IS NULL
ORDER BY cookie, time
) t
WHERE cookie IS NOT NULL
ORDER BY cookie, time
パスの一覧から時系列に順番付けをしていくことで完成です。
CREATE TABLE non_conversion_path
SELECT cookie, path, time,
( SELECT COUNT(*) FROM non_conv_temp conv
WHERE conv.cookie = non_conv_temp.cookie
AND conv.time <= non_conv_temp.time
) AS node_id
FROM non_conv_temp
ORDER BY cookie, time, node_id
cookie | 0273fb37-6ce0- | 0273fb37-6ce0- | 0273fb37-6ce0- |
---|---|---|---|
path | /treasuredata. | /treasuredata. | /treasuredata. |
time | 2015-01-01 19:51:02 | 2015-01-01 19:51:08 | 2015-01-01 19:51:14 |
node_ | 1 | 2 | 3 |
次回は、