회귀분석 :: 통계 - mindscale
Skip to content

회귀분석

평균으로의 회귀

통계학에는 평균으로의 회귀(regression toward the mean)라는 표현이 있습니다. "회귀(regression)"는 "돌아간다"는 뜻입니다. 일시적으로 평균적인 추세에서 잠깐 벗어나더라도 결국에는 평균적인 추세로 돌아간다는 그런 뜻입니다.

예를 들어 1에서 6까지 고르게 나오는 주사위가 있다고 해봅시다. 이 주사위의 평균은 3.5지요. 이 주사위를 굴려서 2가 나왔다고 해봅시다. 그러면 2보다 더 작은 수는 1 하나 밖에 없기 때문에, 2보다 작은 수가 나올 가능성은 낮습니다. 하지만 2보다 더 큰 수는 3, 4, 5, 6 네 가지기 때문에 더 큰 수가 나올 가능성이 더 큽니다. 5가 나왔을 때는 반대가 됩니다. 즉, 한 번 작은 수가 나오면 그 다음에는 상대적으로 더 큰 수가 나올 가능성이 더 크고, 한 번 큰 수가 나오면 그 다음에는 상대적으로 더 작은 수가 나올 가능성이 더 크게 됩니다. 그래서 마치 주사위가 평균에서 벗어나면 평균으로 되돌아가려는 것처럼 보이는 현상이 나타납니다.

평균으로의 회귀는 프랜시스 골턴(Francis Galton)이 처음 사용한 말입니다. Galton은 부모와 자식의 키에 대해 연구를 했는데요, 여기서 두 가지 현상을 관찰하게 됩니다. 첫째는 부모가 키가 크면 자식도 키가 크다는 것입니다. 이건 당연하게 들리죠. 둘째가 좀 신기한데요, 부모가 키가 크면 자식은 자기 부모보다는 좀 작은 경향이 있다는 것입니다. 키에는 여러 가지 유전자가 개입하는데요, 자식은 부모의 유전자를 섞어서 물려받기 때문에 주사위 굴리기와 비슷한 현상이 일어납니다.

회귀분석

회귀분석은 독립 변수(independent variable)종속 변수(dependent variable)간의 관계를 찾는 분석입니다. 이것은 독립 변수가 주어졌을 때, 종속 변수가 어떻게 될 지 예측하는 형태로 이뤄집니다. 예를 들어서 중고차의 여러 가지 특성이 주어졌을 때, 이 차량의 가격을 예측하는 식입니다. 회귀분석에서 보통 독립변수는 $x$, 종속변수는 $y$로 표기합니다.

회귀분석의 이름은 앞에서 설명한 평균으로의 회귀에서 나온 걸로 알려져 있습니다. 그런데 두 가지는 사실 별로 관련이 없습니다. 굳이 말하자면 회귀분석에서 발견한 관계가 어떤 평균적인 경향성이기 때문에, 거기서 벗어나봐야 결국에는 그런 경향으로 돌아가게 됩니다. 즉, 500만원 정도하는 중고차가 한 번은 600, 700만원에도 팔릴 수는 있겠지만 그 다음에는 결국 500만원 비슷하게 팔릴 가능성이 더 크겠죠. 그렇게 회귀하는 경향을 찾는 것이기 때문에 회귀분석이라고 한다는 건데요, 좀 와닿는 작명은 아닙니다.

독립변수와 종속변수

체중과 식사량의 관계에 대한 모형을 만든다고 해보자. 이 모형에서 체중이 식사량에 따라 달라진다고 가정하면, 식사량이 많아지면 체중도 증가하고, 식사량이 감소하면 체중도 감소할 것이다. 그러면 체중은 식사량에 종속되었다고 할 수 있다. 그래서 체중은 종속변수가 된다.

그런데 이 모형은 체중이 식사량이 왜 변하는지는 말하고 있지 않다. 식사량은 모형에 독립적으로 변하므로, 독립변수가 된다.

정리하자면:

  • 독립변수: 변수의 변화 원인이 모형 에 있는 변수
  • 종속변수: 변수의 변화 원인이 모형 에 있을 변수

혼입변수

혼입변수(confounding variable)는 모형에 포함되지 않았지만 종속 변수에 영향을 미치는 변수이다.

예를 들어 건강이 좋지 않아 식사량이 줄고, 체중도 줄어든 사람들이 있다면 마치 식사량이 줄면 체중이 줄어드는 것처럼 보일 수도 있다.

선형 모형

회귀분석은 보통 $x$와 $y$가 대략 어떤 관계일 것이라는 것을 가정해두고 분석을 합니다. 이런 가정을 모형(model)이라고 합니다. 대표적인 모형이 선형 모형(linear model)입니다. 보통 학교에서 직선의 방정식이라는 이름으로 배우는 것입니다. 선형 모형은 $x$와 $y$가 아래와 같은 수식으로 표현할 수 있는 형태의 관계를 가진다고 가정합니다.

$$ \hat y = a + bx $$

$\hat y$는 $y$의 추정치를 말합니다. 실제 $y$와는 좀 차이가 있겠죠. 이 차이를 잔차(residual)라고 합니다.

$a$는 $y$ 절편(intercept)이라고 합니다. 보통은 그냥 절편이라고만 하기도 합니다. 절편은 $x$가 0일 때, $y$의 추정치를 뜻합니다.

$b$는 기울기(slope)라고 합니다. 이것은 $x$가 1 증가할 때, $\hat y$의 변화량을 뜻합니다. 선형 모형의 특징은 $x$가 증가할 때, $y$의 증가량이 일정하다는 것입니다.

$a$와 $b$를 합쳐서 회귀계수(regression coefficient)라고 부릅니다.

회귀분석의 목적은 가장 좋은 회귀계수를 찾는 것입니다. 그러면 어떤 회귀계수가 좋은 회귀계수일까요? 잔차를 작게 만드는 회귀계수겠죠? 그러면 잔차가 작다는 것을 정의해야하는데요, 잔차는 +일 수도 있고 -일 수도 있기 때문에, 보통은 제곱을 해서 부호를 없앱니다. 분산을 구할 때, 편차를 제곱하는 것과 같은 방식입니다. 그래서 제곱한 잔차를 가장 작게 만드는 계수를 찾는 방법을 최소제곱법(least squares)이라고 하며, 회귀분석에서 가장 많이 사용하는 방식입니다.

Question

$y = 3x + 1$은 선형 모형입니까?

  • 아니오

기울기는 얼마입니까?

$x$가 1 증가할 때, $y$는 얼마나 증가합니까?

절편은 얼마입니까?

$x = 0$일 때 $y$는 얼마입니까?

Question

선형 회귀분석에 대한 설명으로 잘못된 것은?

  • 연속인 종속변수를 예측한다
  • y = a + bx 형태의 식을 사용한다
  • 기울기는 독립변수가 1 증가할 때 종속변수의 변화이다
  • 잔차제곱합을 최대로 하는 기울기와 절편을 찾는다

Question

독립변수 x의 기울기가 +이면, 다른 조건이 같을 때 독립변수 x가 증가할 수록 종속변수 y는

  • 증가한다
  • 감소한다
  • 알 수 없다
  • 변하지 않는다

중고차 가격을 회귀분석해봅시다. 주행거리 $mileage$를 독립변수라고 할 때, 주행거리가 1 Km 증가할 때마다, 가격이 어떻게 변하는지 알아보도록 하겠습니다.

from statsmodels.formula.api import ols
m = ols('price ~ mileage', df).fit()
m.summary()
m = lm(price ~ mileage, df)
summary(m)

Question

제동거리 데이터를 다운받아 speed를 독립변수로 dist를 종속변수로 회귀분석을 해보십시오.

절편은 얼마입니까?

speed의 기울기는 얼마입니까?

결정계수

이제 회귀분석의 결과를 해석해봅시다. 먼저 결정계수(coefficient of determination) 또는 R 제곱(R-Squared)이라는 수치입니다. 결정계수는 회귀분석 결과가 데이터를 얼마나 잘 설명하는지를 나타냅니다.

R 제곱의 계산 공식은 다음과 같습니다.

$$ R^2 = 1 - \frac{\text{RSS}}{\text{TSS}} $$

TSS는 편차를 모두 제곱해서 더한 것입니다. 이것을 데이터 크기 $n$으로 나누면 분산이 되지요. TSS는 데이터가 가진 원래의 변산성을 나타냅니다. 중고차 가격의 경우에 어떤 차는 비싸고, 어떤 차는 쌉니다. 어떤 불확실성이 존재하는 것이죠.

RSS는 잔차를 모두 제곱해서 더한 것입니다. 즉, 예측과 실제의 차이를 나타냅니다. 우리가 주행거리를 이용해서 중고차 가격을 예측하면, 어느 정도 예측은 되지만 그럼에도 예측보다 비싼 차, 싼 차가 있습니다. 즉, 주행거리로 설명되지 않는 불확실성이 남아있는 것입니다.

그렇다면 $\text{RSS}/\text{TSS}$는 이 두 가지 불확실성의 비율이 됩니다. 즉, 원래 존재하던 불확실성과 우리가 회귀분석을 통해 예측을 하고도 남아있는 불확실성의 비율인 것이죠. 예를 들어 이것이 0.3, 즉 30%라고 하면 설명도지ㅣ 않은 불확실성이 30%가 남아있는 것입니다.

R제곱은 1에서 위의 비율을 뺀 것입니다. 100% - 30%라면 70%가 되겠네요. 30%가 설명되지 않고 남아있는 불확실성이니까 70%는 설명되어 사라진 불확실성입니다. 설명된 분산(explained variance)라고도 합니다.

R제곱은 0에서 1, 또는 0%에서 100%까지 범위를 가집니다.

R제곱이 0일 경우에는 RSS와 TSS가 똑같은 경우입니다. 즉, 분석을 하나 안 하나 차이가 없는 것이죠. 이때는 기울기가 0이 됩니다.

R제곱이 100%라면 모든 분산이 설명되는 것입니다. 즉, 사례마다 높고 낮은 이유를 완벽하게 설명해서 모든 예측이 정확히 맞는 경우입니다.

단, 현실에서는 매우 다양한 독립변수가 종속변수에 영향을 미치기 때문에 R제곱이 100%에 가깝게 나오는 경우는 보기 어렵습니다. 오히려 그런 경우라면 뭔가 분석이 잘못된 것을 의심해볼 필요가 있습니다.

독립변수가 1개인 경우, 회귀분석의 R제곱은 독립변수와 종속변수의 피어슨 상관계수의 제곱과 같습니다.

Question

R제곱에 대한 설명으로 잘못된 것은?

  • 모형이 종속변수의 분산을 설명하는 비율이다
  • 모형이 데이터를 얼마나 잘 설명하는가를 나타낸다
  • 보통 0~1 사이이다
  • 작을 수록 좋다

Question

차량의 속도 speed를 독립변수로, 제동 거리 dist를 종속변수로 회귀분석을 했다. 그 결과 중에 다른 것 한 가지는?

  • 회귀분석의 R제곱
  • speed의 기울기의 제곱
  • 회귀분석이 dist의 분산을 설명하는 비율

F 검정

회귀분석의 결과를 두고 가설 검정을 할 수 있습니다. 이것을 F 검정이라고 합니다. F 검정의 귀무가설은 "모든 기울기는 0이다"입니다. 만약 p 값이 유의수준보다 낮다면, "어떤 기울기는 0이 아니다"라고 할 수 있습니다.

독립변수가 하나만 있는 경우는 기울기도 하나 밖에 없기 때문에, 그냥 기울기가 0인지 아닌지에 대한 검정이 됩니다.

계수의 해석

회귀계수의 결과는 추정치, 표준오차, t 통계량, p 값 순으로 제시가 됩니다. 이 중에서 표준오차와 t 통계량은 신뢰구간을 구하는 데 사용하는 값이기 때문에, 직접적으로 해석하실 필요는 없습니다.

추정치는 절편과 기울기에서 가장 좋은 추정치를 나타냅니다. 이 추정치는 점 추정치이기 때문에 신뢰구간은 별도로 봐야합니다.

Python에서는 95% 신뢰구간을 기본적으로 제공합니다. 신뢰수준을 변경하려면 다음과 같이 유의수준을 설정합니다.(신뢰수준 = 100% - 유의수준)

m.summary(alpha=0.01)

confint(m, level = 0.99)  # level의 기본값은 0.95

신뢰 구간이 + ~ + 범위를 가지고 있으면, 모집단에서도 계수가 +라고 추론할 수 있습니다. 마찬가지로 - ~ - 범위를 가지면 모집단에서도 -라고 추론할 수 있겠죠. 이때는 p 값도 유의수준보다 낮게 됩니다.

반대로 신뢰구간이 -에서 +에 걸쳐있게 되거나, p 값이 유의수준보다 크면 회귀계수가 모집단에서 +라거나 -라고 단언할 수 없습니다. 물론, 0일 가능성도 있지요.

절편의 경우에는 보통 신뢰구간이나 가설검정 결과를 크게 고려하지 않습니다.

기울기의 경우에는 가설검정에서 p 값이 유의수준보다 큰 경우 몇 가지 선택지가 있습니다. 첫째는 어떤 결론을 유보하는 것입니다.

둘째는 만약 기울기 자체는 큰데 데이터가 작을 경우에는 데이터를 더 많이 모아서 재분석을 해볼 수 있습니다.

셋째는 기울기 자체가 작고 신뢰구간도 0 근처에서 크게 벗어나지 않으면, 해당 독립변수가 종속변수에 영향을 별로 미치지 못하는 것으로 해석할 수 있습니다. 단, 모형을 수정하면 결과가 달라질 수도 있다는 점을 염두에 둘 필요는 있습니다.

Question

기울기 옆에 표시되는 p-value의 의미는?

  • p < 유의수준이면 신뢰구간이 +에만 있거나 또는 -에만 있다
  • p < 유의수준이면 신뢰구간이 +와 -에 걸쳐 있다

Question

독립변수 x의 기울기가 +이면, 다른 조건이 같을 때 독립변수 x가 증가할 수록 종속변수 y는

  • 증가한다
  • 감소한다
  • 알 수 없다
  • 변하지 않는다

회귀분석을 통한 예측

new_df = pd.DataFrame({'mileage': [10000, 20000]})
m.predict(new_df)
new_df = data.frame(mileage=c(10000, 20000))
predict(m, new_df)

Question

중고차 데이터를 다운받아 year를 독립변수로 price를 종속변수로 회귀분석을 해보십시오.

이 회귀분석에서 year의 기울기는 얼마입니까?

위의 기울기는

  • 통계적으로 유의하다
  • 통계적으로 유의하지 않다

이 분석은 price의 R제곱은 얼마입니까?

Question

birthsmokers.xlsx를 다운받아 열어보세요.

Wgt는 신생아의 체중(g), Gest는 임신 기간(주)을 나타냅니다.

임신기간을 독립변수, 신생아의 체중을 종속변수로 회귀분석을 하려면 관계식을 어떻게 써야 합니까?

  • Wgt ~ Gest
  • Gest ~ Wgt

임신기간을 독립변수, 신생아의 체중을 종속변수로 회귀분석을 실시해보세요. 절편은 얼마입니까?

위의 분석 결과에서 Gest의 기울기는 얼마입니까?

기울기의 p-value는 얼마입니까?

  • 0.05보다 작다(p < .05)
  • 0.05보다 크다(p > .05)

기울기의 95% 신뢰구간은 얼마입니까?

위의 p-value 또는 신뢰구간으로 볼 때 Gest의 기울기에 대해 어떤 결론을 내릴 수 있습니까(유의수준 5%)?

  • 모집단에서 Gest의 기울기는 +이다
  • 모집단에서 Gest의 기울기는 -이다
  • 결론을 유보한다

위의 분석 결과를 종합할 때 임신기간 Gest가 길어질 수록, 신생아의 체중은 어떻게 된다고 볼 수 있습니까?

  • 늘어난다
  • 줄어든다
  • 결론을 유보한다