Saturday, April 29, 2017

ISLR 2.2 - An Introduction to Statistical Learning (with applications in R)



pdf 다운로드 링크
구매 링크 (네이버 책)

2. 통계 학습 Statistical Learning

2.2 모델 정확도 평가 Assessing model accuracy


이 책에서는 선형 모델보다 복잡한 다양한 모델을 소개할 예정입니다. 왜 이렇게 많은 모델이 존재하고 이걸 다 공부해야 할까요? 그냥 제일 좋은거 하나를 쓰면 되지 않을까요? (아님) 안타깝게도 모든 경우에 제일 적합한 최고의 모델같은건 없습니다. 데이터 셋에 따라 다른 모델의 성능이 더 좋을 수 있고 문제에 따라, 목적에 따라 다 다를 수 있습니다.

제일 좋은 모델을 고르려면 어떤 모델이 좋은지를 평가할 수 있어야합니다. 이 부분을 알아봅시다.

2.1.1. 학습 성능 평가 Measuring the quality of fit

데이터 셋이 주어져있을 때 여기에 제일 잘 맞는 모델을 고르려면 모델의 성능을 수치화해야합니다. 회귀 regression 문제에서는 흔히 평균 제곱 오차 (MSE, Mean square error)를 많이 사용합니다. 말 그대로 오차의 제곱을 평균낸 것이죠.

$MSE = \frac{1}{N} \sum_{i=1}^n (y_i - \hat{f}(x_i))^2$

$y_i$가 정답, $\hat{f}(x_i)$가 우리의 예측 값이구요. 예측값이 정답에 가까울수록 MSE는 작아지게 됩니다.

학습 셋에서 구한 MSE를 '학습MSE' (training MSE)라고 하죠. 그런데 우리가 진짜로 신경쓰는건 학습MSE가 아니라, 생전 처음 보는, 새로운 데이터에서 모델의 MSE - 즉 시험MSE (test MSE)입니다. 예를 들어 주가 예측 모델을 짰다고 하면, 과거의 주가 패턴을 분석해서 모델을 만들고 학습시키겠죠. 그런데 이 모델의 학습MSE가 완벽해서 과거의 주가를 100% 맞추는건 아무 의미가 없습니다. 시험 셋에서의 성능 -- 즉 내일 주가를 맞추느냐! 가 중요하겠죠. 그래야 돈을 버니까!

때론 시험 셋이 있어서, 시험셋에서 성능이 제일 잘 나오는 모델을 고르면 되기도 합니다. 그런데 아닐때도 있죠. 그럼 어떻게 해야할까요? 흔한 오해는 학습MSE를 보고 판단하는겁니다.



그림 2.9를 보시죠. 우측 회색 선이 학습MSE, 빨간 선이 시험MSE입니다. 모델의 복잡도가 올라갈수록 학습 MSE는 계속 감사합니다. 왜냐면, 복잡한 모델일수록 어떻게든 학습 데이터에 모델을 "끼워 맞추는" 식으로 학습할 여지가 많기 때문입니다. 왼쪽 그림의 녹색 그래프가 바로 그런거죠. 복잡한 데이터에 막 그래프가 쭈글쭈글거리면서 끼워맞춘거죠.

이런 경우에 빨간 선, 즉 시험 셋의 MSE가 제일 적은 점(파랑 네모)로 골라야 최적의 선택이 됩니다.

2.2.2. 바이어스-베리언스 트레이드 오프 The bias-variance trade-off


시험MSE(의 제곱)는 아래와 같이 세 항으로 나눌 수 있습니다.

$E(y_0 - \hat{f}(x_0))^2 = Var(\hat{f}(x_0)) + [Bias(\hat{f}(x_0))]^2 + Var(\epsilon)$

여기에서, 역시 $\epsilon$은 우리가 어떻게 할 수가 없습니다. 따라서 여기에 있는 Variance와 Bias를 최소화하는것이 좋겠죠.

그런데 대체 여기에서 말하는 Variance와 Bias가 뭘까요?

Variance는 데이터셋을 바꾸면 일어날 수 있는 $\hat{f}$의 변화입니다. 만일 Variance가 크다면, 같은 모델을 학습 데이터만 바꿔도 오차가 확 증가합니다.

Bias는 실제로 일어나는, 훨씬 복잡한 상황을 이보다 단순한 함수 $\hat{f}$를 사용함으로써 생기는 오차입니다. 예를 들어 실제로 일어나는 상황엔 입력-출력 사이에 비선형성이 작용하는데 이걸 선형으로 모델링한다면 어쩔 수 없이 오차가 생기게됩니다.

일반적으로, 복잡하고 유연한 모델을 쓸수록 Variance가 증가하고 Bias는 감소합니다. 당연히 그렇겠죠. 그러나 이는 실제 문제가 어떤지, 그리고 우리가 어떤 데이터를 가지고 있는지에 따라 달라집니다.

2.2.3. 분류기 설정 The classification setting

그동안은 MSE를 쓰면서 회귀 모델을 가정했습니다. 이번엔 분류의 경우에 어떻게 되나 보도록 합시다. 우선 평가 방법으로 흔히 오차율 error rate을 계산합니다.

$\frac{1}{n}\sum_{i=1}^n I(y_i \neq \hat{y}_i)$

이 식에서 $\hat{y}_i$는 i번째 입력 데이터로 모델이 예측한 값입니다. 그리고 $I()$는 indicator 함수라고 흔히 부르는데, $I(true)=1$, $I(false)=0$ 으로 정의됩니다. 즉, 예측 값이 맞다면 -- 예를 들어 숫자 인식기라면 0-9중에 3을 예측했고, 실제로 정답이 3이면 $I()$가 1이 되는 것이죠. 따라서 최종적으로 100개를 테스트했는데 정답이 95개면 오차율은 $5/100=0.05$가 나오는 간단한 방식입니다.

베이즈 분류기 The Bayes Classifier
베이즈 분류기는 아래의 식을 (Bayes rule) 최대화하는 클래스 $j$를 고르는 분류기입니다.

$Pr(Y=j | X=x_0)$

쉬운 예를 들면, 만일 클래스가 두개인 이진분류 binary classification이면, $Pr(Y=1
 X=x_0 > 0.5 $이면 $Y=1$로 예측을 하는 방식입니다.

베이즈 분류기는 테스트 오차율을 최소화하는 규칙입니다. 이 오차율을 베이즈 오차율 Bayes error rate이라고 부릅니다.

KNN; K-nearest neighbors
그럼 베이즈 분류기를 쓰면 참 좋겠죠? 그러나 실제로는 조건부확률 $Pr(Y=j | X=x_0$를 모르기 때문에 불가능합니다. 즉 베이즈 분류기는 영원히 도달할 수 없는 궁극의 목표같은거죠. 이 조건부 확률을 추정하는 방법이 여러가지가 있는데 그 중 하나가 KNN입니다.




KNN은, 학습 데이터의 $X$를 보고, 테스트 데이터 $x$가 들어왔을 때, $x$ 근처의 가장 가까운 값 $K$개의 클래스를 살펴보고 다수결로 여기에 쫓아가는 방식입니다. 즉 자기 주변의 값을 보고 비슷한걸로 가는, 매우 직관적인 방법입니다.

$K$가 1이면 무조건 제일 가까운걸 쫓아갑니다. 반대 극단으로, 학습 셋이 100개의 데이터인데 $K$가 100이라면 무조건 전체 학습 셋에서 제일 많은 라벨을 쫓아가는거죠. $K$가 작을수록 decision boundary - 클래스를 결정짓는 경계선이 울퉁불퉁 꼬불꼬불해집니다.


여기에서도 적당한 $K$를 고르는것이 중요합니다. 아래 그림을 보면 $1/K$가 증가할수록 -- 즉 $K$가 감소할수록 -- 학습 오차는 줄어들지만 테스트 셋 오차는 어느순간 오히려 증가합니다.


2.3 Lab: Introduction to R


PDF파일을 보고 직접 해보시길 바랍니다.


ISLR 2.1 - An Introduction to Statistical Learning (with applications in R):



pdf 다운로드 링크
구매 링크 (네이버 책)

2. 통계 학습 Statistical Learning

2.1. 통계 학습이란? What is statistical learning?


통계 학습을 설명하기 위해 여기에서는 간단한 예를 하나 듭니다. (통계) 컨설턴트로 업무를 맡게 되었고 고객이 매출을 늘리기 위해 어떤 광고를 어떻게 집행해야하는지 궁금해하는 상황이라고 가정해보죠. 200개의 다른 시장 자료가 있고, 각각은 TV/라디오/신문 광고를 얼마씩 집행했으며 발생한 매출인지를 정리한 자료입니다. 예를 들어 TV가 효과가 제일 좋고, 라디오는 별로니 양을 줄이시고, 이런 컨설팅을 해줄 수 있겠죠. 아래 그림 (그림 2-1)같은 형태가 될테구요.


이 상황이라면 종류별 광고 예산을 입력 변수 input variable으로, 매출 sales을 출력 변수 output variable로 놓을 수 있습니다. 기호를 쓴다면 $X_1$, $X_2$, $X_3$이 각각 TV/라디오/신문 광고 집행 비용에 해당하겠죠. 출력은 $Y$가 되구요.

이 식을 좀 더 일반적으로 쓰면, 입력을 $X=(X_1, X_2, .., X_p)$로 놓고 이 입력과 출력간에 어떤 관계가 있는지를 알아내는게 우리의 목적이 됩니다. 수식으로 쓰면..

$Y = f(X) + \epsilon$
가 되게습니다.
이 식에서 $f$가 뭔지는 지금 모르고, $\epsilon$은 뭔진 모르지만 $X$완 관계 없는 추가적인 노이즈가 됩니다. 평균은 0이구요. 이렇게 가정을 하면 $f$는 $X$와  $Y$의 관계를 규정하는 함수가 됩니다.

2.1.1. f를 추정하는 이유

$f$를 추정하는 이유는 두가지가 있습니다. 예측 prediction과 추론 inference 입니다.

Prediction
$X$는 알지만 $Y$를 모르는 경우가 보통입니다. 이럴 때 $f$의 추정값 $\hat{f}$를 안다면 출력값을 역시 추정 $\hat{Y}$할 수 있겠죠. 

$\hat{Y}=\hat{f}(X)$

이렇게요. 위에서 $\epsilon$의 평균이 0이라고 가정했기때문에 추정치는 평균적으로 $\epsilon$을 무시한거구요. 이렇게 값을 예측하는 경우에 $\hat{f}$을 블랙박스로 생각합니다. 즉, 그 구조가 뭔지는 알바 아니라는거죠. 정확한 예측만 한다면.

$\hat{Y}$의 정확도는 줄일 수 있는 에러 reducible error와 우리가 어찌할 수 없는 에러 irreducible error 두 가지에 달려있습니다. "완벽한" 함수 $f$를 찾았다 하더라도 이를 이용한 추정치 $\hat{Y}=f(X)$는 오차 $\epsilon$이 있습니다. 왜냐하면 $\epsilon$를 처음부터 그렇게 정의했기 때문입니다. 이 $\epsilon$ 때문에 생기는 오차를 irreducible error라고 부릅니다.

예를 들어, $\epsilon$는 애당초 우리가 측정을 안하는 값의 영향일수가 있겠죠. 위의 예를 들면 티비/신문/라디오랑 관계 없는 다른 요소가 (당연히) 매출에 영향을 줄 것이고 따라서 저 데이터로 아무리 노력을 해도 그 부분은 모델에 넣을 수가 없습니다.

이 책에서는 우리가 데이터로 모델링할 수 있는 오차인 reducible error를 줄이는데 초점을 둡니다.

Inference
예측도 좋지만, 대체 어떤 과정으로 이런 일이 일어나는지 그 내부 논리/구조를 알고싶을 수도 있겠죠. 이렇게 모델을 추론하기 위해 $f$를 추정 estimate합니다. 책에는 3가지로 나눴지만 결국은 
어떤 입력이 출력과 어떤 관계가 있는지
를 알아보는 일 입니다.

2.1.2 어떻게 $f$를 추정하나요?

앞으로 다양한 선형/비선형 모델을 보겠지만 몇가지 공통점이 있습니다. 일단 $n$개의 데이터가 주어진다면 이를 학습 데이터라고 부릅니다. 데이터 하나가 $j$개 (예: 입력이 티비/라디오/신문 3개라면 $j=3$)의 입력을 갖는다고 하죠.

우리의 목적은 통계 학습을 학습 데이터에 잘 적용해서 함수 $\hat{f}$를 찾는 것입니다. 잘 찾아졌다면 어떤 데이터를 가져와도 대략적으로 $Y=\hat{f}(X)$가 성립하겠죠.

매개변수 방법 parametric methods
매개변수 방법은 두 단계로 이루어져있습니다.
  1. 함수의 형태를 특정한 모양으로 가정합니다. 예를 들어
    $f(X) = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + ... + \beta_p X_p$
    라고 가정을 할 수 있겠죠. 참고로 이를 선형 모델이라고 부릅니다. 
  2. 모델을 고른 뒤엔, 학습 데이터를 써서 모델을 학습 (fit, train)합니다. 그렇게 하면 $\beta_0, \beta_1, ..., \beta_p$를 다 구하게 됩니다. 
이렇게 모델을 짜면, 함수 $f$를 구하기 위해서는 매개변수 $\beta$를 구해야겠죠.

비 매개변수 방법 non-parametric memthods
비매개변수 방법은 함수의 형태가 이런이런식일거다-라는 가정을 전혀 하지 않고, 바로 함수 $f$의 모양을 찾습니다.

2.1.3 예측 정확도와 모델 복잡도의 트레이드오프


그림 2.7, p25

위의 그림을 보면 여러가지 모델의 복잡도 (혹은 유연함, flexibility)를 x축에 그렸습니다. 그런데 복잡하고 유연한 모델이 있는데 왜 단순하고 형태가 제한적인 모델이 필요할까요?

복잡한 모델은 성능이 잘 나올수 있는 대신에 추론 inference을 하기가 어려워서, 대체 '왜' 이렇게 예측을 하는지 설명하기가 interpretability 어렵습니다. 물론 성능을 최대한 높이기 위해서라면 복잡한 모델을 쓰는게 좋겠죠. 그런데, 그렇다고해서 무조건 제일 복잡한 모데을 쓰는게 좋은것은 아닙니다. 이상하죠! 제일 큰 이유는 과적합 overfitting때문입니다. 나중에 뒤에서 다시 다룹니다.

2.1.4. 지도학습과 비지도학습 supervised vs unsupervised learning

대부분의 통계 학습 (혹은 기계 학습)은 지도학습과 비지도학습으로 나뉩니다.

지도 학습은 입력 $x$와 예측값 $y$가 같이 주어지고 이를 이용해 모델을 구하는 것입니다. 비지도학습은 $y$가 없이 입력 $x$만으로 뭔가 하려는거구요.

예를 들어 위 그림에서 (우리는 색깔과 기호로 구분된 정답 $y$를 알고 있지만) 점을 같은 그룹의 점끼리 모아주는 군집화 clustering 가 이에 해당합니다.

2.1.5. 회귀 대 분류 Regression vs Classification problems

입력 및 출력 변수는 '양적' 혹은 '질적' 값입니다. 양적 quantitative 값은 사람의 나이나 키, 온도, 가격처럼 연속적인 값을 의미합니다. 반면에 제품의 브랜드 (A, B, C), 어떤 병에 걸려있는지 아닌지 (True, False) 등의 특징은 숫자로 표현되지 않는 질적 qualitative 값입니다. 혹은 이를 categorical이라고도 합니다.

양적 값을 예측하는 문제를 회귀 regression 문제, 질적 값을 예측하는 문제를 분류 classification 문제라고 합니다. 다만 이 구별이 항상 깔끔하게 되는건 아닙니다. 문제를 풀기에 따라 분류문제도 회귀 모델을 써서 풀 수 있고, 그 반대도 가능하구요. 예컨대 성별을 예측하는 문제를 (0, 1)로 나눠서 분류 문제로 풀 수 있지만 이를 [0, 1] 사이의 연속된 값을 예측하도록 모델을 세우고 맨 마지막에 여기에 반올림을 적용해서 예측값을 구할 수 있겠죠.