Summary

다중 회귀에서 독립변수들의 상대적 기여도를 비교하기 위해 표준화한 회귀계수. 단위가 다른 변수들의 효과 크기를 동일 스케일에서 비교할 수 있다.

용어 설명

  • 다중공선성 (Multicollinearity): 독립변수들 간에 높은 상관관계가 있는 상태. β가 불안정해지고 해석이 어려워짐. VIF(분산팽창지수) > 10이면 경고
  • z-score (표준점수): 원래 값에서 평균을 빼고 표준편차로 나눈 값. 평균 = 0, SD = 1로 변환. 표준화 회귀의 기초
  • 회귀계수 (Regression coefficient): 독립변수가 1단위 변할 때 종속변수의 예상 변화량
  • 비표준화 계수 (b): 원래 단위 기준의 회귀계수. 예측에는 유용하지만 변수 간 비교 불가
  • 표준화 계수 (β): 표준편차 단위로 변환한 회귀계수. 변수 간 상대적 중요도 비교에 사용

Standardized Beta (β)

수식

수식 변수 풀이

  • : 독립변수 표준화 회귀계수가 1 SD 증가할 때 SD만큼 변화
  • : 비표준화 회귀계수 — 원래 단위에서의 기울기
  • : 독립변수 표준편차
  • : 종속변수 표준편차
  • 직관: 비표준화 계수에 “독립변수의 퍼짐 / 종속변수의 퍼짐” 비율을 곱해 스케일 통일
  • : 비표준화 회귀계수 (unstandardized coefficient)
  • : 독립변수 의 표준편차
  • : 종속변수 의 표준편차

해석: 가 1 표준편차 증가할 때, 표준편차만큼 변화한다.


비표준화 vs 표준화 계수

구분비표준화 (b)표준화 (β)
단위원래 변수 단위단위 없음 (표준편차 기준)
비교변수 간 비교 불가변수 간 상대적 비교 가능
해석”x가 1단위 증가 → y가 b만큼 변화""x가 1SD 증가 → y가 β·SD만큼 변화”
용도예측, 실용적 해석변수 중요도 비교
절편의미 있음항상 0 (표준화 후)

구체적 예시

종속변수: 시험 점수, 독립변수: 공부 시간(hr), 수면 시간(hr)

변수bβ
공부 시간5.20.45
수면 시간3.80.32
  • b로 보면: 공부 1시간 → 5.2점↑, 수면 1시간 → 3.8점↑ (단위 같으니 직접 비교 가능)
  • β로 보면: 공부 시간이 수면 시간보다 상대적으로 더 큰 기여 (0.45 > 0.32)
  • 만약 변수 단위가 달랐다면 (e.g., 공부 시간 vs IQ), β만이 공정한 비교를 허용

해석 기준

Cohen (1988)의 상관계수 기준을 준용하면:

| |β| 값 | 해석 |
|---------|------|
| < 0.1 | 무시할 수준 |
| 0.1 – 0.3 | Small |
| 0.3 – 0.5 | Medium |
| > 0.5 | Large |

주의

  • β는 회귀 모형 내에서의 상대적 크기이며, 다른 모형과 비교할 수 없다.
  • 독립변수 간 **다중공선성(multicollinearity)**이 높으면 β가 불안정해진다.
  • 범주형 변수(dummy)의 β 해석은 주의가 필요하다.

표준화의 두 가지 방법

1. 변수 사전 표준화 후 회귀

수식 변수 풀이

  • : 독립변수의 표준점수 — 평균을 빼고 SD로 나눈 값 (평균 = 0, SD = 1)
  • : 각 변수의 평균
  • 이 방식으로 변환 후 회귀하면, 계수가 바로 표준화 계수(β)가 됨

표준화된 변수로 회귀 → 계수가 곧 β

2. 비표준화 계수에서 변환

Implementation

import statsmodels.api as sm
from scipy import stats as sp_stats
import pandas as pd
import numpy as np
 
# 방법 1: 변수 표준화 후 회귀
df_z = df[['x1', 'x2', 'y']].apply(sp_stats.zscore)
model_z = sm.OLS(df_z['y'], sm.add_constant(df_z[['x1', 'x2']])).fit()
print("Standardized β:")
print(model_z.params[1:])  # 절편 제외
 
# 방법 2: 비표준화 계수에서 변환
model = sm.OLS(df['y'], sm.add_constant(df[['x1', 'x2']])).fit()
betas = model.params[1:] * df[['x1', 'x2']].std().values / df['y'].std()
print("Standardized β (from b):")
print(betas)

관련 문서