본문 바로가기
데이터사이언스/머신러닝

특성공학 (Feature Engineering) 언더피팅 / 오버피팅

by 짱바람 2023. 4. 20.

1. 특성 공학 (Feature Engineering, 피처 엔지니어링)

머신러닝의 기본적인 알고리즘은 Supervised, Unsupervised, Reinforcement가 있다. Supervised 알고리즘은 target value, 출력값을 갖는 데이터 세트를 분석할 때 사용하는 알고리즘이며, 결과값이 수치형이면 회귀, 범주형이면 분류로 나뉜다.
Supervised 알고리즘에서 피처 엔지니어링은 현업에서 매우 중요하다. 피처 엔지니어링 개념이 최근들어 많이 이슈가 되고 있다. 실제로 일을 해본 사람들은 왜 중요한지 아는데, 처음 시작하는 사람은 알고리즘에만 집중한다. 알고리즘에 따라 데이터 변환이 종속되므로 알고리즘 특성을 잘 이해하고 있어야 전처리를 어떻게 할지 결정된다. 알고리즘을 이해했다고 전제하면 어떻게 전처리하면 성능이 올라갈 것인가 고민해야 한다.

피처 엔지니어링이란 원시 데이터를 다루고 있는 문제를 더 잘 표현할 수 있는 특성으로 변환하는 과정이다. 데이터 셋 안에서 열정보를 피처라 한다. 애트리뷰트, 속성, 특징, 특성으로도 부른다. 일반적으로 머신러닝에서는 피처라는 용어를 많이 쓴다. 결과적으로 보지 못하는 새 데이터에 대해서도 좋은 예측결과를 얻을 수 있는 피처를 찾는 것이 목적이다. 결론은 좋은 성능을 낼 수 있도록 만드는 개념이다. 성능이 잘 나오게 열 정보들을 변환하거나 만들어 가는 과정이다.

피처 엔지니어링이 중요한 이유는 첫째, more flexiblity 이다. 모델을 좀 더 유연하고 탄력적으로 가져갈 수 있다. 피처를 잘 가지고 오면 좀 더 복잡하지 않은 모델로 거의 유사한 성능을 가져갈 수 있어 비용이 줄어든다. 이 말 안에는 좀 더 복잡하지 않은 모델을 사용할 수 있다. 단순한 모델을 사용할 수 있다는 의미이다. 둘째, simpler model. 좋은 피처를 가지고 있으면 좀 더 단순한 모델로 결과를 낼 수 있다. 셋째, better result. 피처를 잘 정의하면 좀 더 좋은 결과를 얻을 수 있다.

피처는 데이타 셋 안에서 열정보들을 얘기하고 대상의 특징을 얘기하는데 문제는 어떤 피처가 중요하냐이다. 데이터를 분석할 때 차원의 저주, 피처가 많아질수록 차원의 저주에 걸린다. 경우의 수가 많아지기 때문이다. 그러기 때문에 데이터를 분석할 때 좀 더 중요한 애들을 먼저 보게 되면 굳이 다 보지 않아도 되지 않을까?라고 생각해 볼 수 있다. 피처 중요도를 객관적으로 측정할 수 있고 그 크기에 따라서 모델을 만들 때 피처를 포함시킬 수도 있고 그렇지 않을 수도 있다. 그때 중요도를 측정하는 개념 중에서 상관계수, 회귀계수와 p-value, 의사결정나무의 피처 임포턴스(Feature importance)가 있다.

상관계수는 데이타 간의 선형성, 회귀계수는 기울기 절편으로 얼마만큼 영향과 인과관계가 있는지 확인가능하고 p-value가 유의 수준보다 크냐 작냐에 따라 귀무가설을 기각하느냐 할 수 없을거냐를 결정한다. 의사결정나무는 분류, 회귀문제를 풀 수 있으며, 나무가지가 퍼져나가는 것처럼 그림을 그릴 수 있으며, 노드를 분기시킬 때 어떤 기준으로 분기를 시킬 것인가는 당연히 좀 더 좋을 성능을 낼 수 있는 방향으로 분기를 시킨다. 분기를 시키는 기준으로 피처 임포턴스, 불순도 개념을 쓰는데, 불순도가 낮은 방향으로 계속 가지를 만들어간다. 이런 개념들이 피처 중요도를 측정하는 객관적인 개념들이다.

피처를 많은 경우 중요한 것들을 골라내는 것을 Feature selection이라 한다. 피처를 고른다는 얘기에는 의미있지 않은 피처는 고르지 않는다는 의미가 있다. Feature extraction은 특징추출이라고 하는데, raw data를 변환하거나 함수 같은 것을 써서 원래 있는 데이터를 바꿔서 새로운 데이터를 만들어내는 것이다.

Feature construction은 raw data로 부터 새로운 피처를 만들어 내는 경우로 extraction과 잘 구별은 안된다. 차이는 extraction은 자동화라는 개념이 들어가 있다. 함수에 넣어 자동으로 피처를 만들어 내는 개념이다. construction은 수작업 개념이다. extraction과 construction의 개념은 비슷하다. 가지고 있는 데이터에서 새로운 피처를 만들어 내는 것인데 자동으로 만들어 내는 개념이 extraction, 수작업으로 만들어 내는 개념이 construction이다. 실제 현업에서는 같이 쓴다.

Feature Learning은 raw data로 부터 새로운 피처를 만들어 내는 경우로 비지도 학습, 세미 지도학습 등의 방법으로 피처에 대한 학습을 통하여 피처의 적절한 구성 혹은 선택을 지동으로 지원한다. 블랙박스 모델이다.


머신러닝에서 피처 엔지니어링이 언제 필요한가? 데이타를데이터를 모으고, 전처리를 하고,  데이터를 transform 하는데, 이때 피처 엔지니어링이 필요하다. 이 작업은 실전에서 100% 자동화되지 않는다. 자동 또는 수동으로 extraction, construction을 수행한다. 그다음 이 작업이 끝나면 그 안에서 중요도를 본다. 중요한 것을 골라내는 작업이 selection이다. 그 데이터를 가지고 모델을 만들어 나간다. 순서가 extraction, construction이 먼저 수행되고 selection 이 수행된다.

머신러닝에서 피처 엔지니어링 프로세스

피처 엔지니어링의 사례를 보자. 요즘 회사는 돈으로 알고리즘을 사는 경우가 많다. 케글, 넷플릭스가 대회를 통해 알고리즘을 수집한다. 물론 상금이 꽤 된다. 케글 데이터를 보면 필요한 것을 골라내고 추출하는 것을 보면 된다.


2. 언더피팅 / 오버피팅

언더피팅(Underfitting)/오버피팅(Overfitting)이란 개념이 있다. 머신러닝의 목표는 일반적인 모델, 패턴을 만드는 것이다.  머신러닝에서는 generalized, 일반화라고 한다. 좋은 기성복을 만들어서 비슷한 사람이 왔을때 맞춘 것 같은 옷을 만드는 것이다. 전수조사나 전수조사에 가까운 조사가 가능하다면 최선이겠지만 Sample Data를 사용하게 되는 경우에는 항상 Sample Data 만의 특징이 존재할 수 있고, 이를 잘 설명하는 모델은 새로운 데이터를 잘 설명하지 못하는 상황이 발생할 수 있다. 반대로 지나치게 단순한 모델은 Sample Data 뿐만 아니라 새로운 데이터도 충분히 설명하지 못하는 상황이 발생한다. 그래서 학습 오류, 일반화 오류, 그리고 예측 오류의 용어를 쓰게 된다.

  • 학습 오류: 학습 데이터를 사용하여 모델을 생성하고 학습 데이터로 측정한 오류
  • 일반화 오류: 기본 데이터 분포에서 새로운 데이터를 추출, 모델에 적용할 때 예상되는 오류
  • 예측 오류: 테스트 데이트를 모델에 적용하여 측정한 오류로, 일반화 오류의 추정에 사용

편향과 분석 (Bias vs. Variance)이라는 용어가 있다.

모델의 복잡도를 얘기할 때 입력 변수가 증가하면 모델 복잡도 증가한다.

그리고 출력 변수의 가능한  class가 늘어나면 모델 복잡도 증가한다.

또한 입력 변수와 출력 변수 간의 관계가 비선형적이면 모델 복잡도 증가한다. 

언더피팅(Underfitting, 과소적합)은 주어진 입력 데이터에 비하여 모델의 복잡도가 너무 낮아 입력 데이터로 부터 충분히 학습 못하는 상황을 얘기한다.  테스트 데이타를 넣었더니 성능이 너무 안 나온다.

언더피팅에 대한 대응방안은 다음과 같다.

  • 학습 시간을 늘린다 (Deep Learning이나 Auto-parameter Tunning 경우)
  • 더 복잡한 모델을 구성한다.
  • 모델에 추가 Feature를 도입한다.
  • Regularization을 사용하지 않거나 영향을 줄인다.
  • 모델을 다시 구축한다.

오버피팅(Overfitting, 과대적합)은 주어진 입력 데이터에 비하여 모델의 복잡도가 너무 높아 입력 데이터의 잡음까지 fitting 하는 경향을 보이고 일반화에 실패하는 상황이다.

오버피팅에 대한 대응방안은 다음과 같다.

  • 학습을 더 일찍 멈추게 한다.
  • 데이터를 추가한다.
  • 모델의 복잡도를 낮춘다.
  • 일부 Feature를 제거한다.
  • Regularization을 활용한다. (규칙화/정규화, 오버피팅을 막기위해 성능을 떨어뜨리는 방법)
  • 앙상블 모델을 적용한다. (여러개의 알고리즘을 같이 쓰는 개념)

 

요약하면 그림에서 보는 것과 같이 왼쪽이 언더피팅이고 오른쪽이 오버피팅이다. 단순화한 모델에서 모델의 복잡도를 높이면 예측오류는 감소하지만 과대적합이 되면 다시 예측오류가 증가하므로 최적의 지점을 실험을 통해서 찾아야 한다.

 

댓글