통계 이야기

회귀 스플라인 본문

통계학/비모수통계학

회귀 스플라인

St story 2023. 4. 18. 20:55

 0. 들어가며

 지금까지 데이터를 보고 즉시 함수를 추정하는 과정을 거쳤다. 그 과정에서 회귀계수를 추정하는 방법 중 하나로 좌표하강 알고리즘에 대해서도 다루었고 좌표하강 알고리즘으로 단순 선형회귀 모형을 적합해보기도 했다. 하지만, 실제 데이터가 항상 선형적으로 구성되어있지는 않다. 이번에는 직선으로 이루어진 단순 회귀식이 아닌, 절단된 데이터 모형을 적합하는 방법에 대해 설명해보도록 하겠다. 

 

1. 조각 다항식

  조각 다항식은 각 부분구간에 조각다항식 자체를 국한하였을 경우 다항식이 되는 함수이다. 간단하게 x=0에서 함수의 모형이 바뀌는 함수로 예를 들어보면 다음과 같이 나타낼 수 있다.

x=0에서 함수의 형태가 변화한다.

 문제는 앞서 다루었던 기저함수와 회귀계수의 선형결합으로 이 함수를 어떻게 표현할 수 있느냐이다. 우선 비모수통계에서 함수는 다음과 같이 표현했다. 

 

회귀함수는 기저함수와 회귀계수들의 선형결합으로 나타낼 수 있다.

 그리고 단순선형회귀에서는 기저함수 B1, B2가 1과 x로 설정되었다. 1과 베타1의곱과 베타 2와 x의 곱으로 다양한 일차식을 생성할 수 있기 때문이다. 조각다항식에서도 기저함수로 저 둘을 사용하지만 이번에는 x가 0인 지점을 기점으로 0보다 작은 쪽, 큰 쪽으로 나누어 각각 한 번씩 더 사용한다. 식으로 나타내면 다음과 같다. 

 x가 0보다 작을 경우, B1,B2함수가 쓰고, x가 0보다 큰 구간에서는 B3,B4의 기저함수를 이용하여 함수추정을 할 수 있다.  실제 조각 다항식을 그림으로 나타내면 다음과 같이 나타난다. 

x가 0인 지점에서 함수가 변화하는 조각다항식의 시각화이다.

2. 연속인 조각다항식

 이번에는 특정 지점에서 함수가 달라지긴 하지만 그 지점에서 연속인 함수를 적합하는 방법에 대해 소개해보고자 한다. 그림으로 간단하게 나타내면 다음과 같다. 

x가 0.6인 지점에서 함수가 달라지지만 연속인 함수이다.

 

2.1 절단함수

 이를 위해서는 절단함수(truncated function)에 대해 먼저 살펴보아야 한다. 절단 함수의 기호는 보통 다음과 같다. 

이는 x가 0인 지점에서는 x를 뱉어내고 x가 0보다 작은 구간에서는 0을 뱉어내도록 만든 함수이다. 다른 예시는 다음과 같다. 

이번에는 x가 0.6보다 큰 지점에서는 x에 0.6을 빼주는 값을 뱉어내고 0.6보다 작은 구간에 대해서는 전부 0이 나오도록 한다. 예를 들어, 다음과 같은 함수식이 있다면,

 

위 식을 한줄로 다음과 같이 표현할 수 있다. 

이 식을 계산 해보면 x가 0.6보다 작은 구간에서는 (x-0.6)_+값이 0이 되므로 1+2x가 되는 것을 확인할 수 있다. 반면에, x가 0.6보다 큰 지점은 (x-0.6)_+의 값이 (x-0.6)이 되므로 계산하면 1+2x-5(x-0.6)이 돼서 결국 -3x+4가 되는 것을 알 수 있다. 결국 저 위의 함수 f(x)의 표현과 동일하다. 

 

이와 같은 함수를 절단 함수라고 하며, 인공지능 분야에서는 ReLU(Rectified Linear Unit)함수라고도 불린다. 

 

3. 스플라인 기저함수

 

 이렇게 연속인 조각다항식을 스플라인 함수라고도 하는데, 스플라인 함수를 추정하기 위한 스플라인 기저함수들을 찾아야 한다. 기본적으로 직선성향을 적합하는 기저함수들을 사용할 것이기 때문에, 기존의 1과 x를 사용한다. 

 

 스플라인 기저함수는 바로 위에서 살펴보았던 절단함수를 사용한다. 

이들은 각각 x가 0.5, 0.5, 0.75보다 큰 지점에만 관여한다.

따라서 1차 스플라인 회귀식은 다음과 같이 변환이 가능하다. 

베타들이 다른 기호로 변화하였다.

여기서 회귀계수는 베타가 아니라 각각 기본기저와 스플라인 기저를 구분하기 위해 다른 기호로 표현 되었다. 

 

4. 스플라인 회귀 함수 추정

 

 이제 함수 추정으로 들어가보자, 먼저 구간[a,b]를 정의역으로 갖는 함수 f를 추정한다. 함수 f가 k개의 매듭점을 갖는 1차 스플라인 함수라고 가정한다. 여기서 매듭점은 위의 예시에서 0.25, 0.5, 0.75와 같이 함수가 변화하는 지점을 말한다.(영어로는 knot라고도 부른다.) 그렇다면 이 함수의 기저함수들은 다음과 같다. 

각각이 B1,B2,...,Bk+2이다.

우리가 추정해야 하는 함수는 결국 기저함수와 회귀계수들의 선형결합이라고 했으므로 이를 표현하면 다음과 같다. 

스플라인 함수이다.

이전의 비모수 관련 글에서도 설명했듯, 함수 f를 추정하는 문제는 결국 우리가 모르는 수인 회귀계수들을 구하는 문제로 환원이 가능하다고 하였다. 여기서도 똑같은 논리로 최소제곱의 합을 가장 작게 해주는 회귀계수들을 구하여 함수를 추정한다. 추정된 1차 스플라인 함수는 다음과 같다. 

추정된 함수이다.

5. 시각화

말로만 떠들면 무슨 말인지 모를 수 있으니, 간단한 그림들을 보여주도록 하겠다. 다음은 cos(pi*x)에 적당한 오차를 집어넣어 만든 데이터이다. 검은 선은 실제 함수인 cos(pi*x)를 나타낸다. 

이제 매듭점(knot)을 -1과 0, 1로 설정하여 스플라인 적합을 시도하였다. 결과는 다음과 같다. 

 파란색 선은 적합된 회귀선을 나타낸다. 실제 함수와 완벽하게 똑같지는 않지만 데이터를 어느 정도 잘 설명한다고 볼 수 있다. 모의실험을 위해 함수를 먼저 설정해서 그림을 그렸지만 실제로는 우리는 함수가 어떻게 생겼는지 모르고 그저 데이터만 있을 뿐이다. 따라서 이 데이터에 맞게 잘 적합된 회귀함수를 구하는게 우리의 목적이고 스플라인 회귀는 이러한 함수를 추정하는 방법 중 하나인 것이다. 

 추가적으로 저 매듭점(knot)을 우리가 직접 -1,0,1로 고정시켜 놓고 적합을 시켰지만, 이는 과학적인 방법은 아니다. 따라서 저 매듭점을 과학적으로 찾아야 하는데 이는 내가 학부연구생 목록에서 소개했던 라쏘회귀를 이용하면 가능하다. 이는 다음글에서 더욱 자세하게 설명하도록 하겠다.