4.3 GLM, GAM and more

19 minute read

GLM, GAM and more

선형 모델의 가장 큰 강점이자 약점은 예측값이 특성의 가중합계로 모델링 된다는 것입니다. 그리고 선형 모델은 많은 가정도 필요합니다. 안좋은 소식은 이러한 가정들이 실제로는 적용되기 힘들다는 점입니다. 특성들이 주어졌을 때 결과값은 가우시안 분포가 아니거나 특성들은 서로 영향을 받고 특성과 결과값간의 광계가 비선형적인 경우를 말합니다. 좋은 소식은 통계 커뮤니티에서는 이런 선형 모델을 단순한 검에서 스위스 칼 수준으로 변형하여 수많은 변화를 거쳐왔습니다.

이번 장은 선형 모델을 더 깊게 다루지 않습니다. 대신 GLM(Generalized Linear Model) 및 GAM(Generalized Additive Model)과 같은 확장에 대한 개요를 다루며 약간의 직관을 드릴 수 있습니다. 읽은 후에는 선형 모형을 확장하는 방법에 대한 전체적인 개요를 알게될 수 있습니다. 먼저 선형 회귀 모형에 대해 자세히 알아보려면 선형 회귀 모형에 대한 챕터를 읽어보는 것이 좋습니다.

선형 회귀 모델의 공식을 다시 확인해 봅시다.

\[y=\beta_{0}+\beta_{1}x_{1}+\ldots+\beta_{p}x_{p}+\epsilon\]

선형 회귀 모델은 한 관측치에 대한 결과값 y가 p개의 특성들의 가중합계와 가우시안 분포를 따르는 에러 \(\epsilon\)로 표현됩니다. 데이터를 이 공식에 대입해서 모델에 대한 해석가능성을 얻을 수 있습니다. 특성의 효과는 덧셈식이고 이는 교효작용이 없다는 것을 뜻합니다. 그리고 관계식은 선형적이고 이는 특성이 한 단위만큼 증가하는 것이 예측값의 증가나 감소가 된다는 것을 의미합니다. 선형 모델은 추정 가중치라는 이름의 하나의 값으로 특성과 예측값간의 관계식을 표현할 수 있습니다.

그러나 이 단순한 가중합계는 현실의 예측 문제들에 대해서는 많은 제한이 있습니다. 이번 장에서는 고전적인 선형 회귀 문제에 대한 세 가지 문제점과 이를 해결할 수 있는 방법에 대해 배웁니다. 가정을 위해하는 문제는 더 많지만 다음을 통해서 세 가지만 살펴보도록 하겠습니다.


그림 4.8: 선형 모델의 세 가지 가정(왼쪽): 특성이 주어졌을때 결과값에 대한 가우시안 분포, 덧셈식(= 교호작용 없음) 그리고 선형 관계. 실제로는 보통 이런 가정을 따르지 않음(오른쪽): 결과값이 가우시안 분포가 아님, 특성간 교호작용이 있음, 그리고 관계식이 비선형적임

세 가지 문제 모두 해결책이 있습니다.

문제: 특성이 주어졌을 때 목표값 y가 가우시안 분포를 따르지 않는다. 예시: 하루 동안 내가 오토바이를 탈 시간이 얼마나 되는지 예측한다고 가정합시다. 날짜 유형, 날씨 등을 특성으로 합니다. 만약 선형 모델을 사용한다면 음수값을 갖는 시간을 예측할 수도 있습니다. 0분에서 끝나지 않는 가우시안 분포를 가정했기 때문입니다. 선형 모델로 확률을 예측하길 원한다면 음수 값을 갖거나 1보다 큰 확률을 얻을 수도 있습니다. 해결책: Generalized Linear Models (GLMs)

문제: 특성간 교호작용. 예시: 평균적으로 약한 비는 자전거를 타러 가고싶은 제 바람에 약간 부정적인 영향을 미칩니다. 그러나 여름에는 러시아워에 비가 오는 것을 오히려 반깁니다. 모든 자전거 타는 사람들은 집에 있고 저는 자전거 길을 타고 갈 수 있기 때문입니다. 이는 단순히 덧셈식의 모델로는 고려할 수 없는 시간과 날씨간의 교호작용입니다. 해결책: Adding interactions manually

문제: 특성들과 y간 진짜 관계식은 선형이 아닙니다. 예시: 0~25도 사이에 자전거를 타러 가고싶은 저의 바람에 대한 온도의 영향은 선형적입니다. 이는 0에서 1도씩 오르는 것이 20에서 21도로 올라가는 것과 마찬가지로 동일하게 자전거에 대한 바람을 증가한다는 것을 뜻합니다. 그러나 아주 높은 온도에서는 자전거를 타고싶은 동기가 사라지고 심지어는 감소됩니다. 날씨가 너무 더우면 자전거를 타고 싶지 않습니다. 해결책: Generalized Additive Models (GAMs); transformation of features

세 가지 문에 대한 해결책들은 이번 장에서 소개됩니다. 선형 모델에 대한 더 많은 모델들은 생략됐습니다. 여기서 모두 다루게 된다면 이 챕터는 이미 많은 책에서 다루는 내용을 또 책 안에 넣는 식이 될 것입니다. 그러나 여러분은 이미 이 책을 읽고 계시기 때문에 선형 모델의 확장판들에 대한 몇몇 문제와 해결을 만들놨습니다. 이번 장 마지막에 확인하실 수 있습니다. 해결책에 제시된 이름은 검색을 위해 명시한 것입니다.

비가우시안 분포 결과값 - GLMs

선형 모델은 입력 특성이 주어졌을 때 결과값이 가우시안 분포를 따른다고 가정합니다. 이 가정은 많은 경우 배제됩니다. 결과값은 범주형(암 vs 건강)일수도 있고, 숫자(자녀 수)일수도 있고, 사건의 발생 시간 (기계의 고장까지의 시간)이나 몇몇 아주 큰 값을 갖는 치우친 결과값(가구소득)일수도 있습니다. 선형 회귀 모델은 이런 모든 결과값의 유형을 모델링하기위해 확장시킬 수 있습니다. 이를 일반화 선형 모델(Generalized Linear Models, GLMs)라고 부릅니다. 이번 장에서는 GLM이라는 이름은 일반 프레임워크와 이 프레임워크의 특정 모델 모두에 사용합니다. GLM의 핵심 개념은 특성의 가중치합은 유지하지만 결과가 가우시안 분포를 따르지 않는 것을 허용하고 이 분포의 추정 기대값과 가중합계을 비선형 함수를 통해서 연결하는 것입니다. 예시로는 로지스틱 회귀 모델은 결과값에 대해 베르누이 분포를 가정하고 로지스틱 함수를 사용해서 기대값과 가중합계를 연결합니다.

GLM은 결과값의 유형에 따라 선택되는 연결 함수 g를 사용해서 가정한 분포의 기대값과 특성들의 가중합계를 수학적으로 연결합니다.

\[g(E_Y(y|x))=\beta_0+\beta_1{}x_{1}+\ldots{}\beta_p{}x_{p}\]

GLM의 세 가지 구성: 연결 함수 g, 가중합계 \(X^T\beta\) (선형 예측이라 불리기도 함) 그리고 \(E_Y\)를 정의한 지수족인 확률 분포.

지수족은 지수, 분포의 평균과 분산 그리고 몇몇 다른 파라미터를 포함하는 똑같은 공식으로 쓸 수 있는 분포의 집합입니다. 지수족만으로도 매우 큰 분야이기 때문에 수학적으로 자세하게 다루지는 않을 거고 그러고 싶지고 않습니다. 위키피디아에 지수족의 분포 목록이 있습니다. 이 목록의 어떤 분포든 GLM에 사용할 수 있습니다. 예측을 원하는 결과값의 유형을 기반으로 적절한 분포를 선택하면 됩니다. 무엇가는 카운트하는 것(예: 가구에 사는 자녀의 수)이 결과값이라면? 포아송 분포가 좋은 선택입니다. 결과값이 항상 양수라면(예: 두 사건 사이의 시간)? 지수 분포가 좋은 선택입니다.

GLM의 특별한 경우로 고전적인 선형 모델을 고려해 봅시다. 고전적인 선형 모델에서 가우시안 분포에 대한 연결 함수는 단순히 항등 함수입니다. 가우시안 분포는 평균과 분산을 파라미터로 가집니다. 평균은 평균적으로 얻을 거라 예상하는 값이고 분산은 평균을 중심으로 주변에 얼마나 많은 값이 있는지를 말합니다. 선형 모델에서 연결 함수는 특성들의 가중합계를 가우시안 분포의 평균에 연결합니다.

GLM 프레임워크에서 이 개념은 어떤 (지수족의)분포와 대체 연결 함수든 일반화할 수 있습니다. y가 특정 날에 누군가 커피를 얼마나 마실지와 같은 무엇가를 카운트 하는 것이라면 포아송 분포와 연결 함수로는 로그를 GLM에 사용할 수 있습니다.

\[ln(E_Y(y|x))=x^{T}\beta\]

로지스틱 선형 모델 또한 GLM입니다. 여기서는 베르누이 분포를 가정하고 로짓 함수를 연결 함수로 사용합니다. 로지스틱 회귀에서 사용되는 이진 분포의 기대값은 y가 1일 확률입니다.

\[x^{T}\beta=ln\left(\frac{E_Y(y|x)}{1-E_Y(y|x)}\right)=ln\left(\frac{P(y=1|x)}{1-P(y=1|x)}\right)\]

P(y=1)에 대해 이 방정식을 풀면 로지스틱 회귀 공식을 구할 수 있습니다.

\[P(y=1)=\frac{1}{1+exp(-x^{T}\beta)}\]

지수족의 각 분포들은 분포로부터 수학적으로 구할 수 있는 연결 함수가 있습니다. GLM 프레임워크는 분포와 독립적으로 연결 함수를 선택할 수 있습니다. 적절한 연결 함수를 어떻게 선택하는가? 완벽한 공식은 없습니다. 목표값의 분포에 대한 지식뿐만 아니라 이론적 고려와 모델이 실제 데이터에 얼마나 잘 학습될 수 있는지도 고려해야 합니다. 일부 분포의 경우는 연결 함수가 해당 분포에 적절하지 못한 값을 내어줄 수도 있습니다. 지수 분포의 경우 연결 함수가 음의 역함수가 되어 지수 분포 영역 밖의 음수 값을 갖는 예측값 낼 수 있습니다. 연결 함수는 어떤것이든 사용할 수 있기 때문에 분포의 도메인에 맞게 다른 함수를 사용하면 됩니다.

예시

GLM의 필요성을 강조하기 위해 커피를 마시는 행동에 대한 데이터로 예시를 만들었습니다. 여러분이 매일 커피를 마시는 행동에 대해 데이터를 수집한다고 가정해 봅시다. 만약 커피를 좋아하지 않는다면 티로 바꿉시다. 컵 개수에 따라 1에서 10까지 여러분의 스트레스 정도를 나타내고, 전날 얼마나 잘 잤는지도 1에서 10으로, 그리고 오늘 일을 했는지 안했는지도 기록합니다. 목표는 스트레스, 수면 그리고 일이라는 특성이 주어졌을 때 커피의 수를 예측하는 것입니다. 저는 200일 동안 이 데이터를 수집했습니다. 스트레스와 수면은 1에서 10까지 균등하게 분포했고 일의 여부는 50대 50이 였습니다 (what a life!). 매일마다 커피 수는 포아성 분포에서 발생했고 \(\lambda\)(포아송 분포의 기대값)는 수면, 스트레스 그리고 일의 특성들에 대한 함수로 모델링 했습니다. 이 이야기가 어떻게 흘러갈지 추측해보실 수 있습니다. “이제 이 데이터를 선형 모델로 모델링해 보자 … 음 안되네 … 포아송 분포의 GLM으로 해보자 … 와우! 이제 된다!”.

일정 기간 동안 커피 수인 목표 변수의 분포를 봅시다.


그림 4.9: 200일 동안의 커피 수의 분포

200일 중 76일은 커피를 마시지 않았고 가장 심한날은 7잔까지도 마셨습니다. 이제 커피 수를 예측하기 위해 수면 정도, 스트레스 정도 그리고 일 여부를 특성값으로 해서 선형 모델을 사용해 봅시다. 가우시안 분포를 가정했을 때 무엇이 잘못될까요? 잘못된 가정은 추정치를 무효화할 수 있습니다. 특히 가중치에 대한 신뢰구간이 그렇습니다. 더 명백한 문제는 예측값이 아래 그림과 같이 “허용”된 영역에 맞지 않다는 것입니다.


그림 4.10: 스트레스, 수면 그리고 작업으로 예측한 커피 수. 선형 모델은 음수 값을 예측합니다.

선형 모델은 음수 값을 갖는 커피 수를 예측하기 때문에 적절하지 않습니다. 이 문제는 일반화 선형 모델 (GLMs)로 해결할 수 있습니다. 연결 함수과 분포 가정을 바꿀 수 있습니다. 한 가지 가능성은 가우시안 분포는 유지하고 연결 함수를 항등 함수 대신 항상 log-link(지수 함수의 역수)와 같은 양의 예측값이 나오는 것으로 사용하는 것 입니다. 더 나은 경우: 데이터 생성 과정과 적절한 연결 함수에 해당하는 분포를 선택합니다. 결과값이 카운트이기 때문에 포아송 분포가 일반적인 선택입니다. 이때 연결 함수는 log입니다. 이 경우에 데이터는 포아송 분포로 생성되기까지 했으므로 포아송 GLM은 완벽한 선택입니다. 학습된 포아송 GLM은 아래와 같이 예측값의 분포를 나타냅니다.


그림 4.11: 스트레스, 수면 그리고 작업으로 예측한 커피 수. 포아송을 가정하고 log link를 사요한 GLM은 이 데이터에 적절한 모델입니다.

커피 수에 음수값이 없고 지금이 더 나아 보입니다.

GLM 가중치에 대한 해석

연결 함수와 함께 가정한 분포는 추정한 특성 가중치가 얼마나 해석될 수 있는지를 결정합니다. 커피 카운트 예시에서 포아송 분포와 log link인 GLM을 사용했고 이는 특성들과 예측값 간의 아래와 같은 관계식을 의미합니다.

\[ln(E(\text{coffees}|\text{stress},\text{sleep},\text{work}))=\beta_0+\beta_{\text{stress}}x_{\text{stress}}+\beta_{\text{sleep}}x_{\text{sleep}}+\beta_{\text{work}}x_{\text{work}}\]

가중치를 해석하기 위해서는 연결 함수에 역수를 취해야 예측값의 log에 대해서가 아닌 예측값에 대해 특성의 효과를 해석할 수 있습니다.

\[E(\text{coffees}|\text{stress},\text{sleep},\text{work})=exp(\beta_0+\beta_{\text{stress}}x_{\text{stress}}+\beta_{\text{sleep}}x_{\text{sleep}}+\beta_{\text{work}}x_{\text{work}})\]

모든 가중치가 지수 함수 안에 있기 때문에 효과 해석은 덧셈식은 아니지만 곱셈식은 될 수 있습니다. exp(a + b)은 exp(a)와 exp(b)의 곱으로 계산됩니다. 해석의 마지막 요소는 앞선 예시의 실제 가중치입니다. 아래 표는 추정한 가중치와 exp(가중치) 그리고 95% 신뢰구간입니다.

Name weight exp(weight) [2.5%, 97.5%]
(Intercept) -0.16 0.85 [0.54, 1.32]
stress 0.12 1.12 [1.07, 1.18]
sleep -0.15 0.86 [0.82, 0.90]
workYES 0.80 2.23 [1.72, 2.93]

1점씩 스트레스 수준이 올라갈 때마다 커피의 예측 수는 1.12만큼 곱해집니다. 1점씩 수면의 질이 높아질때마다 커피의 예측 수는 0.86씩 곱해집니다. 작업하는 날의 커피의 예측 수는 일하지 않는 날의 평균 2.23배입니다. 요약하자면 더 많은 스트레스, 더 적은 수면 그리고 더 많이 일할수록 더 많이 커피를 마십니다. 이번 섹션에서는 목표값이 가우시안 분포를 따르지 않을 때 유용한 일반화 선형 모델에 대해 조금 배웠습니다. 다음은 두 특성간의 교호작용을 선형 회귀에 통합할 수 있는 방법에 대해 보겠습니다.

교호작용

선형 회귀 모델은 한 특성의 효과가 다른 특성의 값에 모두 동일하게 관련이 없다(= 교호작용이 없음)를 가정합니다. 그러나 데이터에는 교효 작용이 있을 때도 있습니다. 자전거 렌트 수를 예측할 때 온도와 주중인지 아닌지에 대한 두 특성 사이에는 교효 작용이 있을 수 있습니다. 아마도 사람들은 일을 해야할 때 온도가 자전거 대여 수에 크게 영향을 미치진 않을 것 입니다. 사람들은 무슨일이 있어도 일을 해야하기 때문에 자전거를 빌릴 것이기 때문입니다. 그러나 일하지 않는 날에는 많은 사람들이 즐거움을 위해서 타지만 충분히 따뜻해야지만 탑니다. 자전거 대여에 관해서는 온도와 근무 여부 간의 교효 작용을 예상할 수 있습니다.

어떻게 선형 모델에 교효작용을 포함시킬 수 있는가? 선형 모델을 학습하기 전에 특성간 교호작용을 나타내는 특성 행렬에 열을 추가하고 하던대로 모델을 학습하면 됩니다. 선형 모델을 변경할 필요는 없기 때문에 어떤 면에서는 좋은 해결책라고 할 수 있습니다. 근무일과 기온 예시에서 새로운 특성을 추가할 것입니다. 이 특성은 일하지 않는 날은 0 일하는 날에는 근무일이 참조 범주라는 가정하에 기온 특성의 값을 가집니다. 데이터는 아래와 같습니다.

work temp
Y 25
N 12
N 30
Y 5

선형 모델을 사용하는 데이터 행렬과는 약간 다르게 보입니다. 아래 표는 어떤 교호작용도 지정하지 않은 경우 모델을 위해 준비된 데이터가 어떻게 보이는지를 보여줍니다. 일반적으로, 이 변형은 통계 소프트웨어에 의해 자동적으로 수행됩니다.

Intercept workY temp
1 1 25
1 0 12
1 0 30
1 1 5

첫 번째 열은 절편 항입니다. 두 번째 열은 범주형 특성을 인코딩한 것입니다. 0은 참조 범주 그리고 1은 그외의 경우 입니다. 세 번째 열은 기온입니다.

기온과 근무 여부 특성간 교호작용을 고려하여 선형 모델을 사용할 경우 교효작용에 대한 열을 추가해야 합니다.

Intercept workY temp workY.temp
1 1 25 25
1 0 12 0
1 0 30 0
1 1 5 5

새로운 열 “workY.temp”는 두 특성 간의 교호작용을 나타냅니다. 새로운 특성은 근우 여부에 대한 특성이 참조 범주(“N” 일하지 않는 날)인 경우 관측치에 대한 값은 0이고 다른경우는 기온 특성의 관측치 값으로 가정합니다. 이러한 유형의 인코딩 방법으로 선형 모델은 두 근무 유형에 따라 기온의 다른 선형 효과를 학습할 수 있습니다. 이것이 바로 두 특성 간의 교효작용 효과입니다. 교효작용 항 없이 범주형 그리고 연속형 특성의 결합 효과는 서로 다른 범주에 대해 수직으로 이동시킨 직선으로 설명될 수 있습니다. 교호작용을 포함 한다면 연속형 특성의 효과가 각 범주별로 다른 값을 갖을 수 있게 합니다.

두 범주형 특성에 대한 교호작용도 비슷한 원리입니다. 범주간 결함을 나타내는 특성을 추가적으로 만듭니다. 아래는 근무여부(work)와 범주형 날씨 특성(wthr)을 포함하는 몇가지 인위적으로 만든 데이터입니다.

work wthr
Y 2
N 0
N 1
Y 2

다음은 교호작용 항을 포함한 후 입니다.

Intercept workY wthr1 wthr2 workY.wthr1 workY.wthr2
1 1 0 1 0 1
1 0 0 0 0 0
1 0 1 0 0 0
1 1 0 1 0 1

첫 번째 열은 절편을 추정하기 위해 사용됩니다. 두 번째 열은 근무 여부에 대한 특성입니다. 세네 번째 열은 날씨 특성에 대한 열입니다. 열이 두 개나 필요한 이유는 하나는 참조 범주로 하고 다른 두 가지 범주에 대한 효과를 고려하기 위한 두 가중치가 필요하기 때문입니다. 다른 남은 열들이 교호작용을 나타냅니다. 두 특성의 각 범주별(참조 범주는 제외)로 두 범주 모두 특정 범주값을 가지면 1 아니면 0인 새로운 특성을 만듭니다.

두 연속형 특성에 대해 교호작용 열은 더 쉽게 만들 수 있습니다. 단순히 두 연속형 특성을 곱하면 됩니다.

교호작용을 자동으로 찾고 교호작용 항을 추가하는 방법들은 많습니다. 그 방법 중 하나는 RuleFit에서 확인할 수 있습니다. RuleFit 알고리즘은 먼저 교호작용 항을 측정한 다음 교호작용을 포함하여 선형 회귀 모델을 추정합니다.

예시

선형 회귀 챕터에서 이미 모델링 해봤던 자전거 대여 예측으로 다시 돌아가봅시다. 이번에는 추가적으로 기온과 근무일에 대한 특성간 교호작용을 고려할 것입니다. 그 결과는 아래와 같이 추정 가중치값들과 신뢰 구간을 나타냅니다.

Name Weight Std. Error 2.5% 97.5%
(Intercept) 2185.8 250.2 1694.6 2677.1
seasonSUMMER 893.8 121.8 654.7 1132.9
seasonFALL 137.1 161.0 -179.0 453.2
seasonWINTER 426.5 110.3 209.9 643.2
holidayHOLIDAY -674.4 202.5 -1071.9 -276.9
workingdayWORKING DAY 451.9 141.7 173.7 730.1
weathersitMISTY -382.1 87.2 -553.3 -211.0
weathersitRAIN/… -1898.2 222.7 -2335.4 -1461.0
temp 125.4 8.9 108.0 142.9
hum -17.5 3.2 -23.7 -11.3
windspeed -42.1 6.9 -55.5 -28.6
days_since_2011 4.9 0.2 4.6 5.3
workingdayWORKING DAY:temp -21.8 8.1 -37.7 -5.9

추가한 교호작용의 효과는 음수(-21.8)이고 95% 신뢰구간에서 확인할 수 있듯이 0을 포함하지 않고 0으로 부터 상당히 차이가 나는 것을 보여줍니다. 그보다, 이 데이터는 iid(independent and identically distributed)가 아닙니다. 서로 가까운 날들끼리는 서로 독립적이지 않기 때문입니다. 신뢰 구간은 오해의 일으킬 수 있기 때문에 적절히 받아들이면 됩니다. 교호작용 항은 관련된 특성들의 가중치에 대한 해석을 바꿉니다. 근무일인 경우 기온은 부정적인 효과를 갖는가? 비록 표에서는 비전문가인 사용자에게 그렇다고 제안했지만 대답은 no 입니다. 여기서 “workingdayWORKING DAY:temp”의 교호작용 가중치는 따로 해석할 수 없습니다. 해석을 “다른 모든 특성들은 그대로인데 근무날 기온의 교호작용 효과가 커지면 자전거 예측 수는 감소하는군”으로 할 수 있기 때문입니다. . 그러나 교호작용 효과는 오직 기온의 주 효과만 더합니다. 오늘은 근무하는 날이고 온도가 1도씩 더 따듯해지면 어떤일이 발생할지 알고싶다고 가정해 봅시다. 가중치가 얼마나 증가할지 알기위해서는 “temp”와 “workingdayWORKING DAY:temp”에 대한 두 가중치를 더해야 합니다.

교호작용을 시각적으로 보면 이해가 더 쉽습니다. 범주형 그리고 연속형 특성간 교호작용을 나타냄으로써 하나가 아닌 기온에 대해 두 기울기를 구할 수 있습니다. 사람들이 일하지 않는 날(“NO WORKING DAY”)에 대한 기온의 기울기는 표에서 바로 확인할 수 있습니다 (125.4). 사람들이 일하는 날(“WORKING DAY”)의 기온 기울기는 두 기온 가중치의 합입니다(125.4 - 21.8 = 103.6). 온도가 0인 ‘NO WORKING DAY’ 직선의 절편은 선형 모델의 절편 항으로 결정됩니다(2185.8). 온도가 0인 ‘WORKING DAY’ 직선의 전편은 절편 항 + 일하는 날의 효과로 결정됩니다(2185.8 + 451.9 = 2637.7).


그림 4.12: 선형 모델로 예측한 자전거 수에 대한 기온과 근무일의 효과(교호작용 포함). 효과적으로, 근무일 특성에 따른 각 범주별로 기온에 대한 두 경사를 구했습니다.

비선형 효과 - GAMs

세상은 선형적이지 않습니다.

선형 모델에서 선형성은 하나의 관측치가 특정 특성에서 어떤 값을 갖던지간에 한 단위만큼 값이 커지면 항상 예측값에 똑같은 효과를 가진다는 것을 의미합니다. 그렇다면 과연 온도가 10도에서 1도 올라가는 것은 이미 40도에서 온도가 더 올라가는 때와 자전거 대여 수가 항상 같은 효과를 갖는다고 가정하는 것이 합리적인가? 직관적으로 온도가 10에서 11도로 상승하는 것은 자전거 대여에 긍정적인 효과를 주고 40에서 41도로 올라가는 것은 부정적인 효과를 줄것이라고 예상하는데 이 역시 책에 있는 많은 예시에서도 확인할 수 있습니다. 기온 특성은 선형적이고 자전거 대여 수에 긍정적인 효과를 주지만 어느 순간에는 점차 줄어들어 심지어는 고온인 경우 부정적인 효과를 가지게 됩니다. 선형 모델은 이를 고려하지 않고 (유클리드 거리를 최소화 함으로써) 가장 좋은 선형 평면을 찾을 것입니다.

다음과 같은 방법 중 하나를 사용해서 비선형적인 관계를 모델링 할 수 있습니다.

  • 특성에 대한 간단한 변환 (예: 로그)
  • 특성의 범주화
  • 일반화 가산 모델 (Generalized Additive Models, GAMs)

각 방법에 대해 자세히 다루기 전에 세 가지 방법을 모두 설명하는 예를 들어봅시다. 다시 자전거 대여 데이터를 사용하고 자전거 대여 수를 예측하기 위해 온도 특성 만으로 선형 모델을 학습했습니다. 다음 그림은 추정된 경사를 표준 선형 모델, 온도를 로그 변환한 선형 모델, 범주형 특성으로 온도를 처리한 선형 모델 그리고 회귀 스플라인 (GAM)을 보여줍니다.


그림 4.13: 기온 특성만 사용하여 자전거 대여 수를 예측함. 선형 모델(좌측 상단)은 데이터에 적합하지 않습니다. 한 가지 해결방법은 특성을 로그 변환(우측 상단)하거나, 좋은 결정이 아닐 수 있지만 범주화(좌측 하단)하거나 온도에 따라 부드러운 곡선으로 자동적으로 맞춰주는 일반화 가산 모델(우측 하단)을 사용하는 것입니다.

특성 변환

종종 특성에 대해 로그 변환을 사용하기도 합니다. 로그를 사용하는 것은 온도가 10배 커질 때 마다 자전거 수에 대해 동일한 선형 효과를 가진다는 것이고 섭씨 1도에서 10도로 바뀌는 것은 0.1에서 1로 바뀌는 것과 같은 효과가 있다고 할 수 있습니다. 특성 변환에 대한 다른 예시는 제곱근, 제곱 함수 그리고 지수 함수 입니다. 특성 변환을 사용하는 것은 데이터에서 이 특성의 열을 로그와 같이 특성의 함수로 대체하고 선형 모델을 학습한다는 뜻 입니다. 몇몇 통계 프로그램에서는 선형 모델을 불러올때 변환을 할 수 있게 합니다. 선택한 변환에 따라 특성의 해석도 바뀝니다. 로그 변환을 했다면 선형 모델에서 해석은 “특성의 로그값이 1만큼 증가했다면 예측값은 그에 해당하는 가중치만큼 증가했을거야”라고 할 수 있습니다. 항등 함수가 아닌 연결 함수로 GLM을 사용했다면 두 가지 변환을 모두 해석에 통합해야하기 때문에 더 복잡해집니다(로그와 지수처럼 서로 변환을 취소하게하는 경우 해석이 더 쉬워기 때문에 이러한 경우는 제외).

특성 범주화

비선형 효과를 다룰 수 있는 또라는 방법은 특성을 이산화하는 것(범주화 특성으로 바꾸는 것)입니다. 예를 들어 기온을 [-10, -5), [-5, 0), … 등등 20개의 구간 으로 나눌 수 있습니다. 연속형 온도 대신 범주화한 온도를 사용하는 경우 각 수준별 개별적인 추정치를 가지기 때문에 선형 모델은 단계 함수를 추청해야 합니다. 이 방법의 문제는 더 많은 데이터가 필요하는 것이고 과적합이 될 수 있고 특성을 의미있게 이산화하는 방법이 명확하지 않다는 것입니다(동일한 구간 또는 분위수로? 얼마나 많은 구간 수만큼?). 저라면 아주 적절한 상황에서만 이산화를 할 것입니다. 예를 들어 다른 연구와 비교할 수 있는 모델을 만들때입니다.

Generalized Additive Models (GAMs)

(일반화) 선형 모델이 비선형 관계를 “단순하게” 학습할 수 없는 이유는 무엇인가? 그 이유에 대한 대답을 하기 위한것이 바로 GAMs의 동기가 됩니다. GAMs는 관계가 반드시 가중합계이어야 한다고 제한하지 않고 결과값이 각 특성의 임의의 함수(arbitrary functions)에 대한 합으로 모델링 될 수 있도록 합니다. 수학적으로 GAM의 관계는 다음과 같습니다.

\[g(E_Y(y|x))=\beta_0+f_1(x_{1})+f_2(x_{2})+\ldots+f_p(x_{p})\]

수식은 GLM에서 \(\beta_j{}x_{j}\)가 \(f_j(x_{j})\)으로 바꼈다는 것을 제외하고는 거의 비슷합니다. GAM의 핵심은 여전히 특성 효과의 합계를 사용한다는 것이지만, 몇몇 특성과 결과값 간의 비선형 관계를 허용하기위한 옵션이 있습니다. 특성들을 선형적으로 다루기위해 \(f_j(x_{j})\)을 \(x_{j}\beta_j\)의 형식으로 제한할 수 밖에 없기 때문에 선형 효과 또한 프레임워크로 다룹니다.

가장 중요한 질문은 비선형 함수을 학습할 수 있는 방법입니다. 대답은 “스프라인(spline)” 또는 “스플라인 함수(“spline function)” 입니다. 스플라인은 임의의 함수를 근사시키기 위해 결합할 수 있는 함수입니다. 좀 더 복잡한 것을 만들기위해 레고를 쌓는 것과 비슷합니다. 스플라인 함수를 정의하기위한 수많은 방법이 있기 때문에 조금 혼라스러울 수 있습니다. 스플라인에 대해 더 알기를 원한다면 무운을 빌겠습니다. 자세한 내용은 다루지 않겠지만 스플라인에 대한 직관적인 개념은 다루도록 하겠습니다. 스플라인을 이해하기 위해 저에게 가장 큰 도움이 되었던 것은 각각의 스플라인 함수를 시각화하고 데이터 행렬이 어떻게 수정되는지 확인하는 것이였습니다. 예를 들어서 스플라인으로 기온을 모델링하기 위해 데이터에서 기온 특성을 지우고 각각 스플라인 함수를 나타내는 4개의 열로 교체합니다. 보통 더 많은 스플라인 함수가 있지만 예시를 위해서 숫자를 줄였습니다. 새로운 스플라인 특성들에 대한 각 관측치에 해당하는 값은 관측치의 온도 값에 따라 달라집니다. 모든 선형 효과로 GAM은 이 스플라인 가중치들 또한 추청합니다. GAMs는 이 값들을 0에 가깝게 만들기위해 가중치에 패널티를 부여합니다. 이 방법은 스플라인의 유연성을 줄이고 과적합을 피할 수 있게 합니다. 곡선의 유연성을 조절하기위해 사용되는 매끄럼움의 파라미터는 교차 검증으로 조절됩니다. 패널티 항 없이 스플라인으로 모델링한 비선형은 세련된(?)(fancy) 특성을 다루는 방법입니다(이런일은 쉽지않다 라는 의미인거 같음).

온도만 사용해서 GAM으로 자전거 대여 수를 예측한 예시에서 모델의 특성 행렬은 다음과 같습니다.

(Intercept) s(temp).1 s(temp).2 s(temp).3 s(temp).4
1 0.93 -0.14 0.21 -0.83
1 0.83 -0.27 0.27 -0.72
1 1.32 0.71 -0.39 -1.63
1 1.32 0.70 -0.38 -1.61
1 1.29 0.58 -0.26 -1.47
1 1.32 0.68 -0.36 -1.59

각 행은 데이터의 관측치를 나타냅니다. 각 스플라인 열은 특정 온도값에서 스플라인 함수의 값을 포함하고 있습니다. 아래 그림은 스플라인 함수가 어떻게 생겼는지를 나타냅니다.


그림 4.14: 온도 효과를 매끄럽게 모델링하기 위해서 4개의 스플라인 함수를 사용했습니다. 각 특성값은 4개의 스플라인 값입니다. 한 관측치의 온도가 30 °C일 때 첫 번째 스플라인 특성은 -1, 두 번째는 0.7, 세 번째는 -0.8 그리고 네 번째는 1.7입니다.

GAM은 각 온도 스플라인 특성에 가중치를 할당합니다.

Name weight
(Intercept) 4504.35
s(temp).1 -989.34
s(temp).2 740.08
s(temp).3 2309.84
s(temp).4 558.27

추정된 가중치를 스플라인 함수를 가중 합계한 곡선은 다음과 같습니다.


그림 4.15: 자전거 대여 수를 예측한 온도의 GAM 특성 효과(특성은 온도만 사용됨)

매끄러운 효과에 대한 해석은 적합시킨 곡산을 육안으로 합니다. 스플라인은 보통 평균 예측값을 중심으로 퍼져있고 곡선이 나타내는 것은 평균 예측값과의 차이입니다. 예를 들어 섭씨 0도에서 예측한 자전거 대여 수는 평균 에측값보다 더 낮은 3,000대 입니다.

장점

선형 모델의 모든 확장들은 그 자체로 우주의 일부분입니다. 만약 여러분이 선형모델로 문제를 풀어야하는 상황에 있다면 그 문제를 해결할 수 있는 선형 모델을 찾을 수 있을 것입니다.

대부분 방법들이 수십년 동안 사용된 것 입니다. GAMs는 거의 30년정도 되었습니다. 산업에 있는 많은 연구자들와 현업자들은 선형 모델로 많은 “경험”을 했고 이 방법들은 지금까지도 계속 많은 곳에서 사용되고 있습니다.

예측 외에도 모델을 사용하여 추론하고 데이터에 대한 결론을 도출할 수 있습니다. 모형의 가정은 위반되지 않습니다. 가중치에 대한 신뢰 구간, 유의성 검정, 예측 구간 그리고 등등 더 많은 것을 구할 수 있습니다.

통계 소프트웨어는 일반적으로 GLMs, GAMs 그리고 더 특별한 선형 모델들을 학습하기 위한 좋은 인터페이스들을 가지고 있습니다.

많은 머신러닝 모델의 불투명성은 1) sparseness의 부족(많은 형상이 사용됨) 2) 비선형 방식으로 처리되는 특성이 사용됨으로써 효과를 설명하기 위해 한 개 이상의 가중치가 필요함을 의미하며, 3) 특성 간의 상호작용을 모델링하는 것입니다.

선형 모델이 해석성이 뛰어나지만 적합성이 낮은 경우가 많다고 가정하면 이 장에서 설명한 확장 기능은 해석성을 일부 유지하면서 보다 유연한 모델로 원활하게 전환할 수 있는 좋은 방법을 제공합니다.

단점

장점으로서 저는 선형 모델이 그 자체로 우주의 일부하고 했습니다. 단순 선형 모델을 확장할 수 있는 방법의 수는 매우 많습니다. 그러나 초보자에게는 해당되지 않습니다. 사실, 여러 개의 평행 우주가 있습니다. 왜냐하면 많은 연구자들과 실무자들은 같은 일을 해도 다른 방법으로 여러가지를 사용하기 때문에 이를 알려고하면 더 혼란스러울 수 있습니다.

선형 모델의 너무 많은 부분을 수정하려하면 모델을 해석할 수 없게 됩니다. 항등 함수가 아닌 연결 함수(GLM)는 해석을 더 복잡하게 합니다. 상호 작용은 또한 해석을 복잡하게 합니다. 비선형 특성 효과는 로그 변환과 같이 직관적이지 않거나 더 이상 단일 숫자(예: 스플라인 함수)로 요약할 수 없습니다.

GLM, GAM 등은 데이터 생성 프로세스에 대한 가정에 의존합니다. 이 가정이 지켜지지 않으면 가중치의 해석이 더 이상 유효하지 않습니다.

랜덤 포리스트 또는 그레디언트 트리 부스팅과 같은 트리 기반 앙상블의 성능은 대부분의 경우 가장 정교한 선형 모델보다 우수합니다. 이는 kaggle.com과 같은 플랫폼에서 수상 모델을 통해 알 수 있었습니다.

소프트웨어

이 장의 모든 예는 R 언어를 사용하여 작성되었습니다. GAMs의 경우, gam 패키지가 사용되었지만 다른 많은 패키지가 있습니다. R에는 선형 회귀 모델을 확장하는 패키지가 엄청나게 많습니다. 다른 분석 언어들 중에서 단연 최고라 할 수 있는 R은 선형 회귀에 대한 거의 모든게 있습니다. Python에서 GAMs을 구현한 것(pyGAM)도 있지만, 구현이 완벽하지는 않습니다.

더 많은 확장들

약속한 대로, 다음은 선형 모델에서 발생할 수 있는 문제 목록이고 이 문제에 대한 해결책의 이름은 즐겨찾기에 추가하시면 됩니다.

데이터가 독립적이고 동일한 분산(iid)이라는 가정을 위반하는 경우
예를 들어, 동일한 환자에게 반복 측정을 수행합니다.
혼합 모형(mixed models) 또는 일반화 추정 방정식(generalized estimating equations)을 검색하세요.

모델에 이질적 오류가 있는 경우
예를 들어, 집값을 예측할 때, 모델 오류는 대개 고가의 주택에서 더 크기 때문에 선형 모델의 균일성을 위반합니다.
강성 회귀 분석(robust regression)을 검색하세요.

모델에 큰 영향을 미치는 이상치가 있는 경우
강성 회귀 분석(robust regression)을 검색합니다.

사건이 발생할 때까지의 시간을 예측하고 싶은 경우
사건 발생 시간 데이터는 일반적으로 관측이 중단된 후 제공되므로 일부 경우에는 사건을 관찰할 시간이 부족합니다. 예를 들어, 한 회사는 얼음 기계의 고장을 예측하고 싶어하지만, 2년 동안의 데이터만 가지고 있습니다. 일부 모델은 2년이 지난 후에도 그대로 유지되지만 나중에 실패할 수 있습니다.
모수 생존 모델(parametric survival models), 콕스 회귀 분석(cox regression), 생존 분석(survival analysis)을 검색하세요.

예측 결과가 범주형인 경우
결과에 두 개의 범주가 있는 경우 로지스틱 회귀 모델을 사용하여 범주의 확률을 모델링합니다.
범주가 더 많은 경우 다중 회귀(multinomial regression)를 검색하세요.
로지스틱 회귀 분석과 다중 회귀 분석은 모두 GLM입니다.

순서가 있는 범주를 예측하고 싶은 경우
예를 들어 학교 성적이 있습니다.
비례 확률 모델(proportional odds model)을 검색하세요.

결과값이 카운트인 경우
포아송 회귀 분석(Poisson regression)을 검색하세요.
포아송 모델도 GLM입니다.
또한 카운트 값에 0이 매우 빈번하다는 문제가 있을 수 있습니다.
0으로 팽창된 포아송 회귀 분석(*zero-inflated Poisson regression), 허들 모델(hurdle model)을 검색하세요.

올바른 인과관계 결론을 도출하기 위해 모델에 어떤 특징을 포함해야 하는지 잘 모르겠는 경우
예를 들어, 약물이 혈압에 미치는 영향을 알고 싶습니다. 그 약은 어떤 혈액 값에 직접적인 영향을 미치고 이 혈액 값은 결과에 영향을 미칩니다. 혈액 값을 회귀 모형에 포함해야 하는가? 원인 추론(causal inference), 중간 분석(mediation analysis)을 검색하세요.

데이터가 누락된 경우
multiple imputation을 검색하세요.

모델에 사전 지식을 통합하고 싶은 경우
Bayesian 추론(Bayesian inference)을 검색하세요.

요즘 기분이 좀 우울해요. “Amazon Alexa Gone Wild!!! Full version from beginning to end”를 검색하세요. :)