1. 선형회귀의 해(Solution): 컴퓨터는 어떻게 정답을 찾을까?
우리는 눈대중으로 선을 긋지만, 컴퓨터는 수학적으로 가장 오차가 적은 선을 찾아냅니다. 이때 사용하는 방법이 바로 최소자승법(OLS, Ordinary Least Squares)입니다.
1) 행렬(Matrix)로 표현하기
데이터가 수백, 수천 개일 때 이를 $Y = \beta_0 + \beta_1 X + \dots$ 처럼 길게 쓸 수 없습니다. 그래서 행렬을 사용해 심플하게 표현합니다.
- $Y$ (종속변수 벡터): 예측 대상 (예: 환자들의 혈압)
- $X$ (디자인 행렬): 독립변수들 (예: 나이, BMI, $[1, 1, \dots]$인 절편항 포함)
- $\beta$ (계수 벡터): 우리가 구해야 할 정답 (가중치)
- $\varepsilon$ (오차 벡터): 모델이 설명 못 하는 잔차
2) OLS의 골든 포뮬라
잔차의 제곱합($\sum \varepsilon^2$)을 최소화하는 $\beta$를 구하기 위해 미분을 하면, 다음과 같은 유명한 공식이 나옵니다.
2. 예측(Prediction)과 신뢰구간
학습을 통해 $\hat{\beta}$을 구했다면, 이제 새로운 데이터($X_{new}$)가 들어왔을 때 결과를 예측할 수 있습니다.
1) 예측값 계산
입력값($X$)들에 가중치($\beta$)를 곱해서 더하면 끝입니다.
2) 95% 신뢰구간 (Confidence Interval)
하지만 예측값은 '점' 하나일 뿐입니다. 통계에서는 항상 불확실성을 고려해야 하므로 구간을 제시합니다.
- 의미: "환자의 예상 입원 기간은 5일입니다" (점 추정) vs "4일에서 6일 사이일 확률이 95%입니다" (구간 추정)
- 데이터가 많을수록($n$ 증가), 데이터가 평균 근처에 몰려있을수록 구간은 좁아집니다(정확해집니다).
3. 실무 핵심: 가변수 (Dummy Variable)
의료 데이터를 보면 수치형만 있지 않습니다. 성별(남/여), 혈액형(A/B/O/AB), 투약군(Placebo/Treatment) 같은 명목형 변수(Categorical Variable)는 어떻게 수식에 넣을까요?
1) 더미 변수란?
컴퓨터는 '남자', '여자'라는 글자를 이해하지 못합니다. 그래서 이를 0과 1의 숫자 스위치로 바꿔주는 것입니다.
- 규칙: $N$개의 카테고리가 있다면, $N-1$개의 더미 변수가 생성됩니다.
- 예시 (성별):
- 변수: Gender_Female (여성이면 1, 남성이면 0)
- Q: 남성 변수는 없나요?
- A: Gender_Female이 0이면 자동으로 남성이므로 필요 없습니다.
2) 더미 변수의 역할과 해석
상황에 따라 더미 변수가 모델에 미치는 영향이 다릅니다.
① 더미 변수만 추가했을 때 (절편의 변화)
- 수식: $Y = \beta_0 + \beta_1(\text{Key}) + \beta_2(\text{Gender})$
- 효과: 기울기는 같지만, 시작점(절편)이 달라집니다.
- 해석: "키가 1cm 클 때 몸무게 증가량은 남녀가 같지만, 기본적으로 남자가 여자보다 $\beta_2$kg만큼 더 무겁다." (평행선)
② 상호작용항(Interaction Term) 추가 시 (기울기의 변화)
- 수식: $Y = \beta_0 + \beta_1(\text{Key}) + \beta_2(\text{Gender}) + \beta_3(\text{Key} \times \text{Gender})$
- 효과: 성별에 따라 기울기(Slope) 자체가 달라집니다.
- 해석: "남자는 키가 클 때 몸무게가 확확 늘어나는데, 여자는 완만하게 늘어난다." (교차선)
4. Python & R 코드 구현
의료 데이터에서 흔히 보는 '성별에 따른 몸무게 예측'을 예시로 들어보겠습니다.
Python (statsmodels)
Python에서는 formula API를 쓰면 R처럼 편하게 기술할 수 있습니다.
import statsmodels.formula.api as smf
import pandas as pd
# 가상의 데이터 (height: 키, weight: 몸무게, gender: M/F)
df = pd.DataFrame({
'height': [170, 160, 180, 165],
'weight': [70, 55, 80, 60],
'gender': ['M', 'F', 'M', 'F']
})
# 1. 일반 모델 (절편만 변화, 평행선)
# C(gender): 범주형 변수임을 명시 (자동으로 더미 생성)
model1 = smf.ols('weight ~ height + C(gender)', data=df).fit()
print(model1.summary())
# 2. 상호작용 모델 (기울기도 변화, 교차선)
# 'height * gender'는 'height + gender + height:gender'를 모두 포함함
model2 = smf.ols('weight ~ height * C(gender)', data=df).fit()
print(model2.summary())
R
R은 범주형 변수(Factor)를 자동으로 더미 변수 처리해줍니다.
# 데이터 생성
df <- data.frame(
height = c(170, 160, 180, 165),
weight = c(70, 55, 80, 60),
gender = factor(c("M", "F", "M", "F"))
)
# 1. 일반 모델 (+ 기호 사용)
model1 <- lm(weight ~ height + gender, data = df)
summary(model1)
# 2. 상호작용 모델 (* 기호 사용)
# height * gender는 주효과와 교호작용항을 모두 포함
model2 <- lm(weight ~ height * gender, data = df)
summary(model2)
요약 노트
- OLS 해: 컴퓨터는 $(X^T X)^{-1} X^T Y$ 라는 공식을 통해 최적의 선을 찾는다.
- 더미 변수: 명목형 변수(성별 등)는 0과 1의 스위치로 변환해서 넣는다. ($N$개 유형이면 $N-1$개 변수 생성)
- 상호작용: 두 변수를 곱해서($X_1 \times X_2$) 넣으면, 그룹별로 기울기가 달라지는 효과를 볼 수 있다.
'Study Note > 통계' 카테고리의 다른 글
| 선형회귀모형의 진단과 선별 (T검정, F검정, AIC, VIF) (0) | 2025.12.15 |
|---|---|
| [의료 통계] 내 BMI가 1 오르면 혈압은 얼마나 오를까? (Python vs R 선형회귀 완벽 비교) (0) | 2025.12.12 |
| [머신러닝 기초] 숫자를 예측하는 가장 강력한 직선, 선형회귀(Linear Regression) 완벽 해부 (0) | 2025.12.10 |
| [머신러닝 기초] 통계 예측 모형과 지도학습 (0) | 2025.12.10 |
| 비모수 검정(Non-parametric Test) 총정리 (0) | 2025.12.08 |