목차
"쓰레기를 넣으면 쓰레기가 나온다 (Garbage In, Garbage Out)."
데이터 과학 분야의 유명한 격언입니다. 아무리 좋은 머신러닝 모델이 있어도, 지저분한 데이터를 그대로 사용하면 좋은 결과를 얻을 수 없습니다. 현실의 데이터는 마치 다듬어지지 않은 '원석'과 같습니다. 이 원석을 갈고닦아 빛나는 '보석'으로 만드는 과정이 바로 데이터 전처리(Data Preprocessing)입니다.
이번 글에서는 머신러닝 모델의 성능을 깨우는 가장 중요한 전처리 기법 세 가지를 알기 쉽게 알아보겠습니다.
1. 데이터의 빈칸 채우기: 결측치(Missing Value) 처리
데이터를 수집하다 보면 값이 누락된 '빈칸', 즉 결측치가 흔히 발생합니다. 대부분의 머신러닝 모델은 이 빈칸을 어떻게 처리해야 할지 모르기 때문에, 우리가 직접 처리 방법을 정해주어야 합니다.
결측치 처리 전략
- 삭제하기: 가장 간단한 방법입니다. 결측치가 포함된 데이터 줄(row) 전체를 삭제하거나, 빈칸이 너무 많은 항목(column)을 통째로 없애는 방식입니다. 하지만 소중한 정보를 잃을 수 있으므로 신중하게 결정해야 합니다.
- 채워넣기 (Imputation): 결측치를 그럴듯한 값으로 대체하는 방법입니다.
- 대표값으로 채우기: 가장 많이 쓰는 방법입니다. 숫자 데이터는 해당 항목의 평균이나 중앙값으로, 문자 데이터는 가장 자주 등장하는 최빈값으로 채웁니다. 데이터의 전체적인 특징을 크게 해치지 않으면서 빈칸을 메꿀 수 있습니다.
- 예측값으로 채우기: 다른 데이터를 기반으로 결측치를 예측하는 모델(예: KNN)을 만들어 채우는 고급 기법입니다. 더 정교하지만, 과정이 다소 복잡할 수 있습니다.
전문가의 Tip: Scikit-learn의 SimpleImputer
를 사용하면 이런 채우기 규칙을 객체로 저장할 수 있습니다. 덕분에 나중에 새로운 데이터가 들어와도 똑같은 규칙을 일관성 있게 적용할 수 있어 매우 편리합니다.
2. '문자'를 '숫자'로: 범주형 데이터(Categorical Data) 변환
'성별(남/여)', '도시(서울/부산)' 같은 문자 데이터는 모델이 직접 이해하지 못합니다. 모델이 학습할 수 있도록 이런 문자들을 숫자 형태로 바꿔주어야 합니다.
범주형 데이터 처리 전략
- 레이블 인코딩 (Label Encoding): 각 문자에 고유한 번호를 붙이는 방법입니다. 예를 들어 '서울=0', '부산=1', '대구=2'처럼 바꾸는 것이죠. 간단하지만, 모델이 숫자의 크기(2 > 1)를 보고 '대구가 부산보다 더 중요하다'고 잘못 학습할 위험이 있습니다.
- 원-핫 인코딩 (One-Hot Encoding): 위 단점을 보완하기 위해 가장 널리 쓰이는 방법입니다. 각 문자 항목을 새로운 카테고리(column)로 만들고, 해당하는 곳에만 1, 나머지는 0으로 표시합니다.
예를 들어 '도시_서울', '도시_부산', '도시_대구'라는 새로운 항목을 만들고, 데이터가 '서울'이라면 '도시_서울'에만 1을 표시하는 식입니다. 순서 관계가 없어 모델의 왜곡을 막아주지만, 종류가 너무 많으면 데이터의 항목 수가 급격히 늘어날 수 있습니다.
전문가의 Tip: Pandas의 get_dummies
는 빠르고 간편하지만, 배포나 재사용을 생각한다면 Scikit-learn의 LabelEncoder
와 OneHotEncoder
를 쓰는 것이 좋습니다. 전처리 규칙을 저장하고 재활용하기 용이하기 때문입니다.
3. 변수들의 체급 맞추기: 피처 스케일링(Feature Scaling)
만약 데이터에 '나이'(1~100 사이)와 '연봉'(2,000만~2억 사이)이 함께 있다면 어떨까요? 단위가 훨씬 큰 '연봉'이 모델의 판단을 거의 독점하게 될 겁니다. 피처 스케일링은 이렇게 제각각인 변수들의 값의 범위, 즉 '체급'을 비슷하게 맞춰주는 작업입니다. 특히 선형 회귀, 신경망, SVM 같은 모델의 성능에 큰 영향을 미칩니다.
피처 스케일링 전략
- 정규화 (Normalization / Min-Max Scaling): 모든 값을 0과 1 사이로 압축합니다. 최솟값은 0, 최댓값은 1이 됩니다. 하지만 데이터에 아주 크거나 작은 값(이상치)이 있으면, 대부분의 값이 아주 좁은 범위에 몰리게 되는 단점이 있습니다.
- 표준화 (Standardization): 데이터의 평균을 0, 표준편차를 1로 맞춥니다. 이상치에 상대적으로 덜 민감하기 때문에, 어떤 방법을 써야 할지 모를 때 우선적으로 고려할 수 있는 가장 일반적인 스케일링 기법입니다.
전문가의 Tip: Scikit-learn의 MinMaxScaler
와 StandardScaler
를 사용하면, 어떤 기준으로 데이터를 변환했는지 그 규칙을 저장할 수 있습니다. 나중에 테스트 데이터나 실제 서비스 데이터에도 동일한 기준으로 스케일링을 적용할 수 있어 일관성을 유지하는 데 필수적입니다.
마치며: 잘 닦은 데이터가 최고의 모델을 만듭니다
데이터 전처리는 모델링처럼 화려해 보이지는 않지만, 머신러닝 프로젝트의 성패를 좌우하는 가장 중요한 기초 공사입니다. 잘 정제된 데이터는 평범한 모델의 성능도 끌어올리고, 지저분한 데이터는 최고의 모델도 무력하게 만듭니다.
오늘 살펴본 결측치 처리, 범주형 데이터 변환, 피처 스케일링 이 세 가지만 잘 이해하고 다뤄도, 여러분의 머신러닝 모델은 훨씬 똑똑해질 것입니다. 데이터의 잠재력을 깨우는 첫걸음, 데이터 전처리부터 탄탄하게 시작해 보세요.