Linear Regression · Part II
회귀분석 II — 계수에 의심을 던지고, 미래를 예측해보기
9강에서 회귀선을 그렸어요.
오늘은 그 선의 계수 하나하나가 정말 의미 있는지 따져보고,
새로운 데이터의 미래값까지 예측해 봐요.
여는 글 · 계수에 던지는 질문
9강 끝에서 우리는 회귀 출력 표를 봤어요. 계수가 −1.62라느니, 0.06이라느니 숫자들이 잔뜩 있었죠. 그런데 이 숫자들, 정말 0이 아니라고 자신 있게 말할 수 있을까요?
다른 데이터를 뽑으면 −1.62가 −1.5가 될 수도, 0.3이 될 수도 있어요. 그래서 진짜 효과가 있는 변수인지, 아니면 우연이 만든 환상인지 판단해야 해요. 이게 오늘 강의의 핵심이에요.
① 회귀계수의 가설 검정 — "이 변수, 진짜 효과가 있어?"
② 자유도와 MSE — 표준오차가 어디서 오는지
③ 변수 선택 — 쓸데없는 변수 골라내기 (Adjusted \(R^2\))
④ 예측 — 새 데이터의 \(Y\)를 추정하고 신뢰구간 만들기
"이 변수가 정말 \(Y\)를 설명하나?"
그 답을 8강의 가설 검정이 또 한 번 해줘요.
9강 한 장 복습
오늘 이야기를 시작하기 전에, 9강의 핵심 세 줄을 다시 꺼내요.
① 회귀선은 SSE(잔차 제곱의 합)를 최소화하는 직선.
② SST = SSR + SSE. \(Y\)의 전체 변동이 회귀로 설명된 부분과 안 된 부분으로 나뉘어요.
③ \(R^2 = SSR / SST\). 회귀의 설명력 점수.
그래도 남는 질문
\(R^2\)가 0.89로 좋아 보였어요. 하지만 \(R^2\)만 봐서는 알 수 없는 게 있어요.
- 각 변수(Rooms, Volume 등)가 개별적으로 의미 있는가?
- \(R^2\)가 높다고 모든 변수가 다 좋은 건가? 쓸데없이 끼어든 변수도 있는 게 아닐까?
- 이 식으로 새 아파트 가격을 예측하면 얼마나 정확할까?
이 질문들에 답하려면 회귀 출력의 "Coefficients 표"를 본격적으로 읽어야 해요.
\(\hat{\beta}\)은 확률변수 — 표본이 바뀌면 계수도 바뀌어요
우리는 회귀선의 계수 \(\beta_0, \beta_1\)을 데이터로부터 추정했어요. 추정값에는 모자(^)를 씌워 \(\hat{\beta}_0, \hat{\beta}_1\)이라고 적어요.
다른 데이터, 다른 \(\hat{\beta}\)
같은 모집단에서 다른 표본을 뽑으면 어떻게 될까요? 다른 \(\hat{\beta}\)이 나와요. \(\hat{\beta}\)은 표본에 따라 흔들리는 확률변수인 거예요.
"오늘 잰 키와 내일 잰 키" 비유.
같은 사람이라도 측정할 때마다 키가 미세하게 다르게 나오죠. 측정 자체에 흔들림이 있으니까요.
\(\hat{\beta}\)도 똑같아요. 같은 회귀 분석이라도 표본이 다르면 살짝 다른 \(\hat{\beta}\)이 나와요.
\(\hat{\beta}\)의 분포
잔차 \(e_i\)들이 정규분포를 따른다고 가정하면, \(\hat{\beta}\)도 \(t\)-분포를 따라요.
표본이 충분히 크면 \(t\)-분포는 정규분포에 거의 같아져요. (자유도가 커지니까!)
그래서 \(\hat{\beta}\)에 대해서도 "평균(=진짜 \(\beta\))", "표준오차", "분포"를 다 정의할 수 있어요. → 가설 검정과 신뢰구간을 만들 수 있어요!
오늘의 핵심 질문
"\(\beta_1\)이 0이라는 \(H_0\)를 우리는 기각할 수 있는가?"
\(\beta_1 = 0\)이라는 건 "\(X_1\)이 \(Y\)에 영향을 주지 않는다"는 뜻이에요.
이걸 기각할 증거를 찾으면 "\(X_1\)이 \(Y\)에 영향을 준다"고 결론지을 수 있죠.
계수의 가설 검정 (방법 1) — \(p\)-값으로
각 회귀계수 \(\beta_i\)에 대해 똑같은 검정을 해요. 예시로 \(\beta_1\)(연식의 계수)을 따져봐요.
가설 세우기
"\(X_1\)(연식)은 \(Y\)(가격)와 아무 관계 없다." 계수가 0이면 \(X_1\) 항이 식에서 사라지니까요.
이걸 기각하면 → "\(X_1\)은 \(Y\)에 의미 있는 영향을 준다"는 결론!
\(t\)-통계량
8강의 \(z = (\bar{X} - \mu_0)/SE\)와 똑같은 모양이에요. 평균 대신 \(\hat{\beta}\), 가정값 0과 비교.
분자 = "관측된 계수와 0의 거리". 분모 = "그 계수의 흔들림 크기".
\(p\)-값과 결론
\(t\)-통계량으로 \(t\)-분포에서 \(p\)-값을 읽어요. 결론은 똑같아요.
\(p\)-값 \(< \alpha\) → \(H_0\) 기각. "\(\beta_1 \ne 0\)이라는 증거 있음." 즉 \(X_1\)은 의미 있는 변수.
\(p\)-값 \(\ge \alpha\) → Fail to reject. "\(\beta_1 = 0\)일 가능성을 부정할 수 없음." \(X_1\)의 효과를 입증 못 함.
회귀 출력 계수 표의 P-value 열을 보면 끝이에요. 컴퓨터가 다 계산해 줘요.
0.05보다 작으면 ✅ 의미 있음. 크면 ❌ 의미 없음 (보통 \(\alpha = 5\%\) 기준).
계수의 가설 검정 (방법 2) — 신뢰구간으로
방법 1(\(p\)-값)과 똑같은 결론을 신뢰구간으로도 낼 수 있어요. 사실 엑셀 출력에 둘 다 나와 있어서 편한 쪽을 보면 돼요.
핵심 규칙
95% CI가 0을 포함 → Fail to reject \(H_0\). "\(\beta = 0\) 가능성을 못 버린다."
95% CI가 0을 포함하지 않음 → Reject \(H_0\). "\(\beta \ne 0\)이라는 증거 있음."
왜 이렇게 되나요?
7강에서 신뢰구간이 무엇이었는지 떠올려요. "진짜 \(\beta\)가 95% 확률로 들어 있을 범위"예요.
그 범위에 0이 들어 있다면 → "\(\beta = 0\)이 가능한 값"이라는 뜻 → \(H_0\)를 못 버려요.
그 범위에 0이 안 들어 있다면 → "\(\beta = 0\)이 절대 가능하지 않다"는 뜻 → \(H_0\)를 버려요.
"의심 지대" 비유.
95% CI는 "용의자의 위치를 95% 확률로 포함하는 영역"이에요.
그 영역에 "0(=무죄)"가 들어 있으면 무죄 가능성을 못 빼요. 판결 보류.
영역에 "0"이 없으면 무죄 가능성이 사실상 없다는 거. 유죄!
두 방법은 항상 같은 결론
방법 1(\(p\)-값 \(< \alpha\))과 방법 2(CI에 0 없음)는 완전히 동일한 결론을 내요.
같은 5% 유의수준 기준이라면, 둘은 사실 같은 검정의 두 표현이에요. 어느 쪽으로 결론지어도 OK.
실제 예시 — Rooms vs Volume
9강에서 본 회귀 출력의 계수표를 다시 가져와요.
| Coefficients | Std Err | t Stat | P-value | Lower 95% | Upper 95% | |
|---|---|---|---|---|---|---|
| Intercept | −0.57 | 3.09 | −0.18 | 0.86 | −6.86 | 5.73 |
| Rooms | −1.62 | 2.06 | −0.79 | 0.44 | −5.82 | 2.57 |
| Volume | 0.06 | 0.01 | 6.64 | 0.00 | 0.04 | 0.07 |
Rooms 변수 판정 (\(\alpha = 5\%\))
방법 1 (\(p\)-값): \(p = 0.44 > 0.05 = \alpha\) → Fail to reject \(H_0\).
방법 2 (CI): 95% CI = \([-5.82, 2.57]\). 0이 포함됨 → Fail to reject \(H_0\).
결론: Rooms의 계수가 0일 가능성을 배제할 수 없어요. → Rooms는 통계적으로 유의하지 않음.
Volume 변수 판정 (\(\alpha = 5\%\))
방법 1 (\(p\)-값): \(p = 0.00 < 0.05 = \alpha\) → Reject \(H_0\).
방법 2 (CI): 95% CI = \([0.04, 0.07]\). 0이 포함되지 않음 → Reject \(H_0\).
결론: Volume의 계수가 0이 아니라는 강한 증거. → Volume은 통계적으로 유의함.
해석 정리
두 방법 다 같은 답을 줘요.
Rooms — 의미 없음
이 데이터로는 Rooms가 Hours에 의미 있는 영향을 준다고 결론 못 내요.
→ 다음 분석에서 빼는 걸 고려.
Volume — 강한 의미
Volume이 1 단위 늘면 Hours가 평균 0.06 늘어나요. 통계적으로 매우 강한 효과.
자유도(\(df\)) — "추정마다 한 칸씩 잃어요"
ANOVA 표에서 "\(df\)"라는 열을 봤죠? 이게 자유도(degrees of freedom)예요. 살짝 추상적인 개념이지만, 직관은 단순해요.
원래 정보(데이터 점)는 \(n\)개예요. 그런데 우리가 평균이나 회귀계수를 추정할 때마다 정보 하나씩 묶여요. 그래서 "남은 자유도" \(= n - (\)묶인 개수\()\).
표본분산의 \(n - 1\)을 떠올려보세요
2강에서 표본분산 \(S^2 = \sum (X_i - \bar{X})^2 / (n - 1)\)이었죠. 왜 \(n - 1\)로 나눴을까요? \(\bar{X}\)을 추정하느라 자유도 1을 잃어서요.
회귀에서의 자유도
회귀에선 \(\beta\)들을 추정해요. 절편 \(\beta_0\) + 계수 \(\beta_1, \ldots, \beta_k\) 해서 총 \(k + 1\)개를 추정해요. 그래서 자유도가 \((k + 1)\)만큼 깎여요.
Total \(df = n - 1\) (\(Y\)의 평균 \(\bar{Y}\)을 추정하느라 1 잃음)
Regression \(df = k\) (\(k\)개의 \(X\) 변수)
Residual \(df = n - k - 1\) (\(n\)에서 \(\beta_0\) 포함 \(k+1\)개 잃음)
확인: Regression \(df\) + Residual \(df = k + (n-k-1) = n-1 = \) Total \(df\) ✓
9강 출력 예시
\(n = 36\), 변수 2개 (Rooms, Volume). \(k = 2\).
- Total \(df = 36 - 1 = 35\) ✓ (출력의 Total 행과 일치)
- Regression \(df = 2\) ✓
- Residual \(df = 36 - 2 - 1 = 33\) ✓
MSR · MSE · 표준오차 \(S_e\)
9강에서 본 SSR, SSE는 그냥 합이에요. 이걸 각자의 자유도로 나누면 "평균 제곱"이 돼요.
두 가지 평균 제곱
\(MSR = SSR / \) Regression \(df = SSR / k\)
"변수 한 개당 평균적으로 얼마나 설명하는가"의 크기.
\(MSE = SSE / \) Residual \(df = SSE / (n - k - 1)\)
"잔차들의 분산 추정치". 이게 핵심 — 잔차들이 얼마나 흔들리는지의 분산이에요.
표준오차 \(S_e\)
\(S_e = \sqrt{MSE}\)
잔차들의 표준편차 추정치. "우리 회귀선이 평균적으로 데이터에서 얼마나 떨어져 있나"의 크기.
9강 예시로 확인
\(n = 36\), \(k = 2\), \(SSE = 844.82\).
- \(MSE = 844.82 / (36 - 2 - 1) = 844.82 / 33 \approx\) 25.60 ✓ (출력의 MS Residual)
- \(S_e = \sqrt{25.60} \approx\) 5.06 ✓ (출력의 Standard Error)
"우리 회귀선의 예측값은 실제값에서 평균적으로 \(\pm 5.06\) 단위쯤 떨어져 있다"는 거예요.
\(S_e\)가 작을수록 예측이 정확해요. 잠시 후 예측 신뢰구간의 핵심이 돼요.
변수 선택 — Adjusted \(R^2\)의 등장
9강에서 짧게 경고했죠. "\(R^2\)는 변수만 늘리면 무조건 올라가요". 왜?
\(R^2\)의 함정
변수를 하나 더 추가하면 SSE는 어떻게 될까요? 줄거나 같아요. 새 변수가 쓸데없어도 적어도 다른 변수들 옆에서 SSE를 더 늘리진 않으니까요.
SSE가 줄면 → \(R^2 = 1 - SSE/SST\) 가 올라가요. 그래서 \(R^2\)만 보면 "변수 많을수록 좋다"는 잘못된 결론이 나와요.
"이 변수, 진짜로 필요해? 아니면 그냥 통계적 화장이야?"를 \(R^2\) 혼자선 판단 못 해요.
Adjusted \(R^2\) — 변수 개수에 페널티
그래서 변수 개수가 늘면 \(R^2\)를 깎아내리는 보정 버전이 만들어졌어요.
\(R^2\)에서는 \(SSE / SST\)를 썼는데, 여기선 자유도로 나눈 비율이에요. 변수를 늘리면 분자(MSE) 쪽이 덜 줄어들면서 페널티가 작동해요.
① 의미 없는 변수를 추가하면 오히려 떨어져요. (\(R^2\)와 다른 점!)
② 의미 있는 변수를 추가하면 올라가요.
③ \(R^2\)보다는 항상 작거나 같아요. (페널티 때문)
변수 선택 절차 (한 개씩 빼기)
실무에서 자주 쓰는 간단한 방법이에요.
변수 선택 — 실제로 해보기
PDF 예시를 보면서 절차를 한 번에 따라가요.
1차 — 모든 변수 다 넣기
| 변수 | Coeff | \(p\)-value | Lower 95% | Upper 95% |
|---|---|---|---|---|
| Intercept | 78.74 | 0.000 | 58.01 | 99.46 |
| LOTSZ | 0.68 | 0.068 | −0.05 | 1.41 |
| BDRM | −3.69 | 0.099 | −8.07 | 0.70 |
| BATH | 19.00 | 0.000 | 13.48 | 24.53 |
| ROOMS | 8.48 | 0.000 | 5.55 | 11.42 |
| AGE | −0.35 | 0.004 | −0.58 | −0.11 |
| GARG | 4.01 | 0.087 | −0.59 | 8.62 |
| EMEADW | 57.08 | 0.000 | 49.25 | 64.91 |
| LVTTWN | 24.42 | 0.000 | 16.76 | 32.08 |
요약: \(R^2 = 0.708\), Adjusted \(R^2 = 0.697\).
\(\alpha = 5\%\) 기준으로 \(p\)-값이 0.05보다 큰 변수가 셋 있어요. LOTSZ (0.068), BDRM (0.099), GARG (0.087).
2차 — 의미 없는 셋을 동시에 빼기
PDF에서는 한 번에 빼서 다시 돌렸어요. 결과:
| 변수 | Coeff | \(p\)-value | Lower 95% | Upper 95% |
|---|---|---|---|---|
| Intercept | 80.57 | 0.000 | 61.27 | 99.87 |
| BATH | 19.59 | 0.000 | 14.08 | 25.10 |
| ROOMS | 8.09 | 0.000 | 5.50 | 10.68 |
| AGE | −0.37 | 0.002 | −0.60 | −0.13 |
| EMEADW | 53.48 | 0.000 | 46.49 | 60.48 |
| LVTTWN | 18.71 | 0.000 | 12.18 | 25.24 |
요약: \(R^2 = 0.696\), Adjusted \(R^2 = 0.689\).
① 모든 변수의 \(p\)-값이 \(\ll 0.05\). 전부 통계적으로 유의함.
② \(R^2\)는 0.708 → 0.696으로 조금 떨어졌지만, Adjusted \(R^2\)는 거의 그대로(0.697 → 0.689). 그 셋을 빼도 설명력이 거의 안 줄었다는 뜻 → 뺀 게 정답.
③ 더 간결한 모델로 같은 설명력 유지. 끝!
"짐 줄이기" 비유.
여행 가방에 옷 10벌 넣었다가 "정말 다 입을 거야?" 점검해서 7벌만 남기는 거예요.
용량은 30% 줄였는데 옷차림은 거의 그대로면, 7벌이 맞는 선택!
예측 — 새 데이터의 \(Y\)를 추정하기
변수 선택까지 끝낸 모델이 있어요. 이제 새로운 아파트의 가격을 예측해 봐요!
회귀식에 \(X\) 값 대입
"2-bath, 8-room, 10-year-old 아파트의 가격은 얼마일까?"
모델: \(\hat{Y} = 80.573 + 19.592 \times \text{BATH} + 8.092 \times \text{ROOMS} - 0.368 \times \text{AGE}\)
각 \(X\) 값을 대입하면 끝.
\(\hat{Y}\) \(= 80.573 + 19.592 \times 2 + 8.092 \times 8 - 0.368 \times 10\)
\(= 80.573 + 39.184 + 64.736 - 3.68\)
\(\approx\) 180.8 (천 달러)
"이 아파트의 평균 가격은 약 180.8K"라고 추정했어요.
하지만 이건 한 숫자예요. 7강에서 봤듯이 한 숫자는 너무 외로워요. 신뢰구간을 만들어요!
예측의 신뢰구간
실제 \(Y\)는 식대로만 나오지 않아요. 잔차 \(e\)가 들어가요. \(e\)의 표준편차 추정치가 \(S_e\)이죠.
그러니 95% 신뢰구간은:
(\(n\)이 충분히 크면 CLT가 작동해서 1.96. 작은 표본이면 대신 \(t\)-값을 써요.)
예시로 계산
\(S_e = 20.828\) (위 5변수 모델). 그러면:
오차범위 \(= 1.96 \times 20.828 \approx 40.8\)K.
95% CI : \(180.8\text{K} \pm 40.8\text{K}\) 즉 약 \([140\text{K}, 221.6\text{K}]\).
"우리 모델은 이 아파트의 가격이 약 95% 확률로 140K ~ 222K 사이일 거라고 본다."
꽤 넓은 범위죠? \(S_e\)가 크면 예측이 그만큼 흐릿해요. \(R^2\)가 높을수록 \(S_e\)는 작아지고 CI도 좁아져요.
맺는 글 · 회귀 여정의 끝
9강과 10강을 통과하며 우리는 통계학의 가장 강력한 도구 하나를 손에 넣었어요. 회귀분석이에요. 점들 사이를 가로지르는 한 줄, 그 줄의 계수가 의미하는 것, 그 계수가 진짜 의미 있는지를 따지는 법, 그리고 새 데이터의 미래를 예측하는 법까지.
이게 끝이 아니에요. 통계의 세계엔 시계열, 분산분석(ANOVA), 로지스틱 회귀, 기계학습 등 끝없는 가지가 뻗어 있어요. 하지만 그 모든 가지가 같은 뿌리에서 자라요 — 확률, 분포, 표본, 검정, 회귀. 이 학기에 우리가 다진 그 뿌리예요.
오늘의 장면 요약
- \(\hat{\beta}\)은 표본마다 흔들리는 확률변수
- 각 \(\beta\)에 대해 \(H_0: \beta = 0\)을 검정 → \(p\)-값 또는 CI로 판정
- CI에 0이 포함 → 의미 없음. 포함 안 됨 → 의미 있음.
- 자유도: Total \(= n - 1\), Regression \(= k\), Residual \(= n - k - 1\)
- \(MSE = SSE / (n - k - 1)\), \(S_e = \sqrt{MSE}\)
- \(R^2\)는 변수 늘리면 무조건 ↑ → Adjusted \(R^2\)로 보정
- 변수 선택: \(p\)-값 큰 변수부터 한 개씩 빼기
- 예측: \(\hat{Y} = \hat{\beta}_0 + \sum \hat{\beta}_i X_i \pm 1.96 \times S_e\)
한 학기, 한 줄 요약
1~2강 · 데이터 다루기
요약통계와 그래프로 세상을 묘사하는 법.
3~5강 · 확률과 분포
불확실성을 숫자로 다루는 언어를 배웠어요.
6강 · 표본분포·CLT
표본평균이 어떻게 흔들리는지의 핵심 정리.
7강 · 신뢰구간
"점이 아니라 띠로" 답하는 태도.
8강 · 가설 검정
"진짜 그런가?"를 객관적으로 따지는 법.
9~10강 · 회귀분석
관계를 찾고, 검정하고, 예측까지.
마지막 마음가짐
통계는 세상을 "알 수 있게" 만드는 도구가 아니에요.
오히려 "알 수 없음"을 정직하게 인정하는 언어예요.
그 정직함 위에 가장 그럴듯한 답을 얹는 일 — 그게 통계의 마음입니다.
한 학기 동안 이 노트를 따라와 줘서 고마워요.
— 10강, 그리고 본강의의 마지막 —