표준화(Standardization)란? AI 특징값을 평균 0·표준편차 1로 맞추는 방법
TL;DR
표준화(Standardization)는 특징별 학습 평균을 빼고 표준편차로 나눠 값의 중심을 0, 척도를 표준편차 1에 맞추는 전처리입니다. 원래 단위가 다른 수치 특징을 비교하기 쉬워지지만 값이 일정 구간에 갇히지는 않습니다. 평균과 표준편차는 학습 데이터에서만 구하고 검증·테스트·추론에는 같은 값을 재사용해야 합니다.
핵심 3줄 요약
- 핵심 1
평균과 표준편차를 씁니다. 각 값이 특징 평균에서 표준편차 몇 개만큼 떨어졌는지 나타냅니다. - 핵심 2
고정 범위를 만들지는 않습니다. 이상치나 새 입력은 -3보다 작거나 3보다 큰 값이 될 수 있습니다. - 핵심 3
학습 통계를 고정합니다. 검증·테스트 데이터까지 섞어 평균을 구하면 평가에 데이터 누수가 생깁니다.
이 글에서 다룰 내용
- 표준화와 Z-score 스케일링의 한 문장 정의
- 10·20·30을 바꾸는 쉬운 계산 예시
- AI 학습에서 특징 척도를 맞추는 이유
- 학습 평균·표준편차를 저장하고 재사용하는 순서
- 중심화·단위 분산·희소 행렬·분산 0 특징의 처리
- 최소-최대·L1·L2·로버스트 스케일링과의 차이
- 데이터 누수와 분포 변화를 막는 실전 점검법
표준화를 한 문장으로 정의하면 무엇인가요?
표준화는 각 수치 특징에서 학습 데이터의 평균을 빼고 표준편차로 나눠, 값이 평균에서 얼마나 떨어졌는지를 공통 척도로 표현하는 선형 변환입니다. Z-score Scaling, Z-score Normalization, Standard Scaling이라고도 부릅니다.
변환값 0은 학습 평균과 같은 위치를 뜻합니다. 1은 평균보다 표준편차 하나만큼 크고, -2는 평균보다 표준편차 두 개만큼 작다는 뜻입니다. 특징의 원래 단위는 사라지지만 값의 순서와 평균에서 떨어진 상대적 위치는 남습니다.
표준화라는 말은 분야와 라이브러리에 따라 넓게 쓰입니다. 여기서는 표 형태 수치 특징을 열별 평균과 표준편차로 바꾸는 전처리를 다룹니다. 배치 정규화나 레이어 정규화처럼 신경망 내부 활성값을 조정하는 층과는 계산 시점과 대상이 다릅니다.
한 줄 정리: 표준화된 값은 원래 수치가 특징 평균에서 표준편차 몇 개만큼 떨어졌는지를 보여 줍니다.
쉬운 예시로 이해해 볼까요?
한 특징의 학습값이 10, 20, 30이라고 가정해 보겠습니다. 평균은 20입니다. 세 값의 모집단 분산은 약 66.67이고 표준편차는 약 8.16입니다. 각 값에서 평균 20을 뺀 뒤 8.16으로 나눕니다.
- 10은 평균보다 10 작으므로 표준화 결과는 약 -1.2247입니다.
- 20은 평균과 같으므로 결과는 0입니다.
- 30은 평균보다 10 크므로 결과는 약 1.2247입니다.
- 세 결과의 평균은 0이고 이 계산 기준의 분산은 1입니다.
이후 새 값 40이 들어와도 평균과 표준편차를 다시 구하지 않습니다. 학습 때 저장한 20과 8.16을 적용하면 약 2.45가 됩니다. 표준화는 새 값을 -1과 1 사이에 자르는 연산이 아니므로 학습 범위 밖 값도 그대로 표현합니다.
쉬운 예시: 키와 몸무게처럼 단위가 다른 숫자를 원래 단위 대신 각 집단의 평균에서 얼마나 멀리 있는지로 다시 표시하는 것과 비슷합니다.
왜 AI에서 표준화가 중요한가요?
단위가 다른 특징을 공통 척도로 비교합니다
나이는 수십 단위이고 연간 소득은 수천만 단위일 수 있습니다. 원시값을 그대로 쓰면 숫자가 큰 특징이 거리나 기울기 계산에 더 큰 영향을 줄 수 있습니다. 열별 표준화는 단위 크기보다 평균에서 떨어진 정도를 비교하게 합니다.
경사 기반 학습과 거리 계산을 다루기 쉬워집니다
선형 모델, 신경망, 서포트 벡터 머신처럼 특징 크기에 영향을 받는 모델은 표준화 뒤 학습이 안정되거나 최적화가 쉬워질 수 있습니다. K-means와 최근접 이웃처럼 거리 기반인 방법도 큰 단위의 특징이 거리를 지배하는 문제를 줄일 수 있습니다.
계수와 이상 신호를 같은 기준에서 읽을 수 있습니다
표준화된 특징에서는 1만큼의 변화가 대략 표준편차 하나의 변화입니다. 여러 특징의 계수나 입력 변화를 비교할 때 해석 기준이 선명해집니다. 다만 상관관계, 분포 모양, 인과관계까지 같아지는 것은 아닙니다.
핵심 인사이트: 표준화는 수치의 단위를 바꾸는 전처리입니다. 데이터 오류를 고치거나 모든 분포를 정규분포로 만드는 기술은 아닙니다.
표준화는 어떻게 작동하나요?
1. 데이터를 먼저 학습·검증·테스트로 나눕니다
평균과 표준편차를 구하기 전에 데이터 역할을 나눕니다. 전체 데이터에서 통계를 계산한 뒤 나누면 검증과 테스트의 정보가 학습 전처리에 섞입니다. 교차 검증에서는 각 폴드의 학습 부분에서 스케일러를 따로 fit해야 합니다.
2. 학습 데이터에서 특징별 평균을 구합니다
각 수치 열의 학습값을 모아 평균을 계산합니다. 나이 열, 소득 열, 사용 횟수 열은 서로 섞지 않고 각자 평균을 가집니다. 이 평균을 빼는 단계를 중심화라고 부릅니다.
3. 특징별 표준편차로 나눕니다
평균을 뺀 값을 같은 특징의 표준편차로 나눕니다. scikit-learn StandardScaler와 TensorFlow Transform의 scale_to_z_score는 이 원리를 사용합니다. 단, 라이브러리마다 분산의 분모와 수치 예외 처리가 다를 수 있습니다.
4. 학습 통계를 저장해 모든 후속 입력에 씁니다
학습이 끝나면 열 이름과 순서, 평균, 분산 또는 표준편차, 설정값을 모델과 함께 저장합니다. 검증·테스트·실시간 추론에서도 같은 통계를 적용합니다. 새 입력마다 다시 평균을 구하면 한 값의 의미가 실행 때마다 바뀝니다.
한 줄 정리: 데이터 분리 → 학습 특징별 평균·표준편차 계산 → 중심화와 스케일링 → 같은 통계 저장·재사용 순서입니다.
주요 설정과 예외는 무엇인가요?
with_mean 또는 중심화 설정
평균을 빼면 표준화된 학습 특징의 중심이 0에 놓입니다. scikit-learn은 with_mean으로 이 동작을 제어합니다. 희소 행렬에서 중심화하면 대부분의 0이 0이 아닌 값으로 바뀌어 메모리가 크게 늘 수 있으므로 with_mean=False 같은 설정을 검토해야 합니다.
with_std 또는 단위 분산 설정
표준편차로 나누는 단계는 특징 척도를 맞춥니다. with_std=False라면 평균만 빼고 크기는 그대로 둡니다. 반대로 평균은 빼지 않고 표준편차만 적용하는 구성도 가능하므로 표준화라는 이름만 기록하지 말고 두 설정을 함께 남깁니다.
분산 0인 상수 특징
학습 데이터에서 모든 값이 같으면 표준편차가 0이라 직접 나눌 수 없습니다. scikit-learn은 단위 분산을 만들 수 없는 특징을 그대로 두고 scale을 1로 처리한다고 안내합니다. 다른 도구도 같은 결과라고 가정하지 말고 작은 테스트로 확인해야 합니다.
결측값·가중치와 분산 계산 방식
scikit-learn은 NaN을 fit에서 제외하고 transform에서 유지하며 표본 가중치도 받을 수 있습니다. TensorFlow Transform은 0 자유도 보정의 분산을 사용한다고 설명하고, PySpark ML은 교정 표본 표준편차를 씁니다. 숫자가 조금 다른 원인은 라이브러리의 분산 정의일 수 있습니다.
실전 팁: 정상 입력, 상수 특징, NaN, 0이 많은 희소 입력, 매우 큰 이상치를 각각 고정 테스트로 만들어 도구별 결과를 기록하세요.
헷갈리는 스케일링과 무엇이 다른가요?
최소-최대 스케일링과 표준화의 차이
최소-최대 스케일링은 학습 최솟값과 최댓값을 이용해 0~1 같은 지정 구간으로 옮깁니다. 표준화는 평균과 표준편차를 사용하며 출력 범위를 제한하지 않습니다. 두 방법 모두 이상치의 영향을 받을 수 있지만 기준 통계와 결과 해석이 다릅니다.
L1·L2 정규화와 표준화의 차이
L1·L2 정규화는 보통 표본 하나의 벡터를 보고 절댓값 합이나 유클리드 길이를 1로 맞춥니다. 표준화는 여러 학습 표본을 보고 특징 열별 평균과 표준편차를 구합니다. 전자는 행 방향 벡터 크기, 후자는 열 방향 분포 척도를 주로 다룹니다.
로버스트 스케일링과 표준화의 차이
로버스트 스케일링은 평균과 표준편차 대신 중앙값과 사분위수 범위처럼 이상치에 덜 민감한 통계를 씁니다. 표준화는 극단값이 평균과 표준편차를 크게 바꿀 수 있습니다. 이상치가 오류인지 실제 희귀 사례인지 확인한 뒤 검증 성능을 비교합니다.
배치 정규화와 표준화의 차이
배치 정규화는 신경망 학습 중 미니배치 통계와 학습 가능한 감마·베타를 이용해 중간 활성값을 조정하는 층입니다. 여기서 다루는 표준화는 모델에 넣기 전 수치 특징에 학습 데이터 통계를 적용하는 전처리입니다.
정규분포와 표준화의 차이
표준화해도 치우친 분포, 여러 봉우리, 긴 꼬리는 그대로 남을 수 있습니다. 평균이 0이고 표준편차가 1이라는 사실은 데이터가 종 모양 정규분포가 됐다는 뜻이 아닙니다. 분포 모양이 문제라면 로그 변환이나 다른 방법을 따로 검토합니다.
비교 정리: 표준화는 특징별 평균·표준편차, 최소-최대는 극값 범위, L1·L2는 표본 벡터 노름, 로버스트 스케일링은 중앙값·분위수 통계를 기준으로 삼습니다.
실전에서는 어디에 쓰이나요?
표 형태 수치 특징 전처리
고객 나이, 거래액, 방문 횟수처럼 단위가 다른 열을 모델에 넣기 전에 사용합니다. 숫자로 적힌 상품 ID나 우편번호처럼 크기와 간격에 의미가 없는 범주형 값은 표준화 대상에서 제외해야 합니다.
선형 모델과 신경망 입력
규제된 선형·로지스틱 회귀나 신경망에서 특징 척도가 크게 다르면 가중치와 학습률을 해석하기 어려울 수 있습니다. 표준화 전후를 같은 데이터 분할, 지표, 시드로 비교해 실제 이점을 확인합니다.
거리·유사도 기반 모델
K-means, KNN, PCA, 일부 커널 모델은 특징 척도에 민감합니다. 큰 단위의 열이 거리나 분산을 독점하지 않도록 표준화할 수 있습니다. 트리 기반 모델처럼 값의 순서와 분할에 주로 의존하는 방법은 효과가 작을 수 있습니다.
분산 데이터와 운영 파이프라인
TensorFlow Transform과 Apache Spark는 대규모 데이터에서 평균과 표준편차를 분석해 변환 모델을 만들 수 있습니다. 분산 환경에서는 통계 계산 방식, 결측값 정책, 열 순서와 스케일러 버전을 배포 산출물에 함께 묶어야 합니다.
실전 팁: 스케일러를 학습 전 임시 코드로 두지 말고 전처리 파이프라인에 넣어 학습과 서빙이 같은 변환을 실행하게 하세요.
적용 전후를 어떻게 점검하나요?
1. 전체 데이터로 fit하지 않았는지 확인합니다
훈련·검증·테스트 분할보다 표준화를 먼저 하지 않았는지 봅니다. 파이프라인과 교차 검증을 함께 쓰면 각 학습 폴드의 통계만 계산하도록 묶을 수 있습니다. 데이터 누수는 결과가 정상 숫자로 보여도 평가를 부풀립니다.
2. 평균과 표준편차를 손으로 대조합니다
작은 배열 [10, 20, 30]으로 평균 20, 모집단 표준편차 약 8.16, 결과 약 [-1.2247, 0, 1.2247]이 나오는지 확인합니다. 사용 도구가 표본 표준편차를 쓰면 값이 달라질 수 있으므로 문서의 정의와 맞춰 봅니다.
3. 열 이름·순서와 자료형을 고정합니다
학습 때 나이, 소득 순서였는데 추론 때 소득, 나이 순서로 바뀌면 숫자 오류가 나지 않아도 잘못된 통계를 적용합니다. 입력 스키마, 자료형, 열 순서를 검사하고 평균·표준편차 배열과 함께 버전 관리합니다.
4. 이상치와 분포 변화를 모니터링합니다
절댓값이 큰 Z-score의 비율과 특징별 평균 이동을 기록합니다. 큰 값이 늘면 단순히 잘라내지 말고 센서 오류, 단위 변경, 업무 범위 확장, 데이터 드리프트인지 확인합니다. 학습 통계를 바꿀 때는 모델도 함께 재검증합니다.
5. 모델 성능과 역변환을 검증합니다
표준화 전후 모델을 같은 검증 데이터와 지표로 비교합니다. 예측 대상까지 표준화했다면 사용자에게 결과를 보여 주기 전에 학습 평균과 표준편차로 원래 단위를 복원합니다. 스케일러 없이 모델만 배포하지 않았는지도 확인합니다.
한 줄 정리: 분리 순서, 손계산 결과, 특징 스키마, 이상치 비율, 모델 성능과 역변환을 차례로 확인합니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 검증·테스트 데이터를 평균 계산에 넣지 않습니다. 학습 데이터에만 fit하고 나머지 데이터에는 transform만 적용합니다. 전처리 통계도 모델이 학습한 정보의 일부입니다.
둘째, 표준화가 이상치를 없앤다고 생각하지 않습니다. 극단값은 평균과 표준편차를 바꾸고 변환 뒤에도 큰 절댓값으로 남습니다. 오류값 정정, 로버스트 스케일링, 로그 변환 여부를 따로 검증합니다.
셋째, 희소 행렬을 무조건 중심화하지 않습니다. 평균을 빼면 0이 대부분인 입력이 조밀해져 메모리가 급증할 수 있습니다. 희소성을 유지해야 한다면 도구의 with_mean 또는 fixZero 같은 설정을 확인합니다.
넷째, 분산 0과 결측값 처리를 라이브러리에 맡긴 채 잊지 않습니다. 상수 특징과 NaN의 결과는 도구별 정책이 다를 수 있습니다. 학습·서빙 환경이 같은 구현과 버전을 쓰는지 점검합니다.
다섯째, 평균 0·표준편차 1을 정규분포와 혼동하지 않습니다. 표준화는 위치와 척도만 바꿉니다. 분포 모양과 이상치, 변수 사이 상관관계는 별도의 분석 대상입니다.
주의: 변환된 학습 데이터의 평균이 0에 가깝다는 사실만으로 검증이 끝나지 않습니다. 데이터 누수, 희소성 손실, 미래 분포 변화까지 확인해야 합니다.
자주 묻는 질문
Q1. 표준화와 Z-score 정규화는 같은 말인가요?
이 글의 문맥에서는 같은 계산을 가리킵니다. 값에서 특징 평균을 빼고 표준편차로 나눕니다. 다만 정규화라는 말은 최소-최대 스케일링이나 L1·L2 정규화에도 쓰이므로 코드와 문서에는 계산식과 축을 함께 적는 편이 정확합니다.
Q2. 표준화하면 모든 값이 -1과 1 사이에 들어가나요?
아닙니다. 평균에서 표준편차 하나 안에 있는 값만 대략 -1과 1 사이에 놓입니다. 이상치와 새 입력은 이 범위를 크게 벗어날 수 있습니다. 고정 범위가 필요하다면 최소-최대 스케일링이나 별도 클리핑 정책을 검토합니다.
Q3. 평균 0과 표준편차 1이면 정규분포인가요?
아닙니다. 치우친 분포를 표준화해도 치우친 모양은 남습니다. 평균과 표준편차는 위치와 척도를 설명할 뿐 분포 전체의 모양을 정하지 않습니다.
Q4. 새 데이터가 들어올 때마다 다시 fit해야 하나요?
실시간 요청마다 다시 fit하면 안 됩니다. 학습 때 저장한 통계를 그대로 적용해야 입력 의미가 일정합니다. 데이터 분포가 의미 있게 변했다면 새 학습 데이터로 스케일러와 모델을 함께 다시 학습·검증하고 새 버전으로 배포합니다.
Q5. 모든 AI 모델에 표준화가 필요한가요?
아닙니다. 경사·거리·분산에 민감한 모델에서는 도움이 될 수 있지만 트리 기반 모델처럼 척도 영향이 작은 방법도 있습니다. 모델 문서와 데이터 특성을 확인하고 같은 검증 조건에서 전후 성능을 비교하세요.
출처
마무리
표준화는 학습 데이터의 특징별 평균을 빼고 표준편차로 나눠 수치의 중심과 척도를 맞추는 전처리입니다. 결과는 평균에서 표준편차 몇 개만큼 떨어졌는지 보여 주며, 최소-최대 스케일링처럼 출력 범위를 고정하지는 않습니다.
실전에서는 데이터를 먼저 나누고 학습 부분에만 fit하며 평균·표준편차와 특징 순서를 모델에 묶어 저장하세요. 이상치, 분산 0 특징, 결측값, 희소 행렬을 고정 테스트로 확인하고 검증·추론에는 같은 통계를 적용해야 재현 가능한 AI 파이프라인이 됩니다.
