자유도(degree of freedom, df)
자유도(Degree of Freedom)와 잔차의 자유도, OLS 기반 분산분석 정리
빅데이터 분석기사 실기 공부를 하다가 '자유도'라는 개념이 직관적으로 잘 이해되지 않아서, 개인적으로 헷갈리는 부분을 정리해보려고 합니다. 개념 자체가 은근히 자주 등장하면서도 설명이 추상적인 경우가 많아서, 조금씩 알음알음 공부한 내용을 기록해 두는 용도로 작성합니다. 혹시 저처럼 막히는 분이 있다면 참고가 되었으면 좋겠습니다.
1. 자유도란 무엇인가요?
**자유도(Degree of Freedom)**는 통계량을 계산할 때, 자유롭게 변할 수 있는 값의 수를 의미한다고 합니다.
이 중에서도 "잔차의 자유도"는 회귀나 분산분석에서 잔차(오차)를 계산할 수 있는 독립적인 정보의 수를 뜻하며, 보통 다음과 같은 수식으로 계산된다고 합니다:
잔차의 자유도 = n - p
- n: 전체 데이터(관측값) 개수
- p: 회귀계수 포함, 모델에서 추정한 파라미터의 수
2. 선형회귀 예제에서 자유도 계산
예를 들어, 데이터가 10개 있고 y = ax + b 형태의 단순 선형 회귀를 한다고 할 때, 추정되는 계수는 기울기 a와 절편 b, 총 2개입니다.
그래서 잔차의 자유도는:
10 - 2 = 8
이렇게 계산된다고 합니다.
3. 평균 조건이 자유도를 줄이는 이유 (예시로 직관 이해)
숫자 3개 a, b, c가 있다고 할 때, 평균이 100이라는 조건이 주어진 경우를 생각해 봅니다.
- 이 조건이 없다면 a = 9, b = 11, c = 10이든 a = 10, b = 8, c = 12든 자유롭게 정할 수 있습니다.
- 하지만 "평균이 100"이라는 조건이 생기면, 두 개를 정하면 나머지 하나는 자동으로 결정됩니다.
예를 들어:
- a = 90, b = 110이면 c = 100이어야 평균이 100이 되죠.
즉, 마지막 값은 앞의 값들에 의해 고정되므로 자유도는 3 - 1 = 2가 됩니다.
회귀 분석에서도 마찬가지 원리가 적용됩니다. 잔차의 합은 항상 0이 되도록 계산되기 때문에, 잔차 중 마지막 하나는 나머지 값들에 의해 자동으로 결정되며, 그만큼 자유도가 줄어든다고 합니다.
4. OLS를 활용한 일원 분산 분석에서의 자유도
아래의 예제 코드는 근성장 ~ C(운동방식)과
같은 형태의 식을 보여줍니다. 여기서 운동방식은 범주형(카테고리형) 변수로 처리됩니다. 이 예제는 그룹 간 평균 차이를 분석하는 일원분산분석 예제입니다.
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
# 샘플 데이터 만들기
data = pd.DataFrame({
'근성장': [13.2, 12.9, 14.1, 15.5, 17.2, 16.8, 13.3, 14.9, 15.2, 16.1,
14.4, 15.0, 16.2, 13.7, 14.0, 12.5, 13.6, 15.3, 16.9, 17.4,
14.7, 15.5, 13.9, 13.1, 12.8, 14.6, 16.3, 15.1, 14.8, 13.4,
15.7, 14.5, 13.8, 14.3, 15.6, 13.0, 12.6, 13.2, 14.1, 15.0],
'운동방식': ['A']*10 + ['B']*10 + ['C']*10 + ['D']*10
})
# OLS 회귀 실행
model = smf.ols('근성장 ~ C(운동방식)', data=data).fit()
# 분산분석표 출력
anova_table = sm.stats.anova_lm(model, typ=2)
print(anova_table)
이때 자유도는 다음과 같이 계산됩니다:
- 총 자유도 (Total DF): 40 - 1 = 39
- 모델 자유도 (그룹 개수 - 1): 4 - 1 = 3
- 잔차 자유도: 40 - 4 = 36 → 그룹 4개에 대해 평균 4개를 추정했기 때문
📌 정리
항목 | 의미 | 계산식 |
---|---|---|
전체 자유도 | 데이터 전체 변동을 설명하는 자유도 | n - 1 |
회귀(모형) 자유도 | 그룹 평균 또는 회귀계수 추정 개수 - 1 | p - 1 |
잔차 자유도 | 전체 자유도 - 회귀 자유도 | n - p |
결론적으로, 자유도는 단순히 숫자 빼기로 계산하는 게 아니라, "모델이 데이터를 얼마나 제약하고 있느냐"를 나타내는 개념입니다. 기록용으로 남겨둡니다 :)