Rを使って自分サイトの解析

ご好評いただいております、本サイト「ウェブディレクターのための統計入門」ですが、ほとんどアクセスがない状況にあります。
そこでお恥ずかしながら、生データをつかってこのサイトを解析してみようと思います。

解析手順は以下のようにおこないます。

手順1 視覚化
手順2 基礎統計量調査
手順3 重回帰分析とその検証

これらの手順を始める前に、GoogleAnalyticsでデータをエクスポートしていきます。
サイトを分析していくには、色々な指標がありますが、今回は全体観を掴んでいきたいと思いますので、全体の指標である日別の「PV」「訪問者数」「直帰率」の4つの変数を見ていこうと思います。

Rでこのリストを読み込んでいきます。
リストの読み込みをR単体でやっても良いですが、Rコマンダーが楽ちんなのでこいつで読み込みます。

dataという変数にこれらのデータを読み込みました。

> data
X PV Visit Bounce_rate
1 2013/3/2 184 26 25
2 2013/3/3 58 14 40
3 2013/3/4 4 4 100
4 2013/3/5 16 10 50
5 2013/3/6 5 4 75
6 2013/3/7 8 7 80
7 2013/3/8 17 8 50
8 2013/3/9 11 6 67
9 2013/3/10 3 2 50
10 2013/3/11 3 3 100
11 2013/3/12 5 5 75
12 2013/3/13 10 7 86
13 2013/3/14 13 8 83
14 2013/3/15 27 17 17
15 2013/3/16 2 1 0
16 2013/3/17 11 9 50
17 2013/3/18 4 4 100
18 2013/3/19 5 5 75
19 2013/3/20 29 17 43
20 2013/3/21 10 7 50
21 2013/3/22 77 59 52
22 2013/3/23 31 17 29
23 2013/3/24 43 23 57
24 2013/3/25 17 12 60
25 2013/3/26 7 6 83
26 2013/3/27 5 5 100
27 2013/3/28 13 10 60
28 2013/3/29 9 6 75
29 2013/3/30 14 6 60
30 2013/3/31 21 14 60
31 2013/4/1 8 6 80
32 2013/4/2 16 14 50
33 2013/4/3 10 9 89
34 2013/4/4 24 16 60
35 2013/4/5 17 12 83
36 2013/4/6 21 10 20

手順1 視覚化
早速これらを視覚化していきます。
PVと訪問者数との関係を視覚化。
sc1

そりゃそうだという結果。

さらに相関関係とデータのバラつき具合を調べるために、相関係数行列と散布図行列を視覚化。

変数dataのままだと、日付がついているため相関係数を出せないので、日付を除いたデータだけの変数を作る。

> data.set <- data[c("PV","Visit","Bounce_rate")] 日付を除いたデータだけの行列「data.set」をつくったら、相関係数行列を作ります。 round()関数で小数点第三位までに数値を丸めます。 > round(cor(data.set), 3)
PV Visit Bounce_rate
PV 1.000 0.647 -0.409
Visit 0.647 1.000 -0.314
Bounce_rate -0.409 -0.314 1.000

非常に微妙な関係性。ギリギリPVと訪問者数に相関がありそうな感じ。
直帰率にいたってはPVとは負の相関が若干見られるものの、訪問者数との関係をほぼ見られない状況。

そして、個人的に好きな相関係数行列と散布図行列による視覚化。
スクリーンショット 2013-04-07 12.24.13

変数が多いともっと、ソレっぽくなりますが、変数が少ないためシンプルな図に。
相関係数を出したとき以上に、直帰率とそのほかの変数との関係性はほぼないことが視覚的にわかります(散布図がワチャワチャしてるし)。

手順2 基礎統計量調査
続いて基礎統計量を見ていきます。
summary()関数でデータの平均や最大値、最小値などをvar()関数で分散、sd()関数で標準偏差を出します。
データ内容を数値で理解することにより分析をしていく際のてがかりとしていきます。

> summary(data.set)
PV Visit Bounce_rate
Min. : 2.00 Min. : 1.00 Min. : 0.00
1st Qu.: 6.50 1st Qu.: 5.75 1st Qu.: 50.00
Median : 12.00 Median : 8.00 Median : 60.00
Mean : 21.06 Mean :10.81 Mean : 62.06
3rd Qu.: 21.00 3rd Qu.:14.00 3rd Qu.: 80.75
Max. :184.00 Max. :59.00 Max. :100.00

PV平均が21.06、訪問者数 10.81、直帰率 62.06%と。

> var(data.set)
PV Visit Bounce_rate
PV 1025.5397 208.26825 -326.00317
Visit 208.2683 101.01825 -78.70317
Bounce_rate -326.0032 -78.70317 619.93968
>
>
> sd(data.set)
PV Visit Bounce_rate
32.02405 10.05078 24.89859

手順3 重回帰分析とその検証
回帰分析をおこなっていきます。
まずは、目的変数の定義。
ここではPVに設定して、訪問者数と直帰率のどちらがPVに影響を与えているのかを調査していきます。

まず、先ほど作った、変数「data.set」の列を変更します。

> data.set <- data[c("Visit","Bounce_rate","PV")] 一番右に目的変数をおくのが流儀なので、目的変数をPVとしたために、data.setの順番を変更してから、lm()関数で回帰分析をおこないます。 > lm(PV~.,data=data.set)

Call:
lm(formula = PV ~ ., data = data.set)

Coefficients:
(Intercept) Visit Bounce_rate
19.4350 1.8333 -0.2931

出力結果をみると、Visitが正の数、Bounce_rateが負の数となっているので、「訪問者数が増えれば増えるほど、直帰率が減れば減るほどPVは増える」ということがわかります。

さらに、この回帰式の精度を調査します。

先ほどの回帰分析を変数「dataset.lm」に格納します。

> dataset.lm <- lm(PV~.,data=data.set) さらに、summary()関数でどの程度信頼できるか検証。 > summary(dataset.lm)

Call:
lm(formula = PV ~ ., data = data.set)

Residuals:
Min 1Q Median 3Q Max
-35.359 -7.289 -1.618 1.049 124.227

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 19.4350 13.5290 1.437 0.160260
Visit 1.8333 0.4272 4.292 0.000146 ***
Bounce_rate -0.2931 0.1724 -1.700 0.098573 .

Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ‘ 1

Residual standard error: 24.11 on 33 degrees of freedom
Multiple R-squared: 0.4655, Adjusted R-squared: 0.4331
F-statistic: 14.37 on 2 and 33 DF, p-value: 3.245e-05

悲しい結果が。
Multiple R-squared(決定係数)が、0.4655。Adjusted R-squared(調整済決定係数)が0.4331だと。
1に近ければ近いほど良いとされるが決定係数が半分以下。
結論、この回帰式の精度は43.3%という結果。別の変数がPVに影響を与えているんだと。

ちょっと気に入っている精度調査方法を記載。
上記の検証で使えない説明変数だということが判明したので無意味だけどね。

スクリーンショット 2013-04-10 1.04.10
ブログ「かにぱん冒険記」の「R言語と重回帰分析(重回帰分析はじめました編)」での記載を再度引用。

図の左上:横軸を予測値、縦軸を残差(実測地ー予測値)としたプロットです。当てはめが悪いデータにはラベルがつきます。ここでは1,3,4

このデータによるところの1,2,21。しかしこの数字が何を指しているのかはまだ不明。

右下:横軸をてこ比、縦軸を「基準化した残差」としたプロットです。対象とした1つのデータが、回帰モデルに与える影響度を調べます。全データを用いた場合の回帰係数と、対象としたデータ1点を除いた場合の回帰係数を求め、影響が大きい、すなわち特異なデータにはラベルがつきます。ここでは、1、4、10。あるデータのCook’s Distanceが0.5以上、特に1.0以上の場合は特異なデータであると考えます。

このデータによるところの1,15,21。しかしこの数字が何を指しているのかはまだ不明。
しかしなんだか当てはまっている(正常なデータ数が割と多い。まとまっている)データであることがわかってきた。

右上:横軸を予測値、縦軸を「基準化した残差の絶対値の平方根」としたプロットです。

おそらく左下? プロットの様子を見るとなんだかわちゃわちゃしている。

左下:正規Q-Qプロットを呼ばれるもので、正規分布に従っている場合は点が直線状に並び、正規分布に従っていない場合は直線から外れます。

おそらく右上? 割と直線に従っている。正規分布に従っているデータであること言える(けど精度悪い…)。

結論、
ウェブサイトのPVは訪問者数と直帰率ではわからない(こともある)。

うーん、別の変数を考えてみるか。
PVに与える要素として考えられるのは投稿数か。
投稿とPVの相関係数は高そうだ。
あとはあまりPVの説明変数では使われないような閲覧数とか経路とかも使ってみるかな、と。
ていうか、そもそもの母数が少ないという話もあるけど、それは置いておく。

Leave a Reply

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