다중공선성 문제란?

독립변수간의 상관관계가 매우 높을 때, 하나의 독립변수의 변화가 다른 독립변수에 영향을 미쳐, 결과적으로 모델이 크게 흔들리는 것을 의미한다. 모델의 결과는 불안정하며 작은 변화에도 변동이 크다. 이는 다음과 같은 문제를 야기시킨다:

​ 1. 모델이 예측을 할 때마다, 다른 결과를 준다면, 중요 변수들의 묶음에서 어떤것을 골라야할지 어려움

  1. 회귀계수 추정치는 안정적이지 않고, 그 결과 모델에 대한 해석이 어려움. 즉, 독립변수 1단위가 변화했을 때, 종속변수가 얼마나(scale) 변화했는지 말할 수 없다.
  2. 모델의 불안정성은 오버피팅을 유발할 수 있다. 만약 다른 데이터 샘플을 적용하면, 정확도는 학습데이터의 정확도보다 크게 낮아질 것이기 때문이다.

Dummy variable trap

옳지 않은 더미변수 사용은 다중공선성문제를 야기할 수 있다.

예를 들어, 결혼상태 변수에 대한 데이터셋이 있다고 하자. 결혼 상태 변수는 기혼/미혼, 두 가지 unique value를 가진다. 이 두 value에 대해서 각각 더미변수를 만들게 되면, redundant information문제를 야기하므로, 결혼 상태에 대한 더미변수 하나를 만들어, 기혼:0, 미혼:1 로 설정해야한다.

다중공선성 문제가 발생했는지 어떻게 알 수 있는가?

1) correlation matrix를 그려보자

수많은 독립변수 중 어떤 것을 선택해야될 지 모르겠을 때는, 종속변수도 correlation matrix에 포함시켜서, 종속변수와 가장 높은 상관관계를 가지는 독립변수를 선택하라.

2) VIF를 확인하자

각각의 독립변수에 대한 VIF를 구해보자. VIF값이 클 수록, 해당 독립변수와 나머지 독립변수간의 상관관계가 높아진다.

VIF

머신러닝에서의 다중공선성

어떤 학습데이터로 모델을 학습시켰다고 하자. 그리고 우리는 테스트셋에 대해서 예측을 할 것이다. 학습셋과 테스트셋의 변수간에 공분산이 다르다면, 우리의 학습데이터에 있는 다중공선성은 예측 성능을 저하시킬 것이다. 만약 학습과 테스트셋에서 공분산 구조(covariance structure)가 비슷하다면, 문제를 발생시키지 않을 것이다. 테스트셋이 보통 전체 데이터셋(full dataset)의 랜덤한 부분 집합이기 때문에, 공분산 구조가 같을 것이라고 가정하는 것이 reasonable하다. 그러므로, 다중공성성은 이러한 목적에서는 큰 문제가 되지 않는다.

한 가지 예를 생각해보자. 당신이 어떤 그룹의 사람들의키를 다른 변수들(몸무게, 팔길이, 다리길이 등)으로 예측한다고 생각해보자. 당신은 이 변수들이 매우 강한 상관관계가 있다는 것을 발견하게 될 것이다. 하지만, 당신이 이러한 변수들(팔길이, 다리길이, 몸무게 등)이 학습/테스트셋에서 동일한 정도의 상관관계를 보일 것으로 가정한다면, 당신은 분석을 계속해서 테스트셋의 사람들의 키를 예측할 수 있을 것이다. 만약 학습/테스트셋 간의 공분산 구조가 다르다면 예측은 좋지 못할 것이다.

예측문제에서의 다중공선성은 문제가 되지 않지만, 추론문제에서의 다중공선성은 문제가 있다. 두 변수 x1, x2가 perfectly correlated(r=1)된 경우를 생각해보자. x1 -> y과 x2 -> y, 두 개의 회귀분석을 진행했을 때, 동일한 회귀계수값을 반환할 것이다(두 회귀분석에서 도출된 동일한 회귀계수를 3이라고 하자) 다중회귀분석에서 y를 예측하기 위해 x1과 x2가 함께 쓰였다면, 동일하게 valid한 가능한 회귀계수 조합의 범위가 무한하다.

예를 들어, x1의 회귀계수는 3이 될 수 있고, x2의 회귀계수는 0 이 될 수 있다. 역도 동일하게 valid하다.

이는 추론의 관점에서 거대한 불확실성을 가지고 온다. 왜냐하면 각각의 독립적인 parameter는 poorly 고정되어있기 때문이다. 그러나, 중요한 것은, hypothetical model 간의 x1과 x2의 큰 변동에도 불구하고, 모든 모델은 동일하다는 것이다. 만약 당신이 원하는 것이 새로운 값에 대한 예측이라면, 당신은 이 모델중 어떤것을 골라도 된다. 당신의 테스트셋에서, x1과 x2가 여전히 prefectly correlated되어있기 때문이다.

머신러닝에서의 다중공선성문제 해결

앞서, 다중공선성이 궁극적으로 오버피팅을 야기할 수 있다는 점을 지적하였다. 머신러닝에서 다중공선성 문제의 해결이 모델 예측의 정확성에 영향을 주지 않는 것은 아니다. 다만, 머신러닝에서는 오버피팅에 초점을 두고, 이를 해결하기 위해, regularization을 사용한다. 이러한 regularization 은 회귀계수의 안정화에 도움을 준다. 그리고 이는 적어도 어느정도는 다중공선성의 완화에 도움을 줄 것이다.

결론

ML 문제에서, 회귀계수 추정치에 대한 관심이 없고 예측에 대해서만 관심이 있기 때문에 학습/테스트셋 간의 공분산 구조가 동일하다는 가정하에서, 다중공선성이 예측에 악영향을 끼치지는 않는다. 그래서, ML문제에서 다중공선성을 크게 고려하지 않았던 것이다.

-> 더 나아가서, 이 점이 바로 전통적인 통계학과 머신러닝의 차이점을 시사한다고 할 수 있다. 전통적인 통계학은 모델에 대한 해석(inference)에 초점을 맞췄다면, 머신러닝을 모델을 통한 예측(predict)에 초점을 맞추는 것이다.

 

Feature Selection이란?

  • Feature Selection은 ML에 있어서 매우 중요한 기술입니다.
  • Feature Selection의 기본적인 아이디어는,
  • 모델링 시 raw data의 모든 feature를 사용하는 것은 computing power와 memory 측면에서 매우 비효율적이기 때문에,
  • 일부 필요한 feature만 선택해서 사용하자는 것입니다.
  • 어떻게 보면, Feature Selection은 여러분의 모델 성능을 높이기 위해서 반드시 필요한 기술 중 하나입니다.
  • Feature Selection은 Feature Engineering, Feature Extraction과 유사하지만,
  • 표현 자체는 구분되며, 간단하게 정리하면 아래와 같습니다.
    • Feature Engineering : 도메인 지식을 사용하여 데이터에서 피쳐를 변형/생성
    • Feature Extraction : 차원축소 등 새로운 중요 피쳐를 추출
    • Feature Selection : 기존 피쳐에서 원하는 피쳐만 (변경하지 않고) 선택
  • 즉, FE는 "데이터의 피쳐를 어떻게 유용하게 만들 것인가"의 문제이며,
  • FS는 "데이터에서 유용한 피처를 어떻게 선택할 것인가"의 문제입니다.
    • Feature Selection은 아래와 같은 장점이 있습니다.
      • 사용자가 해석하기 쉽게 모델을 단순화
      • 훈련 시간의 축소
      • 차원의 저주 방지
      • 일반화
  • 더 구체적으로 알아보겠습니다.

어떤 방법론을 사용할 것인가?

  • Feature Selection을 한다는 것은, feature subset을 만드는 과정이기 때문에
  • 시간과 자원이 충분하다면, 모든 방법을 테스트하여 구하고자하는 score가 높은 subset을 사용하면 됩니다.
  • 하지만, 이 방법은 현실적으로 무리가 있기 때문에, 평가 메트릭에 따라 적합한 방법을 사용하는 것이 좋습니다.
  • Feature Selection의 방법론은 크게 3가지로 분류됩니다.
    • Filter Method : Feature 간 관련성을 측정하는 방법
    • Wrapper Method : Feature Subset의 유용성을 측정하는 방법
    • Embedded Method : Feature Subset의 유용성을 측정하지만, 내장 metric을 사용하는 방법

Filter Method

  • Filter Method는 통계적 측정 방법을 사용하여 피처간의 상관관계를 알아낸 뒤,
  • 높은 상관계수(영향력)를 가지는지 피처를 사용하는 방법입니다.
  • 하지만, 상관계수가 높은 피처가 반드시 모델에 적합한 피처라고 할 수는 없습니다.
  • Filter Method는 아래와 같은 방법이 존재합니다.
    • information gain
    • chi-square test (카이제곱)
    • fisher score
    • correlation coefficient
      • 흔히 correlation을 heatmap으로 표현하여 시각화합니다.
    • variance threshold

Wrapper Method

  • Wrapper method는 예측 정확도 측면에서 가장 좋은 성능을 보이는 Feature subset(피처 집합)을 뽑아내는 방법입니다.
  • 이 경우, 기존 데이터에서 테스트를 진행할 hold-out set을 따로 두어야하며,
  • 여러번 Machine Learning을 진행하기 때문에 시간과 비용이 매우 높게 발생하지만
  • 최종적으로 Best Feature Subset을 찾기 때문에, 모델의 성능을 위해서는 매우 바람직한 방법입니다.
  • 물론, 해당 모델의 파라미터와 알고리즘 자체의 완성도가 높아야 제대로 된 Best Feature Subset을 찾을 수 있습니다.
  • Wrapper Method는 아래와 같은 방법이 존재합니다.
    • Forward Selection(전진 선택)
      • 변수가 없는 상태로 시작하며, 반복할 때마다 가장 중요한 변수를 추가하여 더 이상 성능의 향상이 없을 때까지 변수를 추가한다.
    • Backward Elimination(후방 제거)
      • 모든 변수를 가지고 시작하며, 가장 덜 중요한 변수를 하나씩 제거하면서 모델의 성능을 향상시킨다.
      • 더 이상 성능의 향상이 없을 때까지 반복한다.
    • Stepwise Selection(단계별 선택)
      • Foward Selection 과 Backward Elimination 을 결합하여 사용하는 방식으로,
      • 모든 변수를 가지고 시작하여 가장 도움이 되지 않는 변수를 삭제하거나,
      • 모델에서 빠져있는 변수 중에서 가장 중요한 변수를 추가하는 방법이다.
      • 이와 같이 변수를 추가 또는 삭제를 반복한다.
      • 반대로 아무것도 없는 모델에서 출발해 변수를 추가, 삭제를 반복할 수도 있다.

Embedded Method

  • Embedded method는 Filtering과 Wrapper의 장점을 결함한 방법으로,
  • 각각의 Feature를 직접 학습하며, 모델의 정확도에 기여하는 Feature를 선택합니다.
  • 계수가 0이 아닌 Feature가 선택되어, 더 낮은 복잡성으로 모델을 훈련하며, 학습 절차를 최적화합니다.
  • Embedded Method는 아래와 같은 방법이 존재합니다.
    • LASSO : L1-norm을 통해 제약을 주는 방법
    • Ridge : L2-norm을 통해 제약을 주는 방법
    • Elastic Net : 위 둘을 선형결합한 방법
    • SelectFromModel
      • decision tree 기반 알고리즘에서 피처를 뽑아오는 방법입니다.
        • RandomForest나 LightGBM 등
      • scikit-learn에 함수가 있습니다.

참고

머신러닝 관점

정규화&표준화가 필요한 이유는 기준을 설정하고 그 기준내에서 각 데이터들을 평가하기 때문에 비교가 편하다는 것

 

머신러닝을 하다보면 기본적으로 많은 양의 데이터를 처리하게 된다. 그리고 그 데이터안에 target과 관련있는 특성(feature)을 뽑아낸다.

예를 들어, 오늘 입을 옷을 결정할 때 그날의 온도, 습도, 날씨, 약속의 유무 등을 따지는 것과 같다.
그럼 온도, 습도, 날씨는 ℃, F 등 특성의 단위도 다르고 그 범위도 달라 직접적으로 비교할 수 없다.
내가 토익(990만점) 400점이고, 넌 영어(100점만점) 90점이니까 내가 더 공부를 잘하네? 라고 할 수 없는 듯이 말이다.

그래서 각 특성들의 단위를 무시하고 값으로 단순 비교할 수 있게 만들어 줄 필요가 있다. 그것이 우리가 정규화/표준화를 진행하는 이유다. 정규화/표준화가 해주는 것을 특성 스케일링(feature scaling) 또는 데이터 스케일링(data scaling)이라고 한다.

또한 가장 중요한 이유는 scale의 범위가 너무 크면 노이즈 데이터가 생성되거나 overfitting이 될 가능성이 높아지기 때문이다.

 

딥러닝 관점 직관적 이해

아래와 같이 Unnormalized된 상태에서는 Learning Rate을 매우 작게 설정해야 정상적을 학습이 된다.
이유는 cost 그래프가 elongated하기 때문이다. 따라서 elongated contour의 모습을 가진다.
아래와 같이 Input의 Range가 서로 다르다면 Gradient Descent Algorithm을 적용하는것이 매우 까다로워지는 상황이 발생 한다.

하지만 normalization을 적용하면 좀 더 spherical contour를 가지게 된다.
이렇게 하면 좀 더 Gradient Descent Algorithm으로 쉽게 그리고 빠르게 최적화 지점을 찾게 된다.

출처: https://goodtogreate.tistory.com/entry/Neural-Network-적용-전에-Input-data를-Normalize-해야-하는-이유 [GOOD to GREAT:티스토리]

'머신러닝' 카테고리의 다른 글

[ML]ML에서의 다중공선성 문제  (0) 2022.08.06
[ML] Feature Selection  (0) 2022.07.20

+ Recent posts