다중 선형 회귀
다중 선형 회귀는 하나의 종속 변수(Y)와 둘 이상의 독립 변수(X1, X2, ..., Xn) 간의 선형 관계를 모델링하는 통계적 기법입니다. 다중 선형 회귀는 종속 변수와 독립 변수 간의 선형 관계를 활용하여 종속 변수의 예측 또는 설명을 위해 사용됩니다.
일반적으로 다중 선형 회귀의 모델 형태는 다음과 같습니다:
다중 선형 회귀 분석은 주어진 독립 변수들의 값과 종속 변수 사이의 관계를 통계적으로 모델링하는 것입니다. 회귀 계수 β1,β2,...,βn는 각 독립 변수들이 종속 변수에 미치는 영향을 나타냅니다. 이러한 회귀 계수들을 추정하기 위해 최소 제곱법(Least Squares Method)을 사용하여 모델을 훈련시킵니다. 최소 제곱법은 실제 값과 모델 예측 값 사이의 잔차(오차)를 최소화하는 회귀 계수를 찾는 방법입니다.
다중 선형 회귀 분석을 수행할 때에는 변수들 간의 상관관계, 다중공선성, 정규화 등을 고려하여 모델을 구축하고 평가해야 합니다. 이를 통해 변수의 중요성을 평가하고 모델의 안정성과 성능을 향상시킬 수 있습니다.
다중 선형 회귀 분석 절차
다중 선형 회귀는 하나의 종속 변수에 여러 개의 독립 변수가 영향을 미치는 분석 기법입니다. 주로 연속형 데이터를 다루는 데에 사용됩니다. 아래는 다중 선형 회귀 분석을 수행하기 위한 단계별 설명입니다.
0. Train, Test 데이터 분리
먼저, 사용할 데이터를 학습 데이터와 테스트 데이터로 분리합니다. 학습 데이터는 모델을 훈련시키는 데 사용되고, 테스트 데이터는 훈련된 모델의 성능을 평가하는 데 사용됩니다. 일반적으로 데이터의 70-80%를 학습에 사용하고 나머지를 테스트에 사용하는 것이 일반적입니다.
1. 상관관계 확인
독립 변수들과 종속 변수 간의 상관관계를 확인합니다. 이를 통해 각 독립 변수가 종속 변수와 어떤 관련성을 가지는지 파악할 수 있습니다. 상관계수를 계산하여 변수들 간의 선형 관계 정도를 파악할 수 있습니다.
상관관계 선택 기준
상관관계를 확인하여 변수를 선택하는 경우에는 몇 가지 주요한 접근 방법이 있습니다. 하지만 변수 선택 기준은 문제의 복잡성과 도메인 특성에 따라 달라질 수 있습니다. 일반적으로는 다음과 같은 기준들을 고려할 수 있습니다:
상관계수의 크기: 상관계수의 절대값이 크면 두 변수 간의 선형 관계가 강하다는 것을 나타냅니다. 일반적으로 0.7 이상의 상관계수는 높은 상관관계를 가진다고 간주될 수 있습니다.
도메인 지식: 해당 분야의 전문 지식을 활용하여 변수의 중요성을 평가할 수 있습니다. 도메인 전문가의 의견을 듣는 것이 유용할 수 있습니다.
모델 성능: 변수를 추가하거나 제거하여 모델을 학습하고 성능을 평가합니다. 변수를 추가했을 때 모델의 성능이 향상되거나, 반대로 제거했을 때 성능이 감소한다면 해당 변수의 중요성이 높을 수 있습니다.
변수 간 관계: 변수들 사이의 도메인적 논리나 사례 연구를 통해 어떤 변수가 종속 변수와 더 밀접한 관련이 있는지를 확인할 수 있습니다.
다중공선성: 다중공선성을 고려하여 상관관계가 강한 변수 중 하나를 선택하는 것이 모델의 안정성을 높일 수 있습니다.
통계적 유의성: 변수의 p-값을 확인하여 통계적으로 유의미한 관계를 가지는 변수를 선택할 수 있습니다. 하지만 이 기준만으로 선택하는 것은 조심해야 합니다. 큰 데이터셋에서는 미미한 통계적 유의성도 나타날 수 있기 때문입니다.
이러한 기준들을 종합적으로 고려하여 변수를 선택하면 됩니다. 변수 선택은 모델의 설명력과 복잡성 사이의 균형을 유지하며, 과적합(Overfitting)을 방지하기 위해 중요한 단계입니다.
2. 다중공선성 확인
다중공선성은 독립 변수들 간에 강한 선형 상관관계가 있는 경우 발생할 수 있는 문제입니다. 이는 모델의 안정성과 해석력을 저해시킬 수 있습니다. 다중공선성을 확인하여 변수들 간의 상관성 정도를 평가하고, 필요하다면 변수를 선택하거나 변형하여 다중공선성을 줄일 수 있습니다.
다중 공선성 기준
다중공선성을 판단하는 주요한 기준은 분산팽창계수(VIF, Variance Inflation Factor)입니다. VIF는 각 독립 변수가 다른 독립 변수들과 얼마나 강한 선형 상관관계를 가지는지를 측정하는 지표로, 높은 VIF 값은 다중공선성의 증거일 수 있습니다.
일반적으로 VIF 값이 다음과 같은 기준을 따릅니다:
VIF < 2: 다중공선성 걱정 없음
2 ≤ VIF < 5: 주의가 필요하지만 큰 문제는 없음
5 ≤ VIF: 다중공선성이 있을 가능성이 높으며, 조치가 필요함
VIF가 10 이상인 경우에는 다중공선성이 매우 높다고 판단됩니다.
VIF 값이 높다는 것은 해당 독립 변수가 다른 독립 변수들과 강한 상관관계를 가지고 있다는 의미입니다. 이런 경우에는 모델에서 변수를 제거하거나 변형하여 다중공선성을 줄일 수 있습니다. 주요한 방법으로는 다음과 같은 것들이 있습니다:
변수 제거: 상관관계가 높은 변수 중 하나를 제거하여 다중공선성을 줄일 수 있습니다.
변수 합치기: 두 변수를 합쳐서 하나의 변수로 대체할 수 있습니다.
주성분 분석(PCA): 변수들을 주성분으로 변환하여 다중공선성을 줄일 수 있습니다.
이러한 방법들을 사용하여 VIF 값을 낮추고, 모델의 안정성과 성능을 향상시킬 수 있습니다.
VIF 계산
VIF를 계산하는 함수는 통계 분석 라이브러리에 종종 포함되어 있습니다. 예를 들어, Python에서는 statsmodels 라이브러리를 사용하여 VIF를 계산할 수 있습니다. 아래는 statsmodels를 사용하는 예제 코드입니다.
import pandas as pd
from statsmodels.stats.outliers_influence import variance_inflation_factor
# 데이터 프레임 생성
data = {'X1': [1, 2, 3, 4, 5],
'X2': [2, 4, 6, 8, 10],
'X3': [3, 6, 9, 12, 15]}
df = pd.DataFrame(data)
# VIF 계산
X = df.values
vif = pd.DataFrame()
vif["Variable"] = df.columns
vif["VIF"] = [variance_inflation_factor(X, i) for i in range(X.shape[1])]
print(vif)
위 코드에서 X1, X2, X3는 각각 독립 변수의 열을 나타냅니다. variance_inflation_factor 함수는 각 독립 변수에 대한 VIF 값을 계산하여 반환합니다.
이외에도 다른 통계 라이브러리나 분석 도구에서도 VIF 계산을 지원하는 함수나 방법을 제공할 수 있습니다. 사용하고 있는 언어나 라이브러리에 따라 해당 문서나 자료를 참고하여 VIF를 계산하는 방법을 확인하시기 바랍니다.
VIF 분석을 수행하여 피처를 줄이는 것은 일반적으로 선형 회귀 모델과 같이 선형 관계를 가정하는 모델에서 더 유용합니다. VIF 분석은 주로 다중 공선성을 평가하고 선형 모델의 성능을 향상시키기 위한 목적으로 사용됩니다. 선형 회귀 모델은 변수 간의 선형 관계를 모델링하므로 공선성 문제가 더 두드러질 수 있습니다.
비선형 회귀 모델(예: 결정 트리, K-최근접 이웃, 랜덤 포레스트, 서포트 벡터 머신 등) 및 앙상블 모델(예: 과반수 투표, 배깅, 아다부스트)은 변수 간의 선형 관계를 가정하지 않으며, 데이터의 비선형 패턴을 더 잘 캡처할 수 있습니다. 따라서 이러한 모델은 다중 공선성에 대한 더 큰 내성을 가지고 있을 수 있습니다.
따라서 VIF 분석을 사용하여 피처를 줄이는 것이 이러한 비선형 회귀 모델 및 앙상블 모델에서 항상 성능적으로 좋을 것은 아닙니다. VIF 분석을 통해 제거된 변수는 선형 관계를 고려한 것이며, 이로 인해 비선형 패턴이 누락될 수 있습니다. 또한 변수 제거로 인해 정보 손실이 발생할 수 있습니다.
따라서 데이터와 문제에 따라서는 VIF 분석 대신 비선형 모델 또는 앙상블 모델을 사용하여 모델을 개선하는 것이 더 나을 수 있습니다. 최상의 접근 방식은 문제의 특성과 데이터에 따라 다르며, 실험 및 교차 검증을 통해 적절한 방법을 결정하는 것이 중요합니다.
3. 정규화(필수)
정규화는 변수들의 범위 차이로 인해 모델의 성능이나 안정성에 영향을 줄 수 있는 문제를 해결하기 위해 수행됩니다. 주요한 두 가지 정규화 방법은 표준화(Standardization)와 정규화(Normalization)입니다. 표준화는 각 변수의 평균을 0, 표준편차를 1로 만드는 과정을 말하며, 정규화는 각 변수의 값을 [0, 1] 또는 [-1, 1] 범위로 변환하는 과정을 말합니다. 이를 통해 변수 간의 범위 차이를 줄이고 모델의 수렴 속도와 안정성을 향상시킬 수 있습니다.
정규화의 이유
정규화는 다중 선형 회귀 분석에서 중요한 단계로, 변수들의 스케일을 조정하여 모델의 성능을 향상시키고 안정성을 높이는 데에 도움을 줍니다. 정규화의 주요 이유는 다음과 같습니다:
변수 간 스케일 차이 보상: 다중 선형 회귀 모델은 변수들 간의 가중치를 조정하여 예측값을 만들어냅니다. 하지만 변수들의 스케일이 크게 다르면, 가중치 조정이 불균형하게 이루어져 모델의 성능을 저하시킬 수 있습니다. 예를 들어, 변수 A의 범위가 0에서 1 사이이고 변수 B의 범위가 1000에서 2000 사이라면, 변수 B의 영향이 더 크게 반영될 수 있습니다.
수렴 속도 향상: 경사 하강법과 같은 최적화 알고리즘은 변수들의 스케일에 민감하게 작동할 수 있습니다. 스케일이 큰 변수는 학습 과정에서 큰 보폭으로 갱신될 가능성이 있어 수렴이 느려질 수 있습니다. 정규화를 통해 변수들의 스케일을 조정하면 수렴 속도가 향상될 수 있습니다.
모델 안정성 강화: 변수들의 스케일 차이가 크면 모델이 훈련 데이터에 과적합(Overfitting)될 가능성이 커집니다. 정규화를 통해 스케일을 조정하면 모델의 안정성을 높여 일반화 능력을 향상시킬 수 있습니다.
계수 해석의 용이성: 정규화를 적용하면 변수들의 스케일이 조정되므로, 모델의 계수를 해석할 때 변수들 간의 스케일 차이로 인한 혼란을 줄일 수 있습니다.
정규화의 대표적인 방법으로는 표준화(Standardization)와 정규화(Normalization)가 있습니다. 표준화는 변수의 평균을 0, 표준편차를 1로 조정하는 것이며, 정규화는 변수의 값을 [0, 1] 또는 [-1, 1] 범위로 조정하는 것입니다. 이러한 방법들을 사용하여 변수들의 스케일을 조정하면 모델의 성능을 향상시키고 안정성을 높일 수 있습니다.
** 범주형 데이터
범주형 데이터를 다중 선형 회귀 분석에 포함시킬 때에는 몇 가지 추가적인 고려 사항이 있습니다. 범주형 데이터는 숫자가 아닌 범주나 카테고리를 나타내는 변수들을 의미합니다. 이러한 변수들을 모델에 포함시키기 위해서는 몇 가지 접근 방법을 고려해야 합니다.
더미 변수화 (Dummy Coding)
범주형 변수를 모델에 포함시키기 위해서는 더미 변수를 생성하는 것이 일반적인 방법입니다. 더미 변수는 각 범주의 유무를 0과 1로 표현하는 변수입니다. 예를 들어, 성별이라는 범주형 변수가 있다면 "남성"을 나타내는 더미 변수와 "여성"을 나타내는 더미 변수를 생성할 수 있습니다.
One-Hot Encoding
One-Hot Encoding은 범주형 변수의 각 범주를 별도의 이진 변수로 변환하는 방법입니다. 각 범주에 해당하는 변수는 1을 가지고, 나머지 변수는 0을 가집니다. 이 방법은 범주 간의 순서나 관계가 없는 경우에 사용됩니다.
Label Encoding
Label Encoding은 범주형 변수의 각 범주를 숫자로 대체하는 방법입니다. 하지만 이 방법은 범주 간의 순서나 관계가 있는 경우에만 적용해야 합니다. 이 경우에는 모델이 범주 간의 순서를 이해할 수 있습니다.
Target Encoding
Target Encoding은 범주형 변수의 각 범주를 해당 범주의 평균 종속 변수 값을 사용하여 대체하는 방법입니다. 이 방법은 범주의 정보를 유지하면서 숫자로 변환할 수 있습니다.
Regularization
범주형 변수를 더미 변수로 변환하거나 다른 방법으로 처리할 때, 다중공선성 문제가 발생할 수 있습니다. 이런 경우에는 정규화 기법을 활용하여 모델을 안정화시키는 것이 중요합니다.
결론적으로, 범주형 데이터를 다중 선형 회귀에 포함시키기 위해서는 데이터의 특성과 문제의 복잡성을 고려하여 더미 변수화나 인코딩 방법을 선택해야 합니다. 어떤 방법을 선택하든지 범주형 데이터의 중요성을 적절하게 반영할 수 있도록 고려해야 합니다.
이렇게 위의 과정을 순서대로 진행하여 다중 선형 회귀 모델을 구축하고 평가할 수 있습니다.
해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.
'AI > Machine-Learning' 카테고리의 다른 글
[sklearn] train_test_split (0) | 2023.08.29 |
---|---|
RobustScaler (0) | 2023.08.29 |
결정계수 (Coefficient of Determination) (0) | 2023.08.28 |
[Scikit-learn] LinearRegression, SGDRegressor (0) | 2023.08.28 |
[NumPy] matmul(), dot() (0) | 2023.08.28 |