회귀는 어렸을 때 수학 과목으로 회귀식을 많이 풀어보았기에 익숙한 친구이다. 대다수 기계적으로 답을 풀어왔을텐데 이제 데이터 마이닝의 시각으로 회귀를 다시 한 번 살펴보자.
■ 데이터 마이닝과 회귀
지금까지 알아본 방식에 대해 다시 한 번 정리해보자.
탐색 모델(Descriptive) | 예측 모델(Predictive) |
---|---|
비지도 학습(Unsupervised) | 지도 학습(Supervised) |
클러스터링(Clustering), 연관 규칙(Association Rule Mining) | 분류(Classification), 회귀(Regression) |
분류와 회귀 모두 지도학습이며 예측 모델이다. 그렇다면 분류와 회귀의 차이점은 무엇일까?
가장 큰 차이점은 분류의 경우 예측하고자 하는 y값이 이산(discrete) 값인 클래스 레이블(class label)이라는 점이고, 회귀는 어떤 연속적인(continuous) 값이라는 것이다. 즉, 분류는 유한한 집합에서 T/F를 가르거나 low/average/high 등의 레이블을 구분하고, 회귀는 무한한 집합에서 가능한 특정 숫자를 예측한다.
이에 따라 각 모델링의 평가 방법도 다른데 분류의 경우 정확도(accuracy)를 평가 척도로 쓰고, 회귀의 경우 평균 제곱근 오차(Root Mean Squared Error)를 사용한다.
■ 보간법(Interpolation) vs. 보외법(Extrapolation)
일반적으로 분류는 학습 데이터에 없는 레이블은 예측할 수 없다. 즉, 알고리즘이 모든 가능한 레이블을 알고 있고, 그 구간 내에서 가장 적절한 레이블을 찾아 분류해준다. 회귀는 다르다. 알고리즘이 모든 가능한 숫자값을 알고 있고, 학습 데이터에 그 값이 없다할지라도 예측할 수 있다.
일정 구간 내에서 예측하는 방식을 보간법이라고 하고, 구간 밖에서도 예측가능한 방식을 보외법이라고 한다. 각 모델의 차이를 정확히 알기 위해 미리 알아두면 좋은 개념이다. 보간법은 보통 “안전한 예측”을 하지만 “100년 뒤 해수면의 높이를 예측해보자.”와 같이 보외법이 꼭 필요한 문제도 있다(100년 뒤 미래의 상황은 현재 학습 데이터 내에서만 예측하면 상당히 차이가 날 수 있다).
보간법(Interpolation) | 보외법(Extrapolation) |
---|---|
정해진 구간 내에서 예측 | 구간 밖에서도 예측 가능 |
분류(Classification), kNN with Regression | 트리 모델, SVM(Support Vector Machine), ANN(Artificial Neural Network) |
■ 회귀의 종류
다양한 회귀 모델을 하나씩 살펴보도록 하자.
- 선형 회귀(Linear Regression)
- 등회귀(Isotonic Regression)
- 다항회귀(Polynomial Regression)
- 국소 회귀(Local Regression)
- 회귀 트리(Regression Tree)
- 모델 트리(Model Tree)
■ 선형 회귀(Linear Regression)
익숙한 선형 회귀이다. 선형 회귀식의 y값과 x값이 선형 종속(linearly dependent)한다는 것을 가정으로 한다.
선형 종속이란 쉽게 말해 Y의 값이 어떤 직선 위에 분포되어 있는 것을 말한다.
위의 그림은 X가 하나일 때 Y와의 관계를 나타낸 식으로 y = x 이다(x값이 0을 대입했을 때 y도 0, x 값이 3을 대입했을 때 y도 3이므로). 데이터는 빨간 직선과 유사하게 분포되어 있다. 이를 일반화하면 y = w1*x1 인데 위 식에서 w1 = 1 값이다. 우리는 보통 w 값에 하나라도 0이 아닌 값이 들어가면 선형 종속이라고 말한다.
X가 여러개가 될 때도 마찬가지인데, 수식으로 나타내자면 어떤 함수 f(x) = w0 + w1x1 + w2x2 + … + wnxn 이 있을 때, w값이 하나라도 0이 아니라면 선형 종속이다. 선형 종속과 선형 독립은 나중에 벡터를 다루고 SVD 등을 할 때 계속해서- 아주 많이 등장할 예정이니 수식을 뽀개서 설명하는 건 다음으로 미루고, 일단은 가볍게 선형 종속은 이런 거구나 느낌만 알아가자.
선형 회귀식은 학습 데이터의 에러를 최소화하여 구한다. 위에서 언급했듯이 보통 MSE(제곱근 오차, Mean Squared Error)를 사용한다. 다만, X 값이 많아질 수록 대다수의 가중치 w가 매우 작아지면 과적합(Overfitting) 문제가 발생할 수 있다. 다시말해 매우 작은 w값이 회귀식에 많이 있다면, 과적합의 사인이 될 수 있다.
선형 회귀에서 과적합 문제를 해결하려면 어떻게 해야할까? 정규화(Regularization)를 통해 모델의 복잡도에 페널티를 주는 방식으로 해결할 수 있다. 어떻게 페널티를 주는지에 따라 릿지 회귀(Ridge Regression), 라쏘 회귀(Lasso Regression)라고 부른다.
먼저 x축에 wi, y축에 MSE를 놓고 그린 그래프부터 보자. wi가 0에 가까워질수록 오차가 줄어드는 것을 확인할 수 있다. 릿지와 라쏘의 차이를 간단히 설명하면 릿지는 wi를 0이 아닌 아주 작은 숫자로 만들고, 라쏘는 |wi|를 0 으로 만든다. 라쏘를 통해 특징 선택(feature selection)을 하는 셈이다.
왜 가중치를 0에 가깝게 만들까? 직관적으로 생각하려면 지난 글에서 다룬 오캄의 면도날을 떠올려보자. 우리는 어떤 현상을 설명할 때 복잡한 가정보다는 단순한 가정을 한 식을 선택해야 한다. 즉, 최소한의 X로 Y를 설명해야 한다! (불필요한 X의 가중치를 0과 가까이 만들어서 없애자!!)
위의 식에서 람다(λ, lambda)는 정규화의 정도를 지정해줄 수 있다. 만약 람다가 0이라면 람다 포함 뒤의 식이 사라지니 정규화를 적용하지 않고 원래 회귀식으로 돌아간다. 람다값이 커짐에 따라 가중치 w가 0으로 수렴해갈 것이므로 오버피팅 문제를 해결하게 된다.
■ 선형 회귀의 성능 평가 지표
성능 평가로 쓰이는 지표는 다음과 같다.
절대 평균 오차 (MAE, Mean Absolute Error) | 평균 제곱 오차 (MSE, Mean Sqaured Error) | 평균 제곱근 오차 (RMSE, Root Mean Squared Error) |
---|---|---|
예측값 – 실제값의 평균 | (예측값 – 실제값)의 제곱의 평균 | (예측값 – 실제값)의 제곱근의 평균 *스케일을 같게 해주기 위해 루트를 씌운다. |
MAE에서는 모든 오차에 동일한 가중치를 두는 반면, MSE나 RMSE에서는 오차가 심할수록 그 가중치를 더해준다. 위의 예시를 보면, 오차의 제곱을 통해 오차가 클수록 분자값고 커짐을 알 수 있다. 일반적으로 RMSE를 회귀식의 성능 평가할 때 많이 사용하는 이유는 루트를 씌워줌으로써 각 데이터끼리의 스케일을 같게 해줘 극단치에 휘둘리지 않게되기 때문이다.
예를 들어 위의 식에서 X5의 예측값이 100이고 실제 값이 120이었다고 치자. 다시 숫자를 식에 넣으면 MSE값은 80.6으로 굉장히 커진다. RMSE의 경우, 8.97로 X5의 스케일이 10배가 되어도 오차를 MSE만큼 뻥튀기 하지않는다.