ベイジアンネットワーク!
それでは最後にお待ちかねのベイジアンネットワークによる分析を行ってみましょう!
ベイジアンネットワークとは……参考文献によると「事象間の連関を確率的な過程として、有向グラフを用いて表す方法」とあります。
……??? うーん、難しい話はいったん置いておいて、因果関係を可視化してみましょう! 下記のパッケージを利用します。
library(deal)
使用する変数のみのデータを作成します。
sample4<-transform (sample3[,2:5],WeekEnd=sample3$WeekEnd)
ここでは純広告、リスティング、CV_純広告、CV_リスティングに加えて平日/週末に関する変数を追加した5変数を用いましょう。ついでに変数名を日本語表記に変更しておきましょう。
names(sample4)<-c("純広告","リスティング","CV_純広告","CV_リスティング","平日/週末")
nw<-network(sample4)
空のネットワークが作成されます。
plot(nw)
ネットワーク表示してみると、まだ矢印がなく空であることが確認できますね。
prior<-jointprior(nw,20)
ここで事前確率(分布)ってヤツを計算します。
次に因果関係が予めないことがわかっている方向を設定します。CVが原因となって、純広告のインプレッションやリスティングのクリックが結果として起こることは……ちょっとわかり難いですよね。
また仮に(原因)純広告を出した→(結果)週末になった!
とかなったら、救急車を呼ばれてしまうかも知れません。なので、あらかじめ想定しがたい因果関係の方向は
「ナイと思います」
と設定してあげることができます。便利ですね。
mybanlist<-matrix(c(
1,5,
2,5,
3,5,
4,5,
3,1,
3,2,
3,4,
4,1,
4,2,
4,3),
ncol=2,byrow=TRUE)
banlist(nw)<-mybanlist
こちらの意味ですが、
1→5:純広告→平日/週末
2→5:リスティング→平日/週末
…
3→1:CV_純広告→純広告
3→2:CV_純広告→リスティング
…
4→1:CV_リスティング→純広告
4→2:CV_リスティング→リスティング
…
上記の方向には矢印を引かない!という設定となります。
【注】dealパッケージでは、連続変数("純広告","リスティング","CV_純広告","CV_リスティング")から離散変数("平日/週末")への矢印はもともと無いように設定されていますが、ここではわかり易さを優先し入れています。
nw<-learn(nw,sample4,prior)$nw
事後確率(分布)を計算し、
search<-autosearch(nw,sample4,prior,trace=TRUE)
適切なベイジアンネットワークを探し出します。
ちょっと地味な出力ではありますが、なかなか面白い結果になっています。
- 「CV_純広告」に影響があるのは、「平日/週末」、「リスティング」の2つ
- 「CV_リスティング」に影響があるのは、「平日/週末」、「純広告」、「リスティング」の3つ
- 「リスティング」は「純広告」には影響を受けるが、「平日/週末」の影響はない
- 「純広告」は「平日/週末」の影響のみを受ける
間接効果の点からは下記のパスの存在が示唆されています。
- 「純広告」→「リスティング」→「CV_純広告」
今回は、相関分析/散布図の可視化をメインにご紹介し、欲張ってベイジアンネットワークまで踏み込んでみました。少しでも分析の楽しさに気付いて頂けたら幸いです。特にベイジアンネットワークについてご興味がある方は、参考文献も合わせてご覧いただけたら幸いです!
- 『Rで学ぶデータサイエンス8 ネットワーク分析』, 共立出版, 鈴木努2009
- 『データマイニング入門』,東京図書,豊田秀樹編著,2008
簡単! 2015年2月10日「3つ」覚えて分析から視覚化まで即実践!Rでできるデータ分析講座開催
Rをインストールしたが、無骨なUIに「今日はこのへんで……」と、そっと閉じてしまった方にオススメです!
本講座では実機を使って「できるだけわかりやすく」グラフ化&データ分析をワークショップ形式で簡単に身に付けることができます。

