Japan.R 2015に参加して得た情報まとめ

Japan.Rで私にとって使えそうなアイデアや手法だけを厳選して載せたいと思います。(結局、長くなった気がしますが。。)
全てを見たい場合は、この方のブログがよいと思います。
Japan.R 2015に参加してきた

Spark Streaming

Spark Streamingストリーミングを使って、挙動に応じて自動的にメールやSlackに送るとかでサイトの監視に使えるそうな。

jupyter

RでいうところのRStudioのような分析しやすいPython用のGUI
 

rangerパッケージ

RFなどができる。C++で実装されているので速いらしい。
最近のRのランダムフォレストパッケージ -ranger/Rborist-

RcppRollパッケージ

移動平均とかの計算が楽になるらしい。
インターネットの予約のステップの伸び率をモデリングし、ある一定速度だとしたら表示を出し分けるなどの施策に活かしているそうな。

多腕バンディットアルゴリズム

サイト内のバナーなどの出し分けの最適化に使っているらしい。Rでは重くてできないそうな。

leafletパッケージ

これを使えば地理データの可視化が簡単にできる。
→デフォルトの地図がOpenStreetMapなので、サイトに載せる際も好都合。
→「ぐりぐり動かせる・レイヤー構造・多機能・Shinyでアプリケーションも作れる」
→Githubの方がバージョン上
→データテーブルで読み込んで緯度経度を指定する。
 サークルや線の太さも指定でき、ポップアップも立てれる。
 地点間でのラインも引ける。addPolylines
 プロットでエクスポートでWebページにすれば図が作れる。
leafletでMapbox(とかいろいろな地図)を使う

purrrパッケージ

→複数のモデルをリストにして、推定結果を一気に出すことができる。(都度、モデルを作る必要がない。)
{purrr} による非テーブルデータの処理
purrr 0.1.0を使ってみる(1) map

ggfortifyパッケージ

purrrで実行した分析結果のプロットなどが簡単にできるらしい。
Concepts and Basics of ggfortify

Shiny

分析結果を可視化したりできるツールとしてはカジュアルにできていいかもしれない。
無料版では複数のアクセスに弱いので社内用のツールとしてはいい。

rApacheパッケージ

rとアパッチでwebアプリケーションを作れる。

deployR

APIを作るためのフレームワーク

Gradient Boosting Decision Tree

モデルの性能が良くなるように特徴量の選択ができる手法らしいです。これは進捗が良くなる、イケメンな手法ですね。
今度深掘ってみたいです。
Gradient Boosting Decision Treeでの特徴選択 in R

SparkRパッケージ

Rからスパークの処理を実行できる。
SparkRをEC2上で動かして分散処理してみる

Parquet(パーケ)

ビッグデータで一般的になってきているフォーマットのことらしい。
10GBのデータが300MBになった。→これはすごい!!
DMMゲームのログ解析~Parquetについて~

TinySegmenter

MeCabとかを入れてごにょごにょすることが許されていない方向け?
TinySegmenter:Javascriptだけで書かれたコンパクトな分かち書きソフトウェア

knitrパッケージ

Rの分析結果をhtmlでレポーティングができる。
R でレポートを作成するのに knitr が超便利

R Presentation

Studioでスライド作成できる。
Rとウェブの融合(5)ーslidify、R Presentationー

rvestパッケージ

RでWebスクレイピングができてしまう。(私はPythonでやっていますが。)
rvest でログインしてスクレイピング #rstatsj

pforeachパッケージ

デフォルトで並列計算するようにしたパッケージ
R で超簡単に並列処理を書けるパッケージ pforeach を作った

RstanでGoogleトレンドの推定

rstanを用いて、Googleトレンドデータの予測モデルを推定してみます。

ほとんど岩波データサイエンスのものですが、Googleトレンドのデータを月ごとの季節性を加味した状態空間モデルを用いて予測してみました。

今回の分析では、
・modelのstanコード(stan)
・Rでstanを動かすためのコード(R)
(・可視化のためのコード(R))←必須ではない
を用意します。

データですが、GoogleTrendのサイトで任意のキーワードで検索して、
その時系列データをCSVでダウンロードすれば手に入ります。(ちょっと見つけにくい)

データの形式はシンプルで、
先頭にY
とおいて後はトレンドの値を行ごとに置いていけばいけます。

要はN行1列データをテキストファイルに保存すればOKです。(1行目はY)

まずstanのコードですが、岩波データサイエンスのサンプルコードの季節を4から12に変えています。(たったこれだけ)
Googleトレンドのデータは月単位でも結構値がふれることがあるので、月ごとに応じた潜在的な変数が必要だと思いました。

Rでstanを動かすためのコードですが、ここはサンプルコードとほぼ一緒です。

可視化のためのコードについてもサンプルコードとほぼ一緒です。

以上を実行した結果、以下のような図が出てきます。

fig2-top-left
こちらは実際の時系列データのプロットです。

fig2-top-right
8期先までの予測です。

fig2-bottom-left
8期先までの予測範囲です。信頼区間90%までの範囲となっています。

fig2-bottom-right
推定した潜在的な季節性のデータをプロットしています。

ついでに、4月までのデータを用いて、5~9月の予測を行い、その比較を行っています。

prediction_trend

5月が大きく外れましたが、その後はある程度当てれているように見えます。
5月も当てれるようなモデルを作りたいものですね。

参考文献

推薦システムに関する参考情報

推薦システムとは

情報をフィルタリングするための技術の一種
ユーザーが次に興味を持つ情報は何か?を科学する。

推薦システムの種類

・協調フィルタリング
 同じような行動を行ったユーザーの行動に基づき、まだ見ていない情報を提示する。
 Explicit Feedback
 Implicit Feedback
 コールドスタート問題
 ユーザー理解、サービス理解も重要

・内容ベースフィルタリング
 自分の過去の行動に基づき、見た情報などに似た情報を提示する。
 距離を定義できれば提示できる。
 質の評価を組み込むことが重要。
 分類モデルを用いることもできる。→ラベル付けされたデータをもとに統計的な手法でラベル付けをする。
 (ナイーブベイズ、ロジスティック回帰、SVM)
 →ただし、定期的なチューニングが必要。
  性能を高めるためには、次元削減も重要。

 

レコメンドの評価指標

 基準の設置
  一定以上のユーザーがアクションしているアイテムかどうか
  信頼できる情報かどうか
 
 多様性の導入
  同じカテゴリの商品がリストに提示される個数を制限する。
  同じカテゴリを提示した個数に応じて評価値を減衰させる。

 意外性の導入(セレンディピティ)
  システムが評価したものとは一致しない情報を推薦リストに載せる。
  →この際に一致しない情報は他のユーザーがよく見ているものを選ぶと良い。

 A/Bテスト
  一部はA/Bテストを行い、一部では同じアルゴリズムを提示し続ける。
  推薦システムの長期的影響と短期的影響の両方を考慮するべき。
  システム全体に悪影響を及ぼすことがあれば本末転倒である。

レコメンドの最先端

T.B.A

Rで実行するには

RecommendarLab
・レコメンデーションアルゴリズム
・レコメンデーションの評価
・レコメンド用データの整形
・サンプルデータセットもある(5000人分のジョークに対する評価)
Using R package, recommenderlab, for predicting ratings for MovieLens data

参考文献

データサイエンティスト養成読本 機械学習入門編 (Software Design plus)

統計解析の学習用動画まとめ

階層ベイズ&MCMC講義 (久保拓弥) 難易度★★
緑本こと、『データ解析のための統計モデリング入門』を書かれた久保先生による解説動画です。
本でいうところの8章と10章が扱われているようです。

MCMC講義(伊庭幸人) 難易度★★
伊庭先生によるMCMCの解説動画です。長いですが、丁寧に解説されています。

パターン認識と機械学習入門 第1回@ワークスアプリケーションズ

Dan Does Data: Tensor Flow, Deep MNIST for Experts

慶應大学講義 応用確率論 第十三回 ベイズの方法 カルマンフィルタ1
https://www.youtube.com/watch?v=P85JCE3tZWY

強化学習講義 (牧野貴樹) 難易度★★

多腕バンディットなど強化学習の手法についてかなり細かく説明されている動画です。長いですが、濃ゆい内容なので効率的に勉強ができると思いました。

Sparkの仕組み・導入メリット・インストール方法など

【目次】
・Sparkについて
・Sparkの歴史
・Sparkの仕組み
・データ分析におけるSpark導入のメリット
・Sparkの導入方法
・参考文献

Sparkについて

OSS(Open Source Software)のインメモリ処理の分散並列基盤
※インメモリ(メインメモリ上で処理するため、ディスクストレージを介するよりも高速かつ安定しているらしい。メモリに乗り切らないようなケースでも、ディスクを利用するなどしてアプリケーションが問題なく動作するように作られている。)
ビッグデータ活用を支えるプラットフォームとして注目されている。
比較の際はHadoopで言う所の、MapReduceが引き合いに出されます。MapReduceがバッチ処理に特化した仕組みになっているのに対して、Sparkはバッチ処理だけでなく、対話的な処理や繰り返し処理・ストリーミング処理といった多様なデータ処理のパターンに対応できる仕組みになっていることから、Sparkに注目が集まっています。

分散処理エンジンとして、Apache Spark Coreがあり、以下の様な機能が用意されているようです。

Spark SQL・・・SQL処理用
Spark Streaming・・・ストリーミング処理
MLib・・・機械学習処理用
 基本API
 ・統計情報の取得
 ・相関関係の算出
 ・層化抽出
 ・仮説検定
 ・ランダムデータ生成
 機械学習アルゴリズム
 ・分類回帰(SVM、ロジット、線形回帰、ナイーブベイズ、決定木、ランダムフォレスト、isotonic回帰)
 ・協調フィルタリング(ALS(Alternating Least Squares))
 ・クラスタリング(K平均法、混合ガウシアン、PIC、LDA、ストリーミングK平均法)
 ・次元削減(SVD、PCA)
 ・特徴抽出&変換(TF-IDF、Word2Vec、etc…)
 ・頻出パターンマイニング(FP-Groth、アソシエーションルール、PrefixSpan)
GraphX・・・グラフの処理
※機械学習の機能があるのは嬉しいですね。スクラッチで作るのはペインフルなので。

データソースとしては、HDFS(Hadoop Distributed File System)だけでなく、Hive、HBase、PodgreSQL、MySQL、CSVファイルなども対応している。

Sparkの歴史

2009年にUC BarkeleyのMatei Zaharia氏がScalaを用いて開発

Google Trendで検索トレンドを見たところ、2014年頃から今に至るまで伸び続けています。
GoogleTrend

Sparkの仕組み

RDD(Resilient Distributed Dataset)
不変で並列実行可能な分割されたコレクションのことを指します。
これによりユーザーが並列分散処理を意識しなくとも、それができる環境が提供されます。
こちらのRDDを
map,filter,union,flatMapなどのTransformations
で生み出し、RDDのデータを
reduce,countなどのActions
を実行することで動かします。
RDDを任意の時点でメモリやディスクに保存することもできるため、処理の再実行のみならず、同じデータを複数回利用するなど、複雑なデータ処理に関しても効率的に実行できます。
SparkはScalaという言語で書かれていますが、Python・Java・Rなどに対してAPIが提供されているので、幅広いユーザーが扱うことが可能です。しかしながら、痒いところに手を届かせるためには、Scalaの勉強は避けられないのかもしれません。実際のところ、大体のデータマイニング系エンジニアの知り合いはScalaの勉強などをしていた印象があります。

データ分析におけるSpark導入のメリット

・並列分散の手法を意識せずに大規模データの処理が可能になる。
・Rなどの苦手とする反復処理を高速化させることができる。
・データ取得、前処理、分析処理、レポーティングを一つのプラットフォームで実行できる。
・コマンドラインによるインタラクティブな試行錯誤がしやすいので、データ分析のタスクに向いている。(PythonやRのように)

※レコメンドエンジンとしてSparkを用いるケースも観察されているようです。
 Yahoo!台湾

Sparkの導入方法

ここでの導入はあくまでもプログラミングを学ぶためであって、ローカル環境での実行環境の構築ではSparkのメリットを感じることはできません。
※SparkはJava仮想マシン上で動作するため、事前にOracle JDKをインストールしておきましょう。
Java SE Development Kit 8 Downloads

■Windowsの場合
Apache Sparkで始めるお手軽リアルタイムウインドウ集計
こちらで手順が詳しく書かれています。

■Macの場合
Macの方が導入はシンプルです。
Download Spark
からダウンロードします。(SparkRはSparkのver1.4以降からサポートされているそうです。)
HOW TO INSTALL APACHE SPARK ON MAC OS X YOSEMITE
Apache Spark 1.6.0 setup on Mac OS X Yosemite
そこで、

build/mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package

を実行すればコンパイルできるようです。(10分ほどかかる。私は30分もかかったが。。)

そのあと、パスを通します。
PATH=/usr/local/share/spark/bin:$PATH; export PATH

それから、pythonでsparkを動かしてみます。
pyspark

を実行して、試しにReadmeのテキスト行数をカウントさせるコマンドを入力します。これは、textFileメソッドを用いて、Readmeファイルを読み込み、linesという名前のRDDを生成していることを意味します。
lines = sc.textFile(“/usr/local/share/spark/README.md”)

そして、このコマンドで値が返されたら、うまく動いていることが確認できるでしょう。
print lines.count()

加えて、ワードカウントを行うコマンドを入力します。(スペース区切りで分解し、mapメソッドで(単語, 1)という組み合わせに変換したあと、最終的にreduceByKeyで同一の単語を足し上げるという処理をしています。)

counts = lines.flatMap(lambda line: line.split(” “)) \
.map(lambda word: (word, 1)) \
.reduceByKey(lambda a, b: a + b)

そして、これで結果を取得します。
counts.collect()

スクリーンショット 2016-05-02 12.21.50

参考文献

Spark を活用する:ビッグデータアプリケーション用の高速インメモリコンピューティング

Apache Spark入門 動かして学ぶ最新並列分散処理フレームワーク (NEXT ONE)

詳解 Apache Spark

[Apache Spark]RDDについて簡単にまとめてみた

Rユーザのためのspark入門

Spark 1.4.0 の SparkR を動かす

Spark Examples

多腕バンディットモデルに関する参考文献

多腕バンディットモデルについて調べた際の文献です。

バンディットアルゴリズム入門と実践
http://www.slideshare.net/greenmidori83/ss-28443892
目的
・限られた施行回数の中で、最も良い選択をすること。
背景
・大体のことはやってみないとわからない。
・何度繰り返しても100%正しく知ることはできない。
解説
・探索(Explore)→不確実だが行ったことのない店に行ってみる。
・活用(Exploit)→実績ある行きつけの店に行く。
・探索と活用のトレードオフ
・選択肢(アーム)
・引く
 アームを選択して結果を得ること
・探索
 アームに関する情報を増やすためいアームを引くこと
・活用
 今持っている情報から最も良いアームと判断できるアームを引くこと
・epsilon-greedy
 探索と活用を確率的に行う
・epsilon-first
 ある一定期間完全に探索を行い、その後の期間は活用のみを行う
・softmax
 当たる確率の高いアームを高い確率、当たる確率の低いアームを低い確率で引くことで、探索と活用を行う
・Upper Confidence Bounds(UCB)
 アームについてどれだけ知っているかの情報を考慮に入れてアームを選択、知らないアームについて積極的に探索
・Bayes
 ベイズ確率を計算して、良いアームの確率が最も高いアームを引く
・ユーザーのクラスタに応じて、バンディットアルゴリズムで施策を打てば、one to oneマーケティングに近づけるかも

バンディットアルゴリズムによる最適化手法
https://www.oreilly.co.jp/books/9784873116273/

johnmyleswhite/BanditsBook
https://github.com/johnmyleswhite/BanditsBook

バンディットアルゴリズムによる最適化手法 4章
http://hagino3000.blogspot.jp/2014/05/banditalgo4.html

A/Bテストよりすごい?バンディットアルゴリズムとは一体何者か
http://qiita.com/yuku_t/items/6844aac6008911401b19

Bayesian Bandits – optimizing click throughs with statistics
https://www.chrisstucchio.com/blog/2013/bayesian_bandit.html

Beta-distribution Bandit
https://gist.github.com/stucchio/5383015#file-beta_bandit_test-py

雑談
先日、強化学習に明るい方の話を伺ったのですが、A/Bテストはどちらが良いかノウハウが溜まる観点からすると、良い試みなので、多腕バンディットと単純比較するのはあまりしないとおっしゃられていました。それでもやはり、最終的に良い方に表示がされるようになるはずなので、無駄の多いA/Bテストよりも、強化学習を使ってサイトとしての収益を重視した方がいいのだろうという話で落ち着きました。
アイテム数が多い場合は強化学習も大変だと思いますが、2つのクリエイティブの出し分けとかならカジュアルに実装できそうですね。

状態空間モデルに関する参考文献

  • 実行環境
  • 状態空間モデルの実行方法と実行環境の比較
    http://www.slideshare.net/hirokito/2014-esj

  • 研究事例
  • 状態空間モデルによる広告効果分析
    http://blog.albert2005.co.jp/2014/07/09/%E7%8A%B6%E6%85%8B%E7%A9%BA%E9%96%93%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AB%E3%82%88%E3%82%8B%E5%BA%83%E5%91%8A%E5%8A%B9%E6%9E%9C%E5%88%86%E6%9E%90/#more-307

    状態空間モデルによる飲食店日次売上の要因分解
    http://www.ism.ac.jp/~tsuchiya/sympo/shukai03/shukai03-papers/Yamaguchi_OPT04.pdf

    ロジスティック回帰分析に関する参考文献

    ロジスティック回帰分析に関する参考文献を載せています。
    限界効果についてや、多項ロジットなどについての文献もあります。

  • Rのパッケージ
  • Package ‘mfx’
    http://cran.r-project.org/web/packages/mfx/mfx.pdf
    限界効果を計算できるmfxパッケージ。

    Package ‘mlogit’
    http://cran.r-project.org/web/packages/mlogit/mlogit.pdf
    多項ロジットを計算できる。

  • 実行例
  • R Data Analysis Examples: Logit Regression
    http://www.ats.ucla.edu/stat/r/dae/logit.htm

    R Data Analysis Examples: Multinomial Logistic Regression
    http://www.ats.ucla.edu/stat/r/dae/mlogit.htm

    テキストマイニングに関する参考文献

    テキストマイニングの入門の情報から最新の研究までを集めています。
    随時更新します。

  • 学習
  • 自然言語処理を独習したい人のために
    http://cl.sd.tmu.ac.jp/prospective/prerequisite

    確率的潜在意味解析
    http://www.gifu-nct.ac.jp/elec/deguchi/sotsuron/yoshimura/node14.html

    Probabilistic latent semantic analysis
    http://en.wikipedia.org/wiki/Probabilistic_latent_semantic_analysis

    PythonでPLSAを実装してみる
    http://satomacoto.blogspot.jp/2009/10/pythonplsa.html

    RでPLSA(PLSI)
    http://sucrose.hatenablog.com/entry/20110604/p1

  • テキストマイニング環境の構築
  • RMeCab と RCaBoCha をインストールしてみた
    http://antimon2.hatenablog.jp/entry/2012/09/02/214131

    RCaBoCha
    http://rmecab.jp/wiki/index.php?RCaBoCha

  • LDA関連
  • “トピックモデルによる統計的潜在意味解析”を読んでLDA(Latent Dirichlet Allocation)を実装しましたAdd Star
    http://d.hatena.ne.jp/echizen_tm/20150321/1426952208

    LSIやLDAを手軽に試せるGensimを使った自然言語処理入門
    http://yuku-tech.hatenablog.com/entry/20110623/1308810518

    gensimに日本語Wikipediaを取り込むためのスクリプト
    https://gist.github.com/yuku-t/1040366

  • 研究
  • 特許公報を用いた自然言語処理による業界分析、及びSpotfireによる可視化
    http://togotv.dbcls.jp/20101220.html

    メンション情報を利用したTwitterユーザープロフィール推定
    http://dbsj.org/journal/dbsj_journal_j/dbsj_journal_vol_13_no_1_1_6/
    http://dbsj.org/wp-content/uploads/2014/11/DBSJ13-1_P01-06_okutani.pdf.pagespeed.ce.ryqKKFAwd6.pdf

    誕生・使用事由によるレシピ検索~生い立ちレシピサーチ~
    http://dbsj.org/journal/dbsj_journal_j/dbsj_journal_vol_13_no_1_78_85/
    http://dbsj.org/wp-content/uploads/2014/11/DBSJ13-1_P78-85_kadowaki.pdf.pagespeed.ce.A2TxRNdZlm.pdf

    特徴トークンに注目した Smith-Waterman アルゴリズムに基づく剽窃ソースコードの自動検出手法
    http://www.it.mgmt.waseda.ac.jp/results/student1/2012-M2-Hibi.pdf

    Rstanの参考文献(インストール・使い方・実践)

    Rstanに関する情報を集めたものです。
    ・インストール
    ・使い方
    ・実践
    について載せています。
    随時更新します。

  • インストール関連
  • Windows 7にRStanをインストールする
    http://cordea.hatenadiary.com/entry/2013/11/20/201209

    Building R for Windows
    https://cran.r-project.org/bin/windows/Rtools/index.html

    【R】OSXでRStanの導入と簡単な例題【MCMC】
    http://www.fisproject.jp/2015/04/rstan/

    MCMCの計算にStanを使ってみた(超基礎・導入編)
    http://tjo.hatenablog.com/entry/2013/11/06/201735

    R stan導入公開版
    http://www.slideshare.net/KojiKosugi/r-stan

  • 使い方
  • RStan Getting Started
    https://github.com/stan-dev/rstan/wiki/RStan-Getting-Started

    Computation in R and Stan
    http://www.stat.columbia.edu/~gelman/book/software.pdf

    stan Documentation
    http://mc-stan.org/documentation/

    Stan: A Probabilistic Programming Language
    http://www.stat.columbia.edu/~gelman/research/published/stan-paper-revision-feb2015.pdf

    The Stan Modeling Language
    http://mlss2014.hiit.fi/mlss_files/2-stan.pdf

    Stanで統計モデリングを学ぶ(7): 時系列の「トレンド」を目視ではなくきちんと統計的に推定する
    http://tjo.hatenablog.com/entry/2014/12/05/190105

    Bayesian linear mixed models using Stan: A
    tutorial for psychologists, linguists, and cognitive
    scientists

    http://arxiv.org/pdf/1506.06201v1.pdf

  • 実践
  • R で 状態空間モデル: 状態空間時系列分析入門を {rstan} で再現したい
    http://sinhrks.hatenablog.com/entry/2015/05/28/071124

    書籍

    StanとRでベイズ統計モデリング (Wonderful R)

    基礎からのベイズ統計学: ハミルトニアンモンテカルロ法による実践的入門