[업무 지식]/Statistics
[회귀 - 범주형] 다중선형회귀에서의 범주형 변수
에디터 윤슬
2024. 11. 12. 15:05
범주형 변수 종류
- 순서가 있는 범주형 변수
- 옷의 사이즈 (L, M, …), 수능 등급 (1등급, 2등급, ….)과 같이 범주형 변수라도 순서가 있는 변수에 해당한다
- 이런 경우 각 문자를 임의의 숫자로 변환해도 문제가 없다 (순서가 잘 반영될 수 있게 숫자로 변환)
- ex) XL → 3, L → 2, M → 1, S → 0
- 순서가 없는 범주형 변수
- 성별 (남,여), 지역 (부산, 대구, 대전, …) 과 같이 순서가 없는 변수에 해당한다
- 2개 밖에 없는 경우 임의의 숫자로 바로 변환해도 문제가 없지만
- 3개 이상인 경우에는 무조건 원-핫 인코딩(하나만 1이고 나머지는 0인 벡터)변환을 해주어야 한다 → pandas의 get_dummies를 활용하여 쉽게 구현 가능
- ex) 부산 = [1,0,0,0], 대전 = [0,1,0,0], 대구 = [0,0,1,0], 광주 = [0,0,0,1]
더미 변수로 변환 후 회귀 분석 수행
# 예시 데이터 생성
data = {'Gender': ['Male', 'Female', 'Female', 'Male', 'Male'],
'Experience': [5, 7, 10, 3, 8],
'Salary': [50, 60, 65, 40, 55]}
df = pd.DataFrame(data)
df
Gender: 성별 (범주형 변수).
Experience: 경력 (연속형 변수).
Salary: 급여 (종속 변수, 연속형).
# 범주형 변수 더미 변수로 변환
df = pd.get_dummies(df, drop_first=True)
df
pd.get_dummies(): 범주형 변수를 더미 변수(dummy variable)로 변환합니다. drop_first=True 옵션을 사용하여 첫 번째 범주(Female)를 기준으로 나머지 범주(Male)를 더미 변수로 변환합니다.
이 과정에서 Gender_Male이라는 새로운 열이 생성되며, 값이 1이면 남성(Male), 0이면 여성(Female)을 의미합니다.
# 독립 변수(X)와 종속 변수(Y) 설정
X = df[['Experience', 'Gender_Male']]
y = df['Salary']
# 단순선형회귀 모델 생성 및 훈련
model = LinearRegression()
model.fit(X, y)
# 예측
y_pred = model.predict(X)
# 회귀 계수 및 절편 출력
print("회귀 계수:", model.coef_)
print("절편:", model.intercept_)
회귀 계수: [ 2.57281553 -6.01941748]
절편: 40.63106796116504
이 결과는 다음과 같은 회귀식을 의미합니다:
Salary=(2.573⋅Experience)+(−6.019⋅Gender Male)+Intercept
즉:
경력(Experience)이 한 단위 증가할 때 급여(Salary)는 약 2.573 단위 증가합니다.
남성(Gender_Male=1)은 여성에 비해 급여가 약 6.019 단위 낮습니다.
전체 식은 다음과 같습니다:
Salary=(2.573⋅Experience)−(6.019⋅Gender Male)+(40.631)
from sklearn.metrics import mean_squared_error, r2_score
# 모델 평가
mse = mean_squared_error(y, y_pred)
r2 = r2_score(y, y_pred)
print("평균 제곱 오차(MSE):", mse)
print("결정 계수(R2):", r2)
평균 제곱 오차(MSE): 3.106796116504853
결정 계수(R2): 0.9580162686958804
MSE가 낮고 R²가 약 0.96으로 매우 높습니다. 이는 모델이 데이터를 잘 설명하고 있음을 의미합니다.