ほくそ笑む

R言語と統計解析について

2017年のベイズ統計入門書まとめ

2017年もベイズ関連の本がたくさん出版されたのでまとめてみます。
下記の記事の続きのようなものですが、私はほとんど読めていません。。

冬休みのお供にどうぞ。

ビジネスマンがはじめて学ぶ ベイズ統計学 ―ExcelからRへステップアップ―

ビジネスマンがはじめて学ぶ ベイズ統計学 ―ExcelからRへステップアップ―

Pythonで体験するベイズ推論 PyMCによるMCMC入門

Pythonで体験するベイズ推論 PyMCによるMCMC入門

やさしいMCMC入門: 有限マルコフ連鎖とアルゴリズム

やさしいMCMC入門: 有限マルコフ連鎖とアルゴリズム

ベイズ統計モデリング: R,JAGS, Stanによるチュートリアル 原著第2版

ベイズ統計モデリング: R,JAGS, Stanによるチュートリアル 原著第2版

なぜベイズを使わないのか! ? _臨床試験デザインのために

なぜベイズを使わないのか! ? _臨床試験デザインのために

ベイズ統計で実践モデリング: 認知モデルのトレーニング

ベイズ統計で実践モデリング: 認知モデルのトレーニング

  • 作者: マイケル・D.リー,エリック‐ジャンワーゲンメイカーズ,岡田謙介,Michael D. Lee,Eric‐Jan Wagenmakers,井関龍太
  • 出版社/メーカー: 北大路書房
  • 発売日: 2017/09/28
  • メディア: 単行本
  • この商品を含むブログ (2件) を見る

機械学習スタートアップシリーズ ベイズ推論による機械学習入門 (KS情報科学専門書)

機械学習スタートアップシリーズ ベイズ推論による機械学習入門 (KS情報科学専門書)

マンガでわかるベイズ統計学

マンガでわかるベイズ統計学

↑ 読みましたが微妙でした。

恋する統計学[ベイズ統計入門]

恋する統計学[ベイズ統計入門]

↑ 内容はとても面白いですが、まったくの初心者が読むと挫折しそうです。
こういう内容の書籍はおそらく他には無いので脱初心者に向けておすすめできます。

ベイズモデリングの世界

ベイズモデリングの世界

ベイズ推定入門 モデル選択からベイズ的最適化まで

ベイズ推定入門 モデル選択からベイズ的最適化まで

Facebookの予測ツールProphetについて発表しました

Facebook が出した誰でも簡単に時系列予測ができるツール Prophet についていくつか発表しました。

Prophetはビジネス時系列、すなわち人間の行動に左右される時系列データに対する自動予測ツールです。

ビジネスでは大量の時系列データに対する予測を作成する必要があります。
しかし、それを1人のデータ分析者が1つ1つ作っていくのでは手が足りません。
そこで、統計の知識を必要しない、誰にでも簡単に時系列予測を行うツールとして Prophet が作成されました。


Prophet はオープンソースで開発され、Python と R のライブラリが公開されています。
まずは今年5月に Python版についての発表を foundIT データ解析・機械学習セミナー にて行いました。
Python版の発表資料はこちらです。


R版については7月に 第63回R勉強会@東京(#TokyoR) にて発表しました。
R版の発表資料はこちらです。


上記の発表ではツールの使い方について重点的にお話したのですが、もっと詳しく知りたいという方向けに、理論的な側面の解説をしました。
その発表資料はこちらです。


これらの発表時点では、Prophet はバージョン 0.1.1 だったのですが、9/13 にバージョン 0.2 がリリースされました。
私も Contributor の一人に加わっています。

発表資料では、精度評価を行う Simulated Historical Forecasts は未実装と書いていますが、@teramonagi さんの尽力によりバージョン 0.2 で実装されました。

バージョン 0.2 で新しく加わった機能についてもどこかで解説できればと思います。

以上です。

AJAXサイトを Webスクレイピングする(銀行金利をスクレイピング)

共同で翻訳した本が出版されます。

Rによる自動データ収集: Webスクレイピングとテキストマイニングの実践ガイド

Rによる自動データ収集: Webスクレイピングとテキストマイニングの実践ガイド

本書は、原題 "Automated Data Collection with R" の翻訳書です。

今日は、本書の6章から「AJAX サイトを Web スクレイピングする」という話を紹介したいと思います。

AJAX サイトを Web スクレイピングする

銀行の金利が低い時代ですが、キャンペーンなどで一時的に定期預金の金利が高くなる場合があります。

そのタイミングで定期預金を組めば、それだけお得です。

なので、いろいろな銀行の定期預金の金利を定期的にスクレイピングして情報を得たいとします。

ここでは架空の銀行、R銀行の金利情報を得ることを考えます。

R銀行の Web サイトを見ると、定期預金の金利はホームページ上で確認できます。

そこで、この情報を次のようにしてスクレイピングしてみます。

library(rvest)

# スクレイピング対象の URL
url <- "https://www.rakuten-bank.co.jp/interest/details.html"
# URL をスクレイピングして、表(table)だけを抜き出す
tables <- read_html(url) %>% html_nodes('table')

# 見つかったテーブルの個数を確認
length(tables)
#> 6

# 各テーブルの内容を確認する
tables %>% html_text
#> [1] "普通預金金利(普通預金の商品詳細説明書へ)..."
#> [2] "普通預金金利(マネーブリッジご利用者)..."
#> [3] "普通預金金利(楽天カードのカード利用金額の引落があるお客さま)..."
#> [4] "預入期間中途解約利率1年未満約定利率..."
#> [5] "期間\n当初1年間\n2年後以降(最長10年まで)..."
#> [6] "期間\n当初1年間\n2年後以降(最長15年まで)..."

しかし、定期預金の金利データが入っているテーブルは見つかりませんでした。

これはなぜでしょうか?

このページでは AJAX が使われており、定期預金のテーブルは遅れて読み込まれるため、単に HTML を取得するだけでは情報を全部取得できないためです。

『Rによる自動データ収集』の6章には次のように書いています。

サイトが AJAX を採用している場合,単純に HTML ソースコードを取得するだけでは十分な情報を得られない可能性がある.その場合,情報源を特定するためにサイトの基本的な構造を理解する必要がある.これまで R について称賛してきたわれわれだが,このタスクに関しては,R だけでやるのは難しいだろう.少なくとも,AJAX を使用したサイトに対して,R は必要な機能を提供しているとはいえない.

AJAX を使ったサイトは、単純な方法でスクレイピングできないため、諦めてしまう人も多いと思います。

しかし本書では、ブラウザの開発者ツールを補助的に使用することでこれを解決します。

代わりに,われわれはブラウザで直接サイトを調べることにする.大半のブラウザには Web 開発のための強力なツール機能がついており,それは Web スクレイピングにおいても役に立つ.

本書では、具体的に Google Chrome の Web 開発者ツール(Web Developer Tools;WDT) を使って、データソースを追跡し、欲しい情報がどこにあるのかを特定する方法を詳しく説明しています。

本書での説明通り行えば、R銀行の定期預金金利の情報は、次のようにしてスクレイピングできます。

# 特定されたデータソース
data_source <- "https://rbweb.rakuten-bank.co.jp/REF/main/fis/BasicTimeDepositInterestRate.html?PageID=BasicTimeDepositInterestRatePresentationLogicBean"

# テーブル情報の抜き出し
time_depoit_rates <- data_source %>% read_html %>% html_node('table')

# 情報を確認する
time_depoit_rates %>% html_text %>% cat
#> 期間
#>     預入単位
#>        1,000円以上100万円未満
#>        100万円以上1000万円未満
#>        1000万円以上
#>     7日
#>        0.02%
#>        0.02%
#>        0.02%
#> ……

AJAX を使ったサイトでも、ほとんどの場合この方法でスクレイピングできるようになります。

このように、本書は R だけにこだわらず、より便利なツールがあればそれを使って、効率よく目的を達成するというスタンスで書かれています。

まとめ

インターネットの普及に伴って、Web 上のデータを使ったデータ分析が盛んに行われるようになりました。

そこで重要となるのが、Web 上の情報をいかに効率よく集めるかという問題です。

ここに R を用いることで、データ収集から分析までをシームレスに行うことでき、効率を上げることができます。

本書は、データ収集だけでなく、加工、保管、分析、報告といったデータ分析に必要となる一連の技術ついての本です。

Twitter によるアカデミー賞予測」「商品レビューのセンチメント分析」といった事例もたくさん載っています。

本書を読めば、このようなデータ分析プロジェクトを効率よく進めるためのセオリーを身に着けることができるでしょう。

Rによる自動データ収集: Webスクレイピングとテキストマイニングの実践ガイド

Rによる自動データ収集: Webスクレイピングとテキストマイニングの実践ガイド

分析したいけどデータがない!そんなときはウェブスクレイピング!

献本いただいたので紹介記事を書きます。

Rによるスクレイピング入門

Rによるスクレイピング入門

本書はウェブスクレイピングという、ウェブ上の情報を収集する技術について書かれた本です。

ウェブスクレイピングはデータ分析者にとって非常に有用な技術です。
データ分析をしようと思ったとき、どうやってデータを集めるかというのが問題になる場合があります。
例えばテキスト解析をしようと思っても、ちょうどいいデータセットが手元になく、自分でデータを集める必要があるといった場合があります。
その場合、WikipediaTwitter などからデータを収集するためには、ウェブ技術やプログラミングについて学ぶ必要が出てきます。

例えばウェブ技術の一つである HTML を学ぶとなると、たくさんのマークアップタグがあり、いくつかのバージョンが混在し、ブラウザによっても微妙に異なるといったことが多くの書籍には書かれているわけですが、こういった知識は、単にウェブからデータを収集したいだけの分析者には必要のない知識だったりします。

本書は、そういったウェブ技術やプログラミングに疎い分析者が、ウェブ上からデータを収集するために必要な最低限の知識を学ぶための最短コースを提供しています。
内容としては初心者向けに一通りのことが書かれており、知識はないけど手っ取り早くできるようになりたいという人が最初に手に取るのにちょうどいいと思います。
本書で使用される統計言語 R では、ウェブスクレイピングを簡単にするためのパッケージが利用でき、プログラミング初心者でもわりと容易に自分の思った通りのスクレイピングコードが書けるようになると思います。

章別に見ていくと、次のような感じです。

  1. Rの基礎知識
  2. ウェブ技術
  3. ウェブ API 入門
  4. ウェブスクレイピング実践編
    • rvestパッケージ, Selenium (RSeleniumパッケージ)
  5. ウェブ API 実践編
  6. オープンデータ

1章ではRの基礎知識を簡単に説明しています。ただし、ウェブスクレイピングに必要な知識だけに絞って簡潔に説明されています。

2章は基本的なウェブ技術についてです。ここも要点をしぼって説明されていますが、結構なページ数がさかれています。
例えば、CSSセレクタXPathは、ウェブドキュメントから自分の欲しい部分だけを抜き出すときに、その要素の指定に使われる重要な技術です。
また、抜き出した情報にも余分な情報がある場合もあり、そのような場合は正規表現を使った文字列処理が必要になります。
XMLJSON はウェブから情報を取得する際に返却されるデータ形式としてよく使われるものであり重要です。
このように、本書では膨大なウェブ技術の中でもウェブスクレイピングに必要な情報だけに絞って解説しているというところがポイントだと思います。

3章はウェブ API についてです。ウェブスクレイピングというと HTML ページを解析して情報を抜き出すというイメージがありますが、サイト側が用意した API があるならば、それを使うことが推奨されます。これについては著者自身がブログで説明していますのでそちらをご参照ください。

4章と5章は実践編です。ここでは様々なサイトから実際にデータを抜き出すための方法が具体的なコードと共に提示されます。

6章はオープンデータについてです。現在さまざまな団体がデータを公開しており、これを活用したデータ分析について書かれています。

まとめ

本書はデータ分析者にとって重要な技術であるウェブスクレイピングについて、初心者向けに要点をしぼって解説された本です。
分析したいけどデータがないとお困りの方、ウェブスクレイピングを手っ取り早く学びたいという方におすすめの一冊です。

Rによるスクレイピング入門

Rによるスクレイピング入門

確率論の基礎について発表しました

Watanabe理論勉強会で発表してきました。
前回の発表はこちら

前回は2章だったのですが、2ヶ月半で5章まで進みました。ページ数的には折り返し地点です。

今回の担当は5章前半だったのですが、私の脳みそでは非常に難しく感じたため、5章に入る前に1章で飛ばした確率論基礎について復習させてもらいました。

発表スライドは下記です。

この部分は非常に簡潔に書かれていて、私には分かりやすかったのですが、確率空間は必ずしも距離空間である必要はないとか、可測空間だけでは積分は定義できないとか、詳しい方々からのツッコミが容赦なく入りました。

しかし、この復習で、ある程度は確率空間や確率変数に対するイメージが固まったため、5章を読み進めることができました。

5章の発表スライドは下記です。

タイトル詐欺で経験過程まで行っておらず、法則収束の説明までです。

法則収束は汎化誤差の漸近挙動を研究したいWatanabe理論では重要な概念となります。

この章ではもう一つ、関数に値を取る解析関数についてのセクションも私の担当なので、次回発表する予定です。

Algebraic Geometry and Statistical Learning Theory (Cambridge Monographs on Applied and Computational Mathematics)

Algebraic Geometry and Statistical Learning Theory (Cambridge Monographs on Applied and Computational Mathematics)

A/Bテストと統計的検定の注意点(その1)

素晴らしい記事が上がっていたので言及したい。

この記事では、A/Bテストにおいて、意味のある差が出たかどうかを統計的検定を用いて判断する方法を説明しています。

Web上にある多くのA/Bテストの記事と異なるのは、単に検定手法にデータを突っ込んでp値を出すのではなく、

  • 意味のある差とは何かを事前に決定する
  • サンプルサイズを事前に決定する

という統計的検定のフレームワークに則ったまともな方法で判断を行っているという点です。

よく言われる統計的検定は無意味だなどという言論の多くは、このフレームワークを使っていないだけに過ぎず、不確実な事象に対する科学的な検証方法として、統計的検定のフレームワークの強力さはいまだ健在です。

さて、統計的検定のフレームワークについては上の記事および記事中で紹介されている参考文献にお任せするとして、ここではA/Bテストと統計的検定における、もう少し実践的な話題を紹介したいと思います。

A/Bテストの等質性

A/Bテストとはどういうものでしょうか?
例えば、Webサイトのランディングページに対して2つのデザイン案が持ち上がり、どちらが良いか判断に困る場合があります。
そこで、訪問者をAグループとBグループにランダムに振り分け、それぞれのグループに別々のデザインを見せ、入会率が良い方のデザイン案を採用する、といったことを行うのがA/Bテストです。

上記の記事ではAとBについて次のように書かれています。

  • A「入会率10%の現ランディングページ」
  • B「入会率(以下CVR)15%を期待する新ランディングページ(以下LP)」

ここにはちょっとした罠があります。

こういう風にA/Bを分けると、新ランディングページのCVRが最初だけ良く、途中から下がるという現象にわりと頻繁に遭遇するはずです。

例えば、下記の記事で言及されているような現象です。

ベースラインに対して新しい実験パターンのコンバージョンの方がずっと優勢なんですが,95%ラインを越えたり越えなかったり,という推移が見て取れます.ごく初期に95%を越えた段階で効果あり,と思って実験をストップしちゃうなんていうのは割とありがちな事態ではないでしょうか.

Optimizelyのstats engineによる逐次A/Bテスト - About connecting the dots.

これはなぜ起こるのでしょうか?

A/Bテストにおいて、訪問者をAとBにランダムに振り分けるのは、各グループにおける訪問者の性質を均質にすることが目的です。
もし、Aは男性、Bは女性というような振り分け方をすると、AとBにおける入会率の差が、性別による差なのか、デザインによる差なのか、判別できなくなります。
デザインによる入会率の差を検証したかったら、デザイン以外の要因(例えば男女比)が同じになるように振り分ける必要があります。

ところで、このランディングページに訪れるのは新規訪問者だけでしょうか?
A/Bテストの対象者の中に、現ランディングページを見たことのある人は含まれないのでしょうか?

今、A/Bテストの対象者の中に、新規訪問者と再訪問者が50%ずついるとしましょう。
新規訪問者とは、現ランディングページを見たことがない人たちと定義します。
すると、再訪問者は現ランディングページを見たことがある人たちであり、言い換えると、現ランディングページでは入会しなかった実績を持つ人たちです。
つまり、Aグループにおける再訪問者は、現ランディングページでは入会しにくいという性質を持っていることになります。
そう考えると、AとBの入会率に差が無かったとしても、Aグループにおける再訪問者の入会率はBグループにおける再訪問者の入会率より低くなることが予想されます。

これでは、A/Bテストの前提である「各グループにおける訪問者の性質が均質」を満たしません。

このような場合、どんなに正しく統計的検定のフレームワークを適用ても、正しい結果は得られません。

A/Bテストの評価に統計的検定を使用するならば、グループの等質性についても気を付けなくてならないことがお分かりいただけたかと思います。

(なんか長くなってしまって疲れました。気力があれば続きます。続きが読みたい人はワッフルワッフルと書いて下さい。)

Watanabe理論勉強会で発表してきました

このブログの読者には AIC (赤池情報量基準) をご存じの方は多いと思います.
AIC は統計モデルの評価指標として世界中で広く使われていますが、これは赤池弘次という日本人統計学者により考案されたものです。

これに対し、近年、ベイズ統計学で利用可能な WAIC という情報量基準が考案され、世界中で爆発的に普及しています。
この WAIC を考案したのも日本人であり、東工大の渡辺澄夫先生です。

WAIC は、算出すること自体は簡単なのですが、その理論的な根拠として非常に高度な数学が使われています。
この理論について、渡辺先生ご自身が書かれた書籍があります。

Algebraic Geometry and Statistical Learning Theory (Cambridge Monographs on Applied and Computational Mathematics)

Algebraic Geometry and Statistical Learning Theory (Cambridge Monographs on Applied and Computational Mathematics)

Watanabe理論勉強会は、この本を熟読し、この偉大な理論を理解することを目的として発足された勉強会です。

今回、私は第二章の前半部分を担当させていただきました。
発表スライドは下記です。

タイトルは煽りですが、特異点とその解消は渡辺理論において非常に重要です。
今回の発表は特異点の定義とその判定法に関する定理の証明までが範囲です。

ご参考になれば幸いです。

参考リンク

こちらは渡辺理論について日本語で書かれた書籍の読書メモです。たいへん勉強になります。

ベイズ統計の理論と方法

ベイズ統計の理論と方法

追記

ちなみにこの本、Amazon 洋書の売れ筋ランキング 3部門で 1位です。すごい。