Rでネットワーク分析〜ベイジアン・ネットワーク

やっぱ、ベイズ推定ですよね。
高速学習しているベイズ推定。
事前分布と事後分布についておぼろげに理解しつつある状況。
ベイジアン・ネットワークを使用すると変数間の関連性が見えてくる、とのことなのでさっそくやってみました。

今回参考にさせていただいたのはyokkunsの日記「ネットワーク分析 – ベイジアン・ネットワーク」
氏のTwitterやブログは本当に参考にさせていただいている。ありがたい存在。

当ブログでは、「ハイテク企業の管理職データ」を使っていますが、私は自分ブログの塩辛いアクセスデータを活用してやってみることに。

GoogleAnalyticsからディレクトリ別のアクセスデータをセカンダリディメンションで「オペレーティング・システム」でソートしてデータを出します。
ネットワークを作る際には、事象間に関連性がないと話にならないので、アクセスデータを解析する際にはある一つの事象の複数回調査でないと成り立たない(多分)。
だから、アクセスデータ解析の際にはあるページ(ディレクトリ)の複数日のデータであるとか、あるキーワードの複数日に渡って調査したデータであるとかでないといけない。だから、月別データ集計とかは「月別」という複雑な要素が絡むので図示できない。

取り込んだデータはこんな形に。

> head(data)
オペレーティング.システム ページビュー数 ページ別訪問数 平均ページ滞在時間 直帰率 離脱率
1 Windows 451 417 352.07692 0.8638743 0.8270510
2 Windows 428 368 263.60360 0.7897727 0.7406542
3 Macintosh 423 197 164.69796 0.7241379 0.4208038
4 Macintosh 224 196 89.65714 0.9326425 0.8437500
5 Windows 216 179 157.68182 0.7894737 0.6944444
6 Macintosh 192 180 497.25000 0.9385475 0.9375000

変数を当ブログのフォーマットに合わせる。

> ht <- data からの、ネットワークオブジェクト生成。 > ht.nw <- network(ht) 事前分布を計算(行コピーになってきてちょっと恥ずかしい…)。 > ht.prior <- jointprior(ht.nw) Imaginary sample size: 16 除外リストを作成。 mybanlist <- matrix(c( 1,2, 1,3, 1,4, 1,5, 1,6), ncol = 2, byrow = TRUE) > banlist(ht.nw) <- mybanlist 列「オペレーティング.システム」はいらないので除外するわけですが、そもそもこんな列いらねーじゃんと思うわけですが、この列を除くとなぜだかエラーが起きるので仕方なくこの感じに。 事後分布を計算。 > ht.nw <- learn(ht.nw, ht, ht.prior)$nw ネットワークスコアが最適になるネットワークを検索。 > ht.search <- autosearch(ht.nw, ht, ht.prior, trace = TRUE) [Autosearch (1) -16999.09 [オペレーティング.システム][ページビュー数][ページ別訪問数|ページビュー数][平均ページ滞在時間][直帰率][離脱率] (2) -16464.28 [オペレーティング.システム][ページビュー数][ページ別訪問数|ページビュー数][平均ページ滞在時間][直帰率|離脱率][離脱率] (3) -16435.31 [オペレーティング.システム][ページビュー数][ページ別訪問数|ページビュー数][平均ページ滞在時間|ページ別訪問数][直帰率|離脱率][離脱率] .(4) -16420.89 [オペレーティング.システム][ページビュー数][ページ別訪問数|ページビュー数][平均ページ滞在時間|ページ別訪問数:離脱率][直帰率|離脱率][離脱率] .(5) -16418.61 [オペレーティング.システム][ページビュー数][ページ別訪問数|ページビュー数][平均ページ滞在時間|ページ別訪問数:離脱率][直帰率|ページビュー数:離脱率][離脱率] .(6) -16416.68 [オペレーティング.システム][ページビュー数][ページ別訪問数|ページビュー数:離脱率][平均ページ滞在時間|ページ別訪問数:離脱率][直帰率|ページビュー数:離脱率][離脱率] .Total 1.846 add 1.262 rem 0.013 turn 0.128 sort 0.02 choose 0.009 rest 0.414 ] 最後にplot()。 > plot(ht.nw)

スクリーンショット 2013-05-31 1.08.49

離脱率の関係性が多い。
ページ別訪問数、平均ページ滞在時間、直帰率に影響を与えていることがわかる。
ページビュー数は、ページ別訪問数、直帰率に影響を与えている。
ページビュー数と離脱率に関連性がないことわかる。

「鶏が先か、卵が先か」の考え方もあるけど、ページ別訪問数があって離脱率があるものなのかと思っていましたが、離脱率があってページ別の訪問数があることがわかる。これは発見。

久しぶりにRを使って解析した感がある。
Rをいじれないとストレス溜まる。ほとんど病気。

Leave a Reply

%d人のブロガーが「いいね」をつけました。