본문 바로가기
데이터사이언스/인공지능을 처음공부하는 사람들을 위한 글

머신러닝과 데이터분석에서 중요한 실험 설계2

by 미스터탁 2022. 9. 8.

저번 글에 이어서 이번 글에서도 실험 설계에 대한 중요성을 예를 들어 다시 한 번 강조하고자 한다.

 

예시 ) 반도체 계측 문제

(초보자를 위해 전문 용어 대신 쉽게 설명하도록 하겠다)

반도체를 비롯한 각종 제조 데이터에서는 다양한 데이터가 수집되고 이는 시간적 특성을 가지고 있을 확률이 높다. 우리가 반도체 두계를 예측하는 문제를 다룬다고 가정을 해보자. 반도체 상품은 각종 설비를 거치고 그 설비내에서 다양한 변수에 의해 측정 값이 수집된다. 그리고 몇개의 설비를 거친이후에 반도체 두께를 계측하게 되는데, 12개의 상품중에 1~2개만을 측정을 한다. 이 두계를 계측을 하는건 반도체 품질 관리에 많은 영향을 끼치는데, 문제는 12개의 상품중에 1~2개만을 예측하기 때문에 나머지 10개정도는 계측을 하지 않고, 이를 우리는 머신러닝을 활용하여 예측하고자 하는 것이다. 아래 그림처럼 같은 색(빨간색, 녹색,,)을 가지고 있는 데이터 중에 한 두개만 계측이 됬다고 가정한다. 더불어 y1, y2,, , Yn은 계측 순서가 존재한다. 

독립변수는 시간적 특성을 가지고 있을 확률이 높지만, 적절하게 statistical feature를 추출했으며, y값이 있는 데이터는 총 20개정도 라고 가정하자. 여기서 우리는 실험 설계와는 별개로 하나의 문제를 직면하게 된다. 'Large p, small n problem'. 즉, 변수가 많고 데이터의 수가 적은 문제이다. 이러한 경우 이론적으로 선형 회귀모델은 적합시킬수 없으며, 다른 모델 또한 해를 찾지 못할 확률이 증가한다. 당연히 overfitting문제에도 직면하게 되며, 이러한 경우에는 변수의 수를 줄이는 기법을 필수적으로 고려할 필요가 있다. 우리가 실제로 다루는 데이터는 다양한 문제를 직면할 가능성이 높다라는 것을 꼭 알아두자.

 

자 그렇다면, 우리는 어떻게 실험 설계를 해야할 것인가 ? 우선 데이터의 수가 매우 적기 때문에 데이터를 9:1로 분할하거나, leave-one-out cross validation (k를 데이터의 수만큼 설정하는 기법)을 고려할 필요가 있다. 여기서 현업의 문제를 고려할 필요가 있다. 제조 설비의 특성상 계측의 순서가 결과에 영향을 끼칠수 있기 때문이다. 즉, Y1의 값이 Y2에 영향을 끼칠수도 있고, 독립변수들끼리 영향을 끼칠수도 있다. 예를 들어, 첫번째 데이터의 독립변수의 수준이 5~7사이였다면, 계측이진행될수록 독립변수의 수준이 낮아지거나 높아질수도 있다. 이러한 현상을 drfit현상이라고 한다. 우리가 전체 데이터를 분할해서 사용한다면, 테스트 데이터는 우리가 보지 못한 데이터로 해야한다는 가정에 위배될 여지가 있다. y2는 y1에 영향을 받고 y3에 영향을 끼치는데 y2를 검증 데이터로 쓰는건 합리적이지 않을 수도 있다. 그렇기 때문에 window sliding 기법을 사용하되 step을 옮길때마다 맨 앞의 step을 제외하는게 아닌 포함시켜서 예측하는 방법을 사용하는게 합리적일 것이다. 데이터의 수가 너무 적다 보니, 맨 앞의 step을 제외하면 성능이 매우 적게 나올 가능성이 높다. 또한, 모델을 학습시에 drift현상을 보정할 수 있는 방법 또한 고려해야 한다. 

 

 

 

예시 ) 클래스 불균형 문제

현업의 많은 분야(게임, 보험, 제조, 금융 등)에서는 다음과 같은 클래스 불균형(class imbalanced problem)문제가 빈번히 일어난다. 

- 게임 어뷰징 유저 예측 문제

- 게임 이탈자 예측 문제 

- 보험 및 금융 사기 예측 문제

- 제조 불량 데이터 예측 문제

제조데이터의 불량이 일어나는 빈도는 전체의 1%도 안돼며, 보험 사기를 치는 사람도 전체의 1%미만일 것이다. 이러한 경우에, 우리는 또 다양한 문제를 고려해야 하는데, 이는 추후에 더 다루어 보도록 하겠다. 이러한 경우, 우리는 class의 비율을 맞춰주는 방법을 주로 사용한다. 정상과 불량의 비율이 9:1 이라고 가정 했을 때, 정상과 불량의 비율을 5:5로 맞추어 모델을 학습하는 기법이다. 이러한 기법을 resampling기법이라고 한다.  

 

 

반응형

 

 

 

이때 많은 사람들이 주로 실수하는 부분은, 전체 데이터에 대하여 resampling 기법을 적용하고 학습/검증(또는 테스트) 데이터로 분할하고 모델을 학습한다는 것이다. 앞서 실험 설계에서 가장 중요한 것은 테스트 데이터는 우리가 전혀 보지 못한 새로운 데이터라고 가정해야한다고 강조하다. 그러나 우리가 전체 데이터에 대하여 resampling 기법을 적용하면 어떠한 문제가 생길까? 실제 데이터의 비율은 9:1이지만, 테스트 데이터의 비율이 5:5가 된다는 것이다. 즉, 우리는 실제 데이터에 발생하는 class imbalanced 문제를 해결하기 위한 모델을 학습시키는 것인데, 테스트 데이터의 class를 5:5로 맞춰 버리면, 우리는 테스트 데이터를 실제 데이터와 유사하게 만들지 않게 되는 것이다. 적절한 실험 설계를 위해서는 전체 데이터를 위 그림과 같이 비율에 맞춰서 학습/검증(테스트)데이터로 분할하여야 한다. 그리고, 학습 데이터에 대하여 resampling기법을 적용하고 모델을 학습시켜, 검증(테스트) 데이터에 대해 예측하고 성능을 평가하여야 한다. 이 또한, 이 과정을 10회 이상 반복하여 실험 성능을 평균 내는 것이 합리적이다.

 

더불어, 우리가 랜덤하게 데이터를 분할 할 때에 층화추출을 고려하는 것이 좋다. Class imbalanced는 class 비율이 매우 학습에 영향을 끼칠 확률이 높다. 전체 데이터 class가 9:1의 비율을 가지고 있다면, 이를 랜덤하게 학습/검증(테스트)데이터로 분할하면 , 8.8:1.2 또는 9.2:0.8 과 같이 기존의 비율이 왜곡될 확률이 높다. 즉, class의 비율을 맞춰서 데이터를 분할할 수 있도록 층화 추출 기법을 사용하는 것이 합리적이다. 이 데이터 또한, 시간적 특성을 가진다면 이 또한 고려해야 할 것이다. 

 

이 글에서 언급한 문제 외에도, 현업에서는 다양한 문제가 발생하며 다양한 변수를 고려해야 한다. 상황에 따라서 우리는 여러가지 기법이나 실험 설계를 고려해야 한다. 가장 중요한 것은 테스트 데이터는 우리가 보지 못한 실제 데이터라고 가정해야한다 라는 것이라는 것을 다시 한번 강조 한다.

 

 

반응형

댓글