이 글 시리즈는 zzsza.github.io/data/2018/02/17/datascience-interivew-questions/에 있는
<데이터사이언스 인터뷰 질문 모음집>에 스스로 대답해보면서 정리해보고자 적어가는 글입니다.
주인장 분께 감사의 말씀 드립니다!
리샘플링의 다양한 방법론들, 2편
교차검증(Cross-validation)
- 교차검증은 내 모델의 '실제' 성능을 가늠해보기에 상당히 합리적이고 훌륭한 리샘플링 방법론이다.
- 리샘플링을 이용해서 생성한 다양한 'validation set'을 통해 모델의 성능을 측정한다.
- '실전에서 내 모델이 어떻게 작동할지'를 가늠해 보는 방법이라고 생각할 수 있다.
- 오버피팅이나 selection bias를 발견해 내는 방법이 될 수도 있다.
- 직관적인 이해를 위해, 선형회귀모형 Y = B0+B1X를 만들고 싶다고 하자.
- 이 때, 이 모델의 형태와 성격을 특정짓는 것은 바로 {B0,B1}이다. 즉 모델의 '모수'다.
- 최소자승법을 통해 이 모델의 모수를 결정지었다고 하자.
- 그러나 이 모델은 지금 우리가 가지고 있는 데이터셋, 즉 'training set'에 특화된 모델일 가능성이 높다.
- 회귀모델의 성능을 측정하는 가장 대표적인 지표가 바로 MSE(Mean Sqaured Error)다.
- 약간의 가정 아래,
(training set에 대한 MSE의 기대값) < (validation set에 대한 MSE의 기대값)
임이 알려져있다고 한다. - validation set을 통해, 실전에서의 model 성능을 어느정도 보수적으로 측정이 가능한 것이다.
- ESL(Elements of Statistical Learning)에서는 CV가 다음과 같은 Prediction error expected value를 직접적으로 추정하는 것이라고 표현한다.

- CV의 가장 대표적인 방법론인 k-fold cross validation에 대해 알아보자.
- 사실 k-fold를 알면 나머지는 더 쉽다.
- 직관적인 설명은 다음과 같다. K-fold CV를 검색하면 쉽게 찾을 수 있는 그림이 다음과 같은 그림이다.

- 전체 데이터에 대해 k번의 반복 시행을 한다. 뭘 하느냐? 각 시행마다 한 겹(fold)씩의 데이터를 따로 빼 두고, 빼 놓은 데이터를 제외한 나머지를 이용해 모델을 만들고, 이를 모델 성능을 검증(validation)하는 용도로 사용한다.
- 왜 굳이 여러번 나누는가?
- 그 논리는 이전 글에서 부트스트랩(Bootstrap)을 했던 이유와 거의 동질적이다.
- 모델을 만들어서 training set에만 내 모델을 적합시키면, training set에서만 잘 작동하는 모델이 만들어진다.
- 우리가 원하는 건 우리 모델이 실전에서 (in practice) 정상 작동하는 것이다.
- 이를 위해서 모델을 test data에 테스트시켜 보는 단계를 거친다.
- 그러나 이것만으로 모델이 잘 작동한다!라고 안심하기는 어려울수도 있다.
- 왜냐하면 테스트 데이터또한 딱 하나의 데이터셋이기 때문. 실제 우리가 마주칠 데이터가 테스트 데이터처럼 생겼으리라는 보장이 어디 있는가?
- 그래서 이러한 모델 성능 테스트를 반복적으로 하고 싶은 것이 모델러의 심정이다.
- 모델 성능 테스트를 진행하는 가장 직접적인 방법은 새로운 데이터를 얻는 것이다.
- 근데 이게 항상 가능하리란 보장이 없다는 게 문제다.
- 그래서 현재 가지고 있는 데이터를 최대한 활용해보자는 것이다.
- 매 시행마다 일정 사이즈의 fold를 제외하고 모델을 구축하는 과정에서, 제외된 데이터만큼의 uncertainty가 각 시행에 도입된다.
- 이 uncertainty가 여러 번 반복되면 우리가 진짜 알고자 하는 uncertainty, 즉 실전 데이터에 대해서 어느 정도의 모델 성능을 얻을 수 있을거라는 가정을 하는 것이다.
- 이 때, 모델 성능은 다양한 metric을 사용한다. 위에서 얘기한것처럼 대표적으로 MSE를 사용한다.
- 조금 더 mathematical한 표현은 다음과 같다(ESL 참고).
- K를 다음과 같은 역할을 하는 indexing function이라고 하자.
K : {1, ... i, ... , N} -> {1, ... , K}
즉, ith observation이 몇 번째 fold set에 할당시키는지를 알려준다. - k번째 시행에서 k-fold를 빼고 적합한 모델 함수를 다음과 같이 나타내자.

- 이 때, 교차검증 모델 에러는 다음과 같다(알파는 하이퍼파라미터를 나타낸다)

- K=N인 케이스를 우리가 흔히 말하는 LOOCV(Leave-one-out Cross Validation)이라고 부른다.
- K=N 케이스인 경우 true prediction error에 대해 approximately unbiased 하다고 하는 듯 하다.
- 그러나, 각 K번째 시행에서 사용되는 kth training data는 서로 굉장히 닮아있을 것이다. 따라서 variance도 높을 수밖에(bias-variance tradeoff 입장에서)
- 연산비용도 크다 (row number가 크면)
- 반대로 5-fold CV인 경우는 variance는 낮지만 bias는 높을 수도 있다.
- 특히나 데이터셋의 크기가 작은 경우 그렇다.
- 데이터셋이 작으면, 그만큼 각 kth iteration에서의 training set 크기가 작다. 이 경우, 만약 이러한 케이스에 민감한 모델이라면 CV estimate of error는 실제 prediction error를 더욱 과장되게 추정(overestimate)할 가능성이 존재한다.
- 이 경우 k의 값을 5보다 크게 하면 어느정도 해결이 될 수도 있다.
- 결론적으로 CV는 모델/데이터셋의 크기에 따라 여러가지 고려사항이 존재한다는 것.
- 다음 시간에는 CV의 또 다른 활용법인, 교차검증을 이용한 하이퍼 파라미터 튜닝에 대해 알아보고자 한다!
출처
<Elements of Statistical Learning>
web.stanford.edu/~hastie/Papers/ESLII.pdf
위키피디아
en.wikipedia.org/wiki/Cross-validation_(statistics)
'데이터 사이언스 > 머신러닝 및 모델링' 카테고리의 다른 글
의사결정나무/Decision Tree 총정리, 1편 회귀 문제에서 트리는 어떻게 돌아가는가? (0) | 2021.04.17 |
---|---|
(데이터과학 인터뷰 질문) (5) 샘플링과 리샘플링, 4편 : 교차검증과 하이퍼 파라미터 튜닝 (0) | 2020.11.08 |