Week 01: Relative importance of steps, In sample and out of sample errors



  • Prediction motivation
  • What is prediction?
  • Relative importance of steps
  • In sample and out of sample errors
  • Prediction study design
  • Types of errors
  • Receiver Operating Characteristic
  • Cross validation
  • What data should you use ?


Relative importance of steps


Question

간결하고 단단하게 질문을 만들어야한다.


Input data

Garbage in  = Garbage out


Features

좋은 feature들의 요소

압축형 데이터

관련 정보들의 유지

해당 응용의 전문가의 지식에 기반해서 만든다.


일반적인 실수

자동으로 features들이 선택 되어지는 경향. 따라서 해석을 집중해서 하지 않는 경우이다.

Black Box Machine learning Algorithm(ex., ANN, SVM)의 경우 매우 유용하지만 이러한 해석의 어려움을 내포하고 있다.

필요 없다고 무조건 버리는 행동



블랙박스가 유용한 경우

Youtube Video에서 고양이 이미지를 알려주지 않고 분류하는 연구

Building High-level Features Using Large Scale Unsupervised Learning, Standford, Andrew Y. Ng.



semi supervised learning 

deep learning


YouTube video에서 feature들을 자동으로 discovering 한 다음

그것을 prediction 알고리즘에 사용 했다.

여기서 사람의 개입은 존재 하지 않는다.

이것이 그런데도 잘 동작하는 이유는 다음과 같다.


predictor는 기본적으로 video 이미지가 나오면 그것이 cat인지 아닌지를 구분하게 된다.

이것은 unsupervised learning을 이용해서 자동으로 수집된 a bunch of features들에 기반해서 이뤄 진다.

좋은 feature들은 위 그림에서 오른쪽과 같이 고양이 얼굴일 것이다. 이러한 feature들을 자동으로 잘 수집해줘야 한다.



Algorithm


Machine Learning을 한다고 하면, 우리는 항상 연구된 많은 알고리즘중 어떤 알고리즘을 선택하는지가

Prediction Model의 정확도를 결정하는 중요한 요소라고 생각 한다.


하지만 생각보다는 Algorithm 종류가 미치는 정확도의 영향은 크지 않다는것이 사실이다.

그내용을 다뤄 본다.


linear discriminant analysis은 그다지 복잡하지 않은 기본적인 알고리즘 이다.

또한 그들은 각각의 Data set에 맞춰서 absolute best prediction algorithm을 적용 했다.

그렇게 했을 때의 prediction error를 보여주게 된다.

http://arxiv.org/pdf/math/0606441.pdf


best algorithm을 선택해서 수행한 것의 prediction error는 항상 단순히 Linear discriminant analysis를 수행 했을 때보다 낮게 된다. 이것은 당연한 사실 이다. 중요한 것은 그 차이가 크다지 크지 않다는 점이다.


Issues to consider

  • Interpretable

  • Simple

  • Accurate

  • Fast (to train and test)

  • Scalable


Prediction is about accuracy tradeoffs

  • interpretability versus accuracy

  • Speed versus accuracy

  • Simplicity versus accuracy

  • Scalability versus accuracy



Interpretability matters


Interpretability는 중요한 요소 이므로 If then else 스타일의 decision tree가 많이 쓰이는 이유이다.


Google Flu에서도 실제 사람들의 Keyword를 If than else로 확인하면 이해하기 쉬우므로 모델 재조정이 쉽게 된다.

decision tree가 단순하지만 때로는 정확도 보다는 interpretability가 더 중요할 때도 많다. 모델 이해가 어렵다면 지금 당장이야 정확도가 높을지 몰라도 Google Flu의 사례처럼 반년만 지나도 유지 보수 없이는 엉망이 되어 버릴 수 있다. 



Scalability matters


매년 100만 달러를 걸고 original Netflix 보다 좋은 알고리즘을 개발하는 경진 대회를 연다.

하지만 Netflix는 그러한 우승 알고리즘을 구현해서 제품에 반영하고 있지는 않다.

이유는 통상의 우승 알고리즘들은 복잡한 machine learning을 여러개 섞어서 사용하기 떄문에 데이터 처리 시간이 오래걸리며 그것을 Netflix와 같은 거대 data 셋에 적용하기엔 노력이 많이 필요하기 떄문이다.


따라서 Netflix는 약간 정확도를 잃더라도 현재의 방법을 고수하고 있는 것이다.

이번 사례에서도 알 수 있듯이 Accuracy가 언제나 항상 중요한 것은 아니다.






 

In sample and out of sample error


In sample error: 같은 data set이지만 알고리즘이 noise를 처리하는 방식에 따라서 매번 약간식은 차이가 생기는 것을 말한다.

다른 이름으로 re-substitution error 라고 한다.


Out of sample error: 새로운 데이터 셋에 대해서 발생 하는 에러이다. 이것은 generalization error라고도 불리운다.

결국, 해당 알고리즘을 트레이닝 데이터 셋을 벗어나서 일반적으로 적용했을 때 발생하는 에러를 말한다.


이것에대해서는 신중히 다뤄 줘야 한다.

In sample error < out of sample error 이다.

왜냐하면, 항상 트레닝이닝 데이터에 대해서 over-fitting 되는 경향이 있기 때문이다.

너무 트레닝이닝 데이터 셋에 대해서 맞추기 보다는 어느정도 noise를 감수하는것이 오히려 generalization을 했을 때 robust를 보장 할 수도 있다.


간단한 예제는 아래와 같다.

library(kernlab)
data(spam)
#smae data reproduced by using same seed
set.seed(333)
# randomly choose 10 data from entire data.
smallSpam <- spam[sample(dim(spam)[1],size=10),]
spamLabel <- (smallSpam$type=="spam")*1+1
plot(smallSpam$capitalAve,col=spamLabel)


스팸 데이터 10개를 추출해서 대문자 분포를 확인해 보면, spam은 빨간색 점들인데 대문자 비중이 높은것을 알 수 있다.

이것을 토대로 아래와 같은 일반적인 모델을 생성 할 수 있다.


capitalAve > 2.7 = "spam"

capitalAve > 2.40 = "nonspam"


여기에 추가로 정확도 100%를 위해서 

index 7과 index 10을 각각 ham과 spam으로 구분하기 위해서


capitalAve between 2.40 and 2.45 = "spam"

captialAve between 2.45 and 2.7 = "nonspam"


아래와 같이 rule model을 만들어서 수행해보면 training data set에 대해서 100%의 정확도를 가지는 것을 알 수 있다.

# perfect rule for traning data
rule1 <- function(x){
    # handle to missing value (NA)
    prediction <- rep(NA,length(x))
    prediction[x > 2.7] <- "spam"
    prediction[x < 2.40] <- "nonspam"
    prediction[(x >= 2.40 & x <= 2.45)] <- "spam"
    prediction[(x > 2.45 & x <= 2.70)] <- "nonspam"
    return(prediction)
}
table(rule1(smallSpam$capitalAve),smallSpam$type)
          nonspam spam
  nonspam       4    0
  spam          0    5


일반적인 룰에 대해서만 고려해서 수행하면, 아래와 같이 1개의 오류를 범하게 된다.

# general rule, considering noise for robust.
rule2 <- function(x){
    prediction <- rep(NA,length(x))
    prediction[x>2.8] <- "spam"
    prediction[x<=2.8] <- "nonspam"
    return(prediction)
}
table(rule2(smallSpam$capitalAve),smallSpam$type)
          nonspam spam
  nonspam       5    1
  spam          0    4


하지만 위 과정을 10개의 트레이닝 데이터 셋이 아닌 전체 데이터 셋인 4601개에 대해서 적용하면 아래와 같은 반대의 결과를 얻는다.

> # apply two models to a whole bunch of data set (4601)
> table(rule1(spam$capitalAve),spam$type)
         
          nonspam spam
  nonspam    2141  588
  spam        647 1225
> table(rule2(spam$capitalAve),spam$type)
         
          nonspam spam
  nonspam    2224  642
  spam        564 1171


행이 prediction이고 열이 actual data 이다.

rule1의 error 숫자는 647 + 588 = 1235 이고

rule2의 error 숫자는 564 + 642 = 1206 이다.

오류 숫자가 트레이닝 데이터에 대해서 더 완벽했던 rule1이 많은 데이터에 적용했을 때는 오류가 더 큰 것을 알 수 있다.


정확히 예측한 것들에 대한 합을 구해보면 아래와 같다.

> sum(rule1(spam$capitalAve)==spam$type)
[1] 3366
> sum(rule2(spam$capitalAve)==spam$type)
[1] 3395


왜 그럼 간단한 규칙이 복잡한 규칙보다 일반적으로 많은 데이터에 대해서 적용했을 때 더 정확도가 높은지를 알아보자.

우리는 이러한 현상을 Overfitting이라고 부른다.


■ Overfitting


데이터 셋은 크게 2가지 파트로 구성된다

Signal

Noise 

문제는 Signal만을 캡쳐해서 모델을 만들어야는데 Signal과 Noise를 분명히 구분하기 어렵기 때문에

너무 모델을 해당 트레이닝 데이터에 대해서만 정확하게 만들면 Noise도 모델에 반영되는 문제가 발생한다.


Machine learning의 목적은 signal을 발견해서 모델을 만들고 최대한 측정과 데이터 수집에서 발생한 noise는 무시하는 것이다.







+ Recent posts