html
다중 선형 회귀 마스터하기: 범주형 변수 인코딩에 대한 포괄적인 가이드
목차
- 회귀 모델에서 범주형 데이터 이해하기
- 레이블 인코딩 vs. 원-핫 인코딩
- 파이썬과 주피터 노트북을 사용한 실습 시연
- 다중 선형 회귀에서의 더미 변수 트랩
- 회귀 모델을 위한 전처리 단계
- 모델 평가
- 결론
회귀 모델에서 범주형 데이터 이해하기
다중 선형 회귀는 종속 변수와 여러 독립 변수 간의 관계를 모델링하는 통계 기법입니다. 수치 데이터는 이러한 모델에서 직접 사용할 수 있지만, 범주형 데이터는 특성이나 레이블을 나타내므로 효과적으로 활용하기 위해 변환이 필요합니다.
인코딩이 중요한 이유
"성별" 또는 "지역"과 같은 범주형 변수는 비수치적이며 수치 형식으로 변환해야 합니다. 적절한 인코딩을 통해 머신 러닝 알고리즘이 이러한 변수를 정확하게 해석하여 편향이나 잘못된 패턴을 도입하지 않도록 합니다.
레이블 인코딩 vs. 원-핫 인코딩
범주형 변수를 다룰 때, 두 가지 주요 인코딩 기법이 사용됩니다:
- 레이블 인코딩: 각 범주를 고유한 정수로 변환합니다. 순서가 중요한 이진 범주 또는 서수 데이터에 적합합니다.
- 원-핫 인코딩: 각 범주에 대한 이진 열을 생성하여, 순서 관계를 효과적으로 제거하고 모델이 각 범주를 독립적으로 처리할 수 있게 합니다.
적절한 인코딩 방법을 선택하는 것은 모델 성능과 해석 가능성에 중요합니다.
파이썬과 주피터 노트북을 사용한 실습 시연
파이썬의 scikit-learn 라이브러리와 주피터 노트북을 사용하여 다중 선형 회귀 모델에서 레이블 인코딩과 원-핫 인코딩을 시연하는 실용적인 예제를 살펴보겠습니다.
라이브러리 가져오기
데이터 조작, 시각화, 머신 러닝에 필요한 라이브러리를 가져오는 것으로 시작합니다.
12345
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snssns.set()
데이터셋 로드 및 탐색
Kaggle의 보험 데이터셋을 사용합니다. 이 데이터셋은 개인의 인구 통계 및 보험 비용에 대한 정보를 포함하고 있습니다.
123456789
# Load the datasetdata = pd.read_csv('S07_datasets_13720_18513_insurance.csv') # Separate features and target variableX = data.iloc[:,:-1]Y = data.iloc[:,-1] # Display the first few rowsdata.head()
출력:
나이
성별
bmi
자녀
흡연 여부
지역
비용
19
여성
27.900
0
예
남서부
16884.92400
18
남성
33.770
1
아니오
남동부
1725.55230
28
남성
33.000
3
아니오
남동부
4449.46200
33
남성
22.705
0
아니오
북서부
21984.47061
32
남성
28.880
0
아니오
북서부
3866.85520
범주형 특성의 레이블 인코딩
레이블 인코딩은 이진 범주형 변수에 이상적입니다. 이 데이터셋에서 "성별"과 "흡연 여부"는 이진이며 레이블 인코딩에 적합합니다.
123456789
from sklearn import preprocessingle = preprocessing.LabelEncoder() # Encode 'sex' and 'smoker' columnsX['sex'] = le.fit_transform(X['sex'])X['smoker'] = le.fit_transform(X['smoker']) # Display the transformed featuresX
출력:
나이
성별
bmi
자녀
흡연 여부
지역
19
0
27.900
0
1
남서부
18
1
33.770
1
0
남동부
28
1
33.000
3
0
남동부
33
1
22.705
0
0
북서부
32
1
28.880
0
0
북서부
...
...
...
...
...
...
61
0
29.070
0
1
북서부
범주형 특성의 원-핫 인코딩
두 개 이상의 범주를 가진 범주형 변수의 경우, 원-핫 인코딩을 통해 서수 관계를 도입하지 않도록 합니다.
123456789
from sklearn.preprocessing import OneHotEncoderfrom sklearn.compose import ColumnTransformer # Apply One-Hot Encoding to the 'region' column (index 5)columnTransformer = ColumnTransformer([('encoder', OneHotEncoder(), [5])], remainder='passthrough')X = columnTransformer.fit_transform(X) # Display the transformed featuresprint(X)
출력:
1234567
[[ 0. 0. 0. ... 27.9 0. 1. ] [ 0. 0. 1. ... 33.77 1. 0. ] [ 0. 0. 1. ... 33. 3. 0. ] ... [ 0. 0. 1. ... 36.85 0. 0. ] [ 0. 0. 0. ... 25.8 0. 0. ] [ 0. 1. 0. ... 29.07 0. 1. ]]
다중 선형 회귀에서의 더미 변수 트랩
원-핫 인코딩을 사용할 때, 중복된 더미 변수로 인해 다중공선성이 발생할 수 있는 더미 변수 트랩에 주의해야 합니다. 이는 분산 추정치가 부풀려지고 신뢰할 수 없는 모델 계수를 초래할 수 있습니다.
트랩 이해하기
세 개의 범주를 가진 범주형 특성(예: 남서부, 북서부, 중앙)에서 세 개의 더미 변수가 생성되면, 회귀 모델에 모두 포함될 경우 완벽한 다중공선성이 발생합니다. 이는 하나의 변수가 다른 변수들로부터 정확하게 예측될 수 있어 회귀에 필요한 행렬의 역행렬이 실패하게 만듭니다.
해결책
더미 변수 트랩을 피하기 위해, 더미 변수 중 하나를 제거합니다. 이는 모델의 식별 가능성을 유지하고 다중공선성을 방지합니다.
123456
# Modify OneHotEncoder to drop one categorycolumnTransformer = ColumnTransformer( [("encoder", OneHotEncoder(drop='first'), [5])], remainder='passthrough')X = columnTransformer.fit_transform(X)
회귀 모델을 위한 전처리 단계
효과적인 전처리는 견고한 회귀 모델을 구축하는 데 필수적입니다. 다음은 필수 단계에 대한 요약입니다:
- 데이터 가져오기: pandas를 사용하여 데이터셋을 로드합니다.
- 결측치 처리: 대체 또는 제거를 통해 결측치를 처리합니다.
- 훈련-테스트 분할: 데이터를 훈련 세트와 테스트 세트로 나누어 모델 성능을 평가합니다.
- 특성 선택: scikit-learn과 같은 라이브러리가 이를 내부적으로 처리하지만, 특성 중요성을 이해하는 것이 유익할 수 있습니다.
- 범주형 변수 인코딩: 논의된 대로 적절하게 레이블 인코딩 또는 원-핫 인코딩을 사용합니다.
- 불균형 데이터 처리: 회귀에서는 특정 분포가 필요한 경우를 제외하고는 일반적으로 적용되지 않습니다.
- 특성 스케일링: 분류에서는 종종 필수적이지만, 회귀 모델에서는 선택 사항일 수 있습니다.
참고: 회귀 모델에서는 특성 스케일링이 일반적으로 선택 사항입니다. 스케일링은 때때로 계수의 해석 가능성을 흐릴 수 있기 때문입니다.
모델 평가
전처리 후, 회귀 모델을 구축하고 평가할 시간입니다.
선형 모델 구축
12345
from sklearn.linear_model import LinearRegression # Initialize and train the modelmodel = LinearRegression()model.fit(X_train, y_train)
예측하기
12
# Predict on the test sety_pred = model.predict(X_test)
실제 값과 예측 값 비교
123456
# Create a comparison DataFramecomparison = pd.DataFrame({ 'Actual': y_test, 'Predicted': y_pred})comparison.head()
출력:
실제
예측
1646.4297
4383.6809
11353.2276
12885.0389
8798.5930
12589.2165
10381.4787
13286.2292
2103.0800
544.7283
R² 점수로 평가하기
R² 점수는 독립 변수로부터 예측 가능한 종속 변수의 분산 비율을 측정합니다.
12345
from sklearn.metrics import r2_score # Calculate R² scorer2 = r2_score(y_test, y_pred)print(f"R² Score: {r2}")
출력:
1
R² Score: 0.7623311844057112
약 0.76의 R² 점수는 보험 비용 변동성의 76%가 모델에 의해 설명될 수 있음을 나타내며, 이는 많은 응용 분야에서 존경할 만한 성능입니다.
결론
다중 선형 회귀를 마스터하는 것은 단순히 데이터를 모델에 맞추는 것 이상의 것을 포함합니다. 레이블 인코딩 및 원-핫 인코딩과 같은 기법을 사용하여 범주형 변수를 적절하게 인코딩하고, 더미 변수 트랩과 같은 문제점을 인식하며, 정확하고 신뢰할 수 있는 모델을 구축하는 데 필수적입니다. 전처리 단계를 따르고 파이썬의 강력한 라이브러리를 활용함으로써, 회귀 분석의 복잡성을 효과적으로 관리하고 데이터로부터 의미 있는 통찰을 도출할 수 있습니다.
자주 묻는 질문 (FAQs)
1. 레이블 인코딩과 원-핫 인코딩의 차이점은 무엇인가요?
레이블 인코딩은 각 범주에 고유한 정수를 할당하여 서수 관계를 유지합니다. 이는 이진 또는 서수 범주형 변수에 이상적입니다. 원-핫 인코딩은 각 범주에 대해 이진 열을 생성하여 어떠한 서수 관계도 제거하고 알고리즘이 내재된 순서를 가정하지 못하게 합니다.
2. 회귀 모델에서 특성 스케일링이 선택 사항인 이유는 무엇인가요?
특정 알고리즘의 성능에 크게 영향을 미칠 수 있는 분류 모델과 달리, 회귀 모델은 종종 다양한 특성 스케일을 더욱 유연하게 처리합니다. 그러나, 특히 정규화가 포함된 경우에는 스케일링이 여전히 유익할 수 있습니다.
3. 더미 변수 트랩을 어떻게 피할 수 있나요?
더미 변수 트랩을 피하기 위해, 원-핫 인코딩 후 각 범주형 변수 세트에서 하나의 더미 변수를 제거합니다. 이는 다중공선성을 제거하고 보다 안정적인 모델을 보장합니다.
4. 회귀 모델에서 R² 점수가 의미하는 바는 무엇인가요?
R² 점수는 독립 변수로부터 예측 가능한 종속 변수의 분산 비율을 측정합니다. 높은 R²는 모델이 데이터에 잘 맞음을 나타냅니다.
5. 레이블 인코딩과 원-핫 인코딩 외에 다른 인코딩 기법을 사용할 수 있나요?
네, 타겟 인코딩, 빈도 인코딩, 이진 인코딩 등과 같은 다른 인코딩 기법도 사용할 수 있으며, 이는 데이터의 맥락과 특성에 따라 각각의 장점이 있습니다.
다중 선형 회귀의 여정을 시작하면 연속적인 결과를 분석하고 예측할 수 있는 강력한 도구를 갖추게 됩니다. 데이터 인코딩 기법을 마스터하고 회귀 모델의 기저 메커니즘을 이해함으로써, 통찰력 있고 영향력 있는 데이터 기반 결정을 내릴 수 있는 길을 닦을 수 있습니다.