본문 바로가기
회귀분석 결과의 해석과 R²(설명력,결정계수)의 의미, 그리고 R²은 상관계수의 제곱. 응?

일단 마구마구 회귀분석을 해보긴 했는데, 회귀분석을 하고 나니 여러 가지 결과가 툭 튀어나왔었거든요. 그 결과를 보고 무슨 의미인지 해석할 수 있는 고품격 해석 능력을 배양해야 하겠습니다. 

일단, 우리가 실행한 Regression의 결과를 한번 보시죠. 

R-squared:	0.952 ⓵
Adj. R-squared:	0.936 ⓵ 
F-statistic:	59.41 ⓶
Prob (F-statistic):	0.00454 ⓶ 

⓷		coef	
Intercept	-27.8	
X		0.426

 

이런 복잡한 결과가 나왔었는데, 이 결과를  차례대로 해석해 보시죠. 짜잔. 일단, 회귀모형의 결과 해석은 다음과 같은 내용이 주요 포인트들입니다. 

⓵ 모형이 얼마나 설명력을 갖는지? → 결정계수 R_squared(R²) 를 확인한다.
⓶ 모형이 통계적으로 유의한지? → F검정과 유의확률(p value)로 확인한다.
⓷ 회귀계수가 유의한지? → 회귀계수의 t값과 유의확률(p value)로 확인한다.

이런 식으로 해석에 관련되어 있는데, 하나 하나 차례대로 간략하게 먼저 살펴보도록 해 보시죠.

⓵ 우선 뭔지 모르겠지만 R²값이 엄청 높군요. 이 값은 모형 적합도, 설명력이라고 이야기들 하는데, 한국어로는 결정계수라고 부릅니다. 의미는 y의 분산을 95.2% 설명한다는 뜻이라고들 합니다. 그렇지만 여기에서 설명한다는 게 무슨 뜻인지 싶은데, - 일상용어가 아니라는 내적 갈등이  발생합니다. - 전체 변동의 95.2%를 회귀 결과가 커버를 친다는 뜻으로 해석하면 되는데 왜 이런 의미가 되는지는 조금만 참고 기다려 주세요. 참고로 어떤 다른 Interpretation으로는 회귀식과 자료 간의 fit(적합도)의 수치화이고, 설명력=적합도 정도로 이해하는 것이 어떨까 하는 해석도 있긴 있습니다. 두 해석은 직접적이진 않더라도 같은 맥락의 해석이라고 생각할 수 있겠습니다. 여기에 덧붙여  R²adjusted 도 93.6%로 엄청 높네요. 독립변수의 개수와 표본의 크기를 고려하여 R-squared를 보정한 값입니다. R²값은 독립변수의 개수와 표본의 크기가 커짐에 따라 약간 과장되는 경향을 보이는데, 이를 보정한 값이라고 보면 되겠습니다.

⓶⓷ F 검정통계량도 엄청 크니까, 당연히 p value도  0.00454로 꽤나 작고 유의하군요. 이 의미는 관측한 표본뿐 아니라 모집단에서도 통하는 의미 있는 Model이라는 의미입니다.  t 검정에 관련해서도 이후에 보겠지만 유의합니다. t검정과 F검정의 관계도 곧 보겠사옵니다. 

오, 내용을 해석해 보니 전반적으로 회귀 결과가 꽤나 괜찮은 결과였군요. 

자, 결과를 읽어는 보았는데, 도대체 어떤 원리로 이렇게 해석할 수 있는지 이유를 보아야 속이 후련하겠지요. R²부터 보자면,

⓵ R_squared 값은 도대체 무엇인가 하면 간단하게 기울기가 0이고, 회귀분석이라고 하기엔 아주 엉망진창인 경우의 기본 회귀선인 y=ȳ (y의 평균)의 직선인 경우의 Residual 제곱의 합과, 실제 회귀선을 찾은 후의 Residual 제곱의 합을 비교하는 것인데, 이 말만 들어서는 먼 소린지 잘 모르는데? 하는 것이 정상입니다. 저도 정상.

 

일단, 우리가 예상할 수 있는 가장 쉬운 방법의 회귀선은 어떤 것일까요? 그것은 바로 $\hat{y} = b_0 + b_1 x$에서 기울기가 0, y절편이 y의 평균인 $\hat{y}=\bar{y}$선이 되겠습니다. 이렇게 y의 평균의 직선을 그어놓고 이 직선을 엉망진창 회귀선이라고 부릅시다. 그리고, 회귀분석을 하고 나면 무엇이 되었든 데이터에 맞춘 적당한 회귀선을 찾게 됩니다. 아무래도 엉망진창 회귀선보다는 관측 데이터를 잘 표현하겠지요?  

 

자, 여기에서 T,R,E 라는 notation을 사용했는데, T(otal)은 전체 변동, R(egresssion)는 엉망진창 회귀선으로부터 회귀분석을 통해서 찾아낸 회귀선까지의 변동 - 즉 엉망진창 회귀선으로부터 회귀를 함으로써 회귀가 개선된 변동 -, E(rror)은 실제 관측 데이터와 회귀와의 변동인 잔차에 관련된 값입니다. - 회귀로 커버칠 수 없는 여전히 존재하는 변동이죠 -  여기에서 가장 중요한 내용은 회귀를 통해서 뭔가 엉망진창 회귀선(y의 평균)을 R만큼 개선했다는 점입니다. ※ 주의 : 여기에서의 R은 설명력 R²의 R과 다른 R입니다. R²는 그냥 R² 자체가 하나의 심볼이라고 생각하시는 편이 이해에 도움이 되겠습니다. 

자, 이때 설명력(R²) 은 무엇을 말하는가 하면 전체오류중에 회귀를 함으로써 얼마나 개선되었는가를 따지는 것입니다. 즉,

 

이런 의미를 갖겠습니다. 얼추 말이 되는 것 같지요? 그러니까, R²는 전체 편차 중에서 회귀분석을 통해 찾아낸 회귀선이 엉망진창 회귀선으로부터 변동을 얼마나 개선했는가 - 설명하는가 - 또는 찾아낸 회귀선이 얼마나 Residual을 줄였냐와 같은 말이 되겠습니다. 

자, 그렇다면, 이미 다루었던 데이터를 이용해서 R²를 구하는 과정을 해 보면 감이 오겠습니다. 정말 0.952가 나오는지 가 보시죠.

 

그러면 R²=R/T를 구하기 위해서, 분모와 분자를 차례로 구해보시죠. 먼저 분모T를 구해봅시다. 전체편차T는 엉망 회귀선의 Residual 제곱의 합이니까 이것을 구해 봅시다. $T = \sum{(y-\bar{y})^2}$ 인데요, 이 값은 ➊ 19064입니다. 엄청 큰 값이네요. 

그러면, 분자R에 대해서는, 막상 회귀분석을 마치고 얻은 ($\hat{y}=-27.8+0.426x$)의 회귀선과 엉망진창 회귀와의 차이를 구하는 것입니다. 즉, $R = \sum{(\hat{y}-\bar{y})^2}$입니다. 계산하면 ➋ 18147.6입니다. 

음. 그러면 처음의 엉망진창 회귀선에 비해서 얼마나 Residual 제곱의 합이 개선 되었는지를 보자면, 찾아낸 회귀선이 엉망의 회귀선을 얼마나 개선했는가이니까. $\cfrac{R}{T} = \cfrac{18147.6}{19064}=0.9519 = R^2$ 가 되겠군요. 1에 가까울수록 회귀선이 편차의 대부분을 커버 치고 있다. 고 - 또는 설명하고 있다고 - 이야기할 수도 있겠습니다. 오, 시작할 때 보았던 결과 (0.952)와 같은 값이군요! 

T R E  요 세 가지는 $$ T = R + E $$ 의 관계가 있는데요, 이것을 실제 제곱의 합 형태로 표현한 것들에 익숙해져 보시죠.

느낌적으로, 그리고 일반적으로 사용하는 notation을 정리하면 다음과 같습니다.  

$$ \underbrace{\sum_{i=1}^{n}\left(y_{i}-\bar{y}\right)^{2}}_{ S S T}=\underbrace{\sum_{i=1}^{n}\left(\widehat{y}_{i}-\bar{y}\right)^{2}}_{S S R}+\underbrace{\sum_{i=1}^{n}\left(y_{i}-\widehat{y}_{i}\right)^{2}}_{S S E}$$

$T : \sum(y_i-\bar{y})^2$ : 전체 편차를 나타내는 분산 느낌 (기울기 0의 엉망 회귀선으로부터), : SST (Sum of Square Total) ➊
$R: \sum(\hat{y_i}-\bar{y})^2$ : 회귀선과 엉망진창 회귀선과의 변동에 대한 분산 느낌  : SSR (Sum of Square Regression) ➋
$E : \sum(y_i-\hat{y})^2$ : 잔차의 제곱의 합. 실제 관찰 값과 회귀선 사이의 편차에 대한 분산 느낌 : SSE (Sum of Square Error) ➌

요런 식이 되겠습니다. 이걸 보면, 제곱된 값을 다루는 값이니까 R²의 제곱이 붙었다는 점도 느낌적으로 알 수 있습니다. R² 의 값이 1에 가까울수록 추정 회귀식이 표본 자료를 더 잘 설명한다고 합니다. 그럼 무엇을 설명을 잘한다는 거냐 하면, R²가 클수록 관측치들이 추정 회귀식에 가까이 집중되어 있다는 뜻입니다. 후후. 

추가로 조금만 더 보자면,  $R^2_{adjusted} = 1 - \cfrac{(1-R^2)(n-1)}{n-k-1}$ 인데요, -n은 표본의 수, k는 독립변수의 수입니다.- 이건 자유도를 이용한 보정 냄새가 풀풀 나는데. 표본수가 많을수록, 그리고 독립변수가 많을수록 결정계수를 조금은 수정해 줘야 한다는 뭐 그런 겁니다. 

왜 이런 일이 벌어지냐면, OLS방법에서 Least Square 방법, 즉 Residual의 제곱의 합을 최소로 할 때 벌어지는 일인데, 

Least Square 방법은 
$\min(SSE) = \min(\sum{\epsilon}^2) = \min_{\beta}\sum(y_i-\hat{y})^2$ 가 되는데요,
다중 회귀에서는 $\min_{\beta}\left(\sum\limits_{i=1}^{n}\left(y_i - (\beta_0 + \beta_1 x_{i,1} + \beta_2 x_{i,2} \cdots + \beta_1 x_{i,k})\right)^2\right)$ 이렇게 됩니다. (n은 관측수, k는 독립변수 수입니다)

여기에서 
$R^2 = \cfrac{R}{T} = 1- \cfrac{E}{T} \,(\because T = R + E\, \therefore R = T - E)$
이고요. 당연히 SSE를 최소화하는 것이 R²를 최대화하는 것인데요,

이떄 만약에 1개의 독립변수가 더 추가된다면 
$\min_{\beta}\left(\sum\limits_{i=1}^{n}\left(y_i - (\beta_0 + \beta_1 x_{i,1} + \beta_2 x_{i,2} \cdots + \beta_1 x_{i,k} + \beta_1 x_{i+1,k+1} )\right)^2\right)$

이런 식으로 빼기의 괄호 안이 늘어나겠죠. 괄호안이 늘어난다는 이야기는 k+1번째 x가 y와 전혀 상관관계가 없다면 0이고(가장 적게 빼는 경우), 그 외에는 무조건 더 빼질 수밖에 없으니까, SSE는 줄어들 수 밖에 없고, R²는 최소한 그대로 유지하거나 늘어날 수 밖에 없습니다. 이걸 굳이 표현하자면 "non-decreasing property of R square"라고도 할 수 있겠는데, 처음 들었을 때에는 뭬야???라는 느낌이긴 한데, 어쨌든 결정계수는 계속 커질 수 밖에 없다는 정도의 Intuition을 가지고 있으면 결국 보정된 R값인 RsquaredAdjusted가 왜 필요한지 대~충 감 잡을 수 있을 거라 생각합니다. 이게 어떤 것과 나중에 연결되냐면 회귀가 오버피팅되었을 때의 R_sqaured값을 보정해서 보자 뭐 이런 걸로 연결됩니다. 지금은 이렇게 계산한다는 정도로 넘어가야 하겠습니다. 

여기에서 검정까지 다루면, 너무 길어지니까 나머지 검정을 통한 결과 해석은 곧 이어서 "회귀와 검정 - 회귀분석결과가 괜찮은가? 통계적인 해석 t, F검정, 그리고 갑분싸 ANOVA 엥?" 편에서 구경하는 것이 어떨까 합니다. 

회귀를 할 때 Least Sqaure 방법을 쓴다고 하는데, Least Square와 Mean Square, Root Mean Square는 다른 얘기입니다. Least Square는 잔차의 제곱의 합을 최소화하여 회귀선을 구하는 방법이고, Mean Square, Root Mean Square는 모델에 대한 성능평가를 위한 Error 측정방법입니다. 

다시 리마인드 하면, 회귀분석은 각각의 데이터의 잔차(residual)의 제곱의 합이 최소화되는 공식을 도출하는  방법입니다.  그러니까, R² 값이 1에 가까울수록 설명력이 좋다고하는데 그렇다는 것은 T = R + E에서 R이 T에 가깝다는 뜻이므로 E가 작다 즉, R(esidual)이 작다는 뜻입니다. 이것은 결국 데이터가 회귀직선에 촘촘하게 가까이 있다는 뜻과 같습니다. 상관계수를 다룰 때 상관계수가 크면 더 촘촘한가라는 질문에 대하여 촘촘하다고 꼭 말할 순 없었는데, 결정계수의 경우에는 1에 가까울 수록 더 관측 데이터가 촘촘하다고 할 수 있겠습니다.  

 

참, OLS 단순 선형 회귀에서는 R²가 크면 좋은 모델로 판단하는 하는 것이 일반적인 견해입니다만, 결정계수 R²가 높음이 꼭 모델의 쓸모 있음을 판단하는 의미가 있는 것은 아닙니다. 이 값이 너무 낮으면 좀 곤란하다는 것일 뿐입니다. 독립변수와 종속변수 간의 상관계수를 이야기하는 것이기 때문입니다. 대강 이야기하자면 결정계수가 0.25이면 상관계수는 0.5로 매우 큽니다. 결정계수가 0.09이면 상관계수는 0.3이고요. 상관계수 0.3은 쓰레기 같이 갖다 버릴 낮은 상관은 아니거든요. 사실 설명력이 낮다는 것은 직선이 나쁘다는 의미가 아니라 거꾸로 데이터가 회귀에 적합하지 않다고 봐야 하지 않을까?라고 생각합니다. 

"OLS"에서 R²는 상관계수 r의 제곱입니다. 이것이 R² 네이밍의 의미인지는 모르겠지만, 어쨌든 OLS에서는 상관계수의 제곱과 같다니, 이것 참 운명의 장난 같기도 하고. 그렇습니다. 

"OLS"의 R²가 상관계수의 제곱이라는 점이 매우 흥미로운데, 이것을 Derive 해 보면, 

$$  \begin{aligned} 
R^2 &= \cfrac{R}{T} = \cfrac{\sum{(\hat{y_i} -\bar{y}})^2}{\sum{(y_i - \bar{y})^2}} \\
&= \cfrac{\sum{((b_0 - b_1 x_i) - (b_0 + b_1 \bar{x}))^2}}{\sum{(y_i - \bar{y})^2}} = b_1 ^2 \cfrac{\sum{(x_i - \bar{x})^2}}{\sum{(y_i - \bar{y})^2}}
\end{aligned} $$

이고요 

$$ b_1 = \cfrac{\sum(x_i-\bar{x})(y_i - \bar{y})}{\sum{(x_i - \bar{x})^2}}$$

니까, 

$$ \begin{aligned} R^2 &= \left(\cfrac{\sum(x_i-\bar{x})(y_i - \bar{y})}{\sum{(x_i - \bar{x})^2}} \right)^2 \cdot \cfrac{\sum{(x_i - \bar{x})^2}}{\sum{(y_i - \bar{y})^2}} \\
&= \left(\cfrac{\sum(x_i-\bar{x})(y_i - \bar{y})}{\sum{(x_i - \bar{x})^2 } \sum{(y_i - \bar{y})^2 }} \right)^2 = r^2  \end{aligned}  $$

이런 식이 되겠습니다. 호, 신기하군요. 그렇긴 해도 OLS 단순회귀분석인 경우에만 이게 성립하니까, 그 점만 유의하면 꽤나 흥미로운 상식이 아닐까 생각합니다. 상관계수를 계속 만나게 되니, 반갑기도 하고 놀랍기도 하지요? 너무 자주 만나면 정드는데 큰일입니다. 

 R언어의 R이 이 R²에서 나온 거라 상상했는데, 막상 R은 아래와 같은 의미를 갖는다고 합니다. S언어보다 알파벳의 순서로 볼 때 더 앞이어서 S보다 진보된 것이라는 의미인데,  “Research”의 첫 글자를 뜻하는 R, R 고안자인 로스 이하카와 로버트 젠틀맨의 이름의 첫 글자가 모두 R이라서 그렇다고 합니다. 이건 마치 C언어가 나왔을 때 B라는 언어의 다음에 나왔다고 해서 C라고 이름 붙인 것과 무엇인 다른가. 사실, 세상은 의외로 단순한 것일지도 모릅니다. 

친절한 데이터 사이언스 강좌 글 전체 목차 (정주행 링크) -



댓글





친절한 데이터 사이언스 강좌 글 전체 목차 (정주행 링크) -