サーバーの中にお宝が眠っていませんか？～ログ解析基礎～

#はじめに

何もない状態から、持っているデータの「データ分析をするんだ！」とか、
「データドリブンな施策を打てるようにしよう！」などと考えると、
統計処理だとか、機械学習だとか、あれもこれも考えてしまい、
難しそうなイメージが先行してなかなか前に踏み出すことを躊躇してしまいますが、

まずは自分たちが持っているデータを何かしら**「見える状態」**にするところから、
少しずつ始めるのが良いのでは？と考えています。

#まず何から始めたら良いの？

自分たちが持っているログをよく見て、持っている**「情報を整理」**する必要があります。

* 何のログを持っているのか
* どんな内容が出力されているのか

仮にApacheのAccessログで整理するなら、

* アクセス日時
* IPアドレス
* リクエストURL
* リファラー
* ユーザーエージェント

などが使えそうな情報として考えられます。

もし、自社システムを持っていてログの出力内容をある程度自由にできるのであれば、
見たい指標にあわせてログの出力を見直すのも良いかと思います。

##簡易なデータ整形を行う

持っているデータを様々な切り口で指標として使おうとすると、
情報を整理したデータが一定のフォーマットで使える状態になっていると便利なので、
データを整形してDBに格納するなど検討した方が良いかと思います。

例えば下記のようなApacheのアクセスログであれば、

[Apacheアクセスログ](https://httpd.apache.org/docs/current/ja/logs.html)

```
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)" 
```

* 2000/10/10 13:55:36
* 127.0.0.1
* /apache_pb.gif
* `http://www.example.com/start.html`
* Mozilla/4.08 \[en] (Win98; I ;Nav)

のように整形し、区切り文字を付け、これを1行として整備しておくことで
DBにも取り込みやすく便利になります。

それ以外にも、例えばエラーのレコードは除外（またはフラグ立て）しておくとか、
リクエストURLの前を補完しておくとか、
用途に応じて、使い易いよう整形しておくのが良いかと思います。

##更に効率化を求めるなら

アクセスログは大量になるので、見たい切り口で指標を事前に計算し、
データマート等を作成することで、すばやくデータを取り出せるようになり、
より使い易くしておくのも良いと思います。

#何の指標を見られるようにしたら良いの？

まずは下記2つの指標を見られるようにするところから始めるのが良いと思います。

* UU（ユニークユーザー数）
* PV（ページビュー数）

UU数はそのサイトに**何人が訪問**しているのか、PV数はそのサイトの**閲覧されたページ数**
を示し、基本的に 「UU <= PV」 の関係が成り立ちます。

これが見られるようになるだけで、そのサイトに何人が訪れ、
どれくらいのページが見られているのか分かるようになりますね。

ApacheのログでUU数を出すのは、ユーザーを一意に特定できないため難しいですが、
参考程度として、「IPアドレス」＋「ユーザーエージェント」などを組み合わせて、
なるべく一意になるよう工夫する必要があります。。。

##UU、PVが分かるということは...？

UU数やPV数が出せるということは、他の情報と組み合わせることで指標の切り口を
変えてデータを見ることが容易になります。

* ただ単に、UUやPV数を見ればサイト全体の規模感がわかる
* 日付と組み合わせれば、DAU(※1)やMAU(※2)といった指標が見られる
* リクエストURLと組み合わせれば、ページ単位の規模感がわかる
* リファラーと組み合わせれば、どこのページからどれだけ来たのかがわかる
* PVをUUで割れば、一人当たりのPV数がわかる 等

※1 DailyActiveUser 1日あたりのアクティブユーザー数
※2 MonthlyActiveUser 1月あたりのアクティブユーザー数

たったこれだけを整理しただけで、色々な見方が出来るようになります。

あとは想像を膨らませれば、あのページはこのページの次にアクセスが来るから、
ここの訪問数が少ないのは、**このページが原因だ！**など分かるかも知れませんね。
（本当はもっと複雑な要因があり、仮説に基づいた検証が必要だと思いますが...）

ちなみにDBにデータを入れているのであれば、UU数は下記のようなSQLで簡単に出せます。

```sql
select count(distinct userid) from accesslog where 条件～
```

PV数はcount(*)を取ればよいでしょう。

#データを整備したけど可視化する必要はあるのか

BIツールなどを使った可視化をした方が良いのか？と言えば、
可視化した方が見やすくなり、分かりやすくなると思います。

というのも、例えばMAUを数表（数値だけで作った表）だけで表現した場合と、
推移グラフにした場合では、グラフの方がパッと見ただけで、どこが上下して
いるのか**視覚的に把握しやすく**なります。
（春から夏にかけてUUは増えるが、秋から冬にかけて下がるなど）

とは言え、いきなりBIツールを導入するぞとなるとハードルが高くなるので、
専門知識のある人がいない場合は、エクセルで可視化してみるとか、
数表であっても、特徴値に色を付ける等することで見やすくはなりますね。

#アクセスログ以外にも情報を持っているなら

アクセスログをベースに話を書いてきましたが、
アクセスログ以外にも会員登録が必要なサイトやサービスを構築しており、
性別や年代といった情報を持っているなら、ユーザーIDと組み合わせることで、
男性や女性の比率、どの年代が多いのか、これらを掛け合わせたクロス集計など、
UU、PVが出せることで、分析・調査の幅は広がります。

これらを見るだけでも、自社サービスのターゲットが意図したものになっているのか
確認することが出来ますし、意図しないものなら、どうやって集客すべきなのか、
議論することも出来ますね。

#その他

データを扱う上で難しいと考えているは、データを見る習慣を付けることかなあ
と思っています。せっかくデータを見られるようにしても、誰も見てくれないのでは
整備した意味もないし、モチベーションも下がってしまうかもしれません。

そこで、

* 常に見ていく指標を決める
* 自動で更新され、閲覧できるような仕組みを作る
* 議論の場でデータから言えることを出す

など、常にモニタリングができ、自然と会話にあがるような環境を整えることを
検討してみるのも良いかもしれません。

#まとめ

* 自社のログやデータを見て使える情報を整理する
* 整理したデータを使い易いよう整形・加工処理を行う
* まずはUU、PVを出せるようにする
* 常にモニタリングできる環境を（作れるなら）作る
* 難しく考えすぎず、出来るところから手を付ける

#おわりに

インサイトを発見したいとか、予測をしたいといった具体的な分析ニーズになってくると
専門知識が必要になってきますが、
もし自社のデータやログを活用せず、そのまま置かれており、何かしらやってみたいと
考えている状況であれば、一旦データを整理してUUやPVといった基本的かつ重要な指標の
外観を眺めて見るだけでも、何か発見があるかもしれませんね！

また、情報を整備することで、今後より深い分析につなげやすくなると思います。