言語処理学会第23回年次大会〜Webマーケティングで使えそうな発表資料まとめ〜

行きたいけど行けなかった言語処理学会第23回年次大会の発表内容がPDFで見れるということで、発表内容の中でWebマーケティングなどの仕事で役に立つかもしれない12件の研究を独断と偏見でまとめています。

プログラムはこちらのリンクから見れます。
言語処理学会第23回年次大会(NLP2017) プログラム

今回取り上げるのは以下の12件です。

・Wikipediaのカテゴリ構造を特徴ベクトルに用いたRandom Forestによるショートメッセージ分類
・NMFを用いた為替ドル円レートの変動要因分析とAdaboostを用いた予測システム
・Are Deep Learning Methods Better for Twitter Sentiment Analysis?
・化粧品レビューサイトにおけるクチコミの有用性判定
・機械学習を用いたQAサイト質問文のカテゴリの類推
・不満調査データセットの素性ベクトル化
・検索エンジンを用いた記載欠落箇所の補完
・生コーパスからの単語難易度関連指標の予測
・常識から外れた雑談応答の検出
・店舗レビューには何が書かれているか?–調査及びその自動分類–
・トップダウン型共起グラフを用いたブログからの観光地の行動分析
・社内データに基づくイノベータ人財のピックアップ

Wikipediaのカテゴリ構造を特徴ベクトルに用いたRandom Forestによるショートメッセージ分類

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/P16-4.pdf

Wikipediaのカテゴリ構造を学習させたナイーブベイズにより特徴ベクトルを生成し、それをTweetに付与して、ランダムフォレストを用いてメッセージ分類をしているようです。直接Tweetのデータを使わないでWikipediaのデータを活用するところにトリックがあるようです。ビジネスにおいて関心のある対象ユーザーのTweetのモニタリングや対象ユーザーの特定に使えるかもしれません。

NMFを用いた為替ドル円レートの変動要因分析とAdaboostを用いた予測システム

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/P15-5.pdf

『金融経済月報』や『日本経済展望』のテキストデータに対して、PCAとNMFの2つの手法を用いて特徴抽出を行い、Adaboostを用いて為替レートの予測を行っているようです。為替レートを予測せずとも、テキストデータを用いた市場動向の予測などの参考になるかもしれません。

Are Deep Learning Methods Better for Twitter Sentiment Analysis?

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/C5-1.pdf

Tweetの感情分析で深層学習を用いて、SVMなどと比較している研究のようです。Conclusionを見る限りは、SVMよりも精度が高いとは言えず(ネットワーク構造やデータセットの大きさに依存する)、少ないデータセットなどではSVMの方が依然として精度が高いようです。

化粧品レビューサイトにおけるクチコミの有用性判定

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/C5-4.pdf

@cosmeにおける、Likeの数をクチコミの有用度と定義して、クチコミデータに対してTF-IDFやLDAを用いて構造解析や意味解析などで特徴を抽出し、その特徴を説明変数とした回帰モデル(SVR)を構築しています。構築した回帰モデルを用い、クチコミのLikeの数を推定することを目的としています。

ここでの知見が直接に自社のコンテンツなどのナレッジになるわけではないですが、LDAやSVM(SVR)を駆使しているなど、分析手法の参考にはなると思います。

機械学習を用いたQAサイト質問文のカテゴリの類推

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/P9-6.pdf

深層学習(Stacked Denoising Autoencoders(SdA) と Deep Belief Network(DBN))を用いて質問文に適したカテゴリを類推する研究です。従来手法のMLPやSVMと比べても精度が高かったようです。ユーザーの欲しい商品や、働きたい職場、住みたい場所などに関しても類推できるとマーケティングなどでの活用もできるかもしれません。

不満調査データセットの素性ベクトル化

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/P9-2.pdf

不満に関するデータにタグ付けされた情報やJUMANの付属辞書から得られた意味情報も素性とすることで、不満の検索のしやすさを高める研究のようです。不満のテキストデータから特徴量に変えるまでのプロセスが記されているのが参考になりそうです。研究自体は、形態素解析の精度などにより、まだ課題があるようです。

検索エンジンを用いた記載欠落箇所の補完

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/P16-5.pdf
「検索エンジンを用いて記載欠落箇所に適切な情報を埋める研究」とあり、コンテンツマーケティングなどの際に、作成した記事に説明不足な箇所を見つけることができるので、コンテンツの質を担保する上で役に立つかもしれません。

生コーパスからの単語難易度関連指標の予測

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/E5-3.pdf

「均衡コーパスや深いアノテーションを施した言語資源に頼らないことで他言語への適用が容易な単語難易度関連指標の予測手法を提案」
「単語難易度関連指標の予測精度はLDAの各トピックからの単語出現確率を基にした素性を用いることで、従来のようにコーパスからの単語頻度を素性を用いる場合と比べ大幅に向上」
「word2vecのような単語のベクトル表現より、LDAの各トピックからの単語出現確率の方が予測精度の向上に有効」
とあり、文章のリーダビリティをよりカジュアルに計算することが可能になるようです。文章のリーダビリティとWebサイトの直帰率やスクロール率などとの関係を研究してみたいですね。

常識から外れた雑談応答の検出

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/P15-3.pdf

「Word2Vecモデルの学習においては、匿名掲示板である「おーぷん2ちゃんねる」から取得した人気記事7959記事を用いている。」と2ちゃんねるの表現から非常識語を見つけるという試みです。自社でUGCを運営している場合は役に立ちそうな研究です。

店舗レビューには何が書かれているか?–調査及びその自動分類–

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/W-3.pdf

「店舗レビュー1,510件(5,266文)に対して人手でアノテーションを行い、このデータに基づいてトピックおよびその評価極性を分類するモデルを構築」と、恐ろしい数の文書を人出で分類したそうです。これもユーザーアンケートなどの研究に使えそうです。

トップダウン型共起グラフを用いたブログからの観光地の行動分析

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/P20-3.pdf

「寄り道をする観光地を指定すると、その特徴を可視化する手法の開発を目的」とされています。マーケターであれば、関心のある商材を指定すると、その商材に関する特徴を可視化できるのではないでしょうか。テキストマイニングで言うところの共起グラフによる分析となります。

提案されている手法のステップは以下の通りで、自分の関心のある市場のデータを使えば同様のことができると思われます。
(1) 商材を指定しブログ記事集を取得する。
(2) 単語対の共起スコアを同時に出現した記事数をベースとして算出する。具体的には最低出現数を4回として単語を限定し、Jaccard 係数で共起スコアを算出する。
(3) 単語を頂点、共起スコアの得られた単語対を辺として共起グラフを生成する。
(4) 分析目的に応じて注目する頂点を指定する。
(5) 指定した頂点から1または2の距離で到達可能、かつ共起スコアが一定範囲内という辺および頂点を一定数を限度に残す。

社内データに基づくイノベータ人財のピックアップ

http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/P12-1.pdf

番外ではありますが、面白そうな取り組みなので紹介します。
社員プロフィールや業務報告(日報)や適性検査や360度調査やアンケートなどのデータをもとに、9種類の指標を定め、一部の指標のスコアリングを単語ベースで行うに際して、スコアリング用の単語を定めるためにWord2Vecを用いています。これからピープルアナリティクスを目指す企業には参考になる情報だと思います。

PythonやRを用いたアルゴリズム取引・株価分析まとめ

はじめに

まわりでシステムトレードや株価の機械学習による予測などに関心が高まってきたので、私も少し調べてみようと思いPythonやRで行われた分析・実装の事例を集めてみました。自分の資産を突っ込む気にはなれないですが、事例を知っておくだけ知っておきたいですね。

調査法

Google検索において以下のクエリで上位に表示されたサイトを中心にまとめました。
「python 機械学習 株価」
「python 機械学習 為替」
「python アルゴリズム取引」
「python machine learning stock price」
(同様にRも調べました。)

アルゴリズムトレードの理論から学ぶ

システムトレードで億万長者になるぞ! coursera で Computational Investing Part I を受けた
こちらはCourseraで開かれていたシステムトレード向けの講座を受けた方のブログです。Active Portfolio Management: A Quantitative Approach for Producing Superior Returns and Selecting Superior Returns and Controlling Riskはもっとも重要なアルゴリズムトレードの本とされているようです。出版年が1999年と結構古いですが。

Rを用いた株価データのモニタリング

Stock Analysis using R
こちらはアルゴリズム取引とかではないですが、Rで株価を簡単に取得できるquantmodライブラリについて紹介されています。

以上のコードを実行しただけで時系列データがボックスプロットで描写されました。非常に便利そうです。複数のグラフを並べてディスプレーで見てみたいですね。図ではテクニカル分析で使われるボリンジャーバンドを一発で出してくれています。傾向を掴むための分析に役立つのではないでしょうか。

MSFT_stockPrice

RSIで株価の連動性を見る

過去のデータからビッグデータ分析で株価を予測する
ここでは、主にpandasを用いて株価の分析を行っています。RSI(Relative Strength Index)という「一定の期間変動幅の中でどれ位株価が上昇しているのか、下落しているのかをはかるもの」を計算して日経平均との相関を見ています。データさえあれば、個別株の市場連動性を見るぶんにはpandasで十分に分析できそうです。

アルゴリズムトレードのシステム構成

自動トレードボット
こちらでは、仮想通貨取引のための自動トレードボットの作成のための手順などが書かれています。
工程としては
・仮想通貨価格データ取得
・バックテストの実施
・明日の価格予想
・学習パラメータの最適化
・結果のメール送信
・APIを使った成行トレード
・ジョブのスケジューリング
などとなっているようです。
完全自動化しようと思うと、作るのは大変そうですね。

WEB屋の自分が機械学習株価予想プログラムを開発した結果
こちらはよりシンプルで
「チャートを見る限り、誰がどうみても今日値上がりする銘柄」を検索して、毎朝Slackに通知してくれるシステム
をPythonで作成されています。最終的に資産を溶かす形になっているようです。

アルゴリズムトレード向けのPythonライブラリ

pythonのアルゴリズムトレードライブラリ
こちらでは
zipline( http://www.zipline.io/
PyAlgoTrade( http://gbeced.github.io/pyalgotrade/ )
pybacktest( https://github.com/ematvey/pybacktest )
backtrader( https://github.com/mementum/backtrader )
というライブラリが紹介されています。

遺伝的アルゴリズムで為替の自動売買

pythonと遺伝的アルゴリズムで作るFX自動売買システム その1
遺伝的アルゴリズムでFX自動売買 その2 進化する売買AIの実装
遺伝的アルゴリズムでFX自動売買 その3 OandaAPIで実際に取引
こちらは、外国為替の取引をPythonで自動化させた試みです。最終的に負けてしまってはいますがシステム構成についても詳しく書かれているので、勉強になりました。データはOANDAというサービスが提供しているAPIを用いて取得し、GA(遺伝的アルゴリズム)を使って為替の売買タイミングを決めているようです。実際の売買にもOandaAPIというものを利用して完全に自動化させています。

決定木による株価リターンの予測

機械学習で未来を予測する – scikit-learn の決定木で未来の株価を予測
こちらはPythonでscikit-learnを用いて、決定木による株価の予測をされています。目的変数としてはリターンインデックスをおいています。前処理においてpandasが使われています。

ランダムフォレストによる株価の予測

Pythonで機械学習を使った株価予測のコードを書こう
こちらでは、ランダムフォレストを用いた機械学習で、ETFなどのデータを特徴量にして個別の株価予測を行っています。

アカデミックサイドでの研究事例

Stock Price Forecasting Using Information from Yahoo Finance and Google Trend
UC Berkeleyの経済学部生の研究です。こちらはR言語で、ヤフーファイナンスとGoogleトレンドの情報を用いて株価を予測している研究です。これまでの時系列手法よりもパフォーマンスが良いそうです。

最後に

事例を集めてみて、どこまでのレベルのものに手を出すべきか悩ましいと思いました。完全自動化は維持するコストがかかりそうですし、ロスが増大しないか心配です。自分としては情報を自動で取得し、リターンが発生する確率の高そうな銘柄をサジェストしてくれるレベルで十分な気がします。

Rで株価の時系列データを簡単に集計する

はじめに

かねてからYahoo!ファイナンスなどの情報に、株価について期間を指定したリターンや標準偏差や回帰分析のあてはまりなどが無いので、そのようなデータを簡単に見れるようにしたいという願望がありました。加えて、できるだけ多くの銘柄の情報をみたいという願望もありました。Rを使えばその全てが簡単に実現できるのでチャレンジしてみました。

・データ収集
・データテーブルの整形
・成長率の計算
・標準偏差の計算
・自己回帰の計算
と非常にシンプルな工程ですが、3600銘柄分のこれらの情報を一気に手に入れれるというのは魅力的だなぁと思います。

データの収集

RFinanceYJというパッケージをインストールして、以下のrfinance_module.Rのスクリプトを置いておきます。

以下のコードで2016-01-01から現在に至るまでの、指定した株価コードの株価情報を集めてきます。3600銘柄の株価コードを用意する必要があるので、集めてcodelist.csvで保存しておきます。銘柄コードの情報はここでは掲載しません。(適当なサイトにころがっています。)

以下のコードを実行して、元のデータを調整済み終値について、縦が日付で横が銘柄のテーブルに整形します。

株価テーブル

成長率

指定した期間での成長率を計算します。

return_rate

標準偏差

ここではシンプルに標準偏差の計算を行います。

標準偏差

自己回帰による決定係数

自己回帰でフィッティングの良い銘柄はどれなのかを単純に知りたいので、3600銘柄分計算させます。

AR1の係数

以上より、見てみたかった指標の3600銘柄分を一気に計算することができました。

株価指標テーブル

可視化

試しに一番成長率の高かった株価をプロットしてみます。

sdj7612

おわりに

株価データにカジュアルにアクセスできる環境を手に入れることができたので、今後は様々な指標や時系列解析・業界ごとの分析を試してみたいと思います。

顧客生涯価値(CLV)の計算 with R

顧客生涯価値(CLV:Customer Lifetime Value)を計算してくれるRのコード(Calculating Customer Lifetime Value with Recency, Frequency, and Monetary (RFM))があったので、今更感がありますが取り上げたいと思います。

目次

・顧客生涯価値の数式
・データセット
・関数
・データセットの読み込みと加工
・再購買率とRFMとの関係
・再購買率の推定
・顧客生涯価値の計算
・参考情報

顧客生涯価値の数式

まず、顧客生涯価値の数式は以下の通りです。
customer_lifetime_value

t:年や月などの期間
n:顧客が解約するまでの期間合計
r:保持率(1-解約率)
P(t):t期に顧客から得られる収益
d:割引率

rは数式上では固定ですが、実際にはデモグラ属性(年齢、地理情報、職種など)や行動(RFMなど)や在職中かどうかなどの要因により変わりうるものだと考えられます。参考文献のブログでは、このrのロジスティック回帰による推定がなされています。

データセット

データ名:CDNow
概要:1997年の第一四半期をスタート時点とした顧客の購買行動データ
期間:1997年1月〜1998年6月
顧客数:23570
取引レコード数:69659
変数:顧客ID、購入日、購入金額
入手方法:DatasetsでCDNOW dataset (full dataset)をダウンロード

関数

参考文献にはgetDataFrame関数、getPercentages関数、getCLV関数の三つの関数が出てきますが、CLVの計算に必要なのはgetDataFrame関数、getCLV関数の二つです。getPercentages関数はRecencyなどに応じて細かく分析する際に用います。

getDataFrame関数・・・生のデータセットから、指定した期間に応じたRecencyのデータを作成する関数です。

getPercentages関数・・・Recencyなどの回数に応じて、購入した顧客の割合などを計算するための関数です。

getCLV関数・・・Recency、Frequency、Monetary、購入者の数(1人と置く)、コスト(0としている)、期間、割引率、推定したモデルをもとにCLVを計算する関数です。

データセットの読み込みと加工

再購買率とRFMとの関係

まず初めにデータセットを加工します。ロジットの推定における説明変数用のデータとして19970101〜19980228のデータを用い、被説明変数にあたる購入したかどうかのデータを19980301〜19980430のデータを用いて作ります。

データを確認します。

60日以内に購入した顧客(Recency=0)のうち、45%が再び購入しているようです。

100ドル購入した顧客(Monetary=10)のうち、19%が再び購入しているようです。

10回購入したことのある顧客(Frequency=10)は49%が再び購入しているようです。

再購買率の推定

RFM(Recency、Frequency、Monetary)のデータに基づいて、再購買率をロジスティック回帰によって推定し、予測確率を用いて顧客生涯価値を計算します。

rfm_analysis_est

RecencyとFrequencyによるロジスティック回帰

顧客生涯価値の計算

推定したロジットを用いて、生涯価値を計算します。

それではさっそく、1998年5月〜6月のデータを用いて、今回推定した顧客生涯価値が妥当なのかどうかを確かめたいと思います。

予測したCLVと実際の取引金額データを散布図で描き、回帰線を引く。

life_time_value_estimation

CLVが上がれば、1998年5月1日〜6月30日の間(未来)の取引金額が増すような傾向が出ています。

参考情報

RFM Customer Analysis with R Language
Calculating Customer Lifetime Value with Recency, Frequency, and Monetary (RFM)

OpenCV&Pythonで画像の類似度を計算させる〜イケメンの顔比較

・動機
・やりたいこと
・準備
・類似度の計算
・実行コード
・実行結果
・おまけ

動機

画像系の技術にあまり関心が無かったのですが、とある知人が福士蒼汰のような雰囲気の男性が好みであると発言されたことを発端に、福士蒼汰に最も顔の近い知人を見つけるというプライベートなミッションを仰せつかりました。
そこで、まずは最も楽だろうと思われる、画像間の類似度を計算する方法について調べてみました。顔のパーツを検知して、パーツ同士で比較するなどのレベルでは無いことをご了承下さい。ちなみに、比較画像は国民的アイドルである嵐のメンバーの画像としました。今回の実践で、与えられた画像の中で、福士蒼汰に最も近そうな嵐のメンバーの写真がわかることになります。

やりたいこと

画像間の類似度の計算

準備

・Python2.7
・OpenCV

OSX環境における準備にあたっては以下の情報が参考になりました。
PythonでOpenCVを使う
Mac OS X で OpenCV 3 + Python 2/3 の開発環境を整備する方法

類似度の計算

こちらのブログにある計算手法とコードを使いました。
How-To: Python Compare Two Images

紹介されているコードで以下の評価指標が計算できます。
・Mean Squared Error (MSE)
・Structural Similarity Index (SSIM)・・・0〜1の値を取ります。

指標について、詳しくはこちらの論文に書かれています。
Image Quality Assessment: From Error Visibility to Structural Similarity

実行コード

紹介されていたコードは画像サイズが同じでないと計算ができなかったので、まずは画像のサイズを整えるためのコードが以下のようになります。コードはこちらのものを使いました。
Python – アンチエイリアスで写真をキレイに縮小

これだけではサイズが同一にならなかったので、追加で以下のコードを実行しました。

以下は、類似度計算の実行用コードとなります。

実行結果

福士蒼汰との比較をしており、画像上部にMSEとSSIMが出ています。嵐の大野くんが一番近いようです。

original

aiba

oono

sakurai

ninomiya

matsumoto

おまけ

イケメンではないですが、出川哲朗でも計算してみました。

degawa

今回最も高い値が出てしまいました。やはり、顔のパーツを識別して、そのパーツ間の類似度の計算ができないといけないような気がします。悔しいので今後も画像認識系の技術について向き合ってみようと思います。

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スクレイピングを結構しているので、テキストデータの可視化などにもチャレンジしてみたいです。数をこなして可視化のセンスを磨きたい。