盆暗の学習記録

データサイエンスを中心として,日々学んだことの備忘録としていく予定です。初心者であり独学なので内容には誤りが含まれる可能性が大いにあります。

メモ用アプリは結局Typoraが一番良かった

以前,自分に一番合うメモ用のテキストエディタを探したときのことを書きました。

nigimitama.hatenablog.jp

この頃は「それぞれのアプリに一長一短あるのでどれがいいのかな~」と思っていたのですが,結局その後一番使っているのはTyporaでした(以前の記事では「Evernote + Marxicoを使ってみる」とか書いていましたが,結局これらは使いにくくてTyporaしか使用を続けられませんでした)。

以下ではTyporaの何が良かったのかについて述べていきます。

Typoraの長所

Typoraは自由度が高くて非常に使いやすいMarkdownエディタです。

その特徴は主に

  1. 読みながら書ける:リアルタイムでエンコードされる
  2. クリック(GUI)での操作という選択肢がある
  3. ショートカットキーが豊富
  4. TeX記法の数式が記入できる
  5. フローチャートなどダイアグラムを記入できる
  6. 画像を貼り付けることができる
  7. シンプルで起動が速い
  8. テーマ(デザイン)を自由に変えることができる

です。

1. 読みながら書ける:リアルタイムでエンコードされる

多くのテキストエディタでは,markdownを記述する場所と,それをhtmlで出力する場所は別の画面になります。

f:id:nigimitama:20181113020626p:plain

しかし,Typoraは入力したmarkdown記法からカーソルを移動した直後に出力されますし,ふたたびカーソルをそこに持っていって修正することもできます。

f:id:nigimitama:20181113020617p:plain

完全にmarkdown記法にした状態でいじりたいときはctrl+/でモードを切り替えることもできます。

f:id:nigimitama:20181113020607p:plain

また,htmlで記述すれば色付き文字を書くこともできます。

2. クリック(GUI)での操作という選択肢がある

クリック操作で扱える機能も多いため,例えば表の挿入なども楽です。

f:id:nigimitama:20181113020558p:plain

3. ショートカットキーが豊富

見出しレベル(h1~h6)の上下をctrl + '+'ctrl + '-'で簡単に操作したり,リストのインデントをctrl + [ctrl + ]で上下したりなど,ショートカットキーですばやく操作できるので,ストレスなく書くことができます。

4. TeX記法の数式が記入できる

数式を入れることができます。

f:id:nigimitama:20181113020545p:plain

設定から文中数式を有効にすれば,文中にも数式を入れることができます。

f:id:nigimitama:20181113020530p:plain

f:id:nigimitama:20181113020536p:plain

5. フローチャートなどダイアグラムを記入できる

js-sequenceのシークエンスを入れたり

f:id:nigimitama:20181113020512p:plain

flowchart.jsフローチャートを入れたり

f:id:nigimitama:20181113020504p:plain mermaidのシークエンス,フローチャートガントチャートを入れたりすることができます。

f:id:nigimitama:20181113020453p:plain

6. 画像を貼り付けることができる

画像をコピーして貼り付けることができます。クリップボードにあるだけの画像データも貼り付けることができます。

7. シンプルで起動が速い

markdownの編集という機能に特化しているアプリであるため,すぐ起動してくれます。

これは地味にありがたいです。

8. テーマ(デザイン)を自由に変えることができる

Typoraではエディタの見た目(フォント,色合いなど)に関する設定を「テーマ」と呼んでいます。

テーマは簡単に切り替えることができるので,「背景色が白だとちょっと眩しいな,目が疲れてきたな」というときは背景色がダークなテーマに切り替えたりできます。

また,テーマはcssで記述するので,cssがちょっとでも分かる人であれば「このフォントは好みじゃないんだよな…」とか「ここはもっと温かみのある配色がいいんだよな…」という自分のこだわりを反映させることができます。

f:id:nigimitama:20181113021841p:plain

Typoraの短所

一方で,Typoraの悪いところは

  1. 文中数式が時々表示されなくなる
  2. 文字数が多い文書になると重い

という点です。

1. 文中数式が時々表示されなくなる

発生条件はよくわからないんですが,結構な文字数を書いた頃に文中の数式が表示されなくなる(リアルタイムのhtmlエンコードがうまくいかなくなる?)ことがあります。そのうち修正されると思いますが…。

2. 文字数が多い文書になると重い

私は大学の講義のノートもパソコンで書く派で,長らくwordを使って一つの授業(約14回分)を一つの文書ファイルに書くようにしていました。しかし,同じことをTyporaでやろうとすると,動作がおもくなります。

Typoraはリアルタイムでエンコードされていくので,同じ文字数でもwordに比べるとちょっと負荷がかかりがちです。

特に私のノートの場合は数式がよく入るので結構な処理の量になり,文字数が多い文書だとカクカクした動きになってしまいます。

ctrl + /markdownのみの画面に戻れば文字数が多かろうとサクサク動くのですが,それはそれでTyporaの良さが失われるのであまり好ましくないです。

3. スマホからアクセスするのはちょっと面倒

TyporaはPC用(Windows, Mac, Linux)のアプリのみで,Evernoteのようにスマホからもアクセスできるような便利さはありません。

Typoraで作られる文書はmarkdownファイルなので,Dropboxなどを使えばスマホからも開いて書き込むことはできると思いますが,スマホで開く際はTypora以外のエディタを使うことになります。

おわりに

Typoraは最強のMarkdownエディタです。

一番ワクワクするのは,このクオリティでありながらまだベータ版だということです。

短所もいくつか挙げましたが,今後改善していく可能性は十分ありますし,期待しています。

[読書メモ]「A/Bテストの効果的な実施法」(HBR 2018年7月号)

ハーバード・ビジネス・レビュー2018年7月号の記事「マイクロソフトの分析チームに学ぶ A/Bテストの効果的な実施法」を読んだのでメモ。

はじめに

この記事はMicrosoftの実験チームのゼネラルマネージャーのRon Kohavi氏がMicrosoftとBingの具体的な事例をはさみつつA/Bテストの概要,メリットなどを述べたものです。

以下では,細かな事例は省いて要点を抜き出してまとめていきます。

A/Bテストのメリット

小さな変化が大きな影響を及ぼす

  • ほとんどの進歩は革新的で大きなアイデアではなく,何百何千という小さな改善を実行することでもたらされる。
    • メールのリンクをクリックしたときや検索結果などを「新しいタブで開く」ようにするだけでクリック数が数%上がるという実験結果になった
    • Bingでは文字色の色をわずかに変えただけで,この変更が毎年1000万ドルの売上増をもたらすという実験結果になった

実験は投資決定の指針になる

  • 大きな投資をしてもわずかなリターンしかないこともあるが,実験によってリターンが定量化できれば投資すべき額が判断できる
    • 「この変更で売上が1%上がりそう」→「会社の売上高が毎年これくらいだから,この変更で年間〇〇万円になる」→「この変更にかかるコストと比較して〇〇万円プラスになるな!」と判断していける

A/Bテストの注意点

成功の定義を考える

  • 実験に際して,事業の長期的成果と合致する短期的な指標を決める必要がある
  • 全体評価基準(overall evaluation criterion:OEC)を決めるには徹底した議論が必要になることも多い
    • 戦略を理解している経営陣と,指標やトレードオフを理解しているデータアナリストが密接に協力しなければならない
    • 一度きりで終わる話ではなく,OECは毎年調整するのが望ましい
  • 実験が別の分野に思わぬ影響を及ぼしていないかどうかを知るために,様々な指標をチェックすることも重要
  • 実験の中でどのテストにどの指標が最も効果的なのかがだんだんわかってくる
    • Bingは何年もかけて,実験で使える6000以上の指標を作り,テストの分野ごとのテンプレートに分類している

複雑な実験設計は避ける

  • テストの変数が多すぎても因果関係はわかりにくくなる。
    • 結果の解釈が難しくなってしまうため。
    • 因果関係がわかりやすいシンプルな実験を設計するのが望ましい。
  • 複雑な実験設計はバグに弱くなる。

サンプルサイズが均衡しているか注意する

  • 「対照群と処置群のユーザー数の比率が,実験の設計時のものと一致するかどうか」もチェックすべき事項
    • Microsoftの実験プラットフォームでよくチェックされる項目の一つ
  • 例えば 50.2 : 49.8は想定していた50:50から相当離れており,それが偶然生じる確率は1/50万より低い
  • 実験チームはこうした現象を認知し,その理由を知り解決を図るべく,たえず努力しなければならない

質の低いデータに注意する

  • 異常値の除外,収集エラーの特定などが必要
  • 例えばAmazonは大量に本を注文する一部の個人ユーザー(図書館など)がA/Bテストの結果を歪めかねないことを発見した

実験結果を検証する

  • 実験システムの有効性を実証し,チェックと予防を自動化することに時間や資源を配分する必要がある
    • チェック方法のひとつは,厳格なA/Aテストを実施すること
  • 意外な結果が出た場合は,それが有効であることを確認するため,また人々の疑念を和らげるために,繰り返しテストして結果が再現できなければならない
  • 原因がわかったがそのメカニズムがわからないときは,因果メカニズムを知ろうとするべき
    • とはいえ,「なぜそうなったのか」はわからなくても実験によるエビデンスがメカニズムを説明する理論の代わりになることがある
      • 文字色を変えるだけでユーザー体験が変わって成果があがるのは「なぜ」はわからないが処置効果のエビデンスはある
  • 予想された結果と実際の結果の差に注目する
    • 予想外の事実を知ったときこそ重要な学習をしたときである

因果効果の異質性(セグメントごとの効果の差)への対処

  • 場合によっては,ひとつのセグメントが良かったり悪かったりするだけで平均値が歪み,結果全体がおかしくなる
    • 例えば,Microsoftのある実験では,IE7のユーザーだけBingの検索結果をクリックできなくなるバグのために,本来はポジティブな結果になるはずが総合的な結果がネガティブになったことがあった
  • 実験プラットフォームはそうした異常なセグメントを検知しなければならない

キャリーオーバー効果への対処

  • ある実験で使った処置群・対照群を再利用すると,実験での経験がその後の振る舞いに影響を与えてしまう(キャリーオーバー効果) → 実験ごとにユーザーをシャッフルしなければならない

実験の大部分はうまくいかないため,たくさん試行する必要がある

  • GoogleやBingでは実験のうち良い結果が出るのは10~20%程度
  • Microsoft全体では実験のうち3分の1が有効,3分の1が変化なし,3分の1が悪影響

おわりに

A/Bテストの概要と,実際の運用の話をいくらか知ることができるいい記事だと思います。

「実験のうち有効だった施策は3分の1」
「有効だった施策も,評価指標の増加率が1%以下のものがほとんど」

であるからこそ,たくさん実験を回せるように優れた実験プラットフォームを構築していく必要もある,といった話は印象的でした。

一方で,もっと体系的に細かな話も載っている本を読みたくなります。例えばこの記事には

「一日数千人のアクティブユーザーがいる企業なら,こうしたテストを実施できる」

という記述もあるのですが,一日数千人のアクティブユーザーを集められる企業は限られるでしょうし,「ではサンプルサイズはどの程度だったら実用に耐える精度で実験ができるのか?」「もっと小規模な企業はどうしたらいいのか?」といった部分も気になります。今後調べてみたいと思います。

RでGIS:日本の地理空間情報を取得する方法まとめ

日本の地理空間情報を取得する方法をまとめました。R向けです。

1. Webサイトから手動でダウンロードする

国土数値情報ダウンロードサービス

  • http://nlftp.mlit.go.jp/ksj/index.html
  • 日本の細かな地理空間情報を取得するならここが一番です。
  • 「行政区域」「中学校区」「浸水想定区域」など様々な区分で整理された日本の地理空間情報がまとめられており,ダウンロードできます。
  • 過去の行政区域情報もダウンロードできます。

e-stat 統計GIS

詳しいダウンロードの仕方はこちらの記事にあります↓

nigimitama.hatenablog.jp

Global Administrative Areas

  • http://www.gadm.org/country
  • 各国のシェープファイル(やR用のrdsファイル)をダウンロードできるサイトです
  • 地域区分の細かさが異なる3種のデータが用意されています
    • JPN_0:日本全図
    • JPN_1:都道府県レベル
    • JPN_2:市区町村レベル

全国市区町村界データ | ESRIジャパン

2. パッケージやAPIを使ってダウンロードする

{jpndistrict}:国土数値情報の2015年の行政区域データを簡単に取得する

国土数値情報の2015年の行政区域データを簡単に取得できるパッケージです。

主な関数は

  • jpn_pref(pref_code, admin_name, ...)都道府県データの抽出
    • pref_code:都道府県コード
    • admin_name:都道府県名
  • jpn_cities(jis_code, admin_name):市区町村データの抽出
    • jis_code:都道府県コード or 市区町村コード
    • admin_name:自治体名
# load libraries
library(tidyverse)
library(sf)
# ggplot setting
windowsFonts(Yu = windowsFont("Yu Gothic UI")) 
g <- ggplot()+theme_set(theme_grey(base_size = 14, base_family = "Yu"))
# {jpndistrict} --------------------------------
# install.packages("jpndistrict")
library(jpndistrict)

# 都道府県データの読み込み
jpn_pref(pref_code = 11) %>% head()
## Simple feature collection with 6 features and 4 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: 139.5405 ymin: 35.8319 xmax: 139.7011 ymax: 35.96612
## epsg (SRID):    4326
## proj4string:    +proj=longlat +datum=WGS84 +no_defs
## # A tibble: 6 x 5
##   pref_code prefecture city_code city                             geometry
##   <chr>     <chr>      <chr>     <chr>                      <POLYGON [ツー]>
## 1 11        埼玉県     11101     さいたま市 ~ ((139.5477 35.93408, 139.5443 35~
## 2 11        埼玉県     11102     さいたま市 ~ ((139.6176 35.96495, 139.627 35.~
## 3 11        埼玉県     11103     さいたま市 ~ ((139.6378 35.92285, 139.6428 35~
## 4 11        埼玉県     11104     さいたま市 ~ ((139.6672 35.96454, 139.6733 35~
## 5 11        埼玉県     11105     さいたま市 ~ ((139.6211 35.87062, 139.6213 35~
## 6 11        埼玉県     11106     さいたま市 ~ ((139.6049 35.88834, 139.6106 35~
# 市区町村データの読み込み
jpn_cities(jis_code = c(33103, 33104, 33205)) %>% head()
## Simple feature collection with 3 features and 2 fields
## geometry type:  MULTIPOLYGON
## dimension:      XY
## bbox:           xmin: 133.4448 ymin: 34.29839 xmax: 134.1228 ymax: 34.78309
## epsg (SRID):    4326
## proj4string:    +proj=longlat +datum=WGS84 +no_defs
## # A tibble: 3 x 3
##   city_code city                                                  geometry
##   <chr>     <chr>                                      <MULTIPOLYGON [ツー]>
## 1 33103     岡山市 東区~ (((133.9958 34.61302, 133.9902 34.61591, 133.9857 3~
## 2 33104     岡山市 南区~ (((133.9109 34.64389, 133.9131 34.64387, 133.9131 3~
## 3 33205     笠岡市    (((133.5929 34.37393, 133.5942 34.37341, 133.5935 3~
# plot
ggplot(jpn_pref(admin_name = "栃木県"), aes(fill = city))+
  geom_sf()

f:id:nigimitama:20181108012858p:plain

{kokudosuuchi}:国土数値情報APIから簡単にDLする

{jpndistrict}よりも幅広い年度・区分から地理空間情報をダウンロードできます。

  • getKSJSummary():取得可能なデータの概要を表示
  • getKSJURL():データのURLとメタデータを取得する
  • getKSJData():データをダウンロードしてread_sf()で読み込む
  • translateKSJData()シェープファイルの変数名をわかりやすいものに変える
# {kokudosuuchi} ------------------------------
# install.packages("kokudosuuchi")
library(kokudosuuchi)

# getKSJSummary():取得可能なデータの概要を表示
getKSJSummary()
## # A tibble: 108 x 5
##    identifier title                field1           field2       areaType
##    <chr>      <chr>                <chr>            <chr>        <chr>   
##  1 A03        三大都市圏計画区域   政策区域         大都市圏     2       
##  2 A09        都市地域             国土(水・土地) 土地利用     3       
##  3 A10        自然公園地域         地域             保護保全     3       
##  4 A11        自然保全地域         地域             保護保全     3       
##  5 A12        農業地域             国土(水・土地) 土地利用     3       
##  6 A13        森林地域             国土(水・土地) 土地利用     3       
##  7 A15        鳥獣保護区           地域             保護保全     3       
##  8 A16        人口集中地区         政策区域         -            3       
##  9 A17        過疎地域             政策区域         条件不利地域 3       
## 10 A18        半島振興対策実施地域 政策区域         条件不利地域 3       
## # ... with 98 more rows
# getKSJURL():データのURLとメタデータを取得する
result <- getKSJURL(identifier = "N03")
head(result)
## # A tibble: 6 x 9
##   identifier title field year  areaType areaCode datum zipFileUrl
##   <chr>      <chr> <chr> <chr> <chr>    <chr>    <chr> <chr>     
## 1 N03        行政区域~ 政策区域~ 2017  3        1        1     http://nl~
## 2 N03        行政区域~ 政策区域~ 2017  3        2        1     http://nl~
## 3 N03        行政区域~ 政策区域~ 2017  3        3        1     http://nl~
## 4 N03        行政区域~ 政策区域~ 2017  3        4        1     http://nl~
## 5 N03        行政区域~ 政策区域~ 2017  3        5        1     http://nl~
## 6 N03        行政区域~ 政策区域~ 2017  3        6        1     http://nl~
## # ... with 1 more variable: zipFileSize <chr>
# getKSJData():データをダウンロードしてread_sf()で読み込む
## 2017年,東京の行政区域データのURL
url <- result %>% filter(year == "2017", areaCode == "13") %>% select("zipFileUrl") %>% as.character()
## ZIPファイルをダウンロードしてread_sf()で読み込んでくれる
tokyo2017 <- getKSJData(url)
head(tokyo2017)
## $`N03-17_13_170101`
## Simple feature collection with 6210 features and 5 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: 136.0695 ymin: 20.42275 xmax: 153.9868 ymax: 35.89842
## epsg (SRID):    NA
## proj4string:    +proj=longlat +ellps=GRS80 +no_defs
## # A tibble: 6,210 x 6
##    N03_001 N03_002 N03_003  N03_004 N03_007                       geometry
##    <chr>   <chr>   <chr>    <chr>   <chr>                   <POLYGON [ツー]>
##  1 東京都  <NA>    千代田区 <NA>    13101   ((139.7729 35.7037, 139.7728 ~
##  2 東京都  <NA>    中央区   <NA>    13102   ((139.7834 35.69645, 139.7846~
##  3 東京都  <NA>    港区     <NA>    13103   ((139.7713 35.62841, 139.7713~
##  4 東京都  <NA>    港区     <NA>    13103   ((139.7669 35.62774, 139.7672~
##  5 東京都  <NA>    港区     <NA>    13103   ((139.7702 35.63199, 139.7705~
##  6 東京都  <NA>    港区     <NA>    13103   ((139.758 35.6338, 139.758 35~
##  7 東京都  <NA>    港区     <NA>    13103   ((139.7585 35.6338, 139.7585 ~
##  8 東京都  <NA>    港区     <NA>    13103   ((139.7667 35.63298, 139.7665~
##  9 東京都  <NA>    港区     <NA>    13103   ((139.7766 35.63611, 139.7766~
## 10 東京都  <NA>    港区     <NA>    13103   ((139.7562 35.63689, 139.7562~
## # ... with 6,200 more rows
# 列名を意味に即した日本語名にしてくれる
tokyo2017 <- translateKSJData(tokyo2017)
head(tokyo2017)
## $`N03-17_13_170101`
## Simple feature collection with 6210 features and 5 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: 136.0695 ymin: 20.42275 xmax: 153.9868 ymax: 35.89842
## epsg (SRID):    NA
## proj4string:    +proj=longlat +ellps=GRS80 +no_defs
## # A tibble: 6,210 x 6
##    都道府県名 `支庁・振興局名` `郡・政令都市名` 市区町村名 行政区域コード
##    <chr>      <chr>            <chr>            <chr>      <chr>         
##  1 東京都     <NA>             千代田区         <NA>       13101         
##  2 東京都     <NA>             中央区           <NA>       13102         
##  3 東京都     <NA>             港区             <NA>       13103         
##  4 東京都     <NA>             港区             <NA>       13103         
##  5 東京都     <NA>             港区             <NA>       13103         
##  6 東京都     <NA>             港区             <NA>       13103         
##  7 東京都     <NA>             港区             <NA>       13103         
##  8 東京都     <NA>             港区             <NA>       13103         
##  9 東京都     <NA>             港区             <NA>       13103         
## 10 東京都     <NA>             港区             <NA>       13103         
## # ... with 6,200 more rows, and 1 more variable: geometry <POLYGON [ツー]>
# plot
## 23区
tokyo2017_23 <- tokyo2017$`N03-17_13_170101` %>% filter(stringr::str_detect(`郡・政令都市名`,"区"))
## geom_sf()でplot
ggplot(tokyo2017_23, aes(fill = `郡・政令都市名`))+
  geom_sf()

f:id:nigimitama:20181108013032p:plain

{choroplethrAdmin1}:マクロな地理空間情報と国勢統計

日本の都道府県レベルの地理空間情報(やアメリカの州レベルのデータなど)と国勢調査(センサス)の人口統計が入っています。

{choroplethr}というパッケージから派生しているパッケージで,{choroplethr}はgeom_sf()のような感じの塗り分け統計地図(コロプレス図)の描画関数です。

一応載せましたが,今は初めからsf形式の地理空間情報を取得してgeom_sf()で描いてしまったほうが早いので,あまり{choroplethr}の出番はないかもしれません…

# install.packages(c("choroplethr","choroplethrAdmin1"))
library(choroplethr)
library(choroplethrAdmin1)

# 国勢調査データ
data(df_japan_census)
head(df_japan_census)
##    region pop_2010 percent_pop_change_2005_2010 pop_density_km2_2010
## 23  aichi  7411000                          2.2               1434.8
## 5   akita  1086000                         -5.2                 93.3
## 2  aomori  1373000                         -4.4                142.4
## 12  chiba  6216000                          2.6               1205.5
## 38  ehime  1431000                         -2.5                252.1
## 18  fukui   806000                         -1.9                192.4
# df_japan_censusデータ
PlotData <- data.frame(region = df_japan_census[, 1], value = df_japan_census[, 2])
#プロット
admin1_choropleth(country.name = "japan",
                  df           = PlotData,
                  title        = "2010 Japan Population Estimates",
                  legend       = "Population",
                  num_colors   = 3)

f:id:nigimitama:20181108013058p:plain

まとめ

  • 国土数値情報が一番充実している
  • 手っ取り早く現行の行政区域データが欲しい場合は{jpndistrict}
  • 過去の行政区域だったり,行政区域以外のデータなどもう少し細かいデータが欲しいときは{kokudosuuchi}

[R]Rでパネルデータ分析:固定効果モデル

固定効果モデルの基礎的な理論と,Rでの実行方法の基本について学んだのでメモ。

理論

パネルデータ

  • パネルデータ(panel data):複数の主体を複数の期間にわたって観察したデータ
    • 同じ人を追跡調査したデータとか
    • 国×年度の公的統計データとか
  • \(k\)個の説明変数\(X\)と被説明変数\(Y\)の主体\(i\)時間\(t\)のパネルデータ:

\[ (X_{1it}, X_{2it},…,X_{kit}, Y_{it}), \hspace{1em} i = 1,…,n \text{ and } t = 1,…,T \]

  • balanced panel:各主体と各時間の観測値がすべて揃っているパネルデータ
  • unbalanced panel:欠損のあるパネルデータ

固定効果モデル

固定効果モデルはパネルデータの分析で使われる分析手法で,固有効果(個体差とか)のうち推定の邪魔になるもの(固定効果)を除去して分析を行うものです。

固有効果,固定効果,変量効果

  • 固有効果\(F_i\):時間によって変わらない,主体に固有の要素
    • 例えば\(Y_{it} = \beta_0 + \beta_1 X_{it} + u_{it}\)というモデルを作るとき,固有効果がある場合は誤差項\(u_{it}\)に含まれ,\(u_{it} = F_i + \varepsilon_{it}\)と分解できる。
    • 「固有効果」という語は一般的でないかも。山本(2015)しか使っていないかも。
  • 固定効果(fixed effect):説明変数\(X_{it}\)と独立でない(相関がある)固有効果\(F_i\)
    • 問題:固定効果があるとき,誤差項と説明変数が独立でなくなり(\(E(u_{it}|X_{it})\neq 0\)),そのままOLSすると欠落変数バイアスにより誤った推定をしてしまう
      • \(F_i\)の効果も\(X_{it}\)の効果も混ぜ合わせて推定してしまう(奥井2015)
      • 一致性(consistency, サンプルサイズを大きくすれば,推定値がある値に収束する性質)が得られなくなる(山本2015)
    • 対処:固定効果を除去するようなモデルにする(固定効果モデルにする) → 今回の本題
  • 変量効果(random effect):説明変数\(X_{it}\)と独立の(相関がない)固有効果\(F_i\)
    • 対処:\(\varepsilon_{it}\)のほうに\(X_{it}\)との相関がなければ,誤差項\(u_{it}\)と説明変数\(X_{it}\)は独立(無相関)になり,OLS推定が可能。ただし,パネルデータの時系列的要素の関係から誤差項の自己相関は生じるため,ロバスト標準誤差(頑健標準誤差)を使う必要がある
      • 奥井(2015)やAngrist and Pischke(2008)「OLS+ロバスト標準誤差でおk」(GLSはOLSより強い仮定を要するため)
      • 山本(2015)「一般化最小二乗法(GLS)でおk」

one-way固定効果モデル

主体の固定効果モデル(within model)の推定方法

\[ Y_{it} = \beta_1 X_{it} +\alpha_i + u_{it} \]

主体の固定効果(entity fixed effects)\(\alpha_i\)の除去については,以下のような推定方法があります。

1. 差分モデル(first difference model)のOLS推定(\(T=2\)のときのみ)

\[ (Y_{i,t+1} - Y_{it}) = (\beta_0 - \beta_0) + \beta_1 (X_{i,t+1}-X_{it}) + (F_i - F_i) + (\varepsilon_{i,t+1} - \varepsilon_{it}) \]

記号を置き換えると \[ \Delta Y_{it} = \beta_1 \Delta X_{it}+ \Delta \varepsilon_{it} \]

  • 推定方法:
    1. 説明変数,被説明変数それぞれ\(t+1\)期から\(t\)期を引く
    2. 上の式をOLS推定する
2. “\(n-1\)個のダミー説明変数”を用いたOLS推定
  • 最小二乗ダミー変数推定(Least Squares Dummy Variables (LSDV) 推定)とも呼ばれるもの

\[ Y_{it} = \beta_0 + \beta_1 X_{it} + \gamma_2 D2_i + \cdots + \gamma_n Dn_i + u_{it} \\ \text{where } D2_i = \begin{cases} 1 & \text{for } i = 2\\ 0 & \text{otherwise} \end{cases} \text{, etc.} \]

  • 推定方法:
    1. ダミー変数\(D2_i, \cdots, Dn_i\)を作成する
    2. 上の式をOLS推定する
    3. 検定はロバスト標準誤差で行う
      • 均一分散が仮定できることは稀だろうから不均一分散対策としてロバスト標準誤差を使う
3. ”主体の平均除去(Entity-demeaned)”を用いたOLS推定

\[ \begin{align} \tilde{Y}_{it} &= \beta_1 \tilde{X}_{it} + \tilde{u}_{it} \\ \text{where } \tilde{Y}_{it} &= Y_{it} - \bar{Y}_i, \hspace{1em} \bar{Y}_i = \frac{1}{T} \sum^T_{t=1} Y_{it}\\ \tilde{X}_{it} &= X_{it} - \bar{X}_i, \hspace{1em} \bar{X}_i = \frac{1}{T} \sum^T_{t=1} X_{it}\\ \tilde{u}_{it} &= u_{it}- \bar{u}_i, \hspace{1em} \bar{u}_i = \frac{1}{T} \sum_{t=1}^T u_{it} \end{align} \]

  • 推定方法:
    1. 説明変数・被説明変数について,変数から期間平均を引く
    2. 上の式をOLS推定する
    3. 検定はクラスタロバスト標準誤差を使う
  • \(n-1\)個のダミー変数による推定と同じ推定量が得られる
  • ダミー変数を使う方法だと計算量が多くなりがちでスケーラビリティがないため,統計ソフトでは通常entity-demeanedによる推定が行われる

時間の固定効果モデル(between)

\[ Y_{it} = \beta_1 X_{it} +\alpha_t + u_{it} \]

時間の固定効果(time fixed effects)\(\alpha_t\)を除きたい場合も主体の場合とほぼ同様です。

  1. \(T-1\)個のダミー説明変数”を用いたOLS推定
  2. ”time-demeaned”を用いたOLS推定

two-way固定効果モデル

two-way固定効果モデルあるいは主体と時間の固定効果モデル(entity and time fixed effects model) \[ Y_{it} =\beta_1 X_{it} +\alpha_i + \alpha_t + u_{it} \] によって主体の固定効果\(\alpha_i\)と時間の固定効果\(\alpha_t\)の両方を除去したい場合,それぞれの推定方法の組み合わせになります。

  1. 差分モデルのOLS推定(T=2)
  2. ”entity demeaning”と”\(T-1\)個のダミー変数”を用いたOLS推定
  3. ”time demeaning”と“\(n-1\)個のダミー変数”を用いたOLS推定
  4. ”entity & time demeaning”を用いたOLS推定
    • 説明変数と被説明変数について,主体と時間両方の平均を引いてOLS推定

固定効果モデルの仮定

説明変数\(X\)が1つ,主体の固定効果のみのモデルの場合について表記すると \[ Y_{it} = β_1 X_{it} + α_i + u_{it}, i = 1,…,n, t = 1,…, T \]

  • 仮定1: \(E(u_{it}|X_{i1},…,X_{iT},α_i) = 0\)
  • 仮定2: \((X_{i1},…,X_{iT},u_{i1},…,u_{iT}), i =1,…,n\) は独立かつ同一の同時分布に従う
    • 主体が母集団からランダム抽出されているなら成り立つ,が,サンプリングの時間が違うのに同一母集団のはずがない ⇒ 時系列方向で相関していると考えるのが普通
    • 多くのパネルデータにおいて\(u_{it}\)は自己相関(系列相関)している可能性が高い。 ⇒クラスタロバスト標準誤差(Clustered standard error)
  • 仮定3: 大きな外れ値は存在しない:\((X_{it},u_{it})\)はゼロでない有限の4次のモーメントを持つ
  • 仮定4: 完全な多重共線性は存在しない(Xが複数ある場合)
  • 仮定5:各主体についての誤差項は,説明変数の下で,自己相関なし:\(\text{cov}(u_{it},u_{is}|X_{i1},…,X_{iT}, \alpha_i) =0, \ t \neq s\)
    • この仮定が満たされない場合は頑健標準誤差を使う

クラスタロバスト標準誤差

  • クラスタロバスト標準誤差(clustered robust standard error, clustered standard error)
    • 不均一分散と自己相関を考慮した標準誤差(heteroscedasticity and autocorrelation-consistent standard error, HAC standard error)の一種
  • その誤差項は,ある同じクラスター(同じグループ)の中では相関があり,異なるクラスターの誤差項には無相関となる
  • 留意点:
    • クラスター数が少ない(20~30個にも満たない)場合は標準誤差を過小に推定してしまうバイアスがあるので調整するらしい(太田 2013
      • 「これ使えばOK」というような簡単に調整できる手法はまだ無いようだが,「クラスターが少なくてもクラスタロバスト標準誤差が相当程度に機能する」という研究もあるとか(Angrist and Pischke 同上)。
    • two-wayクラスタロバスト手法では推定された分散が負になる可能性がある

Rによる実践

library(plm)
data("Gasoline", package="plm")
head(Gasoline)
> head(Gasoline)
  country year lgaspcar  lincomep      lrpmg  lcarpcap
1 AUSTRIA 1960 4.173244 -6.474277 -0.3345476 -9.766840
2 AUSTRIA 1961 4.100989 -6.426006 -0.3513276 -9.608622
3 AUSTRIA 1962 4.073177 -6.407308 -0.3795177 -9.457257
4 AUSTRIA 1963 4.059509 -6.370679 -0.4142514 -9.343155
5 AUSTRIA 1964 4.037689 -6.322247 -0.4453354 -9.237739
6 AUSTRIA 1965 4.033983 -6.294668 -0.4970607 -9.123903

{plm}のGasolineデータセットを使います。

変数の意味は以下の通り:

  • country:18ヶ国の国名
  • year:年(1960~1978)
  • lgaspcar:自動車1台あたりのガソリン消費量の自然対数
  • lincomep:一人あたり実質所得の自然対数
  • lrpmg:実質ガソリン価格の自然対数
  • lcarpcap:一人あたりの自動車の量(ストック)の自然対数

ガソリン価格の変化が1台あたりのガソリン消費量に与えた影響(エコカー化に与えた影響)を考える,という状況を想定してみます。

lm()による推定

ダミー変数推定(LSDV推定)

factor型にして{makedummies}でダミー変数を作るか,変数をfactor型にしてそのままlmに入れます

library(tidyverse)
library(makedummies)
# ダミー変数を作成
Gasoline_dummies <- Gasoline %>% mutate(year = as.factor(year)) %>% select(country, year) %>% makedummies()
# 作成したダミー変数を結合
data <- Gasoline %>% select(-country, -year) %>% bind_cols(Gasoline_dummies)
# 推定
lm_LSDV <- lm(lgaspcar ~ ., data = data)
summary(lm_LSDV)

f:id:nigimitama:20181105015459p:plain

(コード文中の有意水準「***」がはてなmarkdownの太字指定とみなされてレイアウトが崩れるため,summaryの返り値を画像で貼り付けています)

 \beta_1 = -0.19285と出ました。

{lmtest}で HC_1ロバスト標準誤差を計算してみます。

library(lmtest)
coeftest(lm_LSDV, vcov = vcovHC(lm_LSDV, type = "HC1"))

f:id:nigimitama:20181105015525p:plain

平均除去(demean)による推定

# 主体固定効果の除去
entity_demeaned <- Gasoline %>% group_by(country) %>% 
  mutate(lgaspcar = lgaspcar - mean(lgaspcar),
         lincomep = lincomep - mean(lincomep),
         lrpmg = lrpmg - mean(lrpmg),
         lcarpcap = lcarpcap - mean(lcarpcap)) %>% ungroup()
# 時間固定効果の除去
twoways_demeaned <- entity_demeaned %>% group_by(year) %>% 
  mutate(lgaspcar = lgaspcar - mean(lgaspcar),
         lincomep = lincomep - mean(lincomep),
         lrpmg = lrpmg - mean(lrpmg),
         lcarpcap = lcarpcap - mean(lcarpcap)) %>% ungroup()
# 推定
lm_demeaned <- lm(lgaspcar ~ -1 + lrpmg + lincomep + lcarpcap, data = twoways_demeaned)

# クラスターロバスト標準誤差
library(plm)
coeftest(lm_demeaned, 
         vcov = plm::vcovHC(lm_demeaned, method = "arellano",
                            type = "HC1", cluster = c("group", "time")))

f:id:nigimitama:20181105015541p:plain

 \beta_1 = -0.19285となりました。理論通り,ダミー変数を使っての推定と同じ結果です。

plm()による推定

まずpdata.frame()でデータをplm用の形式にします。

重要な引数は以下の2つ:

  • index:個体,時間の列名を文字列ベクトルで指定する
  • drop.index:pdata.frame変換時にindex列を除くか否か
library(plm)
Gasoline_pdf <- pdata.frame(Gasoline, index=c("country","year"), drop.index=TRUE)
head(Gasoline_pdf)
> Gasoline_pdf <- pdata.frame(Gasoline, index=c("country","year"), drop.index=TRUE)
> head(Gasoline_pdf)
             lgaspcar  lincomep      lrpmg  lcarpcap
AUSTRIA-1960 4.173244 -6.474277 -0.3345476 -9.766840
AUSTRIA-1961 4.100989 -6.426006 -0.3513276 -9.608622
AUSTRIA-1962 4.073177 -6.407308 -0.3795177 -9.457257
AUSTRIA-1963 4.059509 -6.370679 -0.4142514 -9.343155
AUSTRIA-1964 4.037689 -6.322247 -0.4453354 -9.237739
AUSTRIA-1965 4.033983 -6.294668 -0.4970607 -9.123903

そしてplm()で推定します。

重要な引数は次の2つです:

  • method:モデルを指定します
    • fd:差分モデル(first-difference model)
    • within:主体固定効果モデル
    • between:時間固定効果モデル
  • effect:推定する固定効果を指定します
    • individual:主体固定効果
    • time:時間固定効果
    • twoways:主体・時間の両方
plm_result <- plm(lgaspcar ~ lrpmg + lincomep + lcarpcap, data = Gasoline_pdf,
                  method = "within", effect = "twoways")
summary(plm_result)

f:id:nigimitama:20181105015705p:plain

coeftest(plm_result,
         vcov = plm::vcovHC(plm_result, method = "arellano",
                            type = "HC1", cluster = c("group", "time")))

f:id:nigimitama:20181105015724p:plain

 \beta_1 = -0.192850と出ました。lmの推定量と一致しました。

しかし,平均除去によるOLS推定を行ったときの結果と標準誤差の値が違いますね。なんでだろう…ここの解明は今後の課題です。

まとめ

  • 固定効果モデルは主体(個体)や時間(年度とか)に固有の効果が推定の邪魔になるときに,その固有の効果(固定効果)を除去する手法です
  • ダミー変数を作って固有の効果を吸収させたりとかします
  • Rで実行するときは{plm}パッケージを使うと楽です。

参考文献

Windowsのエクスプローラーにタブ機能を導入する

Windowsを使っていて,エクスプローラーをたくさん開いていると,「どれがあのフォルダのウィンドウだっけ…」という状態になりませんか?

以前この問題を解決する方法がないのかと調べたところ,2つの選択肢がありそうでした。

  1. フリーソフトを入れてタブ機能を使えるようにする
  2. Windows10の「October 2018 Update」で公式にタブ機能("Sets")が追加されるので待つ

私は「2.」を選択してUpdateを待っていたのですが,結局次のUpdateで"Sets"機能の搭載は見送られたようなので*1「1. フリーソフトを入れる」ほうの対応をしようと思います*2

QTTabBarによるタブ機能の追加

QTTabBar - QuizoApps

QTTabBarというフリーソフトが人気のようなので,これをインストールします。

インストールし,再起動した後,

エクスプローラーのオプションの下の部分からドロップダウンリストを出して「QTタブバー」をクリックしたら有効化されます。

f:id:nigimitama:20181102010046p:plain

f:id:nigimitama:20181102010216p:plain

これでたくさんフォルダを使う場合もすっきり整理して使えます!

その他の追加機能・操作方法

単純にタブ機能を追加する以外にもいろいろできるようです。
多機能すぎて把握しきれないんですが,わかった部分をメモしていきます。

メニューを開く

タブバーの空いてる部分を右クリックするとメニューを開くことができます。
「最近使ったタブ」「閉じたタブの復元」など一般的なブラウザにあるような機能はここでアクセスできます。

f:id:nigimitama:20181101234936p:plain

タブグループ

星のアイコンの通り,ブラウザの「お気に入り」のような機能です。

フォルダへのクイックアクセスが可能で,グループに入っている複数のフォルダ全部を一気にタブとして開くこともできます。

f:id:nigimitama:20181101234423p:plain

オプション

メニューの下の方にあるので,そこから開けます

f:id:nigimitama:20181101234215p:plain

かなりたくさんの項目が設定できます。

f:id:nigimitama:20181102000333p:plain

サブフォルダメニュー

「サブフォルダメニュー」という機能では,フォルダを開かずに中身を見ることができます。

f:id:nigimitama:20181102000432p:plain

プレビュー

画像や動画はマウスを載せただけで内容をプレビューしてくれます。
これはサブフォルダメニューで覗くときも同様にプレビューしてくれます。便利そう

f:id:nigimitama:20181102001317p:plain

アプリケーションランチャー

指定したアプリを指定したショートカットキーで開けるようにする機能もあるようです。

f:id:nigimitama:20181102003505p:plain

スクリプト

javascriptなどでより複雑な機能を自作できるようです。なんとも玄人向けな…

QTTabBarでスクリプティング - QuizoApps

参考

*1:https://tech.nikkeibp.co.jp/it/atclact/active/14/378464/101500027/

*2:ちなみにOctober Update自体も致命的なバグが複数発見されたために延期されています

最先端の経済学の雰囲気を味わえる「CREPEフロンティアレポートシリーズ」がすごい

CREPE(東京大学政策評価研究教育センター)をご存知でしょうか。

CREPEは日本の実証に基づく政策立案(Evidence Based Policy Making:EBPM)の推進のために,政策評価(Program Evaluation)の研究や,専門知識をもった人材への実証分析の手法の普及(統計的因果推論・計量経済学のセミナー)などを行っているところです。

そのCREPEが掲載しているCREPEフロンティアレポートシリーズ(以下CREPEFR)という,研究結果の要点をまとめて解説したコラムがあります。

計量経済学(統計的因果推論)の分析の実例を知りたいけど,論文全文じゃなくて要点だけ知りたい!」という私のような人間にはぴったりで,こういうのは本当にありがたいと思います。

現在7つの記事があり,医療,社会保障,金融,人間関係の形成,人間の意思決定(あるいはマーケティングサイエンス?)など,幅広いテーマをターゲットにしています。

進学せず就職してデータサイエンティストになる身としては,Aamazonのデータサイエンティスト(という呼び方が適切かはわかりませんが)の渡辺安虎氏も関わっておられる「CREPEFR-5: 時間・混雑プレッシャーがかかる中で商品オススメに効果はあるのか?」がビジネス寄りのテーマで特に面白いなと思いました。もとの論文もちょっとだけ目を通しましたが,ポアソン回帰で固定効果モデルを推定しているみたいですね。

不勉強ゆえにもとの論文にまでなるとわからない部分ばかりですが(英語が読めないことも含めて),少しずつわかる部分を増やしていき,いつかは自分でも分析できるようになり,エビデンスが提示できるようになれればと思います。

統計検定2級レベルまでの教材と勉強方法

最近私の周りで統計検定を受験しようとしている人を見かけるので,

  1. 統計検定2級レベルの教材
  2. 私が統計検定2級を取得したときに参照していた本,やっていた勉強

についてメモしてみたいとおもいます。

1. 統計検定2級レベルの教材

ネット上の資料

統計学の時間|統計WEB

全人類がわかる統計学

DataArts

JIN'S PAGE

『とある弁当屋の統計技師』サポートサイト

書籍(簡単なもの=数式少なめの本)

石田基広(2013)『とある弁当屋の統計技師(データサイエンティスト)』

  • ラノベ調=対話篇なのでわかりやすい
  • 内容:記述統計,要約統計量,重回帰分析,ロジスティック回帰
  • Rでの実践方法も学ぶことができる

佐々木隆宏(2017)『流れるようにわかる統計学』,KADOKAWA

流れるようにわかる統計学

流れるようにわかる統計学

  • グラフの読み取り方から始める⇒記述統計の解説が丁寧
  • 図やイラストが多く,また対話篇で構成されており,わかりやすい
  • 内容:グラフの読み取り,要約統計量,確率論,最小二乗法,確率分布,検定

小島寛之(2006)『完全独習 統計学入門』,ダイヤモンド社

完全独習 統計学入門

完全独習 統計学入門

  • 数式をほとんど使わない統計学の入門書
  • 内容:要約統計量,標本分布,推定,検定

書籍(統計検定2級レベル)

栗原伸一(2011)『入門統計学』,オーム社

入門 統計学 −検定から多変量解析・実験計画法まで−

入門 統計学 −検定から多変量解析・実験計画法まで−

  • 文章量やや多めだが,丁寧に記述されている
    • 数式がダーっとでてくるような教科書が苦手な場合(私はそうでした)はこの本が合うかも
    • オーム社特有の?丁寧な図解が理解を助ける
  • この本は,特に標本抽出の話がわかりやすかった印象
    • 「入手したてんとう虫(サンプル)の平均体長から,既知の品種の体長の分布に属するか,別の分布に属する(=新種)かを調べる」といった具体的でわかりやすい例
  • 内容:記述統計,確率分布,標本分布,推定・検定,分散分析,実験計画法,多重比較法,判別分析・クラスター分析,ノンパラメトリック統計学
  • オーム社のWebサイトで『授業用教材(PowerPointファイル)』などが公開されています。このスライドを見て気に入ったら購入を検討されてもよいかもしれません。

本橋永至(2015)『Rで学ぶ統計データ分析』,オーム社

Rで学ぶ統計データ分析

Rで学ぶ統計データ分析

  • Rの入門としても統計の入門としても最適(オススメ)
  • 手を動かしながら(分析手順を実践しながら)理論を学ぶことができる
  • 文章,数式,図のバランスがよく,スッキリとまとめられた簡潔な説明
  • 内容:記述統計,確率分布,回帰分析,分散分析,最尤法,一般化線型モデル(GLM)

東京大学教養学部統計学教室(1991)『統計学入門』(通称:赤本)

統計学入門 (基礎統計学?)

統計学入門 (基礎統計学?)

  • 統計学の定番教科書。1991年発行だが,未だに強い人気がある。
  • “赤本”と呼ばれている。シリーズの1巻目であり,第2~3巻の”緑本”,“青本”もある。
  • ほどよい量の図表や文章での解説があり,数式とのバランスがいい。
    • でも数式に慣れていないうちはキツいかも

宮田庸一(2012)『統計学がよくわかる本』

統計学がよくわかる本―Excel解説付き

統計学がよくわかる本―Excel解説付き

南風原朝和(2002)『心理統計学の基礎』

心理統計学の基礎―統合的理解のために (有斐閣アルマ)

心理統計学の基礎―統合的理解のために (有斐閣アルマ)

  • 強い人気を誇る入門書
  • 内容は幅広いものの,広く浅くという感じ?
    • 個々のトピックの解説が簡潔すぎて人によってはわかりにくく感じるかも

日本統計学会編(2015)『統計学基礎』

改訂版 日本統計学会公式認定 統計検定2級対応 統計学基礎

改訂版 日本統計学会公式認定 統計検定2級対応 統計学基礎

  • 2級の公式教科書で,試験範囲が簡潔にまとめられている
    • その分,数式がズラーっとでてくる
  • 「わかりにくい」と不人気だが,ある程度統計学を理解してきた頃(赤本が読める頃)にはある程度は読めるようになってるはず

2. 私が統計検定2級を取得したときの勉強法

受験までにやったこと

だいたいこんな感じでした。

  • 序盤:石田『とある~』や栗原『入門統計学』を読み,概要を理解する
    • 数式の理解は不十分でもいいので「なんのために,なにをやるか」を理解する
  • 中盤:赤本や公式本を読む
  • 終盤:過去問で練習

ただ,このときはギリギリで受かった状態だったので,もっとモチベーションを高く持ってしっかり勉強すべきだったと反省しております…。

統計学を勉強するときのポイント

統計検定の受験以後に私が思うようになった「統計学を勉強するときのポイント」というのがあります。それは

  1. 複数の本を読む
  2. 理論と実践の両面で学ぶ
  3. モチベーションを上げるために発展的な分析手法を知る

というものです。

1. 複数の本を読む

統計学は範囲が広く,個々の分野も奥深いことに加え,数式が出てきて文系には理解し辛かったりするので,網羅的な一冊の本で全てを理解しようとするよりは,複数の本を読んで補完しながら学んでいく方法が良いのではないか,と思っています。

統計検定の範囲を網羅していると思われるのは公式テキストですが,公式テキストだけを見ても初学者にはわからない部分だらけだと思うので,もっと平易に書かれた本などと併せて勉強するのが良いのだろうと思います。

上でご紹介しましたネット上の資料や書籍を複数使って勉強していくことで効率よく学ぶことができるのかなと思います。

2. 理論と実践の両面で学ぶ

統計学の学習では,学んだ分析手法を実践することも重要です。

業務や研究で実際に分析するときは手計算するわけにはいきませんので,パソコンの統計分析ソフトの操作も学ぶことを強くおすすめします。

まずExcelに慣れ,その後はRを使えるようにしていくと良いと思います。

Rだと石田『とある~』や本橋『Rで学ぶ統計データ分析』がおすすめです。

統計分析ソフトに習熟すると,コンピュータ上でシミュレーションや試行錯誤ができるようになり,それが理論の理解を助けることもあります。例えば「データを対数変換すること」の意味は私のように数学が苦手な人にはピンときにくいものですが,実際にデータを用意して散布図を作りながら試してみるとわかってくると思います。

f:id:nigimitama:20181030015822p:plain

3. モチベーションを上げるために発展的な分析手法を知る

統計学の初歩を見ているだけだと,味気なくつまらないものに感じるかもしれません。

しかし,統計学は文系の分野から理系の分野まで幅広い領域で使われておりますし,ビジネスでも活用されている非常に実用的な学問ですので,統計学(or データ分析)で何ができるのか」を把握することに意識を向けてみることがモチベーションの向上につながると思います。

例えば…以下のような感じです。

「データ分析の種類」と呼ばれるものが4つ(大別して2つ)ほどあるのですが,「記述的・診断的な分析」になるほど統計学の活躍の機会が多くなり,「予測的・処方的な分析」になるほど機械学習の活躍の機会が多くなる感じです(ちなみに統計検定準1級以上になると機械学習も出題範囲に入ってきます)。

データ分析で何ができるのか:データ分析の種類

1. Descriptive Analytics(記述的分析):データから,「何が起きたのか」を明らかにする。

  • グラフや表で可視化する,データを解釈するストーリーを考えるなど。
  • →記述統計学(要約統計量などによるデータの要約,グラフや表による可視化)

2. Diagnostic Analytics(診断的分析):データから,「なぜ起きたのか」を明らかにする。

  • 記述統計学
    • 相関関係を調べるなどして,より深く調べていく。
  • 推測統計学(検定,回帰分析など)
    • データの間の関係性を正確に把握する
  • 統計的因果推論(ランダム化比較試験(A/Bテスト)など)
    • e.g. A/Bテストによる,Webサイトのデザインを変えることによるKPIの向上への影響(因果効果)の推定

3. Predictive Analytics(予測的分析):確率的な予測を行うモデルを構築する。

  • 統計モデリング(回帰分析など)
    • e.g. ロジスティック回帰分析による,広告のクリック率の予測と広告配信の最適化
  • 機械学習(いわゆる"AI",予測に特化したデータ分析の技法)
    • e.g. ディープラーニングで画像認識(「画像のデータ」を説明変数に,「何が写っているか」を被説明変数にして予測する)

4. Prescriptive Analytics(処方的分析):データから,「何をすべきか」を明らかにする。

  • 予測されたモデルから最適な方策を立案する。
    • e.g. 資料請求をしてくれた潜在顧客の成約率の予測値を出すことで,「成約しやすそうな顧客から優先的にセールスを投入する」という最適化
    • e.g. レコメンデーション:「この商品を購入した人は,この商品も購入しています」