훌륭한 요리사가 신선하고 깨끗한 재료를 준비하듯, 최고의 머신러닝 모델을 만들기 위해서는 데이터를 꼼꼼하게 손질해야 합니다. 이 단원에서는 원석과 같은 데이터를 보석으로 가공하는 데이터 전처리 과정을 학습합니다.
데이터 전처리(Data Preprocessing)는 모델의 성능에 결정적인 영향을 미치는, 머신러닝 프로젝트의 가장 중요한 단계 중 하나입니다. 'Garbage In, Garbage Out' 원칙처럼, 아무리 뛰어난 알고리즘도 제대로 손질되지 않은 데이터로는 좋은 성능을 낼 수 없습니다.
실제 데이터에는 값이 누락된 경우, 즉 결측치(Missing Value)가 흔하게 존재합니다. 이를 그대로 두면 컴퓨터가 계산을 할 수 없으므로 반드시 처리해야 합니다.
가장 먼저 데이터에 결측치가 얼마나 있는지 확인해야 합니다. 펭귄 데이터 탐색 시 우리는 penguins.info() 와 penguins.isna().sum() 명령어를 사용했습니다. 이를 통해 '부리 길이', '몸무게', '성별' 등 여러 특징에 결측치가 존재함을 파악했습니다.
fillna)결측치를 처리하는 가장 일반적인 방법은 다른 값으로 채워 넣는 것입니다.
penguins['culmen_length_mm'].fillna(value=penguins['culmen_length_mm'].mean(), inplace=True)dropna)경우에 따라 결측치가 포함된 행 전체를 삭제하는 방법을 사용하기도 합니다. 펭귄 데이터의 '성별' 특징에 남은 결측치는 dropna()를 통해 해당 행을 제거했습니다. 하지만 이 방법은 귀중한 데이터를 잃을 수 있으므로 신중하게 사용해야 합니다.
결측치 외에도 분석을 방해하는 데이터가 있습니다. 'sex' 특징에 'MALE', 'FEMALE' 외에 '.' 이라는 이상한 값이 섞여 있던 것을 기억할 것입니다. 이러한 데이터는 이상치(Outlier) 또는 오류 데이터로, 모델 학습에 혼란을 줄 수 있으므로 제거해야 합니다. 우리는 penguins.drop(336, inplace=True) 명령어로 해당 행을 삭제하여 데이터의 무결성을 확보했습니다.
데이터 전처리 과정에서 가장 중요하고 강력한 '마법' 중 하나는 스케일링(Scaling)입니다. 특히 k-NN처럼 데이터 간의 '거리'를 기반으로 작동하는 알고리즘에서는 스케일링이 모델 성능을 극적으로 변화시킵니다.
펭귄 데이터의 '몸무게'(수천 g)와 '부리 길이'(수십 mm)처럼 특징 간에 단위와 숫자 범위가 크게 다를 경우, 컴퓨터는 숫자 크기가 훨씬 큰 '몸무게'가 더 중요한 정보라고 착각하게 됩니다. 이는 실제 중요도와 상관없이 모델의 판단에 과도한 영향을 미쳐 거리 계산을 왜곡시킵니다.
이러한 불공평한 상황을 막기 위해, 모든 특징들의 단위를 공평하게 맞춰주는 정규화(Normalization) 작업을 수행합니다. MinMaxScaler는 모든 숫자 특징의 값을 0과 1 사이의 범위로 변환하는 대표적인 정규화 도구입니다. 이 과정을 통해 모든 특징들이 동등한 중요성을 가지고 모델 학습에 기여할 수 있게 됩니다.
스케일링은 모델 성능에 극적인 변화를 가져왔습니다. 스케일링 전 펭귄 분류 모델의 정확도는 76%에 불과했지만, MinMaxScaler 적용 후 정확도는 무려 98%로 수직 상승했습니다. 이는 알고리즘의 성능을 최적화하는 데 데이터 전처리가 얼마나 결정적인 역할을 하는지 명확히 보여주는 사례입니다.