Feature Engineering 기본 정리

데이터 사이언스를 공부하면서 Feature selection, extraction, engineering 등 다양한 용어를 접하게 되는데요. 처음 접하면 각각의 차이가 잘 와닿지 않기 때문에 큰 그림에서 정리가 필요하다는 생각에서 이번 포스팅을 준비했습니다.



Feature Engineering이란?

  • Feature Engineering은 머신러닝 알고리즘을 작동하기 위해 데이터에 대한 도메인 지식을 활용하여 특징(Feature)를 만들어내는 과정입니다. < Wikipedia - Feature Engineering 정의 >

  • 다른 정의를 살펴보면, 머신러닝 모델을 위한 데이터 테이블의 컬럼(특징)을 생성하거나 선택하는 작업을 의미한다고 합니다.

  • 간단히 정리하면, 모델의 성능을 높이기 위해 모델에 입력할 데이터를 만들기 위해 주어진 초기 데이터로부터 특징을 가공하고 생성하는 전체 과정을 의미합니다.

  • Feature Engineering은 모델 성능에 미치는 영향이 크기 떄문에 머신러닝 응용에 있어서 굉장히 중요한 단계이며, 전문성과 시간과 비용이 많이 드는 작업입니다.


Feature Engineering in Data Science Process

그렇다면 Feature Engineering은 데이터 사이언스 단계 중 어떤 단계에 해당할까요? (데이터 사이언스 단계 관련 내용은 이전 포스팅을 참고해주세요.) 아래 간단히 데이터 사이언스 단계를 보면 데이터를 준비하는 과정 중 마지막 단계, 즉 모델에 데이터를 넣기 전 단계가 바로 Feature Engineering의 단계입니다.

  1. Project Scoping(Define Problem)
  2. Data Collection
  3. EDA
  4. Data Preprocessing
  5. Feature Engineering
  6. Modeling
  7. Evaluation
  8. Project Delivery / Insights

Feature Engineering 구성

Feature Engineering에 대해 정리하면서 가장 어려웠던 것이 Feature Engineering에 대한 설명이 조금씩 달랐다는 점입니다. Feature Selection을 Feature Engineering에 포함해서 설명하는 사람도 있었고, 이러한 방법들은 제외하고 데이터 도메인(분야) 특성을 고려하여 특징을 만들어내는 것을 Feature Engineering이라고 설명하는 글도 있었습니다. 그래서 앞서 정의한데로 ‘모델에 입력하기 전 단계에 데이터의 특성을 잘 반영하고 성능을 높일 수 있도록 특징을 생성하고 가공하는 것’으로 보면 전체를 정리할 필요가 있다고 판단했습니다.

방법적인 측면

1. 특징 선택(Feature Selection)

  • 특징 랭킹(Feature Ranking) 또는 특징 중요도(Feature Importance)라고도 불립니다.
  • 분류 모델 중 Decision Tree 같은 경우는 트리의 상단에 있을 수록 중요도가 높으므로 이를 반영하여 특징 별로 중요도를 매길수 있습니다.
  • 회귀 모델의 경우 forward selectionbackward elimination같은 알고리즘을 통해 특징을 선택합니다.

2. 차원 감소(Dimension Reduction)

  • 차원 감소는 feature extraction 다시 말해 특징 추출이라는 말로도 불립니다.
  • 차원 축소에 대해 잘 설명한 글이 있어서 아래에 소개합니다.

    깊은 내용을 들어가기 전에, 차원축소는 단순히 데이터의 압축이나 잡음(noise)을 제거하는 것이 아니라는 것을 말씀드리고 싶습니다. 물론 차원축소로 데이터의 압축이나 잡음을 제거하는 효과도 있겠지만, 이것의 가장 중요한 의의는 관측 데이터를 잘 설명할 수 있는 잠재 공간(latent space)을 찾는 것입니다.

  • 위의 밑줄 친 부분이 차원 축소의 핵심이라고 생각됩니다.
  • 가장 대표적인 알고리즘에 PCA(Principle Component Analysis)가 있습니다.
  • PCA를 간단히 설명하면 각 변수(Feature)를 하나의 축으로 투영시켰을 때 분산이 가장 큰 축을 첫번째 주성분으로 선택하고 그 다음 큰 축을 두번째 주성분으로 선택하고 데이터를 선형 변환하여 다차원을 축소하는 방법입니다.(여기서는 2개의 차원으로 축소, PCA에 대한 내용은 다음에 보다 자세히 공부하고 정리하겠습니다.)

도메인(분야) 전문성 측면

3. 특징 생성(Feature Generation) or 특징 구축(Feature Construction)

  • 이 방법을 흔히 많은 사람들이 Feature Engineering이라고 말합니다. 간단히 설명하면 초기에 주어진 데이터로부터 모델링 성능을 높이는 새로운 특성을 만드는 과정이라고 설명할 수 있습니다. 이때 데이터에 대한 도메인(분야) 전문성을 바탕으로 데이터를 합치거나 쪼개는 등의 작업을 거쳐 새로운 Feature를 만들게 됩니다.
  • 간단한 예로 시간 데이터를 AM / PM 으로 나누는 것이 있습니다.
  • 이 작업은 한번 해서 끝나는 것이 아니라 끊임없이 모델링 성능을 높이는 목적으로 반복해서 작업할 수 있는 부분이기 때문에 전문성과 경험에 따라 비용과 시간을 줄일 수 있는 부분입니다.

Feature Engineering in Feature Generation / Construction

앞에서 Feature Engineering를 구성하는 종류를 구분해 보았습니다. 방법적인 측면에서 서술한 Feature SelectionDimension Reduction 나중에 자세히 보다 자세히 공부해보도록 하겠습니다. 이번에는 사람들이 흔히 Feature Engineering이라고 부르는 특징 생성/구축 측면에서 좀 더 자세히 살펴보도록 하겠습니다.

Feature Engineering Process

  • 데이터에 대한 깊은 이해와 전문성을 바탕으로 새로운 특징을 만들어내야 하기 때문에 아래와 같은 프로세스로 구성된 방법론을 적용합니다.
  1. Brainstorming or Testing features;
  2. Deciding what features to create;
  3. Creating features;
  4. Checking how the features work with your model;
  5. Improving your features if needed;
  6. Go back to brainstorming/creating more features until the work is done.

Feature Engineering 방법

1. 관점에 따른 분류

  • Business driven features : 해결하려는 문제가 있는 현장인 비즈니스 관점에서 데이터를 분석하여 특징을 만들어내는 관점입니다.
  • Data driven features : 비즈니스 관점이 없어도 주어진 데이터를 다루는 과정에서 특징을 만들어내는 관점입니다.

    위의 두 가지를 설명을 위해 구분하였지만 실제로는 분리되어 있지 않고 서로 조합되어 좋은 Feature를 만들게 됩니다.

2. 방법에 따른 분류

  • 지표 변수(Indicator Variables) : 지표 변수를 만드는 것으로 예를 들어 나이 feature로 부터 21세 이상일 경우 성인으로 구분하는 feature를 만들 수 있습니다. 그리고, 부동산 정보의 경우 침실과 화장실의 갯수를 통해 부동산 가치를 판단하는 지표 변수를 만들 수 있습니다.

  • 중복 특징(Interaction Features) : 두 개의 특징을 결합하여 새로운 특징을 만드는 방법입니다. 예를 들어 클릭 수와 접속 수를 결합하여 클릭 당 방문자수와 같은 특징을 만들 수 있습니다. 주의해야할 점은 특징이 늘어나기 때문에 자동으로 이러한 작업을 할 경우 특징이 너무 많아질 수가 있습니다.(feature explosion이라고 합니다.)

  • 대표 특징(Feature Representation) : 특징들로부터 대표성을 갖는 새로운 특징을 만드는 작업입니다. 예를 들어, 미국의 12학년 제도로 표시되는 데이터가 있을 때 이를 기반으로 초등학교, 중학교, 고등학교와 같이 대표성을 가는 특징을 만들 수 있습니다.

  • 외부 데이터(External Data) : 모델 성능을 높이기 위해 기존의 주어진 데이터 외의 다른 데이터를 활용하는 방법입니다.

  • 에러 분석(Error Analysis - Post-Modeling) : 모델을 통해 나온 결과를 바탕으로 특징을 만드는 방법입니다. 일반적으로 데이터 사이언스의 프로세스가 반복을 기반으로 모델의 성능을 높이기 때문에 당연하다고 생각하실 수도 있을 것 같습니다. 그래서 아래에 보다 구체적으로 구분한 에러 분석을 통해 특징을 만드는 방법을 소개해드리겠습니다.

    • Start with larger errors : 모델을 통해 나온 모든 값을 확인하기 보다 ‘에러(Error)’값이 큰 feature부터 확인하는 방법입니다.

    • Segment By classes : 평균 에러(Error)값을 기준으로 Segment를 나누어 비교하면서 분석하는 방법입니다.

    • Unsupervised clustering : 패턴을 발견하는데 어려움이 있을 경우 Unsupervised(비지도) 학습인 clustering 알고리즘을 사용하여 분류되지 않은 값들을 확인하는 방법입니다. 여기서 clustering을 클래스로 분류하는 것이 아니라 에러(Error)의 원인을 찾는 방법으로 사용해야 한다는 점을 주의해야 합니다.

    • Ask colleagues or domain experts : 데이터를 통해서 발견할 수 없다면 도메인(분야) 전문가의 도움을 통해 에러(Error)의 원인을 찾아낼 수도 있습니다.


References

  1. Wikipedia - Feature Engineering

  2. Learning Data Science: What exactly is feature engineering?

  3. 차원축소와 특징선택이란 무엇인가

  4. Best Practices for Feature Engineering

  5. What are some best practices in Feature Engineering? from Quora