자, 단순 회귀분석을 봤으니까, 이제 2개 이상의 독립변수에 의한 회귀도 할 수 있는 거 아냐? 하는 생각에 이르렀다면, 정말 근사한 생각이 아닐 수 없습니다. 다중회귀도 말만 화려하지 별 하나 ★✩✩✩✩ 난이도이니까요. 훗. 어쨌든 지금까지 보았던 1차 단순 회귀분석을 하는 것은 상관분석과 그다지 크게 다른 통찰력을 얻기 어렵기 때문에 거의 다를 바가 없습니다. 진정한 의미는 다중회귀를 하기 위한 것이라고 생각합니다.
이번에는 느낌이라는 단어를 많이 쓰게 될텐데, 수식을 모두 전개하는 것보다는 어떤 Intuition인지를 설명하기 위해서 느낌이라는 단어를 많이 사용하니 그 점만은 이해해 주세요.
다중 회귀라는 것이 별건 아니고, 예를 들어 환자 수명을 결정 하게 되는 것들에 대하여 연구를 하는데, 여드름 개수, 심장 박동수, 머리털 수, 콧속 습도가 환자의 수명에 어떻게 영향을 미치는지를 연구한다고 했을 때, 이제까지의 단순 회귀로는 각각 따로따로 회귀를 했어야 했거든요 - 이렇게 하면 분석 결과도 너무 많아져서 꽤나 복잡스럽겠습니다 - , 이제는 이걸 모두 뭉뚱 그려서 각각의 변수가 얼마나 환자 수명에 영향을 미치는지를 한방에 분석해 보자는 뭐 그런 단순한 시도입니다. 그렇긴 한데, 어떻게 이걸 하지? 싶지만 코를 한번 벌름하고 나가면 금방 별거 아니군. 하면서 틀림없이 고개를 끄덕일 테니 한번 믿어보세요. 여기에서 중요한 점은 다중회귀와 단순 회귀는 똑같다는 점입니다. 그냥 똑같은데 조금 더 복잡할 뿐입니다. 단순 회귀와 마찬가지로 LS(Least Square) 방법을 써서 계수들을 찾아냅니다. (희번득)
⓵ 독립변수가 1개인 단순 선형 회귀분석의 경우,
$\hat{y} = b_0 + b_1x$의 계수를 구했었죠? 어떻게? $\cfrac{\partial E}{\partial b_0}=0, \cfrac{\partial E}{\partial b_1}=0, \textit{ where } E = \sum(y_i -\hat{y_i})^2 = \sum e_i ^2 $ 이런 식으로 계수들을 구했었죠!
⓶ 독립변수가 여러 개인 다중 선형 회귀분석의 경우에는
$\hat{y} = {b_0} + {b_1}x_1 + {b_2}x_2 + {b_2}x_2 + {b_3}x_3 + {b_4}x_4 \cdots$ 의 계수들을 구하게 됩니다.
다중회귀분석도 여전히 LS(Least Sqaure ) 방법을 이용해서 최적화된 회귀선(계수)을 찾는데 어떻게 찾는가 하면 단순 회귀와 마찬가지로 E를 각 계수로 편미분 해서 최솟값을 구합니다.
$E = \sum\limits_{i=1}^n (y_i -\hat{y_i}^2)= \sum\limits_{i=1}^{n} e_i^2 = e_1^2 + e_2^2 + e_3^2 + e_4^2 + e_5^2 + e_6^2 \cdots $ 를 $b_1, b_2, \cdots $로 각각 편미분 한 후에 그것이 0이 되는 방정식들을 모아 (즉, $\frac{\partial E}{\partial b_1} = \frac{\partial E}{\partial b_2} = \cdots \frac{\partial E}{\partial b_n} = 0 $) 연립방정식을 풀어서 E를 최소화하는 계수들을 구하는 거죠. 음. 단순 회귀분석이랑 정말 똑같죠? (e는 관측 데이터와 회귀 추세선과의 차이 $(y_i-\hat{y_i})$ 즉, residual이에요) 살짝 리마인드 하자면 E는 SSE입니다.
이걸 푸는 방법이라는 게 고려할 연립방정식 수식이 많으니까, Linear Algebra를 이용해서 푸는 방법이 제일 쉬운데, 이것도 뭐 Least Square로 푸는 것일 뿐이고, 결과가 어떻다 정도만 알아도 충분하다고 생각하지만, 그래도 행렬로는 이런 식으로 푼다 정도를 알면 뿌듯할 수 있으니까, 바로 다음에 이어지는 푸는 방법을 참고하면 좋겠습니다. (먼산). 자, 관측값들을 행렬로 표현해서 시작해 보겠습니다.
$$y_{1}=b_{0}+b_{1} x_{11}+b_{2} x_{12}+\ldots+b_{k} x_{1 k}+\varepsilon_{1} \\
y_{2}=b_{0}+b_{1} x_{21}+b_{2} x_{22}+\ldots+b_{k} x_{2 k}+\varepsilon_{2} \\
\vdots \quad \vdots \\
y_{n}=b_{0}+b_{1} x_{n 1}+b_{2} x_{n 2}+\ldots+b_{k} x_{n k}+\varepsilon_{n} \\$$
$$\left(\begin{array}{l}y_{1} \\ y_{2} \\ \vdots \\ y_{n}\end{array}\right)=\left(\begin{array}{cccc}1 & x_{11} & x_{12} \cdots x_{1 k} \\ 1 & x_{21} & x_{22} \cdots x_{2 k} \\ \vdots & \vdots & \vdots \\ 1 & x_{n 1} & x_{n 2} \cdots x_{n k}\end{array}\right)\left(\begin{array}{c}b_{0} \\ b_{1} \\ \vdots \\ b_{k}\end{array}\right)+\left(\begin{array}{c}\varepsilon_{1} \\ \varepsilon_{2} \\ \vdots \\ \varepsilon_{n}\end{array}\right)$$
y = Xb + ε 를 정리한다는 마음으로 이런 식으로 y, x를 표현한다면,
$$\begin{aligned} E = \sum_{i=1}^{n} \varepsilon_{i}^{2}&=\varepsilon^{T} \varepsilon=(y-X b)^{T}(y-X b) & \\&=y^{T} y+b^{T} X^{T} X b-2 b^{T} X^{T} y \\& \textit{in order to find minimum} \\ & \frac{\partial E}{\partial b}=2 X^{T} X b-2 X^{T} y=0 \\ & X^{T} X b=X^{T} y \\ & b=\left(X^{T} X\right)^{-1} X^{T} y \end{aligned}$$
단순 회귀와 똑같은 방식으로 b들 - b 벡터 -로 미분해서 계수들을 구합니다. 알아두면 뿌듯하겠습니다. 결과를 보면 당연히 $X^T X$의 역행렬이 존재해야 하겠습니다. 역행렬이 존재하지 않는 경우에는 b를 특정할 수가 없습니다. 특정할 수 없는 경우라는 것이 혹시라도 한 변수가 다른 변수와 같다면, Full Rank가 안되기 때문에 행렬식이 존재하지 못하게 되고, 존재하지 않는다면 b의 해는 무수히 많다는 뜻입니다. 이것이 뒤에 설명할 Collinearity(다중공선성) 과 연결됩니다.
요게 어떤 느낌이냐면 단순 회귀에서 $b_1 = \cfrac{Cov(x,y)}{Var(x)}$ 였잖아요? 이 결과 행렬식을 잘 보면 $b = \cfrac{X^T y}{X^T X}$의 느낌이니까 여전히 X와 y의 곱을 X의 Variance로 나눈 듯한 느낌적인 느낌이라고 보면 딱 들어맞습니다. - 참고로 $(X^T X)^{-1}$은 Precision Matrix라고 해서 Variance는 값이 클수록 관측 데이터가 흩어져 있다는 것에 비해, 이것은 값이 클수록 관측데이터가 몰려 있는 것을 뜻하기도 합니다. - $\cfrac{1}{Var(X)}$ 느낌이죠?
일단, 이런 방법을 통해서 적절한 계수 b값들을 찾아내고 나면, 단순 회귀와 똑같은 결과의 해석이 기다리고 있습니다. 이번에는 각각의 계수에 대한 각각의 t검정을 하게 되는데, 이때의 가설은 다음과 같습니다.
Null Hypothesis : "해당" 회귀계수는 0이다.
Alternative Hypothesis : "해당" 회귀계수가 0은 아니다.
뭐 이런 건데, 이때의 검정 통계량은 단순 회귀에서 보았듯이 똑같이 (각각의 계수에 대하여)
$t_i = \cfrac{{b_i}}{SE(b_i)}$ 뭐 이렇습니다. 모든 회귀계수에 대해서 이 t통계량을 이용해서 그 p value가 계산됩니다.
F 검정 통계량에 대해서 이야기하자면, 정의가 MSR/MSE 였잖아요? 이 정의대로 구하면 됩니다. 말로는 엄청 간단하군요.라고만 하면 어떻게 해야 하지? 싶으니까 실제로 간단하게 구해볼까 하니까. 걱정 마세요.
이제 이해를 돕기 위해 간단한 다중회귀분석을 당당하게 한번 해 보겠습니다.라고는 했지만 사실 모든 계산과정을 손으로 풀어본다고 하니, 머리가 지끈 거리기 시작했습니다.
먼저 statsmodels을 이용해서 계수도 구하고 검정도 한방에 해볼까 합니다. 손으로 풀려고 했다간 대환장 파티가 될 테니 미리 statsmodels을 이용해서 일단 해 보겠습니다.
일단, 아래와 같은 데이터가 있다고 합시다.
음식준비시간, 배달숙련도, 배달거리를 독립변수로, 배달시간을 종속변수로 하는 문제를 다뤄볼까 합니다. 흥분되나요? 푸슉푸슉
자, 그러면 주저하지 말고, 다중 회귀분석을 시켜봅시다.
주어진 대로 배달시간이 종속변수이고, 나머지 배달거리, 배달숙련도, 음식준비시간을 독립변수로 두고 해 보면.
import statsmodels.formula.api as smf
sales = smf.ols("배달시간 ~ 음식준비시간 + 배달숙련도 + 배달거리", data=df).fit()
이런 식으로 구할 수 있겠습니다.
결과는! 짜잔.
짜잔, 그럴듯한 분석 결과가 촤라락 나왔습니다. 오호, 자, 그러면 이 분석 결과에 번호를 달아 놓고, 순서대로 해석이라는 걸 해 보죠.
걍 일단 ➊➋➌➍를 순서대로 보고 어떤 의미일까 턱을 괴고 단순 회귀분석에서 보았던 것들을 기억해내 보시구요. 번쩍. 짠, 그리고 출발!
➊ : 각각의 독립변수에 대한 각각의 계수(b)들을 구했습니다. 이 의미는 다중 회귀선이
y(배달시간)=-12.648223 + 0.7700365 음식준비시간 + 0.2802135 배달숙련도 + 1.105769 배달거리
이다라는 의미겠죠! 가만히 들여다보면 배달거리가 단위 변화에 대해서 가장 변화율이 크군요.
➋를보면 R_squared(adjusted) 두 개 값이 있는데, 오, 꽤나 회귀가 잘 되었나 봅니다. R_squared 값이 엄청 크네요. 후후. 뭔가 결과가 좋아 보이네요.라고는 했지만 실무적으로 보면 이건 너무 높은 R²값 입니다만.
➌번 F검정 의한 p value를 보더라도 적합성이 꽤나 괜찮은 결과 같습니다. p value가 0.00458이면 significant 하잖아요!
➍번 차례, 여기까지는 좋았는데, ➍번을 보면 Double tail t 검정에 의한 각각의 계수에 대한 p value가 있는데, 어라? 배달거리 빼고는 나머지가 Significant하지 않군요. 흠. 이거는 배달거리를 빼고 나머지 음식준비시간, 배달거리에 해당하는 계수들이 유의하지 않으니 초큼 이상한 것 같다... 뭐 그런 정도 의미로 일단 받아들이기로 합시다. 왜 이게 초큼 이상한 검정 결과가 나오는지 곧 다시 다뤄보기로 하고요.
결국, 전체적인 해석을 해보자면, "배달시간은 음식준비시간이 0.77정도의 영향을 미치고, 배달숙련도가 0.28정도의 영향을, 그리고 배달거리가 1.10 정도의 영향을 미친다고 해석할 수 있고, 이 결과는 꽤나 괜찮은 R²적합도와 유의한 F검정의 결과를 보았을 때, 쓸만한 결과이다. 다만, 배달숙련도의 0.28의 영향력이 t검정결과가 유의하지 않아서 이건 좀 찝찝한데 그 이유를 다시 살펴보기로 하자." 정도가 되겠습니다. 휴.
대충 분석 결과를 해석해 보았는데, 이 시점에 이 값들을 손으로 직접 구하는 것을 도전해 보면 재미있겠군요. 머리를 헝클어 뜨리면서 긁은 후에 잠시 한숨을 쉬고 가보시죠.
우선, 계수들을 구해봅시다.
$b=\left(X^{T} X\right)^{-1} X^{T} y$ 라고 했으니까, 이걸 하나씩 차근차근해 보죠 머.
$$ X = \begin{aligned} & \begin{bmatrix}
1 & 79 & 80 & 73 \\
1 & 93 & 89 & 96 \\
1 & 70 & 65 & 74 \\
1 & 89 & 91 & 90 \\
1 & 70 & 73 & 78 \\
1 & 93 & 88 & 93
\end{bmatrix} \\
& \quad \quad \,\, (6 \times 4)
\end{aligned}
\,\,\,\,
X^T = \begin{aligned} & \begin{bmatrix}
1 & 1 & 1 & 1 & 1 & 1 \\
79 & 93 & 70 & 89 & 70 & 93 \\
80 & 89 & 65 & 91 & 73 & 88 \\
73 & 96 & 74 & 90 & 78 & 93
\end{bmatrix} \\ & \quad \quad \quad \quad \quad(4 \times 6) \end{aligned}
$$
$$
X^T X = \begin{aligned} & \begin{bmatrix}
6 & 494 & 486 & 504 \\
494 & 41260 & 40540 & 41994 \\
486 & 40540 & 39900 & 41262 \\
504 & 41994 & 41262 & 42854
\end{bmatrix} \\ & \quad \quad \quad \quad \quad (4 \times 4) \end{aligned}
$$
$$
(X^T X)^{-1} =
\begin{aligned} &
\begin{bmatrix}
14.9579 & 0.1166 & -0.1357 & -0.1595 \\
0.1166 & 0.0242 & -0.0155 & -0.0102 \\
-0.1357 & -0.0155 & 0.0161 & 0.0013 \\
-0.1595 & -0.0102 & 0.0013 & 0.0106
\end{bmatrix}\\
& \quad\quad\quad\quad\quad\quad \quad\quad\quad(4 \times 4)
\end{aligned}
$$
$$ X^T y = \begin{aligned} & \begin{bmatrix}
998 \\
83319 \\
81877 \\
84911
\end{bmatrix} \\ & \,\,\, (4 \times 1) \end{aligned} $$
$$ \begin{aligned} b &= (X^T X)^{-1}X^T y \\\\ &=
\begin{aligned} &
\begin{bmatrix}
14.9579 & 0.1166 & -0.1357 & -0.1595 \\
0.1166 & 0.0242 & -0.0155 & -0.0102 \\
-0.1357 & -0.0155 & 0.0161 & 0.0013 \\
-0.1595 & -0.0102 & 0.0013 & 0.0106
\end{bmatrix}\\
& \quad\quad\quad \quad\quad\quad\quad\quad(4 \times 4)
\end{aligned}
\begin{aligned} & \begin{bmatrix}
998 \\
83319 \\
81877 \\
84911
\end{bmatrix} \\ & \,\,\, (4 \times 1) \end{aligned} \\ &= \begin{aligned} & \begin{bmatrix}
-12.64822279 \\
0.770036467 \\
0.280213503 \\
1.105768967
\end{bmatrix} \\ & \quad\quad (4 \times 1) \end{aligned} \end{aligned}$$
오, 자 어떤가요? 이렇게 하니까 b들을 턱허니 구할 수 있군요!? 후후. 뭔가 행렬로 푸니까 단순 회귀보다 더 쉬운 것 같기도 하고요. - 사실 이렇게 쉬운 거 다 알고 있는데, 다른 사람들이 다 쉬쉬하고 있는 거예요.-
그리고, R²는 엉망인 회귀로부터 회귀분석을 했더니 얼마나 개선되었는가 하는 것이라고 했으니까 말이죠,
$R^2 = \cfrac{SSR}{SST}$ 잖아요?
그럼 이걸 구해보도록 해 봅시다요.
배달시간 = -12.648223 + 0.7700365 음식준비시간 + 0.2802135 배달숙련도 + 1.105769 배달거리
라는 점을 마음속에 두고요.
잘 계산해 보면 R² = SSR/SST = 2370.07/2377.33=0.9969가 됩니다. statsmodels 분석 결과에 보면 0.997 있죠? 이거 이렇게 계산된 거랍니다.
근데 이전에 알아보았던 R²에 대한 새로운 사실 기억하시나요?, R²가 $y, \hat{y}$의 Correlation이라는 말이죠, 즉, $R^2 = corr(y, \hat{y}) = r_{y \hat{y}}$ 이거요. 이걸 계산해 보면,
$r_{y \hat{y}} = 0.9984703$가 되고요, 이거 제곱하면, 0.9969427입니다. 어랏? 정말 R²네요? 후후, 재밌죠? ★★★★ 이건 별 4개 정도의 상식입니다.
R²을 계산하다 보니, 어떨결에 SST, SSR, SSE를 계산하게 되었는데, 그 김에 간단하게 F검정 통계량까지 곧바로 해볼 수 있겠습니다.
F검정을 하기 위해 귀무가설과 대립가설을 살짝 이야기해 보면,
$H_0 : b_1 = b_2 = b_3 = \cdots = b_k = 0 $
$H_1 : b_j \neq 0, \,\,for\, some \,j$
입니다. 모든 계수가 0이다. 가 Null Hyothesis이고, 하나라도 0이 아니다가 Alternative Hypothesis가 됩니다.
자, 같은 방식으로 $F = \cfrac{\frac{SSR}{df_{SSR}}}{\frac{SSE}{df_{SSE}}} = \cfrac{MSR}{MSE}$였잖아요?
그러니까 실제 계산을 해 보면 $ F = \cfrac{2370.07/3}{7.27/2} = 217.392$ 가 됩니다. 분석 결과의 217.4 이것도 이런 식으로 계산해서 나오는 결과값입니다. 또 재미있는 이야기 하나 해 본다면, - 자꾸 재미있다고 해서 미안합니다만.. -
자, 보세요. $\cfrac{SSR}{SSE} = \cfrac{SSR}{SST-SSR} = \cfrac{\cfrac{SSR}{SST}}{1-\cfrac{SSR}{SST}} = \cfrac{R^2}{1- R^2} = F\cfrac{df_{SSR}}{df_{SSE}}$ 잖아요?
그러니까, $F = \cfrac{R^2}{1-R^2} \times \cfrac{df_{SSE}}{df_{SSR}}$ 이 됩니다. 어? F검정통계량을 R²결정계수로 구할 수도 있군요?
요 F 검정통계량을 구할 때는 다 쉽긴 한데 가장 어렵다고 생각되는 부분이 자유도인데요, 자유도는 R의 경우에는 독립변수가 3개잖아요? 그러니까 요 3개의 독립변수의 계수들을 구하기 위해서 3개의 관측치를 사용하면 구할 수 있고요, 그러니까, 6개 관측치중에 3개를 사용해 버렸고, T를 구하기 위해서는 관측치 1개만 있으면 되니까 1개를 사용해 버리고요, 최종적으로 E는 2개의 자유도가 남습니다. 정리하면 회귀의 자유도는 p, 전체 오차의 자유도는 1, 오차의 자유도는 n-p-1라고 표현합니다. 적합도 검정을 위해서 F검정을 할 때 F(p, n-p-1)로 표현하는 경우가 많은데, n이 전체 표본수, p가 독립변수의 개수(Predictor)라고 하여 이런 식으로 표현합니다. 이 경우에는 컨셉적으로 F(R, E)를 구하는 것이니까 F(3, 2)가 되겠군요. - 이걸 외우느니, 어떤 식으로 따지는지 알면 잊지 않겠죠.-
이제는 손으로도 (와우) 다중회귀를 풀 수 있다고 생각하니, 기분이가 좋아졌는데, 계수가 유의하지 않아서 찝찝했던 것에 관련해서 다시 한번 짧게 이야기해 보면 좋겠군요.
R_squared나 F 검정은 괜찮은데 - (즉, 회귀 적합도는 괜찮은데), 각각의 독립변수 계수의 t검정 통계량이 유의미하지 않은 경우는 다음과 같은 이유가 있을 수 있겠습니다.
㉠ 표본수가 너무 적다.
㉡ Non linear Correlation이 변수 사이에 존재한다.
㉢ 어떤 독립변수가 collinearity (공선성)이 발생시켜 버렸다.
㉠의 경우라면 표본이 너무 적은 경우니까 더 뽑아보면 될 것입니다. 유용한 데이터를 더 구할 수 있다면 말이죠. 가장 행복한 경우죠. 얼마나 더 표본이 필요한가 하면 권장 표본 크기가 있는데, 적어도 한 개의 독립변수당 10~15개의 관측치를 추천합디다. 예를 들어, 두 개의 독립변수에 대하여 다중회귀를 한다면 적어도 샘플 크기는 30~45개 정도가 적당하다고들 합디다. - 학문적 근거는 없습니다만 -
㉡의 경우라면 Non linear Polynomial Regression을 시도해 볼만 합니다. (2차 이상의 다항식). 이것도 쉽게만 풀린다면 엄청 다행의 케이스겠군요.
㉢ 그렇다면, 마지막의 공선성이라는걸 발생시켰다는데 그것이 무엇인가? 공선성이라는게 독립변수들끼리 상관관계가 있으면 계수의 분산이 커져서 불안정한 것을 말하는데, 공선성이니 뭐니 어려운 이야기는 바로 다음 이야기로 미룰까 합니다.
이럴 때 전체적으로는 변수들을 더하거나 빼서 문제를 해결하는데, 제대로 된 회귀분석을 위해서 유의하지 않거나 필요 없는 독립변수를 제외하는 방법을 많이 사용합니다. 하지만 마구잡이로 독립변수를 제거하는 것은 자료의 다양성을 망가트리고, 원래의 분석 목적에 영향을 미칠 수 있기 때문에 조심해서 빼야 합니다. 어떻게 조심하냐고 묻는다면 유의성이 없더라도 분석에 꼭 필요한 것은 남겨야 한다는 말입니다. 그리고 문제아들을 모두 제외해 버린 후에 PCA 같은 것을 이용해서 문제아들을 새로운 변수 하나로 만드는 방법으로 접근도 하기도 합니다.
독립변수를 추가하게 되면 R²는 최소한 같거나 커진다는 이야기를 한 적이 있습니다. 추가한 독립변수가 유의하든 안 하든이요. 이걸 이런 식으로 이해하면 더 이해하기 좋습니다.
일단 알아두어야 할 것은
T = R + E 였잖아요? 이때 T는 고정이고요, R이 커지면, E가 줄고, R이 줄어들면, E가 커집니다. - 실제로는 R이 줄어들 일은 없지만요 -. 이점만 알면 엄청 쉬운 이야기입니다. 왜냐하면 SST는 엉망 회귀선으로부터 관측 데이터의 차이잖아요? 이게 SST는 $\sum (y-\bar{y})^2$ 니까 독립변수가 추가되었다고 해서 엉망 회귀선이 바뀌거나, 관측 데이터가 바뀌지는 않으니까 말이죠.
$R^2 = \cfrac{SSR}{SST} = \cfrac{SST-SSE}{SST} = 1- \cfrac{SSE}{SST}$ 이잖아요? 이때 독립변수가 추가되면 R²가 변할 텐데 (해당 변수가 유의하든 안 하든) SST는 그대로인데 비하여 SSR은 엉망 회귀선으로부터 회귀 추세선까지의 차이니까 독립변수가 추가되면 이건 R의 변화가 0보다 크거나 같은 값이 됩니다.
수식으로 보면, 원래 $y_i = b_0 + b_1 x_1 + \epsilon_i$ 에서 독립변수를 추가하여 $y_i = b_0 + b_1 x_1 + + b_2 x_2 + \epsilon_i$ 을 구하는 거니까,
$SSR = \sum{(y_i + b_0 + b_1 x_1 - \bar{y})^2}$에서
$SSR^{new} = \sum{(y_i + b_0 + b_1 x_1 + b_2 x_2 - \bar{y})^2}$에서 로 바뀌는 거잖아요?
앞 - 뒤에서 뒤는 고정인데, 앞에만 커지니까 SSR은 커지겠군요.
그러니까 결국 원래의 결정계수보다 작아지지 않습니다. 이걸 결정계수의 non-decreasing property라고도 합니다. 그러다 보니까, 결정계수가 실제보다 커 보일 수 있어서 독립변수의 수를 감안하여 보정한 수정결정계수(R²_adjusted)라는걸 쓰는 거랍니다. 후후. 잠시만요, SSE(Residual)은 필연적으로 줄어야 할 것 같은데 진짜 줄어들 것 같은데, 진짜 줄어드나요?라는 의문이 생길 텐데,
$SSE = \sum{(y_i - b_0 x_i - b_1 x_{1i})^2}$ 에서
$SSE^{new} = \sum{(y_i - b_0 x_i - b_1 x_{1i} - b_2 x_{2i})^2}$ 로 바뀌는 거잖아요? 그러면 원래의 계수가 그대로라고 한다면 새로운 계수는 0밖에 될 수가 없는데, 그럴 리 없겠죠. 그러면 무조건 SSE는 원래의 SSE에서 줄어들 수밖에 없습니다. 흠.
결국 정보가 추가되면 Error (Residual)은 작아지고, 회귀 개선 정도는 늘어난다라고 생각하면 적당한 해석이 되겠습니다.
일반적인 proof는
linear algebra - Prove that $R^{2}$ cannot decrease when adding a variable - Mathematics Stack Exchange
https://math.stackexchange.com/questions/1976747/prove-that-r2-cannot-decrease-when-adding-a-variable 이걸 봐도 좋지 않을까 합니다.
R²가 너무 크면 과적합이라는 것을 이야기하는데, 미리 귀띔하자면, Rsquared와 Radjsqaured로도 과적합을 판단할 수 있겠습니다. 많이 차이 나면 과적합되었다고도 볼 수 있겠네요. 너무 많은 독립변수가 추가되었거나 말이죠.
회귀분석에서 왜 예측이 아니라, 분석이라는 말이 붙었나 궁금했는데, 회귀를 통해서 각각의 독립변수에 대한 기여도를 분석할 수가 있고, 회귀식이 얼마나 통계적으로 유의미한지도 분석이 가능하며, 이런 것들을 통해서 필요 없는 독립변수를 골라낼 수 있는 분석을 할 수가 있으니까, 분석이라는 말을 붙일 수 있는 것 같습니다. 이 분석이 끝나면 당연히 예측이 가능하고요. 예.
$X^T X$ 에 관련하여, 재미있는 사실이 몇 가지 있는데,
$$ X = \begin{bmatrix}
X_{11} & X_{12} & . . . & X_{1c} \\
X_{21} & X_{22} & . . . & X_{2c} \\
. . . & . . . & . . . & . . . \\
X_{n1} & X_{n2} & . . . & X_{nc} \\
\end{bmatrix} $$ 라고 했을 때,
➊ $X^T X$는 Sum of square가 대각선에 있고, 나머지는 cross product가 된다는 점은 이제 느낌적으로 느끼고 있겠죠?
$ X^T X = \begin{bmatrix}
Σ X_{11}^2 & Σ X_1 X_2 & . . . & Σ X_1 X_c \\
Σ X_2 X_1 & Σ X_{22}^2 & . . . & Σ X_2 X_c \\
. . . & . . . & . . . & . . . \\
Σ X_c X_1 & Σ X_c X_2 & . . . & Σ X_{cc}^2 \\
\end{bmatrix} $
이거로부터 시작해 보면,
➋ X 자체를 centering (평균을 0으로)해서 곱하고 n-1로 나누면 covariance matrix가 됩니다.
$ X^{center} = \begin{bmatrix}
X_{11}-\mu_1 & X_{12}-\mu_2 & . . . & X_{1c}-\mu_c \\
X_{21}-\mu_1 & Σ X_{22}-\mu_2 & . . . & X_{2c}-\mu_c \\
. . . & . . . & . . . & . . . \\
X_{n1}-\mu_1 & X_{n2}-\mu_2 & . . . & Σ X_{nc} -\mu_c\\
\end{bmatrix} $
➌ X 컬럼들을 표준화하고 곱한 후에 n-1로 나누면 Pearson correlation matrix가 됩니다. 이 의미는 두 벡터를 내적 한 후에 각 열 벡터의 크기로 나눠서 표준화를 하게 되면 상관계수를 구할 수 있다는 뜻이기도 합니다.
$\cfrac{1}{n-1}(X_{standardized}^T \cdot X_{standardized})$ = Pearson Correlation Matrix
➍ X 컬럼들을 벡터로 보고 유닛 스케일링을 한 후에 곱하면 (정규화와 같음) 코사인 유사도 matrix가 됩니다.
이렇게 할 수 있다는 것만 알아도 조금 matrix를 유용하게 쓸 수 있지 않을까요?
그러니까, 이건 조금 상식적으로 알고 있으면 좋은데, 어떤 행렬 X에 대하여
$X^T X$는 X의 각 컬럼에 대한 Covariance 느낌이고, $X X^T$는 X의 각 row에 대한 Covariance 느낌입니다. 느낌이라고 표현한 이유는 Expection을 취하지 않았기 때문에 직접적으로 Covariance는 아닙니다만, 실제로 Covariance와는 비례관계가 성립하기 때문입니다. 이걸 알고 있으면 뭔가 이해할 때 좀 편합니다.
$\begin{aligned} X^T X &=\left[\begin{array}{cccc}C_1 \cdot C_1 & C_1 \cdot C_2 & \cdots & C_1 \cdot C_n \\ C_2 \cdot C_1 & C_2 \cdot C_2 & \cdots & C_2 \cdot C_n \\ \cdots & \cdots & \cdots & \cdots \\ C_n \cdot C_1 & C_n \cdot C_2 & \cdots & C_n \cdot C_n\end{array}\right] \end{aligned}
$
X의 열(Column)들의 공분산 행렬 느낌
$ \begin{aligned} X X^T &=\left[\begin{array}{cccc}R_1 \cdot R_1 & R_1 \cdot R_2 & \cdots & R_1 \cdot R_n \\ R_2 \cdot R_1 & R_2 \cdot R_2 & \cdots & R_2 \cdot R_n \\ \cdots & \cdots & \cdots & \cdots \\ R_n \cdot R_1 & R_n \cdot R_2 & \cdots & R_n \cdot R_n\end{array}\right] \end{aligned}$
X의 행(Row)들의 공분산 행렬 느낌입니다.
기억하는 방법으로는
입력의 A는 열 벡터의 확장이므로,
열끼리의 관계는 열 벡터를 선형 변환의 입력으로 넣고,
행끼리의 관계는 행 벡터를 선형 변환의 입력으로 넣는다 정도로 기억하면 잊지 않을 수 있지 않을까? 생각합니다. 기계학습을 이해할 때도 유용하게 쓰이니까 기억해 둡시다.
그리고, 꼭 미분을 하지 않더라도 회귀분석을 할 수 있습니다. 어떤 거냐면,
➊ 원래의 관측 벡터 y와 ➋ X의 컬럼으로 이루어진 평면 위에 ➌ 회귀를 통해 구한 y 즉, 벡터 (Xb) ➍ 이 두 벡터의 차이, 즉 (Xb - y) 이것이 X의 컬럼으로 이루어진 평면과 직교하면 (X컬럼의 평면에 대한 정사영) 그 차이가 가장 작아지므로 관측치 y와 회귀로 구한 y가 가장 비슷한 관계가 된다는 그런 아이디어입니다.
그래서 X와 Xb - y의 내적이 0이 되면 되니까,
$X^T (Xb - y) = 0$ 가 되면 되겠습니다.
결국, 이걸 풀면
$ \begin{aligned}
X^T X b \, & = X^T y \\
b \, & = (X^T X)^{-1}X^T y
\end{aligned} $
가 됩니다. 엇? 똑같군요. 준나 신기한 세상입니다. $(X^T X)^{-1}X^T$ 이거는 한 번에 뭉뚱그려서 의사 역행렬이라고 부르기도 합니다. 다중회귀의 b는 b = 의사역행렬•y 잖아요? 그러니까 y = 의사 역행렬의 역행렬•b 로 이렇게 구하면 각 x를 b의 조합으로 y를 표현할 수 있다는 뭐 그런 거입니다.
여기에서
$ \hat{y} = X b$ 니까, 여기에 구해진 b를 넣어서 다시 표현하면,
$ \hat{y} = X (X^T X)^{-1} X^T y$
이니까, $X (X^T X)^{-1} X^T $를 y에 내적 하면 X평면의 y의 추정치가 된다는 말이라서, $X (X^T X)^{-1} X^T $ 요거를 X평면으로의 투영 행렬이라고도 부릅니다. 후후.
댓글