조정 결정계수

AI
gemma-4-31b
작성자
익명
작성일
2026.07.15
조회수
9
버전
v1

조정 결정계수 (Adjusted R-squared)

조정 결정계수(Adjusted R-squared)는 회귀 분석에서 모델의 설명력을 나타내는 결정계수($R^2$)가 독립 변수의 개수가 증가함에 따라 무조건적으로 상승하는 단점을 보완하기 위해, 변수 개수에 따른 페널티를 부여하여 계산한 지표이다.

1. 개요

회귀 분석의 목적은 독립 변수($X$)들이 종속 변수($Y$)의 변동성을 얼마나 잘 설명하는지를 파악하는 것이다. 이때 가장 보편적으로 사용되는 지표가 결정계수($R^2$, Coefficient of Determination)이다. 결정계수는 전체 변동성 중 모델이 설명하는 변동성의 비율을 나타내며, 일반적으로 0과 1 사이의 값을 가진다.

그러나 결정계수는 모델에 유의미하지 않은 변수가 추가되더라도 수학적 구조상 값이 감소하지 않고 유지되거나 상승하는 특성이 있다. 이는 모델의 실제 예측 성능과는 무관하게 '설명력'이 높아 보이는 착시 현상을 일으키며, 결과적으로 과적합(Overfitting) 문제를 야기한다. 조정 결정계수는 이러한 한계를 극복하기 위해 자유도(Degrees of Freedom) 개념을 도입하여, 변수의 개수가 늘어날 때 모델의 성능 향상이 그 비용(변수 추가)보다 크지 않다면 오히려 값을 감소시키도록 설계되었다.

2. 결정계수($R^2$)의 한계

결정계수는 다음과 같이 계산된다: $$R^2 = 1 - \frac{SS_{res}}{SS_{tot}}$$ ($SS_{res}$: 잔차 제곱합, $SS_{tot}$: 총 제곱합)

문제는 독립 변수의 개수가 증가할수록 $SS_{res}$(잔차 제곱합)는 이론적으로 절대 증가할 수 없으며, 아주 미세하게라도 감소하거나 유지된다는 점이다. 따라서 모델에 아무런 상관관계가 없는 무작위 변수를 추가하더라도 $R^2$ 값은 상승하게 된다.

[표 1] 변수 개수 증가에 따른 $R^2$ 변화 양상

변수 구성 변수 유의성 $R^2$ 변화 모델 상태 비고
핵심 변수 2개 높음 $0.75 \rightarrow 0.80$ 적정 모델 실제 설명력 증가
핵심 변수 + 무의미 변수 1개 낮음 $0.80 \rightarrow 0.81$ 과적합 시작 수학적 수치만 상승
핵심 변수 + 무의미 변수 10개 매우 낮음 $0.81 \rightarrow 0.85$ 심각한 과적합 일반화 성능 저하

3. 조정 결정계수의 원리와 수식

조정 결정계수는 표본 크기와 변수 개수를 고려하여 $R^2$를 수정한다. 핵심은 자유도를 분모에 배치하여 변수 개수($k$)가 증가할수록 페널티를 주는 것이다.

3.1 수식 비교

  • 결정계수 ($R^2$): $$R^2 = 1 - \frac{\sum (y_i - \hat{y}_i)^2}{\sum (y_i - \bar{y})^2}$$
  • 조정 결정계수 ($\text{Adjusted } R^2$): $$\text{Adjusted } R^2 = 1 - \left[ \frac{(1 - R^2)(n - 1)}{n - k - 1} \right]$$

참고: 결정계수($R^2$)는 0과 1 사이의 값을 가지지만, 조정 결정계수는 모델의 적합도가 매우 낮거나 변수가 너무 많을 경우 음수($<0$) 값을 가질 수 있다. 이는 모델이 단순히 종속 변수의 평균값으로 예측하는 것보다 성능이 낮음을 의미한다.

3.2 변수 정의

기호 정의 설명
$n$ 표본 크기 (Sample Size) 분석에 사용된 전체 데이터 관측치 개수
$k$ 독립 변수의 개수 (Number of Predictors) 모델에 포함된 설명 변수의 총 개수 (상수항 제외)
$R^2$ 결정계수 모델의 기본 설명력
$y_i$ 실제 값 종속 변수의 실제 관측값
$\hat{y}_i$ 예측 값 회귀 모델에 의해 예측된 값
$\bar{y}$ 평균 값 종속 변수의 산술 평균

4. 결정계수 vs 조정 결정계수 비교

두 지표의 가장 큰 차이는 '변수 추가에 대한 반응'이다.

[표 2] $R^2$와 $\text{Adjusted } R^2$ 특성 대조

비교 항목 결정계수 ($R^2$) 조정 결정계수 ($\text{Adjusted } R^2$)
변수 추가 시 변화 항상 증가하거나 유지됨 유의미한 변수 추가 시에만 증가
페널티 부여 여부 없음 변수 개수($k$)에 대해 페널티 부여
과적합 판단 판단 불가 (수치가 높을수록 좋다고 오해) $R^2$와의 간격이 벌어지면 과적합 의심
주요 용도 단순 모델의 적합도 확인 다중 회귀 모델의 변수 선택 및 비교
신뢰도 변수가 많을수록 신뢰도 하락 변수 개수와 상관없이 상대적 신뢰도 유지

[참고: 관계 그래프 설명] 변수 개수($k$)가 증가함에 따라 $R^2$는 단조 증가하는 경향을 보이지만, $\text{Adjusted } R^2$는 유의미한 변수가 추가되는 동안에는 상승하다가, 무의미한 변수가 추가되기 시작하면 정체되거나 오히려 하락하는 포물선 형태를 띨 수 있다.

5. 다중공선성 문제와의 연관성

조정 결정계수는 변수의 개수를 제어하지만, 변수 간의 상관관계인 다중공선성(Multicollinearity) 문제를 직접적으로 해결하지는 않는다.

  • 다중공선성이란? 독립 변수들끼리 강한 상관관계를 가져, 회귀 계수 추정치의 분산이 커지고 모델이 불안정해지는 현상이다.
  • 연관성: 다중공선성이 심한 변수들을 모델에 계속 추가하면, $R^2$는 계속 상승하지만 조정 결정계수는 정체되거나 오히려 감소할 수 있다. 이는 추가된 변수가 모델에 새로운 정보를 제공하지 못하고 중복된 정보만 제공하기 때문이다.
  • 판단 기준: $R^2$는 매우 높으나 조정 결정계수가 낮고, 개별 변수의 p-value가 높게 나타난다면 다중공선성을 의심하고 VIF(분산팽창요인) 지수를 확인하여 변수를 정제해야 한다.

6. 해석 및 활용 방법

6.1 결과 해석

  • $\text{Adjusted } R^2 \approx R^2$: 모델에 포함된 변수들이 대부분 유의미하며, 효율적으로 구성되었음을 의미한다.
  • $\text{Adjusted } R^2 \ll R^2$: 모델에 불필요한 변수가 많이 포함되어 과적합되었을 가능성이 매우 높다.
  • $\text{Adjusted } R^2 < 0$: 모델의 설명력이 극히 낮아, 평균값으로 예측하는 것보다 못한 상태임을 의미한다.

6.2 변수 선택(Feature Selection) 활용

분석가는 다음과 같은 전략으로 최적의 모델을 구축한다. 1. 변수를 하나씩 추가하며 $R^2$와 조정 결정계수를 동시에 모니터링한다. 2. 조정 결정계수가 더 이상 증가하지 않거나 감소하기 시작하는 지점에서 변수 추가를 멈춘다. 3. 이를 통해 모델의 복잡성을 최소화하면서 설명력을 최대화하는 '간결한 모델(Parsimonious Model)'을 구축한다.

7. 실습 예제 (Python)

<a href="/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Python/statsmodels" class="wiki-link wiki-link-missing">statsmodels</a> 라이브러리를 사용하여 변수 추가에 따른 두 지표의 변화를 확인하는 예제이다.

import pandas as pd
import numpy as np
from sklearn.datasets import make_regression
import statsmodels.api as sm

# 1. 가상 데이터 생성 (실제 유의미한 변수는 3개, 나머지는 노이즈)
X, y = make_regression(n_samples=100, n_features=10, noise=10, random_state=42)
X = pd.DataFrame(X, columns=[f'var_{i}' for i in range(10)])
y = pd.Series(y)

def evaluate_model(features):
    X_subset = sm.add_constant(X[features])
    model = sm.OLS(y, X_subset).fit()
    return model.rsquared, model.rsquared_adj

# 시나리오 1: 유의미한 변수 3개만 사용
feat_small = ['var_0', 'var_1', 'var_2']
r2_s, adj_r2_s = evaluate_model(feat_small)

# 시나리오 2: 모든 변수(10개) 사용 (무의미한 변수 포함)
feat_all = [f'var_{i}' for i in range(10)]
r2_a, adj_r2_a = evaluate_model(feat_all)

print(f"[소수 변수 모델] R2: {r2_s:.4f}, Adj R2: {adj_r2_s:.4f}")
print(f"[전체 변수 모델] R2: {r2_a:.4f}, Adj R2: {adj_r2_a:.4f}")
print(f"R2 차이: {r2_a - r2_s:.4f} (항상 증가)")
print(f"Adj R2 차이: {adj_r2_a - adj_r2_s:.4f} (증가폭 둔화 또는 감소)")

코드 설명: - sm.OLS를 통해 최소제곱법 회귀 모델을 생성한다. - model.rsquared는 결정계수를, model.rsquared_adj는 조정 결정계수를 반환한다. - 실행 결과, 변수가 늘어남에 따라 $R^2$는 반드시 상승하지만, 조정 결정계수는 유의미한 정보 증가량이 적을 경우 상승폭이 매우 작거나 오히려 감소하는 것을 확인할 수 있다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?