データ・サイエンティストは可視化の夢を見るか?

Does Data Scientist Dream of Visualization?

併読の効用 ——単回帰分析——

ひきつづき併読を続けています。現在地は第 14 章 “Simple Linear Regression”。

Data Science from Scratch

Data Science from Scratch

さくさくとコードを写経していきます。
(いつもの話ですが、コードの内容は本書に当たってください。)
いちばん基本とも言える『単回帰分析』ですが、今回面白かったのは線形回帰と確率的勾配降下法による計算結果の比較でした。

先ず、以下の入力データ 2 種があります。

num_friends_good = [49,41,40,25,21,21,19,19,18,18,16,15,15,15,15,14,14,13,13,13,13,12,12,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,8,8,8,8,8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]

daily_minutes_good = [68.77,51.25,52.08,38.36,44.54,57.13,51.4,41.42,31.22,34.76,54.01,38.79,47.59,49.1,27.66,41.03,36.73,48.65,28.12,46.62,35.57,32.98,35,26.07,23.77,39.73,40.57,31.65,31.21,36.32,20.45,21.93,26.02,27.34,23.49,46.94,30.5,33.8,24.23,21.4,27.94,32.24,40.57,25.07,19.42,22.39,18.42,46.96,23.72,26.41,26.97,36.76,40.32,35.02,29.47,30.2,31,38.11,38.18,36.31,21.03,30.86,36.07,28.66,29.08,37.28,15.28,24.17,22.31,30.17,25.53,19.85,35.37,44.6,17.23,13.47,26.33,35.02,32.09,24.81,19.33,28.77,24.26,31.98,25.73,24.86,16.28,34.51,15.23,39.72,40.8,26.06,35.76,34.76,16.13,44.04,18.03,19.65,32.62,35.59,39.43,14.18,35.24,40.13,41.82,35.45,36.07,43.67,24.61,20.9,21.9,18.79,27.61,27.21,26.61,29.77,20.59,27.53,13.82,33.2,25,33.1,36.65,18.63,14.87,22.2,36.81,25.53,24.62,26.25,18.21,28.08,19.42,29.79,32.8,35.99,28.32,27.79,35.88,29.06,36.28,14.1,36.63,37.49,26.9,18.58,38.48,24.48,18.95,33.55,14.24,29.04,32.51,25.63,22.22,19,32.73,15.16,13.9,27.2,32.01,29.27,33,13.74,20.42,27.32,18.23,35.35,28.48,9.08,24.62,20.12,35.26,19.92,31.02,16.49,12.16,30.7,31.22,34.65,13.13,27.51,33.2,31.57,14.1,33.42,17.44,10.12,24.42,9.82,23.39,30.93,15.03,21.67,31.09,33.29,22.61,26.89,23.48,8.38,27.81,32.35,23.84]


これらについて、Y = alpha + beta * X なる回帰式を求める場合、以下のようになりました。

単回帰分析(最小 2 乗法):

    alpha, beta = least_squares_fit(num_friends_good, daily_minutes_good)

alpha 22.94755241346903
beta 0.903865945605865


確率的勾配降下法 (第 8 章より):

    random.seed(0)
    theta = [random.random(), random.random()]
    alpha, beta = minimize_stochastic(squared_error,
                                      squared_error_gradient,
                                      num_friends_good,
                                      daily_minutes_good,
                                      theta,
                                      0.0001)

alpha 22.93746417548679
beta 0.9043371597664965


有効数字 3 桁ぐらいは一致してます。


ちなみにグラフを描画して比較してみますが、ほとんど違いは分かりません。
此のデータ、外れ値を取り除いたらどうなるの?って気はしますが、とりあえずスルーします。

単回帰分析(最小 2 乗法):
f:id:renpoo:20160831114542p:plain

確率的勾配降下法
f:id:renpoo:20160831114550p:plain


此の線形回帰分析から得られる結論は同書から引用するだけで済ませます。

That is, we predict that a user with no friends on DataSciencester would still spend about 23 minutes a day on the site. And for each additional friend, we expect a user to spend almost a minute more on the site each day.

このあと、R を使って同様の内容を確認してみます。
参考書は『R によるデータ・サイエンス』です。

Rによるデータサイエンス-データ解析の基礎から最新手法まで

Rによるデータサイエンス-データ解析の基礎から最新手法まで

例題として R に組み込まれている “cars” データセットを使用します。
これは自動車の制動距離をスピードとの関係で記録したものです。

> cars
speed	dist
4	2
4	10
7	4
7	22
8	16
9	10
10	18
10	26
10	34
11	17
11	28
12	14
12	20
12	24
12	28
13	26
13	34
13	34
13	46
14	26
14	36
14	60
14	80
15	20
15	26
15	54
16	32
16	40
17	32
17	40
17	50
18	42
18	56
18	76
18	84
19	36
19	46
19	68
20	32
20	48
20	52
20	56
20	64
22	66
23	54
24	70
24	92
24	93
24	120
25	85


この散布図を描いてみると……。
f:id:renpoo:20160901171100p:plain
かなり強い相関が見られます。ちなみに相関係数を計算してみると 0.807 とかなり高くなっております。


さて、此処で線形回帰分析に掛けてみます。

cars.lm <- lm(dist ~ speed, data=cars)

此の結果を回帰直線(赤色)込みで再度、散布図を描いてみると……。
f:id:renpoo:20160901171514p:plain


同様の結果を『要約』として表示してみます。

summary(cars.lm)

Call:
lm(formula = dist ~ speed, data = cars)

Residuals:
    Min      1Q  Median      3Q     Max 
-29.069  -9.525  -2.272   9.215  43.201 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -17.5791     6.7584  -2.601   0.0123 *  
speed         3.9324     0.4155   9.464 1.49e-12 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 15.38 on 48 degrees of freedom
Multiple R-squared:  0.6511,	Adjusted R-squared:  0.6438
F-statistic: 89.57 on 1 and 48 DF,  p-value: 1.49e-12

成る程、決定係数と調整済み決定係数がそれぞれ 0.6511 と 0.6438 になっているので、「そこそこ」回帰モデル(直線)がデータにフィットしている、と言えそうです。その回帰モデルは『係数』の項から解るように

dist = 3.9324 * speed - 17.5791

といった直線の式になっています。ブレーキ直前の「スピード」が 1 (km/h(?)) 増えるごとに「制動に必要な距離」が約 4 (m(?)) 伸びる、といったものです(単位については明記されていないため推測です)。


最後に、こうやって計算された回帰モデルがどのような結果を示しているか、4 つのグラフを貼り付けます。

まず、『残差と予測値の散布図』です。
図から残差の全体像を概観することができます。
縦軸と横軸に注意してください。
概ねフィットしているのですが、23 番、35 番、49 番が外れ値になっているかにみえます。
f:id:renpoo:20160901172406p:plain


次に『残差の正規 Q-Q プロット』です。
これは

データの正規性を考察するための図示方法

だそうです。

データが正規分布に従うと、点が直線上に並ぶ。回帰分析では、残差が標準正規分布に従うと仮定している。

とのことですから、此の Q-Q プロットを観察すると、おおむね標準正規分布に従っている、と言えそうです。
f:id:renpoo:20160901172415p:plain


さらに『残差の平方根プロット』です。

この図の目的も残差の変動状況を考察することである

そうです。
f:id:renpoo:20160901172422p:plain


4 つ目が『残差と影響力プロット(梃子値とクックの距離)』です。

1 つのデータがモデルの当てはまりへの影響力を測る統計量として、梃子値(てこち、levarage)とクック(Cook)の距離が多く用いられている。梃子値が大きいほど当てはめがよい。当てはまりが良すぎるデータが多すぎるのも異常である。クックの距離は、値が大きいほどモデルへの影響力が大きい。クックの距離が 0.5 以上であれば影響力が大きく、1 を超えると特異に大きいといわれている。

49 番の残差は若干大きいですが、それでも Cook's distance には収まっているので、先程の見解に反して外れ値とする必要はないことが解ります。
f:id:renpoo:20160901172429p:plain


結論としては、自動車のスピードと制動距離のあいだには比例関係がある、という極々あたりまえのものとなっています。
でも、いちばん簡単そうにみえる『単回帰分析』ですら、いろいろと検討すべきことが多いことを痛感していますね。