본문 바로가기
Study/ML&DL

10. 회귀 분석으로 연속적 타깃 변수 예측

by GodKim 2020. 3. 17.

이 글은 [머신러닝 교과서 with 파이썬, 사이킷런, 텐서프로]를 읽고 정리한 글이다.


10.1 선형 회귀

 선형 회귀란? 지도 학습의 하위 카테고리로 하나 이상의 특성과 연속적인 타깃 변수 사이의 관계를 모델링하는 것이 목적이다. 즉, 샘플 포인터에 가장 잘 맞는 직선을 찾는 것이다.

 

10.1.1 단변량 선형 회귀 (Univariate linear regression)

 하나의 특성(설명 변수(explanatory variable) x)과 연속적인 타깃(응답 변수(response variable) y) 사이의 관계를 모델링 하는 것을 단변량 선형 회귀이다. 

선형 회귀

 그림에서 각 주황 점은 샘플 포인트를 뜻하며, 샘플 포인트를 가장 잘 맞추어 통과하는 직선을 회귀 직선(regression line)이라고 한다. 회귀 직선과 샘플포인트 사이의 직선 거리를 오프셋(offset) 혹은 예측 오차인 잔차(residual)이라고 한다. 

 

10.1.2 다변량 선형 회귀(Multivariate linear regression)

 

 실제 데이터는 대부분 특서이 하나가 아닌 여러 개이다. 이에 따라 선형 회귀 모델의 특성 또한 여러개인 것이 일반적이다. 이를 다변량 선형 회귀라고 한다. 다변량 선형 회귀 모델의 그래프는 n차원이기에 3차원 산점도만 되어도 이해하기 어렵다. 따라서 차후 볼 예제들은 단변량 회귀를 사용하는 그래프를 주로 다룰 예정이다. 하지만 단변량과 다변량 회귀는 같은 개념과 평가 기법을 사용하기에 코드들은 두 종류 회귀 모델에 모두 호환 된다. 

 

10.2 주택 데이터셋 탐색

 https://archive.ics.uci.edu/ml/machine-learning-databases/housing에 있는 주택 데이터셋을 다운받고 전처리를 해준다. 

 탐색적 데이터 분석(Exploratort Data Analysis, EDA)는 모델을 훈련하기 앞서 가장 먼저 수행되어야 할 중요한 단계이다. 파이썬의 Seaborn 라이브러리의 pairplot 이용하여 각 특성관의 상관관계를 산점도 행렬로 시각화해서 살펴보면 다음과 같은 그림이 나타난다.

 이렇게 산점도 행렬을 그리면 데이터가 어떻게 분포되어 있는지, 이상치를 포함하고 있는지 빠르게 확인 가능하다. 예를 들어, RM과 MEDV를 보면 선형적인 관계가 있다는 것을 알 수 있다. 

 

10.2.3 상관관계 행렬(correlation matrix)을 사용한 분석

상관관계 행렬은 공분산 행렬(2020/02/10 - [Develop/ML] - 5. 차원 축소를 사용한 데이터 압축)과 밀접한 관계가 있다. 직관적으로 보면 상관관계 행렬을 스케일이 조정된 공분산 행렬로 생각할 수 있는 것이다. 여기서 특성이 표준화되어 있으면 상관관계 행렬과 공분산 행렬은 같다.

 상관관계 행렬은 피어슨 상관관계 계수(Pearson product-moment correlation coefficient)를 포함한 정방 행렬이다. 이 계수는 특성 사이의 선형 의존성을 측정하며 범위는 -1~1이다. 즉, r=1이면 완벽한 양의 상관관계, -1이면 완벽한 음의 상관관계며, 0이면 아무런 상관이 없는 것이다. 이를 바탕으로 Seaborn의 heatmap 함수를 사용해서 상관관계 행렬을 보면 아래의 그림과 같다.

 이 그래프를 살펴보면 타깃 변수 MEDV와 LSTAT과의 상관관계가 높다(-0.74). 위의 산점도 그래프와 비교해서 보면 확실히 두 변수의 관계는 비선형적이다. 반면에 RM과 MEDV의 상관관계는 0.7로 비교적 높다. 산점도 그래프 역시 선형 관계를 가지고 있다는 것을 알 수 있다.

 

10.3 최소 제곱 선형 회귀 모델 구현

10.3.1 경사 하강법으로 회귀 모델의 파라미터 구하기

이전에 구현한 아달린(Adaline)에서의 비용 함수는 제곱 오차합으로 최소 제곱법(Ordinary Least Squares, OLS)에서 사용할 비용 함수와 같다. 여기서 최소 제곱합(선형 최소 제곱법이라고도 한다)은 잔차를 최소화하는 선형 회귀 직선 모델 파라미터를 추정하는 방법이다.

 방법은 이전에 구현한 아달린의 경사 하강법 코드에서 단위 계단 함수를 제거하여 첫 번째 선형 회귀 모델을 구현하는 것이다. 

에포크 함수를 비용 그래프로 그려보면 다섯 번째 에포크에서 수렴하는 것을 확인할 수 있다. 그 다음 이 선형 회귀 모델이 훈련 데이터에 얼마나 잘 맞는지 그래프로 그려보면 아래와 같다.

 이 그래프는 방 개수가 늘어남에 따라 주택 가격이 증가하는 일반적인 경향을 보여준다. 하지만 방 개수가 주택 가격을 잘 설명하지 못하는 경우도 많다는 것 또한 보여준다. 그래프를 살펴보면 y=3인 부분에 데이터 포인터가 늘어져 있는 것을 확인할 수 있다. 이는 이 지점에서 초과되는 가격은 잘라 냈다는 뜻이다. 

 예측된 출력 값을 원본 스케일로 돌려 계산하면 '다섯 개의 방을 가진 주택 가격을 예측하면 1만 840달러로 측정한다'라는 것을 확인 할 수 있다. 표준화 처리된 변수를 사용할 때는 절편이 항상 0이기에 업데이트를 할 필요가 없다.

 

10.3.2 사이킷런으로 회귀 모델의 가중치 설정

 

사이킷런의 LinearRegression을 표준화하지 않은 RM과 MEDV 변수에 훈련 시키면 모델의 가중치가 달라진다. 그래프는 아래와 같다.

 그래프를 보면 직접 만든 경사 하강법 구현과 거의 비슷하다는 것을 알 수 있다.

 

10.4 RANSAC을 사용하여 안정된 회귀 모델 훈련

 

선형 회귀 모델은 이상치(outlier)에 크게 영향을 받는다. 이상치를 제거하는 방식 대신에 RANSAC(RANdom SAmple Consensus) 알고리즘에 대해 알아보자. 이 알고리즘의 방식은 다음과 같다. 

  1.  랜덤하게 일부 샘플을 정상치로 선택하여 모델을 훈련한다.
  2. 훈련된 모델에서 다른 모든 포인트를 테스트한다. 이 중 사용자가 입력한 허용 오차 안에 속한 포인트를 정상치에 추가한다.
  3. 추가된 모든 정상치를 사용하여 모델을 재훈련한다.
  4. 훈련된 모델과 정상치 간의 오차를 추정한다.
  5. 성능이 사용자가 지정한 임계값에 도달하거나 지정된 반복 횟수에 도달하면 멈춘다. 아니면 1번으로 돌아간다.

 사이킷런에서 정상치 임계 값의 기본값은 중앙값 절대 편차(Median Absolute Deviation, MAD) 추정이다. 적절한 정상치 임계값은 문제마다 다르기에 적절한 임계치를 직접 찾아서 설정해야하는 것이 RANSAC의 단점 중 하나이다. RANSAC로 학습한 선형 모델의 산점도를 그려보면 아래와 같다.

이 모델의 기울기와 절편 역시 각각(10.735, -44.089)로 이전에 RANSAC을 사용하지 않고 구현한 기울기와 절편(9.102, -34.671)과 조금 다른 것을 알 수 있다. RANSAC이 데이터셋에 있는 이상치에 잠재적인 영향을 감소시켰다는 것을 알 수 있다. 하지만 이 영향이 예측 성능에 있어서 긍정적인 역할을 끼쳤는지 까지는 알 수 없다.

 

10.5 선현 회귀 모델의 성능 평가

 

 이 장에서는 데이터셋에 있는 모든 변수를 사용하여 다변량 회귀 모델을 훈련하여 성능을 평가할 것이다.

 

잔차 그래프(resiual plot) 

 

 특성이 여러개이기에 2차원 그래프로 선형 회귀 직선을 그릴 수 없다. 따라서 잔차 대 예측 값 그래프를 총하여 회귀 모델을 조사할 예정이다. 잔차 그래프(residual plot)은 회귀 모델을 살펴볼때 자주 사용되는 그래프이다. 그래프를 그려보면 아래와 같이 된다.

 예측이 완벽하면 잔차는 0이된다. 이는 실제로는 일어날 수 없는 일이다. 좋은 회귀 모델이면 오차가 랜덤하게 분포되고 잔차는 중아선 주변으로 랜덤하게 흩어져야한다. 

 

평균 제곱 오차(Mean Squared Error, MSE)

 

 이는 모델 성능을 정량적으로 측정하는 또다른 방법이다. MSE 값은 선형 회귀 모델을 훈련하기 위해 최소화하는 제곱 오차합(SSE)의 평균이다. MSE는 그리드 서치와 교차 검증에서 매개변수를 튜닝하거나 여러 다른 회귀 모델을 비교할 때 유용하다. MSE를 계산해보면 훈련 세트의 MSE가 19.96이고 테스트 세트는 27.20으로 모델이 과대 적합 되었다는 것을 알 수 있다. 

 

결정 계수(coefficient of determination, R^2)

 

 결정 계수는 모델 성능을 더 잘 해석하기 위해 MSE의 표준화된 버전으로 생각하면 된다. 즉, 결정 계수는 타깃이 분산에서 모델을 잡아낸 비율이다. 훈련 세트의 결정계수는 0에서 1사이의 값이고 테스트 세트에서는 음수가 될 수 있다. 결정 계수가 1이고 MSE가 0인 모델은 데이터를 완벽히 학습한 것이다. 결정 계수를 계산해보면 훈련 세트에서 0.765로 나쁘진 않지만, 테스트 세트에서 0.673으로 낮은 값을 보여준다. 이는 위에서 나온 결과처럼 과대 적합으로 인해 나타나는 결과 값이다. 

 

10.6 회귀에 규제 적용

 

 규제를 적용하는 것은 과대적합 문제를 해결하는 방법 중 하나이다. 복잡도에 대한 페널티를 부과하여 모델의 파라미터 값을 감소시키는 것이다. 선형 회귀 규제에는 3 가지 방법이 있다. 

  • 릿지 회귀(Ridge Regression)
  • 라쏘(Least Absolute Shrinkage and Selection Operator, LASSO)
  • 엘라스틱 넷(Elastic Net)

릿지 회귀

릿지 회귀는 단순히 최소 제곱 비용 함수에 가중치의 제곱합을 추가한 L2규제 모델이다. 여기서 절편은 모델의 복잡도와 관계 없기에 규제하지 않는다.

 

라쏘

규제 강도에 따라서 어떤 가중치는 0이 될 수도 있다. 이때 사용하는 것이 라쏘 규제이다. 라쏘는 특성 선택에 제한이 있는 한계점을 지니고 있다. 

 

엘라스틱 넷

엘라스틱 넷은 희소한 모델을 만들기 위한 L1 페널티와 라쏘의 한계를 극복하기 위한 L2 페널티를 가진다. 이는 릿지 회귀와 라쏘의 절충안으로 볼 수 있다. 여기서 l1_ratio를 1.0으로 설정해주면 엘라스틱 넷은 라쏘 회귀와 동일해진다.

 

이 모델들은 모두 사이킷런에 구현되어있으며 하이퍼파라미터를 사용하여 규제 강도를 지정하는 것 이외에는 일반적인 회귀 모델 사용과 비슷하다.

 

10.7 선형 회귀 모델을 다항 회귀로 변환

 특성 간의 관계가 선형이 아닐 경우에 대처할 수 있는 방안은 다항식을 추가한 다항 회귀 모델을 사용하는 것이다. 다항 회귀를 사용하여 비선형 관계를 모델링하지만 선형 회귀 가중치로 인해 여전히 다변량 선형 회귀 모델로 볼 수 있다.

 사이킷런의 PolynomialFeatures 변환기를 사용하여 n차 항을 추가 할 수 있다. 이를 사용하여 주택 데이터셋의 비선형 관계였던 LSTAT(저소득 계층의 비율)과 MEDV(주택 가격)의 관계를 모델링하면 다음과 같은 그래프가 나타난다.

 결과 그래프를 보면 선형 혹은 2차 다항 모델보다 3차 다항 모델이 두 특성간의 관계를 잘 잡아낸것을 알 수 있다. 그렇다면 다항이 클수록 관계를 잘 잡아내니 좋은 것이 아닌가 싶지만 항이 추가 될수록 모델의 복잡도가 늘어나고 과대적합의 가능성 또한 늘어난다. 더욱이 다항 특성이 비선형 관계를 매핑하는데 항상 최선의 선택은 아니다. 위의 두 특성의 산점도를 분석해보면 로그 스케일로 변환할 시 선형 회귀 모델에 적합한 특성 공간이 나올것이라는 추측이 가능하다. 이 추측을 바탕으로 변환하여 그래프를 그려보면 아래와 같이 선형 모델이 등장한다.

 결정 계수가 0.69로 앞선 3차 다항 모델(0.66)보다도 높은 것을 알 수 있다.

 

10.8 랜덤 포레스트를 사용하여 비선형 관계 다루기

 

10.8.1 결정 트리 회귀

 결정 트리 알고리즘의 장점은 비선형 데이터를 다룰때 특성 변환이 필요없다는 점이다. 회귀에 결정 트리를 사용하려면 연속적인 특성에 적합한 불순도 지표가 필요하므로 MSE를 불순도 지표로 정의한다. 사이킷런의 DecisionTreeRegressor을 사용하여 결정 트리 회귀를 학습해보자.

 데이터에 과대적합되거나 과소적합 되지 않게 트리의 깊이를 주의 깊게 선택하여 그려보면 예측이 매끄럽지 못하다는 것을 알 수 있다. 결정 트리는 데이터의 일반적인 경향만 잡아내다보니 나타나는 한계점이다.

 

10.8.2 랜덤 포레스트 회귀

랜덤 포레스트 알고리즘은 여러 개의 결정 트리를 연결하는 앙상블 방법이다. 여러 개를 합쳤기에 단일 결정 트리보다 더 나은 일반화 성능을 나타낸다. 그 이유는 무작위성이 모델의 분산을 낮추어 주기 때문이다. 또한 이상치에 덜 민감하며, 하이퍼파라미터 튜닝이 많이 필요하지 않다는 장점이 있다. 기존의 알고리즘에 개별 결정 트리를 성장 시키기 위한 MSE 기준을 사용하여 예측한 후, 타기 값의 모든 결정 트리의 예측 평균 값을 계산한다. 

 주택 데이터셋에서 60%는 훈련 데이터셋으로, 40%는 테스트 데이터셋으로 사용하여 랜덤 포레스트 회귀 모델을 훈련시켜 보자. 그 결과 훈련 데이터의 결정 계수가 0.979이고 테스트의 결정 계수가 0.878로 훈련 세트에 과대적합되는 경향을 띄는 것을 파악할 수 있다. 이를 바탕으로 예측 잔차를 그래프로 보면 여타의 선형 모델의 잔차 그래프보다 많이 개선되었다는 것을 알 수 있다.

 이 그래프를 분석해보면 y축 방향으로 테스트 세트의 이상치가 나타나있다. 또한 잔차의 분포 역시 0을 중심으로 랜덤해 보이지 않는다. 이는 모델이 특성의 정보를 모두 잡아낼 수 없다는 것을 뜻한다. 

 이상적으로는 현실 세계의 분포나 패턴의 무작위성을 반영해 모델의 오차가 랜덤하거나 예측할 수 없어야 한다. 하지만 위와 같이 패턴이 보이면 특성의 정보가 잔차로 누설되어 잔차 그래프가 예측 정보를 담고 있다는 의미이다. 

 이를 해결하기 위한 보편적 방법은 아직 없다. 실험을 통해 수정해 나가야하며, 데이터에 따라 특성을 변환하거나 하이퍼파라미터를 튜닝하여 모델 향상 시키기, 기존의 모델보다 더 간단하거나 복잡한 모델 선택, 이상치 제거, 추가적인 특성 포함을 통해 모델을 향상시켜 문제를 해결해가는 방법들이 있다.

반응형

댓글