모두의 AI
머신러닝플레이그라운드
로딩 중…

배우기

Ch.01

데이터 스케일링: 단위를 맞추고 분포를 다루기

사람의 나이는 20~70 사이에서 움직이지만, 연봉은 2,000만에서 2억 사이를 오갑니다. 머신러닝 인공지능은 '나이'나 '원' 같은 단위를 전혀 이해하지 못하고 오직 숫자의 덩치만 봅니다. 그래서 이 데이터를 그대로 던져주면, 인공지능은 "아하! 연봉 숫자가 5천만이나 되니까, 30밖에 안 되는 나이 따위는 완전히 무시해도 되겠군!" 이라며 엉뚱한 착각에 빠집니다.
데이터 스케일링(Data Scaling)은 이렇게 코끼리와 쥐처럼 덩치가 아예 다른 데이터들을 똑같은 백분율이나 점수로 변환하여, 공평한 체급에서 서로의 진짜 중요도를 겨룰 수 있게 만들어주는 필수 기초 공사입니다. 이 장에서는 수능 표준점수처럼 데이터를 맞추는 표준화, 작은 상자에 욱여넣는 Min-Max, 그리고 동네 노래방에 나타난 세계적인 성악가를 무시하는 Robust 스케일링의 재미있는 원리를 알아봅니다.

챕터별 중급 머신러닝 도식화

챕터를 선택하면 아래 도식이 해당 챕터 내용으로 바뀌어요. 중급 머신러닝 흐름을 한눈에 보세요.

데이터 스케일링: 단위를 맞추고 분포를 다루기

1. 데이터 스케일링이란? (숫자들의 키높이 구두 맞추기)
여러분이 소개팅 앱의 AI를 만든다고 상상해 봅시다. 비슷한 사람끼리 매칭해주기 위해 '나이 차이'와 '연봉 차이'를 계산합니다. A와 B는 나이가 5살 차이 나고, 연봉이 100만 원 차이 납니다. 사람의 기준에서는 둘 다 적당히 비슷한 수치지만, 컴퓨터가 볼 때는 "100만이라는 어마어마한 차이에 비하면 5라는 숫자는 먼지 같군!"이라며 나이를 아예 없는 셈 쳐버립니다. 이처럼 단위가 다를 때 발생하는 숫자 크기의 독재를 막기 위해, 모든 데이터를 0~1 사이나 평균 0 근처의 공평한 눈금자로 싹 다 바꿔주는 마법이 바로 스케일링입니다.
2. 표준화 (Standardization): 수능 표준점수의 원리
수식: z=x−μσz = \frac{x - \mu}{\sigma}z=σx−μ​
가장 흔하게 쓰이는 방법입니다. 국어 시험이 너무 쉬워서 90점을 맞았고, 수학 시험이 너무 어려워서 80점을 맞았다면 누가 더 잘한 걸까요? 단순히 숫자만 보면 국어(90)가 이기지만, 평균(μ\muμ)과 난이도인 표준편차(σ\sigmaσ)를 반영해 점수를 고치면 어려운 수학을 잘 본 사람의 점수(zzz)가 훨씬 높게 나옵니다. 이처럼 모든 데이터를 평균 0, 분산 1이라는 공평한 정규분포(종 모양) 운동장 한가운데로 예쁘게 모아주는 것이 표준화입니다.
3. 최소-최대 (Min-Max Scaling): 미니어처 상자에 가두기
수식: x′=x−xmin⁡xmax⁡−xmin⁡x' = \frac{x - x_{\min}}{x_{\max} - x_{\min}}x′=xmax​−xmin​x−xmin​​
데이터 중에 꼴찌(최솟값)는 무조건 000으로 만들고, 1등(최댓값)은 무조건 111로 만듭니다. 나머지 데이터들은 그 사이에서 자기 등수에 맞게 0.2, 0.5, 0.8처럼 자리 잡게 됩니다. 수십만 단위의 거대한 데이터라도 무조건 [0,1][0, 1][0,1]이라는 아주 작고 규격화된 네모 상자 안에 빈틈없이 꽉꽉 눌러 담아버리는 직관적이고 강력한 압축 기술입니다.
4. 로버스트 (Robust Scaling): 동네 노래방에 나타난 파바로티 무시하기
수식: x′=x−medianIQRx' = \frac{x - \mathrm{median}}{\mathrm{IQR}}x′=IQRx−median​
우리 동네 사람들의 평균 노래 실력을 재고 있는데, 갑자기 세계적인 성악가 파바로티(초극단적인 이상치)가 껴버렸습니다. 그러면 평균 실력이 어마어마하게 폭등해 버려 동네 사람 전부가 졸지에 음치 판정을 받게 됩니다. 로버스트 스케일링은 이런 괴짜(이상치)들 때문에 평균이 망가지는 것을 막기 위해, 가운데 줄 선 사람(중앙값, median)과 상위/하위 25%의 정상적인 사람들(IQR)만을 기준으로 튼튼하게 눈금을 그어버립니다. 파바로티 같은 이상치에 절대 흔들리지 않죠!
5. 스케일링 vs '정규화' 이름 주의
같은 단어라도 맥락마다 뜻이 달라 헷갈리기 쉽습니다. 정규화(Normalization)는 Min-Max 스케일링을 가리키기도 하고, 딥러닝에서는 L2 가중치 규제를 뜻하기도 합니다. 이 장에서 말하는 스케일링은 특성 값의 단위·범위를 맞추는 전처리이며, 기초 ML Ch.13 규제(Regularization)와는 별개입니다.
거리 왜곡도 숫자로 보면 바로 느껴집니다. 두 사람의 나이 차가 5, 연봉 차가 100만 원일 때 유클리드 거리는 52+1,000,0002≈1,000,000\sqrt{5^2 + 1{,}000{,}000^2} \approx 1{,}000{,}00052+1,000,0002​≈1,000,000에 가깝습니다. 거의 전부가 연봉 축에서 나온 값입니다. 표준화로 두 축의 비중을 맞추면, SVM처럼 거리·마진을 쓰는 모델이 나이와 연봉을 더 공정하게 함께 볼 수 있습니다.

스케일링 방법 비교

세 방법이 왜 그렇게 동작하고, 어떤 데이터에 맞는지 서술로 정리했습니다.

방법왜 이렇게 쓰나
표준화 (Standardization)수식 z=x−μσz=\frac{x-\mu}{\sigma}z=σx−μ​는 「평균에서 얼마나 떨어져 있나」를 표준편차 단위로 바꿉니다. 그래서 대부분 값이 0 근처, 퍼짐이 1 근처로 모이고, SVM처럼 거리·마진을 쓰는 모델이 특성마다 비슷한 체급으로 비교하기 좋습니다. 반면 μ,σ\mu,\sigmaμ,σ는 모든 점의 평균·퍼짐이라, 이상치 한 명이 끼면 평균이 밀리고 표준편차가 커져 대부분 데이터가 엉뚱한 zzz로 쏠립니다.
Min-Max 스케일링수식 x′=x−xmin⁡xmax⁡−xmin⁡x'=\frac{x-x_{\min}}{x_{\max}-x_{\min}}x′=xmax​−xmin​x−xmin​​는 꼴찌를 000, 1등을 111로 고정하고 그 사이를 비율로 나눕니다. 그래서 결과가 항상 [0,1][0,1][0,1]이라 픽셀(0~255)을 0~1로 넣거나, 활성함수가 고정 구간 입력을 기대하는 신경망에 맞습니다. 하지만 눈금의 양끝이 최솟값·최댓값 두 점뿐이라, 극단값 하나가 xmax⁡x_{\max}xmax​를 끌어올리면 나머지 값은 0.01~0.02처럼 한데 뭉개질 수 있습니다.
Robust 스케일링수식 x′=x−medianIQRx'=\frac{x-\mathrm{median}}{\mathrm{IQR}}x′=IQRx−median​는 평균 대신 중앙값, 표준편차 대신 IQR(가운데 50%의 폭)으로 눈금을 잡습니다. 극단값이 평균을 끌어당겨도 중앙값과 IQR은 거의 안 움직이므로, 소득·결제액처럼 꼬리가 길거나 이상치가 많은 데이터에서도 「대부분 사람」 기준 눈금이 유지됩니다.

왜 중요한지

1. 거리·마진 기반 모델(SVM 등)의 생명줄
데이터 사이의 물리적인 '거리'나 마진을 직접 쓰는 모델들에게 스케일링은 산소와 같습니다. 스케일링 없이 거리를 재면, X축은 센티미터(cm)로 재고 Y축은 킬로미터(km)로 재서 지도를 그리는 셈입니다.
나이(약 30~40)와 연봉(약 4,500~6,100, 만 원)만 있는 표를 생각해 보세요. 연봉 막대가 화면을 거의 다 차지합니다. 아래 비주얼 왼쪽이 이 범위 불균형이고, 오른쪽은 z-score 표준화 후 두 축이 비슷한 비중을 갖는 모습입니다.
2. 딥러닝 훈련 속도의 부스터 (핫도그 산 vs 밥그릇 산)
스케일링이 안 된 데이터의 오차 지형은 길쭉한 핫도그 모양의 산입니다. 인공지능이 경사하강법으로 산을 내려갈 때, 한쪽 축만 너무 가팔라서 바닥에 닿지 못하고 좌우로 미친 듯이 지그재그로 튕겨 다니게 됩니다(학습 정체). 하지만 스케일링으로 체급을 맞춰주면 지형이 아주 둥글고 예쁜 밥그릇 모양으로 변해서, 단숨에 바닥(최적점)으로 부드럽게 미끄러져 내려갈 수 있습니다. 학습 속도가 수십 배는 빨라집니다.
3. 컨닝은 절대 금물! (데이터 누수 경고)
수능 시험을 치기도 전에 내일 나올 시험지 전체 점수 평균을 내서 내 모의고사 점수를 조정한다면 완벽한 반칙이겠죠? 머신러닝에서도 훈련용(Train) 데이터와 실전용(Test) 데이터 전체를 합쳐서 냅다 평균을 구하고 스케일링을 해버리면 미래를 훔쳐본 것과 같은 데이터 누수(Data Leakage)가 발생합니다. 이렇게 만들어진 모델은 연습 게임에선 만점이지만, 실전에선 처참하게 박살 납니다.

어떻게 쓰이는지

상황에 맞는 스케일러 고르기
스케일러는 만능이 아닙니다. 데이터 모양을 먼저 보고 고릅니다.
이상치나 극단값 때문에 평균이 한쪽으로 끌려 버렸다면, 평균·표준편차에 의존하는 표준화보다 Robust가 낫습니다. 중앙값과 IQR로 눈금을 잡아 「파바로티 한 명」이 전체 체급을 망치지 않게 합니다.
반대로 픽셀 값처럼 「0부터 255까지」 범위가 이미 정해져 있고, 모델 입력을 [0,1][0,1][0,1] 같은 고정 구간에 넣어야 한다면 Min-Max가 잘 맞습니다. 최솟값은 000, 최댓값은 111로 두고 그 사이에 순서대로 배치합니다.
딥러닝처럼 당장 뭐가 맞는지 애매한 일반적인 수치 데이터라면, 우선 표준화부터 시험해 보는 경우가 많습니다. 세 방법의 공식과 특징은 아래 표에서 한눈에 비교할 수 있습니다.
훈련·검증·테스트에 같은 기준 적용하기
실무에서는 먼저 데이터를 훈련·검증·테스트로 나눕니다. 평균, 최솟값, 최댓값 같은 스케일 기준은 훈련 데이터에서만 정하고, 그 기준을 검증·테스트에도 그대로 씁니다. 검증·테스트를 섞어 기준을 다시 잡으면 모의고사 점수로 내일 시험지를 미리 본 것과 같아 데이터 누수가 납니다.
교차 검증을 할 때도 마찬가지입니다. fold마다 그 fold의 훈련 부분만으로 기준을 정하고, 검증 줄에는 정한 기준만 적용합니다. 모의고사를 여러 번 치듯 성능을 재더라도, 매번 훈련 데이터만으로 채점 기준을 새로 잡아야 실전 점수와 가깝게 나옵니다.
꼬리가 긴 분포는 로그 변환 후 스케일링
유튜브 조회수나 국가별 GDP처럼, 몇몇 소수가 파이를 다 먹어 치워서 그래프가 한쪽으로 기형적으로 길게 늘어진 데이터가 있습니다. 이럴 때는 무작정 스케일러를 들이밀지 말고, 그 전에 로그 변환 x→log⁡(1+x)x \rightarrow \log(1+x)x→log(1+x)로 찌그러진 분포를 펴 준 뒤 표준화를 씌우는 조합이 자주 쓰입니다.
모델별로 기억할 예외
어떤 모델은 스케일링이 거의 필수이고, 어떤 모델은 굳이 맞출 필요가 없습니다. SVM처럼 거리나 마진을 직접 쓰는 알고리즘은 특성마다 눈금이 다르면 큰 축에 끌려 버리므로, 스케일을 빼면 성능이 크게 흔들리는 경우가 많습니다.
반면 결정 트리나 랜덤 포레스트는 「30이 3보다 크냐」처럼 순서만 봅니다. 연봉을 원 단위로 쓰든 만 원 단위로 쓰든, 누가 더 많이 버는지 순위만 같으면 분할 결과는 비슷해져 스케일을 생략해도 괜찮은 편입니다.
신경망이나 경사 하강법처럼 가중치를 조금씩 고치는 모델은 입력 범위가 제각각이면 학습이 지그재그로 느려지기 쉽습니다. 이럴 때 Min-Max나 표준화로 범위를 맞춰 두면, 손실 지형이 덜 가파르게 느껴져 학습이 한결 안정됩니다.

실전 적용

한 줄 요약: 데이터 스케일링은 코끼리와 쥐처럼 덩치가 다른 특성을 공평한 눈금으로 옮겨, 거리·경사 기반 모델이 한 축에 끌리지 않게 하는 필수 전처리입니다.
실전에서는 짧게 이렇게만 골라도 됩니다. 소득·결제처럼 이상치가 많거나 꼬리가 길면 Robust를, 또는 log 변환 후 표준화를 검토합니다. 픽셀이나 [0,1][0,1][0,1] 고정 입력이면 Min-Max가 편합니다. SVM·신경망 등 일반 수치 모델이면 표준화를 먼저 생각해 보고, 트리·랜덤 포레스트는 순위만 쓰므로 스케일을 굳이 맞출 필요는 없습니다.
마지막으로 꼭 지킬 것은 하나입니다. 테스트·검증 데이터로 기준을 새로 잡지 말고, 훈련(또는 CV의 훈련 fold)에서만 기준을 정한 뒤 나머지에는 그대로 적용하세요.