Posts List

[Data Mining] 5. Regression - 회귀분석에서 변수선택법

회귀분석에서 변수선택법

앞에서 잠깐 언급했지만, 독립변수의 수가 많아지면 기본적으로 모델의 복잡도가 올라가면서 성능이 올라간다. 하지만 변수가 너무 많다면 오히려 그 성능은 낮아질 수 있다. (차원의 저주 : Cause of Dimensionality) 이 때 성능이 낮아진다는 것은 예측성능이다. 즉, 학습데이터에서 성능은 높을지 몰라도 실제 현장 데이터를 대입했을 때 예측성능이 학습성능에 비해 현저히 낮게 나올 수 있다는 것이다.(overfitting)


이 때, 우리가 선택할 수 있는 방법은 2가지가 있다.

  • feature selection : d개의 변수들 중 가장 유효한 p개의 변수를 선택한다
  • feature extraction : d개의 변수들을 조합해서 새로운 변수 p개를 정의한다.

지금부터 feature selection / extraction 하는 방법에 대해 알아보도록 하자.


1. Feature selection


feature selection은 주어진 독립변수들 중에서 가장 유효하다고 판단되는 것을 선택하는 기법인데, 어떤 변수가 유효한지를 찾기 위한 방법은 크게 아래의 3가지로 나눌 수 있다.

변수를 선택하는 방법에는 filter, wrapper, embedded로 나뉠 수 있다.

  • filter : 주관적 / 정량적 기준에 의해서 각 독립변수들을 평가 & 선택한다.
  • wrapper : 독립변수를 달리해서 모형을 만들고, 예측성능을 참고하여 독립변수들을 선택한다.
  • embedded : 예측모형 최적화 과정(회귀계수 추정 과정)에서 각 독립변수가 도출되도록 한다.

1) Filter

filtering 기법은 각 독립변수와 종속변수들을 1:1로 매칭시키면서 상관관계를 분석하는 방법이다. correlation matrix를 활용하는 방법이 가장 일반적이며, domain-knowledge를 가진 사용자가 객관적인 평가를 정의하거나 주관적인 판단하에 변수를 결정하는 방법이다. 부가적으로 다중공선성을 판단할 수 있는 효과도 있다.

2) Wrapper

wrapper 기법은 filtering에서 한단계 발전한 방법이다. 어떤 조합으로 했을 때 회귀모형의 성능이 좋은지 각각 평가하고, 평가결과에 따라 선택하거나 버리는 전략을 취하는데, 변수 선택을 위해 아래와 같은 정량적인 모형평가척도(evaluation measure)가 필요하다.

  • R-square : 1 - SSE / SST로 계산된다. 통상 변수 수가 많을수록 R-square는 증가한다.

  • adjusted R-square : R-square에 자유도만큼 penalty를 준 것이다. 특정 시점부터 감소하는 경향을 보인다.

  • MSE(mean of squared error) : SSE(sum of squared error)의 평균으로, 모델의 분산을 의미한다. 변수가 늘어날수록 error의 양이 줄어드는 듯 하지만 어느 시점부터 증가하는 경향을 보인다.

  • Cp통계량 : bias가 얼마나 모델에 영향을 미치는지 척도로 기억해 두자. 도출식은 아래와 같다.


wrapper에서는 위와 같은 모형평가척도를 사용해 변수를 선택할 수 있는데, All possible regression(모든 가능한 회귀분석)과 stepwise regression(단계적 회귀분석)이 가장 대표적인 사례다.

All possible regression(=Best subset)

말 그대로 모든 경우의 수에 대해 regression 분석을 해 보는 것이다. 만약 변수가 k개 있다면 2k-1의 변수선택 경우의 수가 생기는데, 그 중에서 가장 좋은 모형을 찾는다. 그리고 가장 좋은 모형에서 사용된 변수를 선택하는 방법이다. (아주 단순하고 비효율적인 방법인데 이름을 붙여두니 그럴듯 해 보인다.)

Stepwise regression

이게 너무 번거롭기 때문에 나온 것이 단계적 회귀분석이다. 모든 경우의 수를 파악하는 것 보다 상관성이 높은 회귀계수 먼저 찾아내는 방법인데, 왠지 인공지능 수업에서 배웠던 UCS(Uniform cost search)가 떠오른다. (all possible regression 방법에 최소 cost의 경로를 찾는 UCS가 적용된 것으로 보인다.) 단계적 회귀 분석의 종류는 아래 3가지가 있다.

  • 전진 선택법(forward selection) : 상관계수가 높은 순서대로 변수를 추가하는 방법이다. 유의수준 α가 있어서 유의수준을 만족하는 변수가 없는 경우에는 변수선택을 마친다. 추가된 변수는 제거되지 않는다.
  • 후진 제거법(backward elimination) : 모든 변수를 포함하는 상태에서 유의하지 않는 변수를 제거하는 방법이다. 제거된 변수는 다시 추가되지 않는다.
  • 단계적 방법(stepwise method) : 전진 선택법과 후진 제거법의 혼합형태. 변수를 선택한 다음 선택된 변수들 중 제거할 변수가 있는지 한번 더 확인한다. 한번 더 확인함으로써 추가된 변수를 제거 할 수도 있고, 제거된 변수를 다시 추가 할 수도 있다.

아래 와인 아로마 예제를 통해 stepwise regression을 작동 원리를 확인해보자.

전진선택법 혹은 단계적 방법을 통해 변수를 하나씩 추가한 결과이다.(α = 0.15) 괄호 안의 수치는 p-value인데, p-value가 낮은 값부터 변수를 선택하고 있다. 그리고 변수가 추가될 때 마다 모형평가척도가 상승함을 알 수 있다. (독립변수가 많지 않아서 adjusted R-squire가 낮아지는 현상은 관찰되지 않는다.)

후진제거법을 통해서 변수를 하나씩 제거한 결과이다. p-value가 가장 큰 값부터 제거되고 있는 것을 확인할 수 있다. 그런데 전진선택법의 결과와 매우 다른 결과가 도출 된 것을 확인할 수 있다. (전진선택법은 최종적으로 B를 택했는데 후진제거법에서는 B를 진작 탈락시켰다.) 통상 두 알고리즘의 결과는 비슷해야하지만, 위 예제처럼 데이터에 따라 다른 결과를 낼 수 있음으로, 모두 실행해본 뒤 domain-knowledge가 있는 사용자가 적절히 판단하는 과정이 꼭 필요하다.

3) Embedded

회귀모형을 추정한다는 것은 회귀계수를 추정하는 것이고, 회귀계수는 최소자승법에 의해서 오차를 최소화하는 함수를 만족시킨다. 이렇게 특정 함수를 최소화 혹은 최대화 하는 과정을 최적화(Optimize)과정이라 하는데, 이 최적화 과정을 변형시켜서 유효한 독립변수를 선택하고자 하는 방법이 Embedded이다. 대표적인 2가지 방법에 대해서 알아보자.

LASSO (Least Absolute Shrinkage and Selection Operation)

LASSO의 의미를 한글로 번역해보면, "회귀계수의 크기를 줄이고, 선택하는 함수"로 해석할 수 있다. LASSO를 설명하기 전에 bias와 variance와 최소자승법의 관계에 대해서 알아보자.

우리가 회귀모형의 최적화 과정에 활용하고 있는 최소자승법(OLS : Ordinary Least Square = method of least squares = least squares approximation ...)은 분산이 큰 최적화 방법이다. 달리 해석하면, 오차를 최소화하는 목적 하나를 만족시키기 위해 타협 없이 회귀계수를 추정하는 것이다. 그러다 보니 bias는 매우 낮아서 평균적으로 잘 적중시키는 반면 variance가 커서 산포가 넓고, 그러다 보니 실제 환경에서는 잘 적중시키지 못 할 수 도있다.(overfitting) 아래 그림을 보고 다시 정리해보자.

OLS의 평균은 실제 평균값인 f(x)로 잘 적합되어 있다. 이를 bias가 낮은 상황이라고 한다. 다만 분산이 커서 f(x)를 정확히 예측할 확률이 낮다. 이를 variance가 높은 상황이라고 표현한다. (≒overfitting)

반면 (x)는 실제 평균과 거리는 있어 bias는 좀 있지만 분산이 적어 확률밀도함수가 좁다. 이런 경우를 variance가 낮은 상황이라 표현한다.(≒underfitting)

※ 참고로 bias와 variance를 동시에 낮출 수 있는 일반적인 방법은 없다. bias와 variance는 trade-off 관계에 있다. (그 유명한 Yoshua Bengio 교수가 증명했을 정도) ensemble과 같은 특수한 방법으로 모두 낮출 순 있지만 한계가 있는 것으로 알려져 있다.

LASSO는 OLS로 오차를 최소화 하는 최적화 과정에 1개의 제약조건이 붙는다. 바로 회귀계수 절대값의 합이 일정수준을 넘지 않게 하는 것이다.

다만 제약조건을 만족하는 최적화문제를 푸는것은 쉽지가 않다. 따라서 아래와 같이 라그랑지안(Lagrangian) 계수(λ)를 이용해서 최적화문제의 목적함수에 내장시켜서 함께 최적화 시킨다.

즉, 위 식을 다시 해석하면, LASSO는 오차와 함께 회귀계수의 절대값도 함께 최소화하는 목적함수를 가진다. 이렇게 했을 때 아무래도 오차를 최소화 하는 것을 방해하는 제약조건이 포함되어 있기 때문에 bias는 늘어날 수 밖에 없지만, variance를 낮춰주는 효과를 가질 수 있다. (OLS로 구한 회귀계수보다 작은 회귀계수가 도출될 것이란 것을 예상할 수 있다.) 이런 원리를 가지는 것이 LASSO regression인데, 회귀계수가 특정 시점이 되면 0으로 수렴하면서 몇 개의 변수는 사라지기 때문에 변수선택법으로도 사용할 수 있다. 

LASSO vs. Ridge Regression

앞서 설명 했듯, LASSO는 회귀계수의 절대값을 일정 수준 내로 들어오게 하는것이 제약조건이다. 위 그림의 좌측이 바로 LASSO를 표현한 것이며, 파란 구역이 그 제약조건을 만족시키는하는 구역이다. 즉, 추정된 회귀계수는 파란 구역에 위치해야한다. 그 제약조건이 없었다면 OLS는 검은점 위치에 있는 추론값을 회귀계수로 추론할 것이다. 하지만 제약조건을 만족시키기 위해 회귀계수를 조금씩 줄여나갈 것이고, 줄여나가다 보면 파란 구역의 모서리에 닿게 되어있다. 파란구역의 모서리의 좌표값을 보면 β1의 추정값이 0이 되었다. 그 의미는 β1에 해당하는 독립변수를 삭제했다는 의미이다.

LASSO와 유사한 원리를 가지지만 제약조건이 다른 회귀모형이 있다. 바로 Ridge regression이다. Ridge regression은 LASSO처럼 β 절대값에 제약을 주는 것이 아니라, β2 값에 제약을 준다. 그래서 Ridge regression의 제약조건을 만족시키는 구역은 사각형이 아니라 원형이다. 그래서 제약조건을 만족시켰을 때 회귀계수가 삭제되는 것이 아니라 매우 작은 값을 가지는 것을 목표로 하고 있다. 실제로 위 그림의 우측을 살펴보면 β1의 추정값이 0이 아닌 매우 작은 값으로 설정된 것을 확인할 수 있다. 

※ Ridge regression도 OLS가 가진 variance를 낮추는 대신 bias를 증가시키는 결과를 갖는다.

※ LASSO와 Ridge regression을 적용하기 위해서는 모든 변수를 normalize 해 주어야 한다. (여러 회귀계수가 비슷하게 감소되어야 하기 때문이다.)

※ LASSO와 Ridge regression 모두 일종의 Regularization(정규화 된) / Penalized(penalty를 주는) 회귀 기법 중 하나이며, 변수 선택을 목적으로도 사용할 수 있다.

위 예제는 sklearn 에서 제공하는 와인-아로마 데이터에 LASSO regression을 구현한 것이다. 라그랑지안 계수 λ는 하이퍼파라미터로 사용자가 지정해 줘야 하는데, λ값에 따라 몇몇 독립변수는 회귀계수 0을 가지면서 삭제된 것을 확인할 수 있다.


2. Feature extraction

지금까지 Feature selection 기법에 대해서 알아봤는데, Feature selection은 전체 독립변수에서 유효하다고 판단되는 독립변수를 뽑아내는 것을 목표로 한다. 반면 Feature extraction은 selection과는 달리 기존의 독립변수로부터 완전히 새로운 변수를 추출(extract)한다. 

PCA (Principle Component Analysis, 주성분분석)

Feature extraction 방법 중 가장 대표 적인 것은 PCA(Principle Component Analysis, 주성분분석)이다. 다중공선성을 해결하거나, 예측 성능을 높이기 위해 주로 사용되는 방법인데, 다수의 독립변수로부터 소수의 변수(차원)를 추출한다고 해서 차원축소법이라고도 불린다. 그리고 원 변수를 이용해서 새로운 변수를 만들기 때문에 정보의 손실없이 차원을 축소할 수 있는 효과적인 방법으로 알려져 있다.

※ 참고로 PCA는 각 변수가 완전히 독립이면 효과가 없지만 관계가 있으면 있을수록 효과를 발휘한다. 왜냐하면 위 수식을 보더라도 새로운 차원(변수)은 기존의 변수의 weighted sum으로 표현되기 때문에 기존 독립변수간의 상관관계가 필요하다. 그리고 새로생긴 변수들은 서로 상관관계가 없도록(uncorrelated, orthogonal) 만든다. (그래서 변수는 독립이다고 가정하는 OLS regression을 푸는데 아무런 문제가 되지 않는다.) 

※ 다만 새로운 변수 정의했기 때문에 문제의 원인을 추론하기가 굉장히 어려워진다. (ex. 예측값에 t1이 얼마나 영향을 미쳤는지는 알 수 있지만 X1, X2... 가 얼마나 영향을 미쳤는지 분석하기는 어렵다.) 


위 예제를 통해 PCA가 새로운 변수를 도출하는 원리를 살펴보자.

독립변수 X1, X2가 있고, 관측치가 5개 있다. (평균은 0) 그리고 X의 분산은 X1의 분산 + X2의 분산이다. (46 + 20 = 66)

다음으로 샘플들을 원점을 기준으로 조금씩 회전시킨다.(rotation matrix) 이때 재미 있는 것은 이동한 관측치의 분산은 당연히 변경되지만 그 합은 66으로 변하지 않는다. 위 예제에서는 10도 회전시켰을 때 X1의 분산은 증가했고 X2의 분산은 감소했다. 이 뜻은, X1의 설명력이 더 높아진 것을 의미한다. 이렇게 계속 돌리면서 X1이 가장 많이 설명할 수 있는 각도인 31.7도를 찾고, 그 때의 값을 새로운 변수 t1, t2로 삼는 것이 PCA의 주요 컨셉이다. 위 예제의 결과를 해석하면, 굳이 X1, X2 두개의 변수를 쓰지 않더라도 t1을 사용하면 충분히 전체 분산을 표현할 수 있기 때문에 차원 축소가 가능하다.

사실 이 원리는 eigenvector eigenvalue의 기하학적 의미로, 선형대수학에 위와 같이 정의되어 있다. 즉 새로운 차원 T행렬은 기존의 독립변수인 X행렬에 eigenvector를 곱한 것이다. 위 예제에서 eigenvector(P)는 31.71도를 회전시키기 위한 rotation matrix이며 새로운 차원의 파라미터를 담고 있다. 그리고 eigenvalue(Λ)는 분산을 표현한다.

특히, eigenvalue(분산) 행렬은 contribution(누적 신뢰 %)을 확인할 수 있게 해주기 때문에, 몇 번째까지의 차원을 쓸지 사용자가 정할 수 있다.

※ 행렬 A의 eigenvector는 선형변환 A에 의해 방향은 보존되고 스케일만 변화되는 방향벡터, eigenvalue는 eigenvector의 스케일 정도

※ 그래도 역시 그래프 예제로 표현한 방법이 지금까지 PCA 설명 중 가장 쉬웠다. 교수님 respect!

PLS(Partial Least Squares)

PLS는 PCA와 유사하지만 약간 다르다. PCA는 독립변수 X만 가지고 새로운 차원인 T를 도출한다면, PLS는 Y를 함께 고려한다. (PLS원리의 증명은 여기서 다루지 않는다.)

수식적으로는 X를 설명하는 모델 y를 설명하는 모델을 둘다 찾는다는 것이 목표며, 그러다 보니 주성분(PC)라 부르지 않고 Latent Variable(잠재변수)라 부른다.


그리고 PLS에서 추가로 얻을 수 있는 것은 변수 중요도를 구할 수 있다는 것이다. (VIP : Variable Importance in Projection) 수식을 살펴보면, 만든 변수의 분산과 잠재변수-원변수의 상관성의 제곱을 곱해서 계산을 하면 VIP가 쭉 나온다. VIP가 1보다 크면 중요하다고 판단한다. 

※ PCA에서 어렵다고는 언급했지만 사실 PCA도 Factor loading을 통해 새로운 차원 T를 원변수로 치환할 수 있다. (Loading = Eigenvectors √Eigenvalues)


이번 변수선택법을 정리하자면,

사실 예측이 목적이라면 다중공선성을 어느정도 무시해도 좋지만, 변수들간 중요도 파악이 어렵다. 하지만 대부분의 현실 문제는 중요도에 대한 근거가 없으면 아무리 예측 성능이 높아도 적용하는데 위험부담이 있다. 이번에 배운 LASSO, PLS, PLS-VIP는 어떤 변수가 중요한 변수인가를 찾고자 하는 목적이 크기 때문에 꼭 기억해 두면 좋을 것 같다.

마찬가지로 PCA역시 새로운 차원에 대한 해석이 어렵다곤 하지만 Factor loading으로 어느정도 파악을 할 수 있고, 예측 성능 향상을 위해 앞으로도 자주 소개 될 기법이니만큼 꼭 기억해 두자. 

댓글 쓰기

0 댓글