Japan.R 2016のスライドまとめ

まだ手に入れていないスライドもあるので随時更新しますが、Japan.R 2016(connpass)のスライドをまとめています。後日、登場したパッケージなどのサンプルコードも載せていく予定です。

目次

・石田基広さんのキーノート
・ホクソエムとは何だったのか(ホクソエムさん)
・Rと探索的データ分析で、国連での日本の立ち位置を可視化する(安田洋介さん)
・マウス操作でかんたん予測分析(鈴木了太さん)
・高速・省メモリにlibsvm形式でダンプする方法を研究してみた(@hskksk)
・Rでてんしょくかつどう(@Med_KU)
・RStudio vs Emacs(@y__mattu)
・randomforestで高次元の変数重要度見る(@siero5335)
・Rで本を作りたい(前田和寛さん)
・28歳でプログラミングを始めた話(市川太祐さん)
・LDA-Visパッケージのご紹介(@doradora09)
・【e2d3R】E2D3からDot-Bar-Chartのご紹介(楠本一哲さん)
・このIRのグラフがすごい!上場企業2016(@ito_yan)
・Rでカルマンフィルタをしたい(@tetsuroito)
・PPAP(仮)(@yutannihilation)
・スライド未公開、ユーザーの状態遷移に関する分析のお話(@sanoche16)
・私とR(高栁慎一さん)
・めくってもめくってもサンプル画像(服部恵美さん)
・木と電話と選挙(causalTree)(安井翔太さん)
・スライド未公開、dplyrの話(@tomomoto)
・てかLINEやってる?(仮)(@wonder_zone)
・心理学における「再現性」の問題とBayes Factor(@NSushi)

・石田基広さんのキーノート

スライド未公開です。

・Linux使い
・ヘブライ語の意味構造を代数学でやっていた
・S/R言語の生みの親はJohn Chambers
 以下の二つは最近書かれた本だそうです。
 Software for Data Analysis: Programming with R (Statistics and Computing)
 Extending R (Chapman & Hall/CRC The R Series)
・S→S-plus→Rの順番で発展
・purrrを最近使い始めたそうです。
・XLConnectパッケージを使って、大学教員の採点活動を効率化しているそうです。

・ホクソエムとは何だったのか(ホクソエムさん)

匿名技術者集団ホクソエムの2016年の成果
・densratio( densratio: Density Ratio Estimation
・githubinstall
githubinstall: A Helpful Way to Install R Packages Hosted on GitHub
・healthplanet( Wrapper package for healthplanet api
・RODBCDBI
RODBCDBI: Provides Access to Databases Through the ODBC Interface
・jpmesh( jpmesh: Utilities for Japanese Mesh Code

起業されたとのことです。懸命に頑張って下さい!
株式会社ホクソエム

awesomeな人材が必要とのことで、awesomeな方はアプライしてみてはいかがでしょうか。

・Rと探索的データ分析で、国連での日本の立ち位置を可視化する(安田洋介さん)

スライド未公開です。
国連のデータを使って、Exploratoryを用いた探索的データ分析の実演をされていました。

・マウス操作でかんたん予測分析(鈴木了太さん)

R AnalyticFlow
Rで実践!データサイエンス~初めの一歩から高度な応用まで~

・高速・省メモリにlibsvm形式でダンプする方法を研究してみた(@hskksk)

・Rでてんしょくかつどう(@Med_KU)

Rmd でreveal.js のhtml スライドプレゼンテーション

・RStudio vs Emacs(@y__mattu)

RStudio vs Emacs Japan.R 2016

・randomforestで高次元の変数重要度見る(@siero5335)

・Rで本を作りたい(前田和寛さん)

Rで本を作りたい

・28歳でプログラミングを始めた話(市川太祐さん)

・医療関連のアプリ開発でデータサイエンスを駆使しようとしているそうです。

スライド未公開です。
スライドがシェアされ次第載せます。

・LDA-Visパッケージのご紹介(@doradora09)

・【e2d3R】E2D3からDot-Bar-Chartのご紹介(楠本一哲さん)

スライドは未公開です。
E2D3をRで表示する試みのようです。
Experiments with e2d3 in R

・このIRのグラフがすごい!上場企業2016(@ito_yan)

スライド未公開です。後日シェアしていただけるようです。

・Rでカルマンフィルタをしたい(@tetsuroito)

・PPAP(仮)(@yutannihilation)

・スライド未公開、ユーザーの状態遷移に関する分析のお話(@sanoche16)

スライドがシェアされ次第載せます。

・私とR(高栁慎一さん)

RjpWiki
統計・データ解析
統計解析フリーソフト R の備忘録頁 ver.3.1
seekR(R限定の検索エンジン)
からだにいいもの
アブラタニブログってなんでしょう。油谷さんのブログ?

・めくってもめくってもサンプル画像(服部恵美さん)

Rのサンプルコードはあるけれども、どんな図ができるのかはわからない。そこで、サンプルコードとグラフを大量にまとめているサイトを作ったそうです。検索性は未知数ですが、暇なときに眺めておきたいですね。
R Graphical Manual

・木と電話と選挙(causalTree)(安井翔太さん)

・スライド未公開、dplyrの話(@tomomoto)

スライドがシェアされ次第載せます。

・てかLINEやってる?(仮)(@wonder_zone)

・心理学における「再現性」の問題とBayes Factor(@NSushi)

スライドは後日公開とのことです。

『マーケティング・サイエンス入門』に出てくる手法をRで実行してみる

友人に『マーケティング・サイエンス入門』がおすすめと言われて読んだんですが、やっぱり実行できないとモヤモヤしてしまいますよね。そこで、登場する手法に関連したRのコードやらを集めてみました。

・BASSモデル
・多次元尺度法
・因子分析
・ロジット&プロビット
・分散分析
・クラスター分析
・判別分析
・決定木
・コンジョイント分析
・RFM分析
・共分散構造分析

BASSモデル

市場全体の規模が動的にどのように変化するかを予測するために使われるモデル。
R を使ってバスモデルを当てはめてみた – 廿TT
こちらにRのコードや適用例がいくつか載っています。

早速、私も携帯電話の加入契約数の時系列データを用いて、コードを実行してみました。データは平成25年版の総務省の情報通信白書の表から得ました。( 第2部 情報通信の現況・政策の動向
mobile_phone_plot

当てはまりはわずかながら、BASSモデルの方が良いようです。

多次元尺度法

多次元尺度法で遊んでみる(オレ流 R入門)
こちらのブログで山手線の駅間の距離データの可視化がなされています。
各駅ごとの距離からなる行列さえ用意すれば、cmdscale()関数を実行することで可能なようです。

今回はContaminatedMixtパッケージに含まれているワインのデータセットを使って多次元尺度法を適用してみようと思います。

データはこんな感じです。
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-03-18-48-01

以下のコードで実行しました。

wine_cmd

Barbera(バルベーラ)・・・基本的にはタンニンをあまり含まず、酸味の強い色の濃い赤ワインで庶民的。
Barolo(バローロ)・・・アルコール度数が高く、非常に重厚な味わいのワインでワインの王様と呼ばれる。
Grignolino(グリニョリーノ)・・・僅かにタンニンを感じるサッパリとした辛口の赤ワインで庶民的。

庶民と王様のワインは成分においても違いがありそうですね。

因子分析

psychパッケージというものがあるようです。こちらのサイトを参考にして進めます。( スナック菓子の食感についてRで因子分析してみた
今回は大好きなwiskyのデータセットを使ってみます。( Classification of whiskies

グレンフィディックやカリラやタリスカーがイメージ通りにプロットされています。ラガブーリンやアードベッグがはみ出しているのが残念ですが。
biplot_wiskey

ロジット・プロビット

これらの手法はビルトインの関数でできてしまいますが、せっかくウイスキーのデータがあるので、薬っぽさに繋がりそうな変数を見つけてみます。

推定結果はこちらです。スモーキーさが関係しているのは納得です。

ちなみに、多項ロジットに関しては、mlogitパッケージを使えばできるようです。( 多項ロジット(Multinomial Logit), R – mlogit 使用メモ )大学院時代に多項ロジットはSTATAでよく使っていましたが、Rだとこのパッケージなんですかね。推定した係数の値の解釈が若干複雑だったりします。

分散分析

分散分析もビルトインの関数で実行することができます。今回はワインのデータを用いて、銘柄から30個ランダムサンプリングをした上で、アルコールに関して群間の母平均値が同じかどうかを確かめてみます。コードはこちらを参考にしました。( R による分散分析(一元配置)

推定結果はこちらです。アルコールに関しては、3群間において差があるようです。

クラスター分析

クラスター分析もビルトインの関数で実行可能です。ここでは参考文献( K-means Clustering 86 Single Malt Scotch Whiskies )のウイスキーのサンプルで取り上げられたK-mean法をそのまま紹介します。

気になるクラスターの結果ですが、どうやらアイラ島系のウイスキーのクラスターを作れたようです。

判別分析

MASSパッケージで実行可能です。線形識別関数の実行例がこちらの参考文献に載っていたので、ワインのデータで試してみます。( 【Rによるデータサイエンス】線形判別分析

判別関数得点
%e5%88%a4%e5%88%a5%e9%96%a2%e6%95%b0%e5%be%97%e7%82%b9

lda_plot

さすがパッケージ用のデータセットだけあって、綺麗に分類できたようです。誤分類は2件だけです。

決定木

決定木はrpartパッケージで実行します。ウイスキーのデータを使って、薬っぽさを決める条件を探してみます。コードはこちらを参考にしました。( R言語で決定木分析

rpart_plot

コンジョイント分析

conjointパッケージなるものがあるようです。こちらの参考文献を元に紹介します。( Rでコンジョイント分析

まずは直交表を作ってみます。

残念ながら、面白そうなデータがないので、サンプルについているお茶のデータを使ってみます。

価格が効用に与える影響の可視化です。
utility_of_price

RFM分析

ほくそ笑むの親分がeasyRFMパッケージを作っていたようです。( RFM 分析を簡単に実行できる R パッケージ easyRFM を作った )都合良く取引データがなかったので、kaggleの掲示板で落ちていたデータを使いました。( Sample of transaction data

結果は以下のとおりです。

共分散構造分析

semパッケージで実行可能です。こちらの参考文献のデータを用います。( Rによるパス解析 )データはこちらにあります。( 練習用データ

Rを使った分析(SEM)
こちらの方がパスの図も出力できるので、良いかもしれません。

参考文献

マーケティング・サイエンス入門 — 市場対応の科学的マネジメント 新版 (有斐閣アルマ)

Cloud Vision APIをRで動かしてみる

Google Cloud Vision APIを使ってAKBのデータを把握する
こちらの所沢義男さん(偽名)のブログにカジュアルにVison APIを使う方法が載せられていたので、早速私も触ってみようと思います。(Vision APIのアカウント作成には住所や氏名や電話番号、クレカ情報が求められます。)

ラーメン二郎のメニュー表

紹介されていたコードを実行してみます。

以下の表は実際の表記との比較ですが、光の反射で見にくくなっているところ以外は正しい表現を抽出できているようです。

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-03-16-54-10

大学におけるStanの講義資料などを探してみた

ブログよりは大学の講義の方が体系立てて学べるのではないか、効率的に勉強できるのではないかと思い、各大学が公開しているStanに関するサイトを調べてみました。調べ方は非常に簡単で、Google検索で「stan site:大学のドメイン名」でヒットした上位を基本的に見ています。

東京大学、京都大学、東北大学、大阪大学、慶應大学、早稲田大学、名古屋大学、同志社大学、etc…などを見ましたがなかなかweb上で公開されている資料が見つかりませんでした。非公開か大学ドメイン下での公開がされていないのだと思われます。そのため、検索対象を海外にまで広げてみました。(次回は教員のwebサイトを漁ってみようと思います。)

結論として、学ぶのにちょうどよいと思えるのは、神戸大学の資料とStanford大学の資料でした。今後はこの二つの資料も使って学習を進めていこうと思います。

神戸大学

政治学方法論 II (Research Methods in Political Science II)
ベイズ統計学の授業の内容が公開されています。教科書は「Bayesian Data Analysis, 3rd Edition. CRC Press.」です。ちなみに、こちらは無料のPDFが公開されています。(Bayesian Data Analysis, Third Edition(PDF)

階層モデルとStan によるベイズ推定
階層ベイズモデルの説明とstanのコードが記されており、学習が捗ります。

講義のスライドはこちらにあります。( yukiyanai/rm2-Bayes

東京工業大学

勉強用(STAN)
stanのコードが載っていました。
正規分布、線形回帰モデル、混合正規分布、ニューラルネットワーク、多種粒子Totally Asymmetric Simple Exclusion Process、混合正規分布でのクラスタリング、ロジスティック回帰などのコードがあるようです。

こちらはstanの説明用の資料です。(Stanによるハミルトニアンモンテカルロ法 を用いたサンプリングについて

Stanford University

Statistical Rethinking A Bayesian Course with Examples in R and Stan
youtubeで2015年の講義が見れるようです。( Statistical Rethinking Winter 2015 )
講義のスライドも公開されています。( Talks by Richard McElreath )
ゴーレムをモデルの引き合いに出して紹介しているのを見て、ユーモアセンスあるなぁと思いました。2016年版の資料も今後アップされると思うので、見逃せないですね。

Colombia University

Home page for the book, “Bayesian Data Analysis”
stanの開発チームの方がコロンビア大学の研究者なので、絶対にあるだろうと思いましたが、スライドとかは特にありませんでした。学生の講義ノートは筆記体で画像になっているので、あまり読むことはお勧めはしません。
私として嬉しいのは。Rstanで教科書のコードを実行するためのスクリプトがGitHubで公開されていることでした。( avehtari/BDA_R_demos/demos_rstan/

ExploratoryをさわってRでGoogleSearchConsoleのデータを集計・可視化

先日知り合った方から、Exploratoryの紹介をしていただき、Rをカジュアルに利用できる可視化ツールとのことで関心を持っていたのですが、さっそくこのブログのアクセス関連のデータを集計・可視化してみようと思います。

【目次】
・Exploratoryについて
・ダウンロードとインストール
・データの読み込み(Built in)と可視化
・データの読み込み(With R)と可視化
・dplyrの活用
・使ってみて思うところ

Exploratoryについて

ExploratoryはRを用いた、前処理・可視化・分析のためのデスクトップアプリケーションです。Amazon Redshift、Google BigQuery、PostgreSQL、MySQL、MongoDB、Presto、Google Analytics、Google Spreadsheet、Twitter、Web Page Scraping、CSV、Excel、JSON、Statistical files、R scriptなどの豊富なデータソースを利用できるようです。特に、Rのscriptでデータを取得できるのは魅力的だなぁと思いました。加えて、前処理に適したRの関数(dplyrなど)をカジュアルに扱えるようなコマンドラインもありますので、前処理しながら可視化するという作業がしやすいと思われます。分析に関しては、クラスター分析、分類、回帰、アソシエーションルール、相関、類似度、自然言語処理、文書感情分析などができるようです。まぁ、やりたい分析に関するパッケージは新しくRにインストールしてしまえばいいので、R使いにとって自由度の高い環境と言えます。

ダウンロードとインストール

こちらのExploratory公式サイト( https://exploratory.io/download )でemailアドレスなどのアカウント情報を入力してダウンロードできます。あとはインストールしてしまえば良いです。Rに関してもExploratoryに対応したバージョンをインストールしてくれます。後は、アプリケーションを開いて、Create Newのボタンを押して分析スタートです。

データの読み込み(Built in)と可視化

私はGoogle Analytics(GA)のデータをよく使うので、さっそくExploratoryで読み込んでみました。
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-01-23-36-28

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-01-17-15-55

自分のGAのプロパティやビューを選んで、任意の期間を選び、好きなDimensionやMetricsを選択して抽出されたデータを確認してOKすれば読み込みは完了です。非常に簡単でしたし、データを確認しながらDimensionやMetricsを選べるのは試行錯誤しやすく便利です。

ピボットテーブルが非常に使いやすく、デバイス別・ページ別の直帰率の集計も楽にできました。
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-01-23-35-23

データの読み込み(With R)と可視化

私が魅力に感じたのはデータ読み込みの際に、Rのscriptをそのまま使えることです。RMeCabを使えばテキストデータを形態素解析して可視化することもできますし、RFinanceなどで取得した株価のデータとかも使えるわけです。これまでに使ってたコードをそのまま使えるのは嬉しい限りです。今回は恥ずかしながら私のブログのGoogle検索結果のクエリをGoogle Search Console APIを使って取得し、可視化にチャレンジしてみます。

Google Search Consoleは以下のコマンドでAPIからデータ取得が可能です。

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-01-18-52-16

Google検索クエリの検索結果上での私のブログのデバイス別、順位・CTR・インプレッション数・クリック数を3D散布図に描いてみました。

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-01-19-02-40

こんな感じで結果のグラフなどをシェアできるようです。触れば動きます。

時系列データに関してもサクサク作れたので、私のブログのデバイス別の平均順位を時系列で描写してみました。
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-01-19-17-48

カーソルを合わせたらデータの詳細が表示されます。

dplyrの活用

細かい前処理がしたい場合は、画面上にあるcommandのウインドウでdplyrのコマンドを叩けば痒いところに手が届かせることも可能です。
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-02-00-10-05

使ってみて思うところ

RやPythonを使っている我々にとって、Tableauを使うモチベーションが非常に低かったんですが、Rとつないで好き放題できる環境というのは非常に魅力的だと思いました。私は個人的にWebスクレイピングを結構しているので、テキストデータの可視化などにもチャレンジしてみたいです。数をこなして可視化のセンスを磨きたい。

scikit-learnのモジュールのGitHubでの利用頻度を調べてみた

『Python機械学習プログラミング』を読んで、scikit-learnのモジュールは充実しているなぁと感じたんですが、実際にWebサイトでUser Guide( http://scikit-learn.org/stable/user_guide.html )を見た所、この本に載り切らないような数多くの機械学習手法に応じたモジュールが用意されていました。そこで、世のデータサイエンティストはどのモジュールを良く使っているのだろうと気になったので、GitHubのSearchでヒットしたCodeの数を各モジュール単位で集計してみました。検索クエリは「scikit-learn + モジュール名」なので、正確なものではないのですが、相対的な利用頻度を見るぶんには使えるのではないかと思われます。

データ集計方法

・User Guideに登場するscikit-learnのモジュール名を集めています。
・教師付き学習か教師無し学習かどうかの判断は、User Guideで紹介されているモジュールかどうかで判断しています。
・GitHubのSearchで「scikit-learn + モジュール名」でヒットした件数をそのまま使っています。(2016年9月22日時点)

可視化コード

Jupyterで実行しています。

教師付き学習編

圧倒的に多いのがSVM(Support Vector Machine)を扱っているSVCモジュールで、続いて定番のロジスティック回帰やRandom Forestが使われているようです。統計解析ではメジャーなはずの線形回帰が5位なのは、初歩的なのであまりコードがアップされていないのかもしれません。GBDTのモジュールももう少し上位にくるかと思ったんですが15位でした。DMLCのXGBoostモジュールを使っているのかもしれませんね。私も実際のところXGBoostを使ってますし。

supervised_module_barplot

教師無し学習編

主成分分析やK-mean法など因子分解などのモジュールが上位を占めています。LDA(Latent Dirichlet Allocation)がもっと上位に来ると思ったんですが、思えばGensimの方が充実しているなぁと思うので、このランキングは妥当なのかもしれません。私もLDAなどはGensimを使っていますし。

unsupervised_module_barplot

収集を終えて

・社内だとデータサイエンティストの方がいないので、scikit-learnのモジュールの利用状況を知れてマニアックな共感をすることができた。
・SVMは実践例が豊富そうなので分析事例を探せば良い発見があるかもしれない。
・scikit-learnのUser Guideは充実していたので、時間を作って向き合ってみたいと思った。

統計的因果推論に関するスライドとRのサンプルコード

導入・入門から実践までのスライドと実践するためのコードを載せています。因果推論を実務でカジュアルに使えるまで上達させたいものです。

以下、
・統計的因果推論に関するスライド
・資料
・用語整理
・統計的因果推論に関するRの実行例
・書籍情報
からなります。

統計的因果推論に関するスライド

統計的因果推論の学習を進める上でのヒントが記されていると思われるスライドです。カジュアルに回帰分析を行うことに関する注意も書かれています。

因果推論の歴史や利用することのモチベーションが非常にわかりやすく書かれています。
多重共線性を引き合いに出していたりしているのも理解が捗ります。

以下の2つは星野先生の『調査観察データの統計科学』通称赤本の1~3章に関するスライドです。

Rによる実践に関してのスライドです。コードが書かれているので実行してみると良いでしょう。

傾向スコアの計算をRで実践しているスライドです。

資料

こちらの資料は定義が書かれていて助かります。
2016/01/23 (Sat) 第 3 回因果推論を学ぶ会

こちらは論文や教科書の紹介もしています。
プロペンシティスコア(Propensity score; PS)(1)-PSの正しい使い方

カーネギーメロン大学の機械学習における因果推論に関しての講義資料です。
Lecture Notes 17 Causal Inference

Googleのハル・バリアンがまとめたペーパーも良いです。
Causal Inference in Economics and Marketing

用語整理

    ATE(Average Treatment Effect:平均処置効果(因果効果))
    例で述べるとするならば、母集団全てのユーザーにバナーを見せた場合のブランド名検索による訪問数の平均と、全てのユーザーにバナーを見せなかった場合のブランド名検索による訪問数の平均の差として表されます。バナーを見てしまったユーザーにとって、バナーを見なかったら、という反実仮想なデータは当然存在しないので、そのままでは計算できません。ただし、RCT(Randomized Control Trial)、無作為化比較対照実験、の状況ではバイアスなく推定できるとされています。RCTなケースは限られていると思いますが。
    ATT(Average Treatment Effect on the Treated:処置群における平均処置効果)
    バナーを見せたユーザーにおける、バナーを見せた場合と見せなかった場合の差の期待値。マーケティングにおける施策のROIを計算する際に使うことが望ましいとされています。ATEと同じくRCTにおいてバイアスなく推定できるとされています。
    ATU(Average Treatment Effect on the Untreated:対照群における平均処置効果)
    バナーを見せていないユーザーにおける、バナーを見せた場合と見せなかった場合の差の期待値。マーケティング施策を拡大させるか否かを判断する際に使うことができます。ATEと同じくRCTにおいてバイアスなく推定できるとされています。
    強い意味での無視可能性
    共変量に対し求める強い仮定のことで、「バナーを見たか見てないかのバイナリーな変数」や「ブランド名検索での訪問数」などに影響を与えるような共変量に対し、共変量自体で条件をつけて期待値をとると、「バナーを見たか見てないかのバイナリーな変数」と「潜在的なブランド名検索での訪問数」が独立するような特徴が求められています。「バナーを見たか見てないかのバイナリーな変数」が「過去のサイト訪問数(共変量)」や「特定ページへの接触(共変量)」で、配信対象を割り振られている場合は、そのバイナリーな変数は「潜在的なブランド名検索での訪問数」に影響を与えないとされています。
    マッチング
    バナーを見せられたユーザーの持つ、共変量(サイトへの訪問数や、見たページのカテゴリなど)の値と同じ(完全マッチング)、あるいは近い(距離を使ったマッチング)共変量を持っているが、バナーを見せられていない他のユーザーを「同じ人」と見なして、「バナーを見た・見てない」の与える「ブランド名検索での訪問数」への因果効果を推定します。
    傾向スコア(Propensity score)
    処置への割り当ての確率。つまり、上述の例でいうところの、バナーを見せられる確率。確率なので、当然0〜1の間の値をとります。推定には2項ロジットモデルが使われているようです。真の傾向スコアを推定できれば、ATE・ATT・ATUを計算することが可能になるそうです。この理屈はベイズの定理より導くことができるようです。詳しくは資料の”第 3 回因果推論を学ぶ会”を見てみてください。

統計的因果推論に関するRの実行例

“Rで学ぶ 傾向スコア解析入門 – 無作為割り当てが出来ない時の因果効果推定”で紹介されていたコードを以下に掲載します。

書籍情報

データ分析の力 因果関係に迫る思考法 (光文社新書)
「原因と結果」の経済学―――データから真実を見抜く思考法
岩波データサイエンス Vol.3
調査観察データの統計科学―因果推論・選択バイアス・データ融合 (シリーズ確率と情報の科学)

XGBoostのパラメータチューニング実践 with Python

以前の投稿で紹介したXGBoostのパラメータチューニング方法ですが、実際のデータセットに対して実行するためのプログラムを実践してみようと思います。プログラム自体はAnalytics_Vidhya/Articles/Parameter_Tuning_XGBoost_with_Example/XGBoost models.ipynbに載っているのですが、データセットがついていません。そこで、前回の投稿(不均衡なデータの分類問題について with Python)で赤ワインのデータセットを手に入れているので、こちらのデータセットを用います。誤植なのかところどころ、うまく回らなかったところがあったので、手直しをしています。

以下の工程に従って進みます。結構長いですが、辛抱強く実践してみて下さい。
・ライブラリの読み込み
・データの読み込み
・前処理
・学習用データとテスト用データの作成
・XGBoostの予測結果をもとに、AUCの数値を返すための関数の定義
・モデルの実行
・チューニング

ライブラリの読み込み

データの読み込み

前処理

スクリーンショット 2016-05-15 16.54.58

学習用データとテスト用データの作成

XGBoostの予測結果をもとに、AUCの数値を返すための関数の定義

XGBoostの予測結果から、AUCの数値を返し、特徴量に応じた重要度を出力するためのプログラムです。

モデルの実行

feature_importance1

チューニング

max_depthとmin_child_weightの数値をチューニングするためのプログラムです。

より細かい数値で再度最適なパラメータを探します。

max_depthを8、min_child_weightを1として、他のパラメータチューニングに移ります。
続いて、gammaのチューニングを行います。

gammaを0.4と置きます。
ここで、いままでにチューニングしたパラメータを用いて再度推定を行います。先ほどの0.875よりも高くなっています。

feature_importance2

続いて、subsampleとcolsample_bytreeのチューニングを行います。

より細かい範囲で再度パラメータをチューニングします。

続いて、reg_alphaをチューニングします。

範囲が粗かったので、より細かくパラメータをチューニングします。

これまでにチューニングしてきたパラメータを用いて再度推定を行います。

feature_importance3

ブログであるように試行回数を1,000回から5,000回まで増やしてみます。

88.8%まで向上しました。色々と数値いじっても、1%高めるだけにとどまってしまうのですね。

feature_importance4

とにかく、XGBoostをPythonで実行してパラメータチューニングするという一連の試行がこのコードでできそうなので、今後も使いまわしてみようと思います。

不均衡なデータの分類問題について with Python

データマイニング界隈で人気のKDnuggetsで紹介されていた、”Dealing with Unbalanced Classes, SVMs, Random Forests, and Decision Trees in Python“のプログラムが残念なことに画像だったので、写経しました。せっかくなので、紹介させていただきます。内容としては不均衡データに対する処方の紹介で、プログラムはPythonで書かれています。ライブラリさえインストールできれば皆さんもすぐに実行できるので、是非チャレンジしてみて下さい。

まずはもろもろライブラリを呼び出します。

CSV形式のデータセットをWebサイトから取得します。ワインの評価と、ワインに関した特徴量からなるデータセットです。

スクリーンショット 2016-05-09 00.24.50

分類のための目的変数を作成します。

スクリーンショット 2016-05-09 00.26.24

ランダムフォレストを実行します。

どんな結果が返ってくるのか、試しに一つだけツリーの数を2にして実行してみます。10回分のクロスバリデーションを行った推定結果が出力されています。これは、いわゆる正解率のことを指します。

ツリーの数に応じた正解率を可視化します。

正解率はツリーの数を増やすことで増すようです。

Classification score for number of trees

しかしながら、正解率は誤解されやすい指標です。不均衡データでは偏りのある方ばかりを当てていても、正解率は増してしまいます。当たりだけを予測できて、ハズレを予測できないというのは分類器として使いみちが限られると思います。そこで、悪いワインの割合を直線で引いてみます。

悪いワインの割合がそもそも多いので、悪いワインと判定しまくっていても、正解率は高いわけです。

Classification score for number of trees2

そこで、機械学習における予測精度の評価指標とされているF値を使います。
ツリーの数を増やしても、F値は良くなっていないようです。

F1 scores as a function of the number of trees

ここでは、0.5よりも大きいとする予測になる特徴量のデータを切り捨てます。その切り捨てる割合がどこが望ましいのかを以下で探していきます。

どうやら、階級値が2~4、つまり割合にして0.3~0.5のカットオフ値が望ましい水準のようです。

custom F scores

以下では、決定境界の可視化を行います。しかしながら、二次元の可視化となると、複数あるデータの中から特徴量を二つだけ選ばなければなりません。その変数を決めるに際して、変数の重要度を用います。変数の重要度はランダムフォレストで計算可能です。

Importance of each feature

こちらで、重要度が上位のものに絞って決定境界を可視化します。ここでは、ランダムフォレストのみならず、SVMや決定木も実行されています。

Decision Tree Classifier

Random Forest Classifier

Support Vector Maachine

sklearnのSVMはデフォルトではクラスごとの重み付けを行わないが、自動で重み付けを行うことが出来る。以下の例では、C=1、gamma=1でクラスごとの重み付けを行う・行わないでの決定境界を描いている。重み付けを行うことで、赤色の少ない方のデータの識別が比較的できていることが伺えるが、他方で、多くの青を誤判定している。さらなる改善にはパラメータチューニングが必要となります。

Svm without class weight

Svm with class weight

不均衡データに対するアプローチや、Pythonによる機械学習を学ぶ良い機会になりました。KDnuggetsは非常に勉強になりますね。

Tokyo.R#53で得たパッケージ情報とその実践

第53回のTokyo.Rで気になったパッケージの情報と実行例をいくつかあげました。スライドなどもろもろの発表はこちらの方のブログ「第53回R勉強会@東京で発表してきた」が非常に詳しく書かれています。

【目次】
・ggradarパッケージ
・proxyパッケージ
・因果推論(CBPSパッケージ)
・MXNetパッケージ
・missForestパッケージ
・RFinanceパッケージ

ggradarパッケージ

簡単にレーダーチャートを作れるパッケージです。こちらのブログを参考にしています。

企業の職場環境に関してまとめられた某口コミサイトから4個ほどデータを拝借してきました。

ggradarをそのまま使おうとすると、Circular Air Lightというフォントが必要だと怒られるので、参考のブログにある通り、OSXの場合はこちらをダブルクリックでインストールして再起動します。

先ほどのデータに対して、以下のコードを実行すれば非常に簡単にレーダーチャートが作れました。

company_voice_radar

proxyパッケージ

距離や類似度を計算するパッケージです。
先ほどのデータに対して類似度と距離を計算してみます。

こんな感じで、類似度や距離の計算ができます。

因果推論

こちらはパッケージとかそういうものではなく、既存の関数などで計算できるようです。
こちらのブログ、「調査観察データにおける因果推論(3) – Rによる傾向スコア,IPW推定量,二重にロバストな推定量の算出」に詳しく書かれています。
・glm関数での傾向スコアの算出
・傾向スコアを共変量としてlm関数で回帰分析
・コードを愚直に書いてIPW推定量の算出
・期待値の標準誤差を出すための関数を作成
・DR推定量の算出をするための関数を作成
などで、推定自体は実現できるようです。

ただし、CBPS(Covariate Balancing Propensity Score)というパッケージがあるらしく、このパッケージを用いれば因果推論の計算を行えるようです。

Package ‘CBPS’
以下のようなExampleコードが載っていたので、実行してみましたが、なかなか結果が返ってこなかったので不安になりました。計算が終わるまで10分以上はかかったと思います。

MXNet

XGBoostのパッケージを作ったチームが手がけているパッケージで、深層学習を実行できます。

インストール方法はここに書かれています。
Deep Learning for R

あれ、OSXではエラーが返ってきてライブラリが読み込めないですね。どうやら私のためにあるようなブログ「Installing mxnet for R on Yosemite」があったので、時間を見つけてチャレンジしてみようと思います。

ディープラーニングを用いた回帰分析については、Neural Network with MXNet in Five Minutesにコードがもろもろ載っていますので、チャレンジしてみると良いと思います。

リンク先に載っているのですが、一応コードを以下に記しておきます。

missForest

ランダムフォレストを用いて、欠損値補完を行うためのパッケージです。目的変数が欠損していても適用できるようです。
詳しくは、スライドを見ていただいた方がいいですが、以下のプログラムで実行できました。ちなみにスライドはこちら、「Imputation of Missing Values using Random Forest

RFinanceYJ

Yohei Sato, Nobuaki Oshiro, Shinichi Takayanagiさんたちが作った、Yahoo!ファイナンスの株価データを取得できるパッケージです。だいぶ前からあったようですが、使って分析している人は初めて見ました。どうやらYahoo!ファイナンスの仕様によって書き換えていかないといけないようです。「2015-01-20 Rでチャートを書いてみる(9)」のブログに実行可能なプログラムがあります。以下、実行可能なコードを転載いたします。

このコードでYahoo!ジャパンの株価を見てみましょう。ちなみに番号は4689です。どうやら上手く取れているようです。