안녕하세요 윤도현입니다. 이번 글에서는 머신러닝 모델 중 선형 모델인 선형 회귀(Linear Regression)에 대해 살펴보도록 하겠습니다. 선형회귀의 개념부터 주의사항, 마지막으로 선형 모델의 한계를 개선한 모델인 Ridge, Lasso, ElasticNet까지 알아보겠습니다.
선형 회귀란 x라는 독립변수에 대한 y라는 종속변수의 관계를 선형적으로 학습하는 방법을 말합니다. 예를들어, 독립변수 x가 한개인 경우(y= b0 + b1*x1)를 단순 선형회귀라고 하고, x가 여러개인 경우(y=b0 + b1x1 + b2x2 +⋯ + bnxn)를 다중 선형 회귀라고 부릅니다.
2. 선형 회귀의 원리
선형 회귀는 x와 y의 관계를 선형적으로 잘 나타내는 가중치를 찾기 위해 주로 최소자승법(Ordinary Least Square)를 사용합니다. 또한 머신러닝에서는 경사 하강법(Gradient Descent)을 사용해서 순전파 결과 계산된 손실함수를 최소화하는 방향으로 역전파하며 가중치를 찾아나가기도 합니다.
2.1 최소 자승법(Ordinary Least Square)
최소 자승법은 잔차 제곱함을 최소화하는 가중치를 찾는 방법입니다. (=종속 변수(y)와 예측 값(y^)의 차이(=잔차)의 제곱 합(Resudual Sum of Squared)을 최소화하는 가중치를 찾는 방법)
선형 회귀에서 예측값은 위와 같이 나타낼 수 있고, 여기서 w는 가중치 벡터, X는 설계 행렬(design matrix)를 뜻합니다.
이때, 잔차(e)는 실제값에서 예측값을 뺀 값을 말합니다.
우리가 고하고자 하는 잔차 제곱의 합(Residuals Sum of Square)는 각 요소의 잔차를 제곱하여 모두 더한 값입니다. (잔차 행렬의 내적은 잔차 벡터와 자기 자신을 내적한 것이기 때문에 우리가 구하는 잔차 제곱합과 동일합니다) 식을 전개하면 다음과 같습니다.
위 수식에서 우리는 L을 최소화하는 w를 얻어야 합니다. 수학적으로 이런 경우 미분값이 0이 되는 지점을 최소값을 가지는 w임을 배웠고,
미분을 한 위의 수식이 0이 되는 w 값을 아래와 같이 얻을 수 있습니다.
2.2 경사하강법 (Gradient Decent)
이 부분은 간단하므로 생략하도록 하겠습니다.
2.3 최소자승법 vs 경사하강법
보통 최소자승법의 경우 데이터의 크기가 작거나, 중간 크기일 때 효과적입니다. 최소자승법은 행렬 연산으로 한번에 최적해를 얻는 방식이기 때문에 반복 없이 직접 해를 찾을 수 있습니다. 하지만 데이터의 크기가 매우 클때나 공선성과 같은 문제가 있을 경우 최소자승법은 해를 구할 수 없거나 불완전한 해(w*)를 얻게됩니다. 그런 경우, 경사하강법을 사용할 수 있습니다. 경사하강법은 반복적으로 손실함수를 최소화하도록 가중치를 업데이트하기 때문에 매우 큰 데이터셋에서도 최적해를 잘 찾아나간다는 장점이 있습니다.
공선성과 다중공선성
공선성: 여러 개의 독립 변수 중 둘 이상이 서로 선형적으로 강하게 연관되어 있는 상태를 말합니다. x2 ≈ 3x1+5 와 같이 독립 변수끼리 서로 거의 같은 정보를 담고 있는 경우를 말합니다.
다중 공선성: 두개 이상의 독립변수들이 서로 강한 선형 관계를 가질 때 발생하는 문제를 말합니다.
x1(면적)
x2(방 개수)
y(집값)
100
3
1억
200
6
2억
300
9
3억
여기서 x1(면적)과 x2(방 개수)는 서로 완전한 비례 관계입니다. -> 공선성 발생
공선성이 생기면 발생하는 문제 1. 모델 예측은 되는데 해석이 어려움: 어떤 변수가 얼만큼 중요한 변수인지 판단이 안됨 2. 회귀 계수의 분산이 커짐: 작은 데이터 변화에도 회귀 계수가 크게 바뀜 -> 불안정한 모델 3. 정확한 회귀 계수를 추정하기 어려움: XTX 가 거의 특이행렬(singular matrix)이 됨 → 역행렬 불가능 or 불안정
여기서 XTX를 구할 수 없음!!
공선성을 해결하는 방법 1. 불필요한 feature 제거: 상관관계가 높은 feature들 중 하나만 남기기 2. 주성분 분석(PCA): 차원을 낮춰 새로운 변수 만들기 3. Ridge Regression: L2 정규화를 통해 XTX + λI 형태로 안정화
Ri2R_i^2Ri2: 해당 feature를 다른 모든 feature로 회귀시켰을 때의 결정계수
예를들어, x15(몸통 두께)의 VIF를 구하고 싶다고 가정해보면, x15를 종속변수로 생각하고 x1,x2...x14를 독립변수로 놓고 회귀시켰을 때의 결정계수를 VIF라고 합니다.
from statsmodels.stats.outliers_influence import variance_inflation_factor
from statsmodels.tools.tools import add_constant
import pandas as pd
X = add_constant(df.iloc[:, :-1]) # 상수항 추가
vif_df = pd.DataFrame()
vif_df["feature"] = X.columns
vif_df["VIF"] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
print(vif_df)
(c) LinearRegression().coef_값 확인하기
최소자승법으로 학습했을 때 계수들이 너무 크거나 +/- 튀는 경우 공선성이 발생했을 가능성이 있습니다.
Feature 하나만 제거해도 예측 성능이 크게 변할 때 공선성을 의심해볼 수 있습니다.
3. 선형 회귀의 결과 해석
선형 회귀의 결과해석은 보통 회귀계수와 결정계수를 통해 진행합니다. 다중 선형 회귀(독립변수 2개)를 예로 들어보겠습니다.
from statsmodels.formula.api import ols
model = ols('체중 ~ 몸통길이 + 지느러미길이', data=df).fit()
model.summary()
이제 차근차근 해석해보겠습니다. 이 다중 선형회귀 모델은 몸통길이가 1 증가할때마다 체중이 31.0537(회귀계수1)만큼 증가하고 지느러미길이가 1 증가할때마다 체중이 9.3161(회귀계수2)만큼 증가합니다. 이때, R-squared(결정계수)는 회귀 모형 내에서 독립변수들이 설명할 수 있는 종속변수의 변동성을 뜻하고, 회귀 모델이 얼마나 데이터에 적합한지를 뜻합니다. 현재 R-squared =1 과 같이 완벽하게 적합되었습니다. 이렇게 완벽하게 적합된 모델은 대부분 문제가 있습니다. 의심해볼 수 있는 원인은 다음과 같습니다.
공선성(feature간 강한 선형관계)
너무 적은 샘플 수(10개)
데이터가 "거의 완벽하게 선형"일 경우
제가 사용한 데이터는 너무 적은 샘플이고, "거의 완벽하게 선형"이기 때문에 다중공선성 문제가 발생한것으로 생각됩니다.
공선성은 Cond. No(condition number)를 통해 확인할 수 있습니다. 이 지표는 독립변수끼리 너무 비슷하지 않은지, 역행렬 계산이 안정적인지를 알려주는 지표입니다. 저는 3.31e+16 과 같이 매우 큰 값이 나왔으므로 이 모델은 공선성이 발생한 모델이라고 할 수 있습니다.
4. 선형 회귀 모델을 학습할 때 주의할 점
선형 회귀 모델을 학습할 때 주의해야할 점이 몇가지 있습니다. (a) 이상치 아래 그래프처럼 데이터에 이상치가 존재하면 이상치를 모델이 잘 설명하기 위해 선을 과도하게 올리고 모든 데이터 포인트들을 잘 설명하지 못하게 됩니다. 반대로 이상치가 없으면 대체적으로 모든 데이터 포인트를 잘 설명하는 그래프가 생성됩니다.
(b) 선형성 선형 회귀 모델은 독립변수 x와 종속변수 y 사이의 관계를 선형적으로 모델링하는 것이기 때문에 반드시 이 둘의 관계가 선형적이어야 합니다.
선형성을 만족하는지 여부판별은 이렇게 산점도를 그려서 확인할 수 있습니다.
하지만 왼쪽 그래프처럼 x와 y의 관계가 선형이 아닌 지수함수와 같은 양상을 띈다면 로그 변환, 제곱근 변환 등을 적용해서 비선형성을 줄이거나 해당 변수를 제거해야합니다.
(c) 독립성 독립변수(x)들간의 상관관계가 존재하지 않는다고 가정합니다. 앞서 설명한 다중공선성은 독립변수들 간에 상관관계가 매우 강한 경우를 말합니다. 다중공선성이 문제가 되는 이유는 회귀계수의 해석이나 어떤 독립변수가 모델에 얼만큼 영향을 끼치는지 해석하기가 어려워지기 때문입니다.
(d) 정규성 정규성을 만족한다는 것은 선형회귀 분석에서 오차(잔차)의 분포가 평균이 0인 정규분포를 따른다는 말입니다. 만약 정규성에 어긋난다면 다음과 같은 문제가 발생합니다.
신뢰 구간 및 가설 검정의 부정확성: 잔차가 정규분포를 따르지 않을 경우, 회귀 모델의 계수들에 대한 신뢰 구간과 가설 검정 결과가 부정확해지고 이로 인해 잘못된 해석이 이루어질 수 있습니다.
예측의 부정확성: 잔차의 분포가 비정규적일 경우, 새로운 데이터에 대한 예측의 정확성이 떨어질 수 있습니다. 이는 모델의 예측 능력을 저하시킬 수 있습니다.
모델이 정규성을 띄는지 확인하기 위해 일반적으로 Shapiro-Wilk Test 혹은 Q-Q (quantile-quantile) 그래프을 통해 확인합니다.
(e) 등분산성 등분산성을 만족한다는 말은 선형 회귀 분석에서 모든 예측값(y^)에 대한 오차(잔차)의 분산이 동일하다는 것을 뜻합니다. 이러한 등분산성은 잔차-예측값 산점도를 그려 확인할 수 있습니다.
세번째 그림처럼 잔차의 분산이 일정해야 등분산성을 만족하는 모델입니다. 만약 첫번째, 두번째 그림처럼 등분산성을 띄지 않는다면 로그, 루트를 취하거나 제곱항 등을 추가해서 해결할 수 있습니다.
지금까지 선형회귀 모델이 제대로 동작하기 위한 전제조건을 설명드렸습니다. 이를 그림으로 요약하면 다음과 같습니다.