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

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

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

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

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

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

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

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

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

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

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

資料

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

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

用語整理

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

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です。どうやら上手く取れているようです。

RstanでCVRの前後比較をするためのコード

目的

データサイエンス界隈の方がP値での意思決定に警鐘を鳴らしている昨今、施策実施に関するCVRの前後比較をχ2乗検定のP値を用いるのではなく、ベイズ統計学によるアプローチにチャレンジしてみたいと思いました。『基礎からのベイズ統計学』の8章で取り上げられていた比率データに対してのベイズ統計学的アプローチをもとに、stanを用いて事後分布から意思決定をするための進め方を紹介します。

進め方

・データの整形
・stanコード作成
・rstanでの引数の指定
・rでの可視化

データの特徴

Webマーケティング界隈では大変に多用するデータだと思いますが、実験を行ったユーザーに対しての開封・非開封、これまで通りのユーザーの開封・非開封の自然数からなるデータです。

スクリーンショット 2016-03-13 22.30.16

stanコード

stanコードは
・dataブロック
・parametersブロック
・transformed parametersブロック(今回は不使用)
・modelブロック
・generated quantitiesブロック
からなります。
今回は自然数のデータであることから、ディリクレ分布を事前分布に設定するために、parametersブロックにおいてsimplexを指定しています。(教科書の比率データのものをそのまま使っています。)
modelは二項データしか出てこないので、二項分布を用いています。generated quantitiesブロックでは各々の比率、比率の差、比率の差が0を超える確率・0.01を超える確率、リスク比、リスク比が1を超える確率、オッズ比などを出力するようにしています。

rコード

以下は、stanをrで実行し、ggplot2などで可視化するためのコードが記されています。

推定結果&可視化

今回の例では、実験を行ったユーザーのCVRの差が0以上の確率(delta_over)が1.0なので、ほぼ確実に差があると言えそうです。0.01以上差がある確率も1.0なので1%以上は差があると言えそうです。リスク比(RR)に関しては2.47と実験しない場合と比べて2.47倍程度CVを高めています。オッズ比(OR)は2.63とあるので、実験によるCV増大効果が2.63倍あると考えることができます。χ2乗検定では、二つの集団が独立かどうかを検定していますが、ベイズ統計学に従えば、「1%を超える確率」を算出することが容易なので、ディレクターなどに説明する際は圧倒的に理解を得られそうな気がします。

posterior_distribution_2

参考文献

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

RのChannelAttributionパッケージでマルコフ連鎖モデルのアトリビューション分析にチャレンジ

【目次】
・アトリビューションモデルとは
・アトリビューションモデルにおける評価の種類
・均等配分モデルと数理モデル
・ChannelAttributionパッケージについて
・Rでの実行
・実行結果
・参考文献

アトリビューションモデルとは

コンバージョンに至った広告の貢献度を、コンバージョンした経路のタッチポイントにどのように割り振るかを決めるルール。直接コンバージョンに至らなかったが、コンバージョンに繋がる働きをした広告の評価ができるモデルです。

アトリビューションモデルにおける評価の種類

Googleアナリティクスに載っていたアトリビューションモデルの種類です。一例なので、これが全てだとは言えないです。

  • 終点アトリビューションモデル
  •  コンバージョンに繋がった最後の経路を評価

  • 最後の間接クリックアトリビューションモデル
  •  コンバージョンに至る経路の直前の経路を評価

  • 起点アトリビューションモデル
  •  最初に関わった経路を評価

  • 線形アトリビューションモデル
  •  コンバージョンに至るまでに関わった経路を均等に評価

  • 減衰アトリビューションモデル
  •  コンバージョンした際に、時間的に最も近いものを評価

  • 接点ベースアトリビューションモデル
  •  起点と終点それぞれに40%ずつ評価、残りの20%は中間点に対して均等に評価

    均等配分モデルと数理モデル

  • 均等配分モデル
  •  コンバージョンに至るまでに関わった経路を均等に評価。数学に明るくなくても実行でき、集計が比較的簡単かつ解釈から施策までが容易とされる。一方で、恣意的な判断が入り込みやすかったり、各広告が独立であるという過程があるため、任意の広告のIMPが変化したときに他の広告への影響が加味できないなど欠点も多い。他の評価方法との比較のためのベンチマークとして用いられる。

  • 数理モデル
  • マルコフ連鎖モデル
     ユーザーの2点間の行動のみに基づいて分析を行う。
     例えば、広告の経路が10通りある場合、広告1を踏んだユーザーは確率p11で広告1を次に触れる、確率p12で広告2を次に触れるというような確率で広告の接触確率が決まるモデルとなる。確率から接触したページの価値を計算することで、評価が可能となる。複雑怪奇なユーザー行動を2点間のデータに落とし込むことで、分析する際の情報量を制限することができる。

    ChannelAttributionパッケージについて

    Package ‘ChannelAttribution’
    ※Rのバージョンが古いとインストールできません。3.2以上にしましょう。

    今回はRのChannelAttributionパッケージを用いて、マルコフ連鎖モデルを実践してみます。
    このChannelAttributionパッケージにはデータセットがついているため、その用意されたデータを用います。

    実際、このようなデータを元に分析を進めます。
    customer_journey_data

    内訳としては以下の通りです。
    ・コンバージョンに至ったパス
    ・コンバージョン数
    ・コンバージョン価値(価値に関してはサイトによって異なってくると思います。)
    ・コンバージョンに至らなかったパスの数(計算上使っていないようです。除外しても結果が変わらなかったので。)

    Rでの実行

    実行結果

    ぱっと見ですが、alphaやtheta以外では均等配分モデルとマルコフ連鎖モデルに大きな差はなさそうです。データにもよるとは思いますが。自社のデータで実行して、違いがあるか見てみたいですね。

    こちらはコンバージョン数で評価したもの
    total_conversions

    こちらはコンバージョン価値で評価したもの
    total_value

    参考文献

    Markov model for the online multichannel attribution problem

    アトリビューション モデルの概要

    マルコフ連鎖モデルによるアトリビューション分析(インターネット広告への応用)

    Attribution models—数理モデリング入門

    マルコフ連鎖を説明してみる。

    LDA(潜在的ディリクレ配分法)まとめ 手法の概要と試行まで

    【目次】
    ・トピックモデルとは
    ・トピックモデルの歴史
    ・トピックモデルでできること
    ・トピックモデルを理解するために必要な知識
    ・トピックモデルの手法について
    ・トピックモデルの実行方法について(R言語)
    ・トピックモデルの評価方法について
    ・Correlated Topic Models (CTM)について
    ・PAM:Pachinko Allocation Modelについて
    ・Relational Topic Models(RTM)について
    ・参考文献

    トピックモデルとは

    ・一つの文書に複数の潜在的なトピック(話題・分野・文体・著者など)、文書ごとのトピック分布、トピックごとの単語分布を仮定して、テキストからトピックを推定するモデル。文書に限らず、様々な離散データに隠された潜在的なトピックを推定するベイジアンモデル。幅広いドメインでの離散データで有効とされている。

    トピックモデルの歴史

    1998年:pLSA(probabilistic Latent Semantic Analysis)
    2003年:LDA(Latent Dirichlet Allocation)
    2004年〜:拡張モデル
    2007年〜:大規模データのための高速化

    トピックモデルでできること

    ・人を介することなく、大量の文書集合から話題になっているトピックを抽出できる。
    ・文書データだけでなく、画像処理、推薦システム、ソーシャルネットワーク解析、バイオインフォマティクス、音楽情報処理などにも応用されている。
    ・確率過程を用いて、ノイズを取り除き、本質的な情報を抽出できる。

    トピックモデルを理解するために必要な知識

    ・確率
     -確率分布
      -ベルヌーイ分布
      -カテゴリ分布
      -ベータ分布・ガンマ分布
      -ディリクレ分布
    ・ラグランジュ未定乗数法
    ・ユニグラム
     -BOW(Bag of words)
     -ユニグラムモデル
    ・混合ユニグラムモデル
    ・混合モデル
    ・EMアルゴリズム
    ・最尤推定
    ・ベイズの定理
     -ベイズ推定
      -ベイズ予測分布
      -ハイパーパラメータ推定
      -モデル選択
      -変分ベイズ推定
      -ギブスサンプリング

    トピックモデルの手法について

    推定方法としては以下の三つが提案されている。
    ・最尤推定
    ・変分ベイズ推定
    ・ギブスサンプリング

  • ギブスサンプリングによる方法
  • 一部のパラメータを積分消去して、トピック集合の事後分布を推定

    文書集合とトピック集合の同時分布を導出

    単語ごとにトピックをサンプリングする

    サンプリングされたトピックからトピック分布と単語分布を推定

    周辺同時尤度を最大化させるハイパーパラメータαとβを推定する

    ※LDAのギブスサンプリングはLDAが共役性に基づいたモデリングであるため効率的な計算が可能とされる。

    ハイパーパラメータを適切にデータから学習すれば、MAP推定・変分ベイズ推定・ギブスサンプリングの性能の差は大きく出ないという研究結果があるらしい。(なお、MAP推定だと、クロスバリデーションを行い、尤度を最大化させるハイパーパラメータを見つけなければならない。)

    トピックモデルの実行方法について(R言語)

    以下のパッケージで実行可能だが、新しい手法などにはまだ対応していない。
    lda(CRANのPDF
    topicmodels(CRANのPDF

    以下はtopicmodelsパッケージの実行コードであるが、BOW形式のデータがあれば、実行はすぐにできる。
    ただし、パープレキシティなどを計算しながら、ハイパーパラメータのチューニングをする必要がある。

    時間があれば、ソースコードを見て自分で書けるようにしたい。
    ちなみに、HDP-LDAはPythonのgensimに用意されているようです。(gensimへのリンク)

    トピックモデルの評価方法について

  • パープレキシティ(Perplexity)
  • -確率モデルの性能を評価する尺度として、テストデータを用いて計算する。
    -負の対数尤度から計算できる。
    -低いパープレキシティはテストデータを高い精度で予測できる良い確率モデルであることを示す。
    -全ての語彙が一葉の確率で出現するモデルのパープレキシティは語彙数Vになり、性能が悪いと考えることができる。
    -このパープレキシティが小さくなるようなトピック数やパラメータの設定が必要。

    Correlated Topic Models (CTM)について

    トピックモデルは 「各トピック k の間には相関がない」という前提のもとに成り立つ手法ですが、本当にトピック間に相関はないのでしょうか。「本当は相関のあるトピック」を無理やり「相関のないトピック」に分割している可能性が高いので、相関を加味したモデルが必要です。そこで、トピックの生成割合を決める際に、トピック間の相関を持つように多次元の正規分布を用います。ただし、その代わりに共役的な分布を持たないため、従来のギブスサンプリングではサンプリングが非効率になることから変分ベイズを用いる必要があります。

    PAM:Pachinko Allocation Modelについて

    CTMは各トピックが同じレベルにあるため、トピック間の階層構造を表すことができません。
    自動車にとっての、セダンやトラック、あるいはお酒にとってのワインやビールのようにトピックに関しても階層構造があることは想像に難くありません。トピック間の関係・相関を一般的に表現するモデルで、トピック間の階層構造を基本として、パチンコ玉が落ちるように単語を生成します。パチンコ玉が落ちるというのは、向きが一方行の有向かつ非巡回ノードが連想されます。分布に関しても共役なので、ギブスサンプリングでサンプリングが可能です。
    2016/04/24の段階ではまだGensimでモデルの開発はなされていないようです。
    Pachinko Allocation Model
    ちなみに、論文はこちらです。
    Pachinko Allocation: DAG-Structured Mixture Models of Topic Correlations

    Relational Topic Models(RTM)について

    文書の中身だけでなく、文書間のリンクの生成過程も同時に確率モデル化する手法。論文や特許データに対して活用できる。過去の購買行動に応じた、顧客のセグメント解析や商品のレコメンデーションに活用できるかもしれない。

    参考文献

    トピックモデル (機械学習プロフェッショナルシリーズ)
    トピックモデルによる統計的潜在意味解析 (自然言語処理シリーズ)
    Tokyo Webmining 46th 『トピックモデルことはじめ』
    machine_learning_python/topic.md

    統計数理研究所 H24年度公開講座 「確率的トピックモデル」サポートページ

    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月も当てれるようなモデルを作りたいものですね。

    参考文献