第4回と第5回で、
アドホック分析環境を使って試行錯誤できるようにしておくことが、
ログデータによる基本KPI分析
基本KPIについてもう一度見てみましょう。Webアナリティクスでユーザの動向を考えたときに最低限見ておくべき基本KPIの一例となります。こうした基本KPIを毎日収集し、
またこれらのKPIは、
- ページビュー
(PV: Page View) - ユニークユーザ数
(UU: Unique User) - 平均アクセス回数
- 新規ユーザ数
- 直近と最終訪問日までの期間
- 最終訪問日の分布
- 直帰率
- 高頻度訪問ユーザの一覧
(週n日以上) - 連続訪問ユーザ一覧
(直近n日連続)
アクセスログの確認
第2回で、
log_ | 1 | 2 |
---|---|---|
domain | 52. | 52. |
host | 153. | 153. |
server | 172. | 172. |
ident | - | - |
user | - | - |
time | 2015-07-26 08:58:20 | 2015-07-26 08:58:21 |
method | GET | GET |
path | /index. | /index. |
protocol | HTTP/ | HTTP/ |
status | 200 | 200 |
size | 3256 | 3256 |
referer | - | - |
agent | Mozilla/ |
Mozilla/ |
response_ | 795 | 670 |
cookie | - | Apache=2a4375d6. |
set_ | Apache=2a4375d6. |
- |
ここでの特徴としては、
# 'set_cookie:Apache=296d21.51dc2fc692fb4; path=/; expires=Sat, 19-Aug-17 19:16:19 GMT' as set_cookie # -> Apache=296d21.51dc2fc692fb4 SELECT substr(set_cookie,LOCATE( ':', set_cookie )+1, (LOCATE( ';', set_cookie) - LOCATE( ':', set_cookie )) - 1), FROM accesslog
基本KPI分析のためのクエリ
Jupyter上での可視化の流れとしては下記の手順で実行しています。
- クエリを発行する。
%%sql Query
- 結果を変数に入れる。
result = _
- 結果を可視化する。
result.
DataFrame().plot(x='day',figsize=(12, 10))
ページビュー(PV: Page View)
ページビューは、
SELECT
DATE_FORMAT(time, '%Y-%m-%d') as day,
COUNT(1) as pv
FROM accesslog
GROUP BY 1

ユニークユーザ数(UU: Unique User)
ユニークユーザ数は、
SELECT
DATE_FORMAT(time, '%Y-%m-%d') as day,
COUNT(DISTINCT cookie) as uu
FROM accesslog
GROUP BY 1

平均アクセス回数
PV / UU で計算される、
SELECT
DATE_FORMAT(time, '%Y-%m-%d') AS d,
COUNT(1) DIV COUNT(DISTINCT(cookie)) AS play_times
FROM accesslog
GROUP BY
DATE_FORMAT(time, '%Y-%m-%d')

新規ユーザ数
新規ユーザ数は、
SELECT
DATE_FORMAT(first_access_time, '%Y-%m-%d') AS day,
COUNT(1) AS new_user
FROM
(
SELECT set_cookie, MIN(time) AS first_access_time
FROM accesslog
WHERE set_cookie IS NOT NULL
GROUP BY set_cookie
) t1
GROUP BY
1

直近と最終訪問日までの期間
ユーザ当たりの最初のログインと最後のログインの差をとることで、
SELECT
play_term,
COUNT(1) AS uu
FROM
( SELECT cookie,
CAST( (MAX(time) - MIN(time)) / 86400 AS unsigned ) AS play_term
FROM accesslog
GROUP BY cookie
)t1
GROUP BY play_term

最終訪問日の分布
こちらは各ユーザの最終訪問日ごとに集計し、
SELECT
day,
COUNT(1) AS cnt
FROM
(
SELECT
cookie,
DATE_FORMAT(MAX(time), '%Y-%m-%d') AS day
FROM accesslog
GROUP BY cookie
) t
GROUP BY day

直帰率
直帰率とは外部ページから流入したものの、ylim=(0,100)
によってY軸の範囲を0~100に設定します。
r = result.DataFrame().plot(x='day',figsize=(12, 10), ylim=(0,100))
SELECT t2.d AS day,
CAST( COUNT(1)/ SUM(t2.cnt)*100 AS unsigned) AS bounce_rate
FROM
(
SELECT
DATE_FORMAT(time, '%Y-%m-%d') AS d,
cookie,
COUNT(1) AS cnt
FROM accesslog
GROUP BY
DATE_FORMAT(time, '%Y-%m-%d'),
cookie
) t1
RIGHT OUTER JOIN
(
SELECT
DATE_FORMAT(time, '%Y-%m-%d') AS d,
COUNT(DISTINCT cookie) AS cnt
FROM accesslog
GROUP BY
DATE_FORMAT(time, '%Y-%m-%d')
) t2
ON t1.d=t2.d
WHERE t1.cnt < 2 AND 0 < t2.cnt
GROUP BY t2.d

高頻度訪問ユーザ覧(週n日以上)
下記クエリでは、
SELECT cookie, login_count
FROM
(
SELECT cookie, COUNT(1) AS login_count
FROM
(
SELECT cookie, DATE_FORMAT(time, '%Y-%m-%d') AS login_day
FROM accesslog
WHERE time BETWEEN DATE('2015-02-01') - interval 7 day and DATE('2015-02-01')
GROUP BY cookie, DATE_FORMAT(time, '%Y-%m-%d')
) login_table
GROUP BY cookie
) t
WHERE login_count >= 3
cookie | login_ |
---|---|
00d30a89-be8c-4252-b702-da3b3a13c2ae | 4 |
04a80a53-d340-4416-bf49-9f46720b9249 | 4 |
連続訪問ユーザ一覧(直近n日連続)
下記クエリでは、
SELECT cookie, login_count
FROM
(
SELECT cookie, COUNT(1) AS login_count
FROM
(
SELECT cookie, DATE_FORMAT(time, '%Y-%m-%d') AS login_day
FROM accesslog
WHERE time BETWEEN DATE('2015-02-01') - interval 7 day and DATE('2015-02-01')
GROUP BY cookie, DATE_FORMAT(time, '%Y-%m-%d')
) login_table
GROUP BY cookie
) t
WHERE login_count >= 5
cookie | login_ |
---|---|
00d30a89-be8c-4252-b702-da3b3a13c2ae | 5 |
04a80a53-d340-4416-bf49-9f46720b9249 | 5 |
基本KPIからわかること
基本KPIを見ることでWebサイトのさまざまな状態が見えてきます。
- PVとUUの分布でわかること
- PVとUUの分布を見ると、
祝日や週末のPVが低いことがわかります。 - これは、
BtoBのサービスを提供する企業のWebサイトでは、 エンジニアなどが平日の業務時間に調査の過程でアクセスすることが一般的なためです。 - グラフの形は同一ですが、
UUがあまり多くないことがわかります。 - そのため、
同一のユーザがWebサイト内で多くのページ遷移をしていることが考えられます。 - 新規ユーザ数の分布でわかること
- 新規ユーザ数は図から減少傾向にあることがわかります。
- また、
ユーザのWebサイト滞在は良いので、 外部から自社のWebサイトに訪問するユーザを増やすSEO対策などが必要となることがわかります。 - 直帰率が高いとき
- 直帰率が高いということは、
サイトを訪問したユーザが、 自社のサイトをみたときにその人にとって魅力的なコンテンツがなかった可能性があります。ユーザに適したコンテンツを配布を行うためにのンテンツマーケティングを注力する方が望ましいです。 - 高頻度訪問ユーザ数
(週n日以上) のユーザを考えるとき - 高頻度訪問ユーザは自社のサイトのファンである可能性が非常に高いです。
- このユーザの動向をより深く分析をしていき、
どんなユーザに自社のサイトが受け入れられているのかを確認することも重要です。
まとめ
基本KPI分析ではサイト全体に目を向けたKPIを収集しました。
ここで紹介した基本KPIは、
このことを胸に留めつつ、