로버스트 스케일링(Robust Scaling)이란? AI 특징값을 중앙값과 IQR로 맞추는 방법
TL;DR
로버스트 스케일링(Robust Scaling)은 특징별 학습 중앙값을 빼고 사분위수 범위(IQR)로 나눠 값의 중심과 척도를 맞추는 전처리입니다. 평균과 표준편차보다 일부 극단값의 영향을 덜 받지만 이상치 자체를 삭제하거나 일정 범위로 자르지는 않습니다. 중앙값과 분위수는 학습 데이터에서만 구하고 검증·테스트·추론에는 같은 통계를 재사용해야 합니다.
핵심 3줄 요약
- 핵심 1
중앙값과 IQR을 씁니다. 기본 설정은 중앙값을 빼고 75번째 백분위수와 25번째 백분위수의 차이로 나눕니다. - 핵심 2
극단값의 통계 영향을 줄입니다. 몇 개의 큰 값이 평균과 표준편차를 흔드는 데이터에서 중심부의 척도를 비교하기 좋습니다. - 핵심 3
이상치는 그대로 남습니다. 변환 뒤 큰 값이 여전히 클 수 있으므로 오류 확인과 클리핑은 별도 정책으로 다룹니다.
이 글에서 다룰 내용
- 로버스트 스케일링과 RobustScaler의 한 문장 정의
- 1·2·3·4·100을 바꾸는 쉬운 계산 예시
- AI 학습에서 중앙값과 IQR을 쓰는 이유
- 학습 분위수 통계를 저장하고 재사용하는 순서
- 분위수 범위·중심화·단위 분산·희소 입력 설정
- 표준화·최소-최대·L1·L2·분위수 변환과의 차이
- 데이터 누수와 이상치 오해를 막는 실전 점검법
로버스트 스케일링을 한 문장으로 정의하면 무엇인가요?
로버스트 스케일링은 각 수치 특징에서 학습 데이터의 중앙값을 빼고 정한 두 분위수의 차이로 나눠, 극단값에 덜 흔들리는 중심과 척도로 바꾸는 선형 전처리입니다. scikit-learn과 Apache Spark에서는 RobustScaler라는 이름으로 제공합니다.
기본 분위수 범위는 25번째와 75번째 백분위수입니다. 25번째 백분위수를 Q1, 75번째 백분위수를 Q3라고 하면 IQR은 Q3에서 Q1을 뺀 값입니다. NIST는 IQR을 데이터 중앙부의 변동성을 재는 척도로 설명합니다.
변환 결과 0은 학습 중앙값과 같은 위치를 뜻합니다. 결과 1은 원래 값이 중앙값보다 IQR 하나만큼 크다는 뜻입니다. 원래 단위는 사라지지만 한 특징 안에서 값의 순서와 상대적 간격은 유지됩니다.
한 줄 정리: 기본 로버스트 스케일링은 변환값 = (원래 값 – 학습 중앙값) ÷ 학습 IQR로 이해하면 됩니다.
쉬운 예시로 이해해 볼까요?
한 특징의 학습값이 1, 2, 3, 4, 100이라고 가정해 보겠습니다. 정렬된 값의 중앙값은 3, Q1은 2, Q3는 4입니다. IQR은 4에서 2를 뺀 2입니다. 각 값에서 중앙값 3을 빼고 IQR 2로 나눕니다.
- 1은 (1-3)÷2이므로 -1입니다.
- 2는 (2-3)÷2이므로 -0.5입니다.
- 3은 중앙값과 같으므로 0입니다.
- 4는 (4-3)÷2이므로 0.5입니다.
- 100은 (100-3)÷2이므로 48.5입니다.
100이 분위수 범위 계산을 크게 늘리지 않아 1부터 4까지의 중심부 간격을 읽기 쉽습니다. 그렇다고 100이 사라지는 것은 아닙니다. 변환값 48.5로 여전히 매우 큰 값이며, 이 값이 오류인지 실제 희귀 사례인지는 따로 확인해야 합니다.
분위수 계산 방식은 표본 수가 적을 때 라이브러리별로 조금 다를 수 있습니다. 운영 도구의 계산 결과를 고정 테스트로 남기고 학습과 서빙에서 같은 구현과 버전을 쓰는 편이 안전합니다.
쉬운 예시: 소득 자료에 일부 초고액 값이 섞였을 때 전체 평균보다 중간 사람의 값과 가운데 50%의 폭을 기준으로 자를 맞추는 것과 비슷합니다.
왜 AI에서 로버스트 스케일링이 중요한가요?
극단값이 중심과 척도를 지배하는 문제를 줄입니다
분산과 표준편차는 평균에서 멀리 떨어진 값에 큰 영향을 받습니다. 센서 오류, 비정상 거래액, 일시적인 트래픽 급증처럼 소수의 큰 값이 있으면 표준화 뒤 대부분의 정상값이 좁은 구간에 몰릴 수 있습니다. 중앙값과 IQR은 중앙부를 기준으로 삼아 이 영향을 줄입니다.
단위가 다른 수치 특징을 비교하기 쉬워집니다
나이, 구매액, 접속 횟수처럼 단위가 다른 열을 같은 모델에 넣으면 숫자가 큰 열이 거리와 기울기 계산에 더 큰 영향을 줄 수 있습니다. 특징별 중앙값과 IQR로 바꾸면 원래 단위보다 중심에서 떨어진 정도를 비교할 수 있습니다.
이상치를 숨기지 않고 중심부 척도를 보존합니다
로버스트 스케일링은 큰 값을 강제로 경계 안에 넣는 클리핑이 아닙니다. 중심부의 척도는 안정적으로 만들면서 극단값은 큰 변환값으로 남깁니다. 덕분에 모델 입력을 조정하는 일과 이상 사례를 탐지·검토하는 일을 구분할 수 있습니다.
핵심 인사이트: 로버스트라는 이름은 이상치가 없어졌다는 뜻이 아닙니다. 중심과 척도를 구하는 통계가 일부 극단값에 덜 민감하다는 뜻입니다.
로버스트 스케일링은 어떻게 작동하나요?
1. 데이터를 학습·검증·테스트로 먼저 나눕니다
중앙값과 분위수를 구하기 전에 데이터 역할을 나눕니다. 전체 데이터로 통계를 계산한 뒤 분리하면 검증과 테스트 정보가 학습 전처리에 섞입니다. 교차 검증에서는 각 폴드의 학습 부분에만 스케일러를 fit해야 합니다.
2. 학습 데이터에서 특징별 중앙값을 구합니다
나이 열, 거래액 열, 방문 횟수 열을 서로 섞지 않고 각 열의 중앙값을 계산합니다. 중심화를 켜면 원래 값에서 이 중앙값을 뺍니다. 새 데이터가 들어와도 중앙값을 다시 계산하지 않습니다.
3. 정한 두 분위수의 차이를 계산합니다
기본값은 Q1과 Q3이므로 척도는 IQR입니다. 분위수 범위를 10과 90으로 넓히거나 30과 70으로 좁힐 수도 있지만 결과의 의미와 크기가 바뀝니다. 선택한 범위는 모델 설정과 함께 기록해야 합니다.
4. 학습 통계를 저장해 후속 입력에 재사용합니다
학습이 끝나면 특징 이름과 순서, 중앙값, 분위수 범위, 계산된 척도와 설정을 모델에 묶어 저장합니다. 검증·테스트·실시간 추론에 같은 값을 적용해야 한 숫자의 의미가 실행마다 달라지지 않습니다.
한 줄 정리: 데이터 분리 → 학습 특징별 중앙값·분위수 계산 → 중심화와 스케일링 → 같은 통계 저장·재사용 순서입니다.
주요 설정과 예외는 무엇인가요?
quantile_range 또는 lower·upper
scikit-learn의 기본 quantile_range는 25와 75이고 Spark는 lower 0.25와 upper 0.75를 사용합니다. 같은 뜻이라도 백분율과 0~1 비율처럼 표기 단위가 다릅니다. 범위를 바꾸면 중앙부라고 보는 폭과 변환값의 크기가 달라집니다.
with_centering과 with_scaling
중심화를 켜면 중앙값을 빼고 스케일링을 켜면 분위수 범위로 나눕니다. scikit-learn은 두 설정이 기본 true입니다. Spark는 withCentering 기본값이 false이고 withScaling은 true이므로 제품 이름만 같다고 기본 결과까지 같지는 않습니다.
unit_variance 설정
scikit-learn의 unit_variance를 켜면 정규분포 특징에서 분산이 1이 되도록 분위수 척도를 추가 조정합니다. 기본값은 false입니다. 이 설정을 쓴 결과는 단순히 IQR로 나눈 값과 다르므로 실험 기록에 반드시 남깁니다.
희소 입력과 0인 분위수 범위
희소 행렬에서 중앙값을 빼면 많은 0이 0이 아닌 값으로 바뀌어 조밀한 데이터가 될 수 있습니다. scikit-learn은 중심화를 켠 채 희소 행렬을 transform하면 예외가 날 수 있다고 안내합니다. 한편 같은 값이 중앙부에 몰리면 분위수 범위가 0이 될 수 있으므로 도구의 처리 결과를 작은 입력으로 확인해야 합니다.
실전 팁: 정상 입력, 큰 극단값, IQR이 0인 열, NaN, 0이 많은 희소 입력을 고정 사례로 만들어 학습과 서빙 결과를 비교하세요.
헷갈리는 스케일링과 무엇이 다른가요?
표준화와 로버스트 스케일링의 차이
표준화는 평균을 빼고 표준편차로 나눕니다. 로버스트 스케일링은 중앙값을 빼고 기본적으로 IQR로 나눕니다. 두 방법 모두 특징별 선형 변환이지만 중심과 척도를 추정하는 통계가 달라 극단값이 있을 때 결과가 크게 달라질 수 있습니다.
최소-최대 스케일링과의 차이
최소-최대 스케일링은 학습 최솟값과 최댓값을 이용해 0~1 같은 지정 구간으로 옮깁니다. 극단값 하나가 전체 범위를 넓힐 수 있습니다. 로버스트 스케일링은 중앙 분위수를 사용하며 출력 범위를 고정하지 않습니다.
L1·L2 정규화와의 차이
L1·L2 정규화는 보통 표본 하나의 벡터를 보고 절댓값 합이나 유클리드 길이를 1로 맞춥니다. 로버스트 스케일링은 여러 학습 표본을 보고 특징 열별 중앙값과 분위수를 구합니다. 전자는 행 방향 벡터 크기, 후자는 열 방향 특징 척도를 주로 다룹니다.
분위수 변환과의 차이
QuantileTransformer는 누적분포를 이용해 값을 균등분포나 정규분포 형태로 옮기는 비선형 변환입니다. 극단값과 중심부 사이 거리도 압축할 수 있습니다. 로버스트 스케일링은 중앙값을 빼고 고정 척도로 나누는 선형 변환이라 값의 상대적 간격을 유지합니다.
클리핑·이상치 제거와의 차이
클리핑은 정한 상한과 하한 밖의 값을 경계값으로 바꾸고, 이상치 제거는 해당 사례를 학습에서 제외할 수 있습니다. 로버스트 스케일링은 원래 사례를 지우거나 자르지 않습니다. 세 방법은 목적과 정보 손실이 다르므로 같은 처리로 보면 안 됩니다.
비교 정리: 표준화는 평균·표준편차, 최소-최대는 극값, L1·L2는 표본 벡터 노름, 로버스트 스케일링은 중앙값·분위수 범위를 기준으로 삼습니다.
실전에서는 어디에 쓰이나요?
거래액과 사용량 같은 긴 꼬리 특징
대부분은 작지만 일부 값이 매우 큰 거래액, 구매 횟수, 세션 길이 같은 열에 적용할 수 있습니다. 먼저 큰 값이 실제 업무 사례인지 입력 오류인지 확인한 뒤 표준화와 로버스트 스케일링을 같은 검증 조건에서 비교합니다.
센서와 운영 로그 전처리
장비 튐, 일시적인 부하 급증, 수집 오류가 섞인 수치 로그에서 중심부 척도를 맞추는 데 쓸 수 있습니다. 다만 고장 신호를 단순 이상치로 취급해 삭제하지 말고 원본값과 변환값을 함께 추적해야 합니다.
거리·경사 기반 모델 입력
KNN, K-means, 일부 커널 모델과 경사 기반 모델은 특징 척도에 영향을 받습니다. 큰 단위의 한 열이 거리나 업데이트를 지배하지 않도록 로버스트 스케일링을 후보로 시험합니다. 트리 기반 모델에서는 이점이 작을 수 있습니다.
분산 데이터와 SQL 학습 파이프라인
Apache Spark는 대규모 특징 벡터의 중앙값과 분위수 범위를 계산하는 RobustScaler를 제공합니다. BigQuery ML의 ML.ROBUST_SCALER는 TRANSFORM 절에서 학습 때 구한 통계를 예측에도 자동으로 사용합니다. 어느 환경이든 설정과 전처리 산출물을 모델 버전에 묶어야 합니다.
실전 팁: 로버스트 스케일러를 임시 분석 코드에만 두지 말고 학습·평가·서빙이 공유하는 전처리 파이프라인에 넣으세요.
적용 전후를 어떻게 점검하나요?
1. 전체 데이터로 fit하지 않았는지 확인합니다
훈련·검증·테스트 분할보다 스케일링을 먼저 하지 않았는지 봅니다. 파이프라인과 교차 검증을 함께 쓰면 각 학습 폴드의 분위수만 계산하도록 묶을 수 있습니다. 누수가 생겨도 변환 결과는 정상 숫자로 보여 놓치기 쉽습니다.
2. 작은 배열로 계산 결과를 대조합니다
고정 배열 [1, 2, 3, 4, 100]으로 중앙값 3, Q1 2, Q3 4, IQR 2와 결과 [-1, -0.5, 0, 0.5, 48.5]를 확인합니다. 다른 결과가 나오면 분위수 계산 방식과 중심화·스케일링 설정을 먼저 봅니다.
3. 특징 이름·순서와 설정을 고정합니다
학습 때 거래액, 나이 순서였는데 추론 때 나이, 거래액 순서가 되면 오류 메시지 없이 잘못된 통계를 적용할 수 있습니다. 입력 스키마, 자료형, 열 순서, 분위수 범위와 중심화 여부를 함께 버전 관리합니다.
4. 원본값과 변환값의 분포를 함께 봅니다
중앙값 주변 값이 적절히 펼쳐졌는지, 극단값이 얼마나 크게 남는지 히스토그램과 분위수로 확인합니다. 큰 변환값을 자동 삭제하지 말고 단위 오류, 중복 집계, 실제 희귀 사건인지 원본 기록과 대조합니다.
5. 모델 성능과 운영 변화를 검증합니다
표준화, 최소-최대, 로버스트 스케일링을 같은 데이터 분할·모델·지표·시드로 비교합니다. 학습 데이터 분포가 바뀌면 중앙값과 IQR도 달라질 수 있으므로 스케일러와 모델을 함께 다시 학습하고 검증합니다.
한 줄 정리: fit 범위, 손계산 결과, 특징 스키마, 원본·변환 분포, 모델 성능을 차례로 확인합니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 이상치를 자동으로 정상값으로 만든다고 생각하지 않습니다. 로버스트 스케일링은 중심·척도 통계의 민감도를 낮출 뿐 극단값을 삭제하거나 고치지 않습니다. 오류 수정과 위험 사례 검토는 별도 절차입니다.
둘째, 검증·테스트 데이터를 분위수 계산에 넣지 않습니다. 학습 데이터에만 fit하고 나머지 데이터에는 transform만 적용합니다. 중앙값과 IQR도 모델이 학습한 정보의 일부입니다.
셋째, 모든 라이브러리의 기본값이 같다고 가정하지 않습니다. scikit-learn과 BigQuery ML은 기본적으로 중앙값을 빼지만 Spark는 중심화 기본값이 false입니다. 옵션 이름, 단위와 기본값을 기록합니다.
넷째, IQR이 0인 특징과 희소 입력을 빼놓지 않습니다. 반복값이 많은 열은 중앙 분위수 폭이 0이 될 수 있고 중심화는 희소성을 깨뜨릴 수 있습니다. 고정 테스트로 도구의 예외와 출력 정책을 확인합니다.
다섯째, 변환 선택을 모델 성능으로 검증합니다. 이상치가 있다는 이유만으로 로버스트 스케일링이 언제나 낫지는 않습니다. 실제 희귀값이 중요한 예측 신호일 수 있으므로 원본 의미와 평가 지표를 함께 봅니다.
주의: 로버스트 스케일링은 데이터 품질 점검을 대신하지 않습니다. 틀린 단위, 중복 집계, 라벨 오류와 데이터 누수는 변환 뒤에도 그대로 남습니다.
자주 묻는 질문
Q1. 로버스트 스케일링과 RobustScaler는 같은 말인가요?
대체로 같은 개념을 가리킵니다. RobustScaler는 scikit-learn과 Spark가 제공하는 구현 이름입니다. 다만 라이브러리마다 중심화 기본값, 분위수 표기 단위와 근사 계산 설정이 다르므로 코드의 옵션까지 확인해야 합니다.
Q2. 변환하면 모든 값이 -1과 1 사이에 들어가나요?
아닙니다. 기본 변환은 중앙값을 0으로 옮기고 IQR로 나눌 뿐 출력 범위를 제한하지 않습니다. 큰 극단값은 -1보다 훨씬 작거나 1보다 훨씬 큰 값으로 남을 수 있습니다.
Q3. 로버스트 스케일링을 쓰면 이상치 탐지가 필요 없나요?
필요합니다. 스케일링은 모델 입력 척도를 바꾸는 처리이고 이상치 탐지는 평소와 다른 사례를 찾고 원인을 판단하는 작업입니다. 변환 전 원본값을 보존하고 극단값의 업무 의미를 따로 검토하세요.
Q4. 분위수 범위는 항상 25와 75가 좋은가요?
기본값일 뿐 모든 데이터의 정답은 아닙니다. 범위를 넓히면 더 많은 중앙 데이터를 척도에 반영하고 좁히면 더 좁은 중앙부를 기준으로 삼습니다. 후보 범위는 학습 데이터 안에서 정하고 동일한 검증 조건으로 비교합니다.
Q5. 새 데이터가 들어올 때마다 다시 fit해야 하나요?
실시간 요청마다 다시 fit하면 안 됩니다. 학습 때 저장한 중앙값과 분위수 범위를 그대로 적용해야 입력 의미가 일정합니다. 분포가 바뀌었다면 새 학습 데이터로 스케일러와 모델을 함께 다시 학습·검증한 뒤 새 버전으로 배포합니다.
출처
마무리
로버스트 스케일링은 학습 데이터의 특징별 중앙값을 빼고 기본적으로 IQR로 나눠 수치의 중심과 척도를 맞추는 전처리입니다. 평균과 표준편차보다 일부 극단값의 영향을 덜 받지만 이상치를 없애거나 출력 범위를 고정하지는 않습니다.
실전에서는 데이터를 먼저 나누고 학습 부분에만 fit하며 중앙값·분위수 범위·특징 순서와 옵션을 모델에 묶어 저장하세요. 작은 배열, IQR이 0인 열, 희소 입력과 큰 극단값을 고정 테스트로 확인하고 같은 검증 조건에서 다른 스케일러와 성능을 비교해야 재현 가능한 AI 파이프라인이 됩니다.
