logo

범주형 독립변수

범주형 독립변수의 처리

  • 범주형 변수는 연속형 변수와 같은 수치적 간격이 없으므로 더미 코딩이 필요
  • 명목형 변수(Nominal)
    • 선박 종류, 색상처럼 카테고리 간의 순위나 우위 관계가 없는 변수
  • 순서형 변수(Ordinal)
    • 좌석 등급, 고객 등급처럼 순서는 있지만 범주 간 간격은 일정하지 않은 변수
  • 범주형 변수를 1, 2, 3으로 치환하면 모형이 동일한 간격과 선형 관계를 가정
  • 따라서 범주형 변수를 연속 변수처럼 모형에 투입할 수 있도록 변환해야 함
  • 가장 많이 사용하는 방법은 더미 코딩(dummy coding)

더미 코딩

  • 더미 코딩(dummy coding): 범주형 변수의 범주가 k개 있을 때 k−1개의 더미 변수를 대신 투입하는 방법
  • 각 범주에 해당하면 1, 아니면 0으로 표기
  • 기준범주(reference)
    • 절편과 k개 더미 변수를 모두 넣으면 더미 변수의 합이 항상 1이므로 완전한 다중공선성 발생
    • 범주 중 하나를 기준으로 지정해 제외
    • 기본 기준범주는 범주 순서의 첫 번째 값
    • 문자열 범주는 보통 알파벳순이며 범주형 자료형의 순서에 따라 달라질 수 있음
    • 기준범주는 변경할 수 있음
  • 해석
    • y절편: 다른 독립변수가 0일 때 기준범주의 예측값
    • 더미 변수의 기울기: 다른 독립변수가 같을 때 기준범주와의 차이

전체 원-핫 표현은 다음과 같습니다.

model model[T.A] model[T.B]
A 1 0
B 0 1

기준범주가 A이면 model[T.A] 열을 제외하고 model[T.B]만 모형에 투입합니다.

model model[T.B]
A 0
B 1

수식 문자열에서 범주형 변수 표시

  • statsmodels 수식 문자열 내부에 범주형 변수가 포함되면 자동으로 더미 코딩 적용
"weight ~ length + ship_type"
  • 명시적으로 표시하려면 대문자 C()로 감쌈
"weight ~ length + C(ship_type)"
  • 범주형이지만 데이터에 숫자로 표시된 경우에는 명시적인 표시가 필요
    • 예: 1, 2, 3, 4, ...

범주형 선박 데이터 회귀 실습

🤖 AI 프롬프트
ship.xlsx를 판다스로 읽어 df을 만들고, ship_type의 범주별 선박 수를 확인해줘.
from statsmodels.formula.api import ols
import pandas as pd

df = pd.read_excel("ship.xlsx")

df["ship_type"].value_counts()
실행 결과
ship_type
Container    78
Tanker       22
Name: count, dtype: int64
  • Container: 78척
  • Tanker: 22척

Container를 기준범주로 두면 Tanker 여부를 나타내는 더미 변수 하나 생성.

ship_type C(ship_type)[T.Tanker]
Container 0
Tanker 1

길이를 통제하고 선박 종류에 따른 무게 차이를 추정.

🤖 AI 프롬프트
df에서 weight를 종속변수, length와 범주형 변수 ship_type을 독립변수로 하는 회귀모형을 statsmodels로 적합하고 요약표를 출력해줘. Container를 기준으로 길이를 통제한 Tanker의 무게 차이를 해석해줘.
print(ols("weight ~ length + C(ship_type)", data=df).fit().summary())
실행 결과
                            OLS Regression Results                            
==============================================================================
Dep. Variable:                 weight   R-squared:                       0.857
Model:                            OLS   Adj. R-squared:                  0.854
Method:                 Least Squares   F-statistic:                     290.8
Date:                Sun, 18 Oct 2026   Prob (F-statistic):           1.06e-41
Time:                        14:47:34   Log-Likelihood:                -976.14
No. Observations:                 100   AIC:                             1958.
Df Residuals:                      97   BIC:                             1966.
Df Model:                           2                                         
Covariance Type:            nonrobust                                         
==========================================================================================
                             coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------------------
Intercept               6112.0505   2372.618      2.576      0.012    1403.061    1.08e+04
C(ship_type)[T.Tanker]  1.818e+04   1029.349     17.664      0.000    1.61e+04    2.02e+04
length                   154.0133      9.141     16.849      0.000     135.871     172.155
==============================================================================
Omnibus:                        0.094   Durbin-Watson:                   2.395
Prob(Omnibus):                  0.954   Jarque-Bera (JB):                0.040
Skew:                           0.045   Prob(JB):                        0.980
Kurtosis:                       2.962   Cond. No.                     1.44e+03
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The condition number is large, 1.44e+03. This might indicate that there are
strong multicollinearity or other numerical problems.
  • R2: 0.857
  • 절편: 6112.0505
    • 길이가 0인 Container의 예측 무게이므로 물리적 해석에는 한계
  • length: 154.0133, p-value < 0.001
  • C(ship_type)[T.Tanker]: 약 18180, p-value < 0.001
    • 같은 길이에서 Tanker의 예측 무게가 Container보다 약 18180 큼
weight​=6112.05+154.01×length+18180×I(ship_type=Tanker)

퀴즈

문제 1 / 5맞음: 0힌트: 0틀림: 0채점중: 0남음: 5

회귀모형에서 범주형 독립변수를 그대로 일반 숫자 1, 2, 3으로 치환할 때의 문제는?

  • ○범주 사이에 동일한 간격과 선형 관계가 있다고 가정한다
  • ○범주의 순서 정보를 항상 제거한다
  • ○각 범주의 표본 수가 같다고 가정한다
  • ○마지막 범주가 항상 기준범주가 된다

퀴즈를 풀려면 대화형 기능을 불러와야 합니다.

Previous
다중공선성