ほくそ笑む

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

Stochastic Online Anomaly Analysis for Streaming Time Series 読んだ

Stochastic Online Anomaly Analysis for Streaming Time Series (IJCAI 2017) https://doi.org/10.24963/ijcai.2017/445

Student-t process を使ったストリーミング時系列に対する新しい異常検知手法を提案する。 時系列関数が Student-t process に従うと仮定し予測分布を推定する。 得られた予測分布に対して実際の観測値が確率 p の予測区間から外れた場合を異常とみなす。 モデルの学習はフルベイズで行われ、カーネル関数の持つハイパーパラメータについても学習する。 (カーネル関数の選択はある程度重要になってくると思われるが論文中では選択法については触れていない) 通常はバッチ学習だがストリーミングデータに対応するために SGD を用いたオンライン学習手法に改変する。 実験では、既存手法より提案手法の方が、異常検知精度と予測精度の両方において良いという結果が得られた。 [Smith+ 2012] ではガウス過程を使った同様の手法が提案されているが、学習データに外れ値が含まれている場合に予測精度が落ちる。 これに対し、Student-t process では外れ値に対してロバストであることを実験により示した。

Sparse Gaussian Markov Random Field Mixtures for Anomaly Detection 読んだ

Sparse Gaussian Markov Random Field Mixtures for Anomaly Detection (ICDM 2016) http://ide-research.net/papers/2016_ICDM_Ide.pdf

複数の動作モードに対応可能かつ変数ごとの異常スコアを算出できる新しい異常検知手法を提案する。 通常、異常検知を行いたいシステムは複数の動作モードを持つことが多いが従来の手法ではこれに対応できない。 また、ホテリング T2 などの古典的な手法では多変量であっても異常スコアは観測ごとにしか算出されない。 変数ごとに異常スコアが算出できればシステムのどこに異常が生じたかを突き止めやすくなる。 これらの問題に対応するため、ガウスマルコフ確率場の混合モデルを考え、その変分ベイズ推定アルゴリズムを導出する。 ガウスマルコフ確率場により、ある変数の異常スコアを同じ観測の他の変数の値から求めることができる。 また、混合モデルにより複数の動作モードを表現できる。 動作モードの数(混合数)は不明なため、大きめの数を設定しておけば重みをスパースに推定し、混合数を自動決定する仕組みを取り入れる。 実験として、合成データに対して混合数、混合比率、動作モードについてうまく推定できることを示した。 また、オイル生産コンプレッサーの実データを用いて、他の手法と比較して異常検知性能が良いことを示した。

参考

www.yasuhisay.info

Putting MRFs on a Tensor Train 読んだ

Putting MRFs on a Tensor Train (ICML 2014) http://proceedings.mlr.press/v32/novikov14.pdf

マルコフ確率場(MRF)のパラメータ推定に使われる最尤訓練法では、分配関数の良い近似が必要とされる。 離散変数の正規化されていない同時分布をテンソル(多次元配列)とみなすと、分配関数はその要素の総和として求めることができる。 ただし、テンソルはそのままではメモリに載らないため、テンソル分解の1つであるテンソルトレイン(TT)形式を用いることで容量を削減する。 TT形式の要素の総和を直接的に求めると、TTランクが指数的に増加し、計算時間も増加する。 そこで、TTランクの低い因子(factor)の状態のままで分配関数の近似を計算するアルゴリズムを提案する。 このアルゴリズムにより求められた分配関数について、誤差の上限を理論的に証明し、既存手法より誤差が小さいことを実験により示した。

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

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

冬休みのお供にどうぞ。

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

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

  • 作者:朝野 煕彦
  • 出版社/メーカー: 朝倉書店
  • 発売日: 2017/02/20
  • メディア: 単行本(ソフトカバー)

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

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

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

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

  • 作者:Olle H¨aggstr¨om
  • 出版社/メーカー: 共立出版
  • 発売日: 2017/05/09
  • メディア: 単行本

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

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

  • 作者:John K. Kruschke
  • 出版社/メーカー: 共立出版
  • 発売日: 2017/07/22
  • メディア: 大型本

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

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

  • 作者:手良向 聡
  • 出版社/メーカー: 金芳堂
  • 発売日: 2017/07/27
  • メディア: 単行本(ソフトカバー)

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

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

  • 作者:須山 敦志
  • 出版社/メーカー: 講談社
  • 発売日: 2017/10/21
  • メディア: 単行本(ソフトカバー)

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

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

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

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

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

  • 作者:金城俊哉
  • 出版社/メーカー: 秀和システム
  • 発売日: 2017/12/20
  • メディア: 単行本

ベイズ統計学 (やさしく知りたい先端科学シリーズ1)

ベイズ統計学 (やさしく知りたい先端科学シリーズ1)

  • 作者:松原 望
  • 出版社/メーカー: 創元社
  • 発売日: 2017/12/20
  • メディア: 単行本

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

ベイズモデリングの世界

ベイズモデリングの世界

  • 作者:
  • 出版社/メーカー: 岩波書店
  • 発売日: 2018/01/18
  • メディア: 単行本(ソフトカバー)

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

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

  • 作者:大関真之
  • 出版社/メーカー: オーム社
  • 発売日: 2018/02/03
  • メディア: 単行本(ソフトカバー)

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によるスクレイピング入門