Fascination
article thumbnail

Ch5. Overfitting and Its Avoidance

- 숙명여자대학교 소프트웨어학부 데이터사이언스개론 - 박동철 교수님


# Overfitting

- data science의 가장 중요하고 근본적인 개념 중 하나

- model을 만드는 것에 있어 flexibility를 너무 허용하면 만들어진 model이 내가 가지고 있는 특정한 dataset에만 상응될 수도 있음

- Overfitting

> model이 training dataset을 넘어 일반화하지 못할 때

> 새로운(that we have not yet seen) instances에 대해 예측하지 못할 때

 


# A Hypothetical Example

- 고객 이탈을 줄여야하는 manager가 있음

- data scientist는 아래 내용을 따라야 함

> manager로부터 고객이 남을지 이탈할지에 대한 과거의 데이터(historical data)를 받음

> data로부터 model을 구축하고 model에 대한 code를 manager에게 다시 보냄

- manager는 아래 내용에 따라 model의 수행을 확인함

> model을 통해 historical data를 검증해 봄

> model이 100% 정확도를 보임

- 이 모델은 좋은 모델인가? NO → 그런(정확도가 100%인) model을 만들기 매우 쉽기 때문

- Example (table model)

> training data를 모두 기억하고 같은 data가 있는지 찾아 예측함

 

table model의 복잡도: table에 들어있는 entry의 숫자 = row의 개수

- table model의 문제점은 무엇인가?

> training data에 완벽하게 맞음

> 새로운(previously unseen) data를 일반화하지 못함

 


# A Fundamental Trade-Off

- 더 복잡한 model을 사용한다면

> 실제 복잡성을 더 잘 포착하여 보다 더 정확함

> overfitting의 가능성이 증가함

- best 전략

> overfitting을 제거하는 단일 과정이 없음

> overfitting을 인지하고 원리 원칙적으로 complexity를 조절함 → overfitting ↑ → complexity ↓해야 함

 

 

# How To Recognize Overfitting

- Fitting graph

> complexity에 대한 함수로써 model의 정확도를 보여줌 → 구체적으로는 정확도의 변화를 보여주는 것임

* complexity에 대한 함수 = 모델이 더 복잡해져 가는 것에 따라 변함

70~80% training data를 가지고 모델을 만든 후

Holdout data를 사용해 모델의 complexity에 대한 정확도의 변화를 보이는 것

* 그래프의 error 축은 accuracy로 나타낼 수도 있으며 이에 대한 관계는 반대다

(error ↑→ accuracy↓)

- Holdout Data

> 이미 target value를 아는 data를 hold out 한 것

> model을 구축할때 사용하는 것이 아닌 model의 일반화 수행을 평가하는 데 사용

fitting graph

- model이 충분히 복잡하지 않을 때

> training 그리고 holdout data 둘 다에 대해 정확하지 않음 → underfitting

- model이 너무 복잡할 때

> training data에 대해 더 정확해짐

> 그러나 holdout data에 대해서는 덜 정확해짐 → overfitting

- Example: 고객이탈 table model

> 극단적인 예에서 fitting graph는 특이함

> row의 수는 model의 complexity로 생각됨

- model이 복잡해짐에 따라..

> training data set의 더 많은 부분을 기억할 수 있음 (error ↓)

> holdout data error는 어떤 값에서 시작하고 감소하지 않음

> b: the percentage of churn cases in the population(holdout data)

ex) training data(stay:2만 명, churn:5만 명), holdout(stay:2만 명, churn:1만 명)이라 할 때

table model에는 churn하는 5만 명의 data가 있을 것임 이 model에 대해 holdout data를 적용하면

1만 명의 churn data가 model에 있는 churn(5만 명)의 데이터와 overlap 되지 않으므로 stay라고 분류됨.

따라서 2만명의 stay 값을 가지는 data는 잘 분류되고 1만 명의 churn data를 가지는 data는

잘못 분류되므로 base error rate가 1/3가 되는 것임

 


# Overfitting in Tree induction

- 우리는 반복적으로 data를 작고 작은 data subset으로 나누면서 classification tree를 만듦

- 극적인 classification tree: 모든 leaf node가 pure 해질 때까지 data를 나눔

 

이 tree에서 training data에 대한 정확도는 100% 임

- tree의 complexity = node의 개수

> tree는 어느 accuracy나 가질 수 있게 만들 수 있음

> tree가 커질수록, 그것은 ovefit 할 경향을 가짐

overfit 된 tree의 test(holdout data)에 대한 정확성은 optimal tree보다 떨어짐

* Sweet spot: training data의 정확성 ↑되고 holdout data의 정확성은 ↓되기 시작하는 구간으로

holdout dataset의 성능, training dataset의 성능이 적당히 절묘하게 비슷해지는 지점.

즉, holdout dataset에서 성능이 떨어지기 시작하는 지점으로 optimal 한 성능을 보여주는 지점

> Tree size = 1,..., 100 → training accuracy: ↑, holdout accuracy: ↑

> Tree size = 100,..., 1000 → training accuracy: ↑, holdout accuracy: ↓

* tree의 size가 너무 커지면 tree는 일반적인 모집단의 특성이 아닌 training set의 detail들을 갖기 시작함

→ 따라서 tree의 size를 제한해야 함

> 그러나 정확한 sweet spot을 이론적으로 찾을 수 있는 방법이 없음

 기술적인 경험에 의존해야 함

 

 

# Overfitting in Mathematical Function

- 더 복잡한 mathematical function을 만드는 한 가지 방법은 항이나 변수를 추가하는 것

- example

> A linear model: f(x) = w0 + w1x1 + w2x2 + w3x3

> A more complex model: f(x) = w0 + w1x1 + w2x2 + w3x3 + w4x1² + w5x4

- 더 많은 속성을 사용하면, model이 training data에 더 잘 맞을 수 있음 (overfitting의 위험도 함께)

- To avoid overfitting

> informative attributes만 고를 수 있음

> overfitting을 확인하기 위해 holdout technique을 사용할 수 있음

 

 

# Overfitting Linear Function

original dataset
(Both Logistic regression 과 SVM은 같은 line을 학습함)
Logistic regression: 상당히 많이 움직임
SVM: 거의 움직이지 않음
→ Logistic regression이 overfitting처럼 보임
* 가운데의 빨간 별 처럼 outlier 하나까지 모두 분류하는 것이 좋은 것은 아님

 

 

Logistic regression과 SVM이
f(x) = w0 + w1*Sepal + w2*Petal 일 때
Logistic regression과 SVM이
f(x) = w0 + w1*Sepal + w2*Petal + w3*Petal²
→ More flexibility (단순한 선이 아닌 포물선임)

 


# From Holdout Evaluation to Cross-Validation

- holdout evaluation

> 약간의 data를 hold out 하고 holdout data를 제외하고 model을 만듦

> holdout data에 대해 model의 accuracy를 평가함

> model의 일반적 수행을 평가하는 것이 목표임

* test data = holdout data

- 문제점

> single estimate

> model의 정확도를 한번 측정하는 것으로 확신을 얻을 수 있나?

> test data의 운 좋은 단일 선택일 수 있음

 

 

# Cross-Validation (CV)

- 더 정교한 holdout 평가 방법

> dataset에 걸쳐 holdout 평가를 여러 번 수행함

- 평가된 수행에 대해 statistic을 얻을 수 있음

> 평균(Mean): 평균적으로 기대할 수 있는 수행

> 변화(Variable): dataset에 따라 성능이 어떻게 달라지는지 알 수 있음

 

 

# k-fold Cross-Validation

- k-fold: data를 몇 개의 구간으로 나눌까?

 


# (Revisited) The Churn Dataset

- 고객 이탈 문제를 다시 고려해 봄

> data에 기반하여 어떤 고객이 이탈할지 예측해 봄

- Our data

> 20000명 고객의 historical data 집합이 있음

> 각 고객은 아래 속성에 의해 묘사됨

- 첫 번째 질문: 이 속성들은 각각 얼마나 좋은가?

> 이것에 대해 각 속성에 대해 information gain을 측정해볼 수 있음

- churn data로부터 학습된 classification tree

- tree를 구축하는 것을 언제 멈춰야 할까?

> 20000 예시에 대해 20000개의 leaves를 가질 때까지 분류해야 하나?

→ Yes, 그러나 모델이 너무 복잡해지기 전에 멈춰야 함

> 이 문제는 모델의 일반성 그리고 overfitting과 밀접하게 연관되어 있음

- tree의 정확성은 어떻게 측정할까?

> 원래 dataset에 tree를 적용하고 tree가 73%의 정확도를 수행했다고 가정하자

> 이 수치를 믿어도 되는가? 다른 datset에 적용했을 때도 73%의 정확성을 얻을 수 있을까?

> 73%의 정확성이 좋은 것을 의미하는 가? 쓸만한 가치가 있는 정확도인가?

 

 

# The Churn Dataset Revisited

- churn dataset 예시에서 우리는 정확성 73%를 믿을 수 있는가?

> No, 이 수행 측정은 training datset에 대해 이뤄진 것임

> overfitting이 일어날 가능성 ↑

- 그래서 더 잘 평가하기 위해 cross-validation을 사용

- 10-fold cross validation의 결과

> claasifiaction tree의 평균 정확도(cross validation 해서 얻은 accuracy) = 68.6% < 73%

→ 일반적으로 만든 model의 정확도 73%는 overfitting이 있었다는 것을 보여줌

> 다른 fold에 대한 수행에 있어 변화가 있음 따라서 우리는 수행이 어떻게 달라지는 지를 추정하기 위해

변화를 사용할 수 있음

> Logistic regression은 약간 낮은 수행을 보임

→ 큰 변화(그래프 각각의 폭의 변화가 큼)를 보이는 낮은 평균의 정확도 (64.1%)

> 이 특정한 datset에서만, classification tree가 더 좋은 수행을 보이는 것

항상 절대적으로 classification tree가 좋은 것은 아님

 


# Learning Curves

- 일반적으로, model의 일반적인 수행은 한 시점까지 더 많은 training data를 사용할 수 있게 되면서 개선됨

- Learning curve

> training data size에 대해 일반적 성능을 나타낸 그래프

> 즉, training data size에 따라 성능이 어떻게 달라지는지 보여주는 것임

- Learning curve에 대한 observation

> decision tree는 logistic regression보다 더 flexible 함

 linear model(ex. SVM, linear regression, logistic regression): not flexible/ tree: flexible

> For smaller data: tree induction이 더 잘 overfit 되는 경향 있음

→ tree induction에서 leaf node가 거의 끝까지 갈 수 있음

 logistic regression이 smaller data에서 더 잘 수행함

> For larger data: tree induction의 flexibility가 이점이 됨

→ tree는 feaures과 target 사이에 상당히 nonlinear 한 관계를 나타낼 수 있음

→ Logistic regression은 더 overfit 한 경향이 있음

- Learning Curve VS. fitting graphs

> Learning curve는 training data에 대한 일반적인 성능을 보여줌 → training data의 양이 중요

> fitting graph는 training data로 만든 model에 대한 성능을 holdout data로 검증함 → model의 복잡도

 

 

# Overfitting Avoidance and Complexity Control

- Regularization

> overfitting을 피하기 위해 model의 복잡성을 조절하는 것

* model의 복잡도가 높으면 overfitting도 증가하므로 복잡도를 낮춰야 함

- Example

 


# Regular for Tree Induction

- tree induction의 주요 문제점

> leaf node가 pure 해질 때까지 계속 구축됨

> 큰 결과가 만들어지고, data에 overfit 되는 복잡한 tree가 될 가능성이 있음

- overfitting을 피하기 위한 3가지 정규화 기술

① Stop growing the tree before it gets too complex

② Grow the tree until it is too large, then "prune" it back, reducing its size

③ Build trees with different numbers of nodes and pick the best

 

 

# (1) Limit Tree Size

- 분할할 leaf node의 최소 instance 수를 지정

> instance의 수가 적은 node는 더 이상 split하지 않고 멈춤

- Example (minimum-instance stopping criterion = 20)

> 각 leaf node의 instance 개수가 20개 미만이면 stop growing

 

 

# (2) Prune An Overly Large Tree

- leaves와 branch를 자르고, leaf로 대체함

> 대체하는 leaf는 정확성을 줄이면 안 됨

> pruning가 accuracy를 감소시킬 때까지 이 process는 진행성 subtree에서 반복될 수 있음

- Example

 

 

# (3) Build Many Trees And Pick The Best

- 다양한 nodes를 가진 여러 개의 tree를 만들고 그중 좋은 것을 고름 → best accuracy를 가진 것

- Example

 


# Regularization for Linear Models

- 모델에 사용되는 특징은 어떻게 고를 수 있을까?

- Sequential forward selection (SFS)

> 단지 하나의 feature을 사용하여 만들어진 model을 모두 test 함으로써 가장 best 한 feature xi를 고름

> 처음에 고른 속성에 두 번째 속성을 추가한 모든 model을 test 함으로써 두 번째 best 한 속성 xj를 고름

> 같은 과정으로 3번째 , 4번째.. best 한 속성을 찾아나감

> feature가 test data에 대해 정확성을 더 이상 증가시키지 않을 때 멈춤

- Sequential backward elimination: 선택하는 속성의 개수를 줄여가며 SFS의 과정을 거치는 것

 


# Nested Cross-Validation

- cross-validation: 이미 모델이 정해져 complexity가 fix 된 상태

ex) The number of nodes in a decision tree = 20

- Nested cross-validation

> complexity parameter의 best 값을 모를 때 사용함

ex) decision tree의 node 수, linear model에서의 특징의 수

> complexity parameter의 best value를 찾을 때 사용

> Nested loop folds (outer loop and inner loop)

- hyperparameter가 선택된 model의 평가에 대한 outer loop

* hyperparameter = complexity parameter

- hyperparameter tuning을 하는 inner loop

> 단점: inner loop의 수의 요소에 따라 run time이 상당히 증가함

> Test: inner cross-validation에서 찾아진 complexity parameter의 best vlaue로 만든 model을

평가하는 데 사용됨

> Training: complexity parameter의 best value 값을 선택하기 위해 사용됨

> inner cross-validation: 각 complexity parameter 값에 대해서, sub-training set을 사용하여

model을 만들고 validation set을 가지고 그것을 평가함.

그리고 best 성능을 보여주는 complexity parameter의 best value를 선택함

 

> outer loop to select best model

① outer loop에서 각각 나누어진 training data를 위해, 각각 나누어진 best hyperparameter를 결정하고자 inner loop로 들어감

② 결정된 hyperparameter로 model을 수행시킴

③ 변화에 대한 점수를 평균 내고 가장 높은 점수를 가진 model을 선택함

④ 모든 data를 사용해서 선택된 model을 다시 수행시킴

⑤ test data에 대해 test 점수를 계산함

 

> inner loop to select best hyperparameter

                                                                  ① 각각의 분할된 inner loop에서 모든

                                                                   hyperparameter set을 가지고 model을 수행시킴

                                                                  ② 변화에 대한 점수를 평균을 내고 높은 점수를 가지면서

                                                                   가장 best 한 hyperparameter set을 선택함

 

 

# (EX) Nested Cross-Validation

- node의 후보 수를 10. 15, 20, 25, 30이라고 가정

> ①에서 tree의 node의 개수가 15일 때의 평균 점수가 가장 높았다고 생각하면

> training으로 그 값을 반환함 즉, node가 15개가 되는 모델을 training datset을 가지고 만드는 것

 


# Summary

- There is a trade-off between model complexity and the possibility of overfitting

> a complex model may be necessary to model complex data

> But is has the risk of modeling details of a particular data

> An overfitted model will not generalize to other data well

- There is no single choice or technique to eliminate overfitting

> The best strategy is to recognize overfitting by testing with a holdout set

> fitting graph: Has two curves showing the model performance on the training

and test data as a function of model complexity.

The model performance on the test data decreases as overfitting sets in.

- Cross-validation

> A common experimental methodology to estimate the generalization performance of a model

> Split up a single dataset to generate multiple performance measures

> We can obtain the estimated average and variance of performance

- Regularization

> The general method for reining in model complexity to avoid overfitting

> Decision tree: limiting tree size, tree pruning,...

> Linear model: feature selection,...

 

profile

Fascination

@euna-319

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!