범주가 3개 이상인 독립변수
from statsmodels.formula.api import ols
import pandas as pd
df_ship = pd.read_excel("ship.xlsx")
범주가 3개 이상인 경우의 더미 변환
- 범주가 3개인 경우
- 예:
engine_type:Diesel,Hybrid,LNG
- 예:
- 문자열 범주의 기본 순서에서
Diesel이 기준범주로 지정됨 - 범주의 수 K보다 1개 적은 K−1개의 더미 변수 생성
- 표에 출력되는 회귀계수는 기준범주(
Diesel) 대비 각 범주의 차이를 의미
| engine_type | engine_type[T.Hybrid] | engine_type[T.LNG] |
|---|---|---|
| Diesel | 0 | 0 |
| Hybrid | 1 | 0 |
| LNG | 0 | 1 |
범주가 3개인 변수의 회귀 실습
- 3개 범주의
engine_type(Diesel,Hybrid,LNG) 변수를 투입하여 분석 statsmodels가 자동으로 2개의 더미 변수를 만들고Diesel을 기준으로 계수를 산출
🤖 AI 프롬프트
df_ship에서 engine_type의 범주별 선박 수를 확인하고, weight를 종속변수로 하는 회귀모형에 engine_type을 범주형 독립변수로 넣어 요약표를 출력해줘. 기본 기준범주 Diesel에 대한 계수 차이를 해석해줘.
df_ship["engine_type"].value_counts()
실행 결과
engine_type
Diesel 47
LNG 28
Hybrid 25
Name: count, dtype: int64
Diesel: 47척LNG: 28척Hybrid: 25척
print(ols("weight ~ engine_type", data=df_ship).fit().summary())
실행 결과
OLS Regression Results
==============================================================================
Dep. Variable: weight R-squared: 0.029
Model: OLS Adj. R-squared: 0.009
Method: Least Squares F-statistic: 1.445
Date: Sun, 18 Oct 2026 Prob (F-statistic): 0.241
Time: 14:47:34 Log-Likelihood: -1071.9
No. Observations: 100 AIC: 2150.
Df Residuals: 97 BIC: 2158.
Df Model: 2
Covariance Type: nonrobust
=========================================================================================
coef std err t P>|t| [0.025 0.975]
-----------------------------------------------------------------------------------------
Intercept 4.736e+04 1620.692 29.223 0.000 4.41e+04 5.06e+04
engine_type[T.Hybrid] 4610.2979 2750.406 1.676 0.097 -848.496 1.01e+04
engine_type[T.LNG] 2302.5836 2652.480 0.868 0.387 -2961.855 7567.022
==============================================================================
Omnibus: 5.974 Durbin-Watson: 2.014
Prob(Omnibus): 0.050 Jarque-Bera (JB): 5.580
Skew: 0.571 Prob(JB): 0.0614
Kurtosis: 3.184 Cond. No. 3.28
==============================================================================
Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
- R2:
0.029 - 모형 전체 p-value:
0.241 - 절편: 약
47360- 기준범주
Diesel의 평균 무게
- 기준범주
engine_type[T.Hybrid]:4610.2979, p-value0.097engine_type[T.LNG]:2302.5836, p-value0.387- 두 계수 모두 5% 유의수준에서 유의하지 않음
기준 범주 바꾸기
C(변수명, Treatment("기준범주"))형식으로 기준범주를 직접 지정
🤖 AI 프롬프트
df_ship에서 weight를 종속변수, engine_type을 범주형 독립변수로 하는 회귀모형을 적합해줘. C()와 Treatment()로 LNG를 기준범주로 지정하고 요약표를 출력해줘.
print(ols(
'weight ~ C(engine_type, Treatment("LNG"))',
data=df_ship,
).fit().summary())
실행 결과
OLS Regression Results
==============================================================================
Dep. Variable: weight R-squared: 0.029
Model: OLS Adj. R-squared: 0.009
Method: Least Squares F-statistic: 1.445
Date: Sun, 18 Oct 2026 Prob (F-statistic): 0.241
Time: 14:47:34 Log-Likelihood: -1071.9
No. Observations: 100 AIC: 2150.
Df Residuals: 97 BIC: 2158.
Df Model: 2
Covariance Type: nonrobust
==============================================================================================================
coef std err t P>|t| [0.025 0.975]
--------------------------------------------------------------------------------------------------------------
Intercept 4.966e+04 2099.764 23.652 0.000 4.55e+04 5.38e+04
C(engine_type, Treatment("LNG"))[T.Diesel] -2302.5836 2652.480 -0.868 0.387 -7567.022 2961.855
C(engine_type, Treatment("LNG"))[T.Hybrid] 2307.7143 3057.302 0.755 0.452 -3760.184 8375.613
==============================================================================
Omnibus: 5.974 Durbin-Watson: 2.014
Prob(Omnibus): 0.050 Jarque-Bera (JB): 5.580
Skew: 0.571 Prob(JB): 0.0614
Kurtosis: 3.184 Cond. No. 4.14
==============================================================================
Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
- 절편: 약
49660- 기준범주
LNG의 평균 무게
- 기준범주
Diesel:-2302.5836, p-value0.387Hybrid:2307.7143, p-value0.452- 기준범주를 바꿔도 범주별 예측값과 R2는 동일
퀴즈
engine_type의 범주가 Diesel, Hybrid, LNG이고 Diesel이 기준범주일 때 생성되는 더미 변수로 적절한 것은?
퀴즈를 풀려면 대화형 기능을 불러와야 합니다.