데이터 분석이나 머신러닝 공부를 시작하면 가장 먼저 마주치는 벽이 있습니다. 바로 "데이터 전처리"죠. 그중에서도 "왜 멀쩡한 숫자에 로그를 취하나요?", "스케일링은 왜 꼭 해야 하나요?"라는 질문에 대한 답을 오늘 완벽하게 정리해 보겠습니다.
1. 로그(Log) 변환: "폭발적인 숫자를 잠재우는 마법"
머신러닝 모델은 '숫자의 크기'에 굉장히 민감합니다. 하지만 우리가 사는 세상의 데이터는 그리 고르지 않습니다.
🏠 집값 데이터의 예시
대부분의 집은 3억~10억 사이에 몰려 있지만, 가끔 100억이 넘는 초고가 펜트하우스가 등장합니다. 이를 데이터 시각화해보면 왼쪽으로 치우치고 오른쪽 꼬리가 아주 긴(Right-Skewed) 모양이 됩니다.
로그를 왜 취하나요?
- 데이터의 격차 해소: 로그는 큰 숫자를 작게 만들고, 작은 숫자들 사이의 간격은 상대적으로 넓게 만듭니다. 100억이라는 거대한 숫자를 로그의 세계로 가져오면 다른 데이터들과 '대화가 가능한 수준'으로 차분해집니다.
- 종 모양(정규분포)으로 만들기: 머신러닝 모델(특히 선형 회귀)은 데이터가 예쁜 종 모양일 때 학습 성능이 가장 좋습니다. 로그는 삐져나온 꼬리를 안으로 당겨 데이터를 종 모양에 가깝게 펴주는 역할을 합니다.
- 비율(%)의 관점: 1억에서 2억이 되는 것(2배)과 10억에서 20억이 되는 것(2배)을 동일한 '성장'으로 인식하게 합니다. 이는 복리나 성장률이 중요한 금융 데이터에서 필수적입니다.
💡 꿀팁: 데이터에 0이 있으면 로그값은 정의되지 않습니다(마이너스 무한대). 그래서 보통 log(x + 1)을 해주는 np.log1p() 함수를 사용합니다.
2. 데이터 스케일링(Scaling): "공평한 운동장을 만드는 과정"
스케일링은 한마디로 "단위(Unit)의 통일"입니다.
🏃♂️ 유치원생과 거인의 달리기 시합
데이터셋에 '방의 개수(1~5개)'와 '거실 면적(100~3000sqft)'이라는 두 변수가 있다고 가정해 봅시다.
- 방이 1개 늘어나는 것은 엄청난 변화지만, 수치상으로는 겨우 '+1'입니다.
- 면적이 조금 넓어지는 것은 사소할 수 있지만, 수치상으로는 '+100'이 훌쩍 넘습니다.
모델은 바보같이 "오! 숫자가 큰 면적이 훨씬 중요한 변수구나!"라고 오해하게 됩니다. 이를 막기 위해 모든 변수를 동일한 체급으로 맞춰주는 것이 스케일링입니다.
대표적인 스케일링 3대장
① StandardScaler (표준화)
- 방식: 평균을 0, 표준편차를 1로 만듭니다.
- 특징: 데이터를 '평균 근처에 얼마나 모여 있는가'로 재배치합니다.
- 단점: 이상치(Outlier)가 있으면 평균이 확 변해서 성능이 떨어질 수 있습니다.
② MinMaxScaler (정규화)
- 방식: 최솟값을 0, 최댓값을 1로 압축합니다.
- 특징: 모든 데이터를 0과 1 사이의 좁은 감옥에 가둡니다.
- 단점: 이상치가 '1억'처럼 크다면, 나머지 데이터들은 0.0001 근처에 닥닥 붙게 되어 변별력을 잃습니다.
③ RobustScaler (이상치 해결사)
- 방식: 평균 대신 중앙값(Median)과 사분위수(IQR)를 사용합니다.
- 특징: 이상치에 매우 강합니다. 튀는 값이 한두 개 있어도 대다수 데이터의 체급을 아주 예쁘게 잘 맞춰줍니다.
- 결론: 실제 현업 데이터나 캐글 집값 데이터처럼 튀는 값이 많은 경우 가장 정석적인 선택입니다.
📝 블로그 요약 노트
- 로그 변환은 데이터의 분포를 고르게 만들고(정규화), 비율의 관점을 도입하기 위해 쓴다.
- 스케일링은 서로 다른 단위를 가진 변수들을 공평하게 비교하기 위해 필수적이다.
- 이상치가 걱정된다면 고민 말고 RobustScaler를 선택하자.
'AI > 머신러닝' 카테고리의 다른 글
| 랜덤포레스트 쉽게 이해하기: 여러 나무가 함께 내리는 똑똑한 결정 (0) | 2026.04.28 |
|---|