2017年12月19日火曜日

分析設計の仕方


過去の記事で、準備作業の全体を紹介しましたが、
今回は、分析設計の方法について深掘りしたいと思います。

過去の記事:

データ分析前の準備作業 (概要)
https://daaataaa.blogspot.jp/2015/10/blog-post.html


分析設計書の項目

分析設計書は書かなくても、分析できますが会社や研究などで作業を始めるときは作っておいた方が迷うことがなくなるのでスムーズです。

最低限書くべき項目は、
  1. 概要
  2. 目的
  3. 仮説
  4. データ
あったほうがいいものは、
  1. 作成する説明変数
  2. 分析ステップ
※これらの項目はこれが正解というものでもないので、適時カスタマイズしてください。

①概要


概要には、分析が必要となっている背景や状況を書きます。
あとで振り返るときなどに、なんでこの分析したんだっけ??
という状況を打破できます。打破打破。

②目的

目的には、何を明らかにするのかを書きます。
ビジネスオーナーと、アウトプットを明確にするための共通意識を形成するためのものです。
分析者とビジネスオーナーが一致する場合は不要ですが、あまりないと思います。
ビジネスオーナーとは分析をお願いする人です。会社では上司だったり、お客さんだったり、大学では教授とかになるんですかね?
※目的の設定は意外と難しい作業で慣れが必要です。

③仮説

目的とセットで作ります。何が要因となっているのか?どこを掘れば、目的を達成するためのインサイトを抽出できるのか?をビジネスオーナーと一緒に議論するたたき台にもなります。
あまり分析に関与するメンバーが少ない場面でも、これがあると「あそこも見なきゃ!あれもたさなきゃ!」みたいな雑念が消えるので目的を達成するための最短経路をつくれるなどの、メリットがたくさんできるのでおすすめです。

※雑念が出た場合はメモしておいて、次ステップに回したり、考察のしたりするときなどに使ったりできます。

④データ

分析に使うデータを定義します。
割りと企業なんかだと、例えば売上金額にしても、POSデータ、CRMの売上データなど同じデータでも複数のデータ・ソースがあるため、これもビジネスオーナーと認識をあわせるのに作っておいて、確認するという意味でも最初に明記しておくのがおすすめです。


補足:目的と仮説について


目的と仮説の書き方ですが、例えば目的を「CRMにおける離反モデル構築する」とした場合、仮説は、「離反は月次購入金額が影響するのか?、直近半年における日曜日の来店回数も影響するのか?」など書きます。箇条書きで整理すると分かりやすいと思います。


あったほうがいいもの①作成する説明変数

これも目的と仮説に対応させて作成します。
例えば、
 月次購入金額 = 月数をキーにして売上金を合計する
など具体的な変数の作り方を書きます。

あったほうがいいもの①分析ステップ

分析する作業になれてくれば作らなくてもいいですが、先に作っておくと、
スムーズに分析作業をすすめることができます。
  1. 前処理
  2. ビジュアライズ
  3. モデリング
  4. レポーティング用のビジュアライズ、モデル詳細の出力
など予め必要となる作業ステップや、出力物をメモしておけるとスムーズです。

まとめ

分析設計は、
  • 分析を達成するゴール設定を明確にする
  • ゴールを達成するための手段を具体化する
  • 目的と手段を分析に関わるメンバーに共有し、同じ認識を持つ
ために作りましょ!

2017年12月5日火曜日

SQL分析をスタートするために最低限覚えておくべきこと

大きなデータを使うには、SQLは避けて通れません。
とはいえ、SQLで分析には、大変な労力となります。

大変な労力となる理由:いっぱいSQLがある

SQLといっても、MySQLやPostgreSQLから、BigQueryなどのクラウドサービスまで多様な種類のSQLが存在するので、細かく覚えないといけないためです。
基本はどれも一緒ですが、分析までしようとすると、データベース独自の関数を覚える必要があります。
さらに、一つの会社で、複数のデータベースを使っている場合があるので、完璧先生を目指すとなると長い年月が必要となります。

じゃあどうしよう→基本だけ覚える

基本はselect句、from句、where句だけ覚えてしまえば、技術者以外の単に仕事で使いたい人が作業する分には十分です。仕事で使う場面というは「いつ、誰が何をいくら買ったか?」「どのページを何回みたか?」などを指しています。

初心者の方に説明しますと、DB(データベース)は大きなエクセルファイルです。
その中にtable(テーブル)と呼ばれるシートがいくつか入っています。
あまりにもデータが大きいので、エクセルのように一度に開くと大変なことになりますが、必要な列だけとか、必要な行だけ抽出するための操作がSQLとなります。

SQLのはじめに

エクセルでsheet1全体を開く操作をSQLで書くと、
----
 SELECT * FROM sheet1
----
となります。
selectの後ろの*印は全部の列を指定する。
fromの後ろのfromはどのテーブルかを指定する。といった具合です。

sheet1に一億行のデータが入っているとPCが大変なことになる(基本的にはならずエラーを返してくれるはず)ので、そういう場合は、limitをつけてちょっとだけ見せてとおことわりを入れます。

----
 SELECT * FROM sheet1 limit 100
----

とすれば、最初の100行だけ持ってくるので、安心です。
これはデータの中身を確認したいときによく使うフレーズです。

①SELECT句の役割について

SQLは非常にシンプルな作りなので、上記でだいたいの構造は理解できると思いますが、
select句は、カラム(列)を選択する句です。
変数名を記入し、複数ある場合はカンマでつなぎます。
* はワイルドカードですべての行を取得します。 

②FROM句の役割について

FROM句はどのテーブルからデータを取得するのかを指定します。
例えば FROM salesなどと書くとsalesテーブルからデータを取得します。

③WHERE句の役割について

WHERE句では、抽出するデータの条件を設定します。
例えば、「WHERE  age > 70 」と書くと、70歳超の人のデータだけが出力されます。

次のステップはGROUP BY句やJOINを覚えることだが

まずは、①〜③とlimitを使い、取得したいデータを自在に操作できるようになることが重要です。データ範囲の指定は、基本的な操作です。しかし正確に集計をする上では、実は非常に難しい操作であったりもします。
抽出したいデータを取り出し、エクセル等のツールで集計&分析を正確にできるようになってから、GROUP BY句を覚えるので十分だと思います。

まとめ

まずは、select 〜〜〜 from 〜〜〜 where 〜〜〜 と正確に抽出したいデータ範囲を指定することから始めよう!
集計は無理にSQLで行おうとせず最初は、エクセルやTableauを使っちゃおう!