brunch

You can make anything
by writing

C.S.Lewis

by 권순목 Jul 28. 2021

2.2 피쳐 엔지니어링

데이터 과학 미니북 - 2. 데이터 가공

2.2 피쳐 엔지니어링


2.2.1 설명 변수, 반응 변수, 피쳐, 레이블


앞서 2.1장에서 변수의 종류를 수치형 변수와 범주형 변수로 나눴습니다. 이것은 변수의 내용에 따른 분류라 할 수 있는데, 변수는 그것이 어떤 용도로 쓰이느냐에 따라서도 분류될 수 있습니다. 외재적 요인을 이용한 분류라 할 수 있습니다.


[표 1] 달리기 대회 참가자 기록


[표 1]은 앞 단원에서 살펴 본 달리기 대회 참가자들에 대한 데이터입니다. 이 데이터를 기반으로 기록을 예측하는 모델을 만든다고 가정해 보겠습니다. 예를 들어, 다음과 같은 모델을 만들 수 있습니다.


이와 같이 모델이 주어졌을 때, 모델 함수의 입력에 해당하는 변수들을 설명 변수 (Explanatory Variable), 모델 함수의 출력에 해당하는 변수들을 반응 변수(Response Variable)라고 부릅니다. 위의 예에서 나이, 성별, 이전 참가 회수는 설명 변수이고 기록은 반응 변수라고 할 수 있습니다.


설명 변수, 반응 변수와 거의 동일한 의미로 쓰이는 용어들이 몇 있는데, 설명 변수의 의미로 쓰이는 용어에는 예측 변수(Predictor Variable), 피쳐(Feature)가 있고, 반응 변수의 의미로 쓰이는 용어에는 레이블(Label)이 있습니다.


설명 변수 = 예측 변수 = 피쳐 = 나이, 성별, 이전 참가 회수

반응 변수 = 레이블 = 기록


엄밀하게 따지면 설명 변수, 예측 변수, 피쳐, 레이블과 같은 용어들 사이에는 미세한 차이가 있습니다. 통계학에서 변수간 인과 관계를 다루는 분야에서는 엄밀한 구분이 요구되며, 변수의 외재적 특성을 지칭하는 더 많은 용어들도 있습니다. 다만, 데이터 과학의 세계에서는 많은 경우 이 정도의 차이는 무시되며, 설명 변수와 피쳐라는 용어가 섞여 쓰이고 반응 변수와 레이블이라는 용어가 섞여 쓰이고 있습니다.


2.2.2 피쳐 엔지니어링의 개념


피쳐 엔지니어링이란 설명 변수를 분석하기 좋은 형태로 가공하는 것을 뜻합니다. 분석하기 좋은 형태라는 것이 다소 애매 하므로, 다음 사례를 통해 살펴 보겠습니다.


[표 2] 포유류 데이터


[표 2]는 포유류 동물 60여 종에 대한 데이터[1]의 일부로, 몸무게와 두뇌 무게 변수 값을 보여주고 있습니다. 이 데이터에서 변수 ‘몸무게’와 ‘두뇌 무게’가 어떤 모델을 위한 피쳐라고 가정해 봅시다. 피쳐에 대한 기본 데이터 분석으로서, 몸무게와 두뇌 무게가 어떤 식으로 분포되어 있는지 시각화를 한번 해보도록 하겠습니다.


[그림 1] 포유류의 몸무게와 두뇌 무게 데이터


[그림 1]은 몸무게와 두뇌 무게 데이터를 각각 그래프의 X축, Y축에 놓고 그린 것입니다. 이와 같은 그래프를 산포도(Scatter Plot)라 합니다. 이 그림에서 두 변수의 데이터가 어떤 특징을 가지는지 잘 보이나요?


[그림 2] 포유류의 몸무게와 두뇌 무게 (로그 취함)


[그림 2]는 두 변수에 로그를 취한 것을 그림으로 그린 것입니다. (실제로는 음수가 나오는 경우를 방지하기 위해 1씩 더하여 로그를 취했습니다.) 같은 데이터인데 그래프가 보여주는 모양은 큰 차이가 납니다. 앞의 그래프에서 두 변수는 무질서한 분포로 보이지만, 뒤의 그래프는 두 변수 사이에 양의 상관관계(한 변수가 증가하면 다른 변수도 같이 증가하는 관계)가 있음을 보여줍니다. 이는 로그를 취함으로써 데이터의 숨겨진 특성을 발굴해 낸 것과 같습니다. 분석 목적에 따라 차이는 있을 수 있으나, 대부분의 경우 이 데이터로 모델을 만들 때는 몸무게와 두뇌 무게 두 변수를 그대로 넣는 것 보다 로그를 취하여 넣는 경우 모델의 성능이 올라가게 됩니다.


이 예에서 변수에 로그를 취한 행동이 바로 피쳐 엔지니어링입니다. 피쳐 엔지니어링은 주로 데이터의 숨겨진 특성을 발굴해내는 것을 목적으로 피쳐 변수들을 가공하는 것을 의미하며, 그 방법은 무궁 무진합니다. 예에서처럼 변수에 로그를 취할 수도 있고, 변수의 제곱, 세제곱을 취할 수도 있습니다. 데이터에 신규 변수를 추가하는 것도 가능합니다. 즉, 몸무게 변수를 그대로 두고 로그를 취한 몸무게 변수를 데이터에 추가해 줄 수도 있습니다. 원본 데이터의 피쳐들을 조합하여 신규 피쳐를 생성하여 추가해줄 수도 있습니다. 예를 들어 2 x 몸무게 + 3 x 두뇌 무게 같은 값을 계산하여 신규 변수로 넣어줄 수도 있습니다.


변수 값이 0과 1사이에 분포하도록 조정해 주거나, 변수가 평균이 0이고 분산이 1이 되도록 조정하는 작업을 변수 정규화(Normalization)이라고 하는데, 이러한 작업도 피쳐 엔지니어링의 일부라고 할 수 있습니다.


피쳐 엔지니어링은 무척이나 중요합니다. 데이터와 구현 환경 조건이 주어진 상황에서 데이터 분석 업무를 수행할 때, 사용 가능한 통계 모델이나 머신 러닝 모델은 몇 가지로 사실상 정해져 있는 경우가 많습니다. 이러한 경우 피쳐 엔지니어링을 어떻게 하느냐가 모델의 성능, 나아가 데이터 분석 팀의 성과에 절대적인 영향을 끼치게 됩니다. 이러한 점을 두고 앤드류 응(Andrew Ng)은 다음과 같은 유명한 말을 남기기도 했습니다.


응용 머신 러닝이란 기본적으로 피쳐 엔지니어링이다. (Applied machine learning is basically feature engineering.)


2.2.3 피쳐 폭발과 피쳐 선택


피쳐 엔지니어링과 관련하여 추가로 알아둘 만한 개념으로 피쳐 폭발(Feature Explosion)과 피쳐 선택(Feature Selection)이 있습니다.


피쳐 폭발은 피쳐 엔지니어링을 적용하여 데이터의 피쳐 수를 폭발적으로 늘리는 것을 의미합니다. 예를 들어 피쳐 변수 a, b가 있을 때 다음과 같은 피쳐들을 추가로 넣어줄 수 있습니다.



이렇게 피쳐 개수가 늘어나면 대부분의 경우 모델의 학습 성능이 향상됩니다. 그러나, 지나친 피쳐 추가는 모델 학습 부담을 높이고, 무엇보다, 모델이 학습 데이터에 과적합하도록 만들어서 최종적인 성능은 오히려 떨어뜨릴 수 있습니다. (과적합에 대해서는 책의 뒷부분 모델 평가 관련 장에서 자세히 설명합니다.) 이러한 경우 모델의 성능을 모니터링하면서 피쳐 중 모델 개선에 기여하는 것들만 남기는 과정이 필요하며, 이것을 피쳐 선택이라고 합니다.


[그림 3] 피쳐 폭발과 피쳐 선택


[그림 3]은 피쳐 폭발과 피쳐 선택의 개념을 보여주고 있습니다. 다양한 오픈소스 도구들이 피쳐 폭발과 피쳐 선택 과정을 일부 자동화 하면서 모델을 학습하는 기능을 제공합니다. 신경망의 경우 그 모델 자체가 피쳐 폭발과 피쳐 선택 과정을 일부 내재화 하고 있다고 볼 수도 있습니다.





[1] Weisberg, S. (1985) Applied Linear Regression. 2nd edition. Wiley, pp. 144–5


이전 06화 2.1 통계 데이터의 정의
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari