파워 변환(Power Transformation)이란? AI 특징 분포의 왜도와 분산을 조정하는 방법
TL;DR
파워 변환(Power Transformation)은 수치 특징마다 람다 값을 정하고 비선형 함수를 적용해, 치우친 분포를 더 대칭적이고 분산이 안정된 형태로 바꾸는 전처리입니다. 대표 방법은 양수만 받는 Box-Cox와 0·음수도 처리하는 Yeo-Johnson입니다. 정규분포를 보장하는 기술은 아니며, 학습 데이터에서 구한 람다와 후속 표준화 통계를 검증·테스트·추론에 그대로 써야 합니다.
핵심 3줄 요약
- 핵심 1
분포 모양을 비선형으로 바꿉니다. 큰 값의 간격을 눌러 왜도와 분산 불균형을 줄이는 데 씁니다. - 핵심 2
입력 범위가 방법을 가릅니다. Box-Cox는 엄격한 양수, Yeo-Johnson은 0과 음수까지 다룹니다. - 핵심 3
fit 범위를 지켜야 합니다. 람다는 학습 데이터에서만 구하고 같은 변환을 나머지 데이터에 재사용합니다.
이 글에서 다룰 내용
- 파워 변환과 PowerTransformer의 한 문장 정의
- Yeo-Johnson의 로그 형태로 보는 쉬운 예시
- 왜도와 분산을 조정하는 이유
- 람다를 학습하고 변환 통계를 재사용하는 순서
- Box-Cox와 Yeo-Johnson의 입력 조건
- 표준화·로그·분위수 변환과의 차이
- 데이터 누수·정규성 오해·역변환 점검법
파워 변환을 한 문장으로 정의하면 무엇인가요?
파워 변환은 수치 특징별로 거듭제곱 계열의 단조 비선형 함수를 적용해 분포의 왜도를 줄이고 분산을 더 일정하게 만들려는 데이터 변환입니다. scikit-learn의 PowerTransformer는 Box-Cox와 Yeo-Johnson을 제공하며 각 특징의 람다를 따로 추정합니다.
람다는 변환 곡선의 모양을 정하는 매개변수입니다. 값에 따라 원본과 비슷한 형태가 되기도 하고, 큰 값의 간격을 강하게 줄이는 로그 형태에 가까워지기도 합니다. scikit-learn은 왜도를 줄이는 람다를 특징별 최대가능도 방식으로 추정한다고 설명합니다.
파워 변환은 모든 값을 일정 범위에 넣는 스케일링과 다릅니다. 값의 순서는 유지하면서 간격을 비선형으로 바꾸므로 오른쪽 꼬리가 긴 특징의 큰 값들이 서로 가까워질 수 있습니다. 변환 뒤 최솟값과 최댓값이 0과 1로 고정되는 것은 아닙니다.
한 줄 정리: 파워 변환은 범위를 맞추는 자가 아니라, 치우친 분포의 간격을 다시 배치하는 곡선입니다.
쉬운 예시로 이해해 볼까요?
구매 횟수 특징에 0, 1, 3, 7, 15가 있다고 가정해 보겠습니다. 큰 값으로 갈수록 간격이 1, 2, 4, 8처럼 벌어져 오른쪽 꼬리가 길어진 모습입니다.
Yeo-Johnson에서 양수 구간의 람다가 0이면 log(1+x) 형태가 됩니다. 이 예시를 변환하면 값은 약 0, 0.693, 1.386, 2.079, 2.773으로 바뀝니다. 원래 7과 15의 차이는 8이지만 변환 뒤 차이는 약 0.694로 줄어듭니다.
순서는 0, 1, 3, 7, 15 그대로입니다. 다만 큰 값 사이의 거리를 압축해 일부 극단적인 값이 특징의 분포와 모델 계산을 과도하게 흔드는 정도를 낮춥니다. 실제 PowerTransformer는 람다를 임의로 0에 고정하지 않고 학습 데이터에서 추정합니다.
쉬운 예시: 눈금 간격이 같은 자를 쓰는 대신, 값이 커질수록 눈금 사이를 좁힌 자로 다시 재는 것과 비슷합니다.
왜 AI에서 파워 변환이 중요한가요?
오른쪽이나 왼쪽으로 긴 꼬리를 줄입니다
거래 금액, 조회 수, 대기 시간처럼 일부 값만 매우 큰 특징은 한쪽 꼬리가 길게 늘어납니다. 파워 변환은 큰 값과 작은 값의 간격을 다르게 조정해 분포를 더 대칭적인 형태로 만들 수 있습니다. 어떤 람다가 선택되는지는 특징마다 다릅니다.
값의 크기에 따라 달라지는 분산을 완화합니다
값이 커질수록 흩어짐도 커지는 데이터에서는 같은 크기의 오차가 구간마다 다른 뜻을 가질 수 있습니다. Box와 Cox의 원 논문은 변환을 이용해 오차 분산의 일정성, 정규성, 구조의 단순성을 개선하는 문제를 다룹니다. 변환만으로 이런 조건이 자동 충족되지는 않습니다.
일부 모델이 다루기 쉬운 관계를 만들 수 있습니다
치우친 특징의 간격을 압축하면 선형 관계나 거리 계산이 더 안정적으로 나타나는 경우가 있습니다. 그러나 모델 품질 향상은 보장되지 않습니다. 원본, 표준화, 파워 변환을 같은 데이터 분할과 평가 지표에서 비교해야 합니다.
핵심 인사이트: 파워 변환의 목적은 데이터를 예쁘게 정규분포처럼 보이게 만드는 데 있지 않습니다. 모델이 쓸 수 있는 더 안정적인 척도를 찾는 데 있습니다.
파워 변환은 어떻게 작동하나요?
1. 데이터를 학습·검증·테스트로 먼저 나눕니다
람다를 계산하기 전에 데이터 역할부터 나눕니다. 전체 데이터에서 분포를 본 뒤 분리하면 검증과 테스트의 정보가 전처리에 섞입니다. 교차 검증에서도 각 폴드의 학습 부분에만 변환기를 fit해야 합니다.
2. 특징마다 변환 방법과 람다를 정합니다
Box-Cox 또는 Yeo-Johnson을 선택한 뒤 학습 데이터의 각 수치 특징에서 람다를 추정합니다. scikit-learn의 PowerTransformer는 이 값을 lambdas_에 저장합니다. 한 특징에서 구한 람다를 다른 특징에 그대로 쓰지 않습니다.
3. 같은 곡선으로 학습값을 바꿉니다
정해진 람다를 각 값에 적용합니다. 두 방법은 구간별 수식이 다르지만 고정된 람다에서는 값의 순서를 유지하는 단조 변환입니다. 원본 간격은 달라지므로 회귀 계수나 거리의 해석도 원래 단위와 달라집니다.
4. 람다와 후속 통계를 저장해 재사용합니다
scikit-learn은 기본 설정에서 파워 변환 뒤 평균 0·분산 1의 표준화도 적용합니다. 따라서 람다뿐 아니라 표준화 통계와 특징 순서, 라이브러리 버전까지 모델과 함께 저장해야 합니다. 검증·테스트·추론에는 fit이 아니라 transform만 실행합니다.
한 줄 정리: 데이터 분리 → 방법 선택 → 특징별 람다 추정 → 변환·선택적 표준화 → 통계 저장·재사용 순서입니다.
Box-Cox와 Yeo-Johnson은 무엇이 다른가요?
Box-Cox는 값이 모두 0보다 커야 합니다
Box-Cox는 엄격한 양수 입력을 요구합니다. 0이나 음수가 한 건이라도 있으면 그대로 적용할 수 없습니다. 임의의 상수를 더해 양수로 만들면 변환의 의미와 역변환 규칙도 함께 바뀌므로, 이동값을 숨기지 말고 파이프라인에 기록해야 합니다.
Yeo-Johnson은 0과 음수도 처리합니다
Yeo-Johnson은 실수 전체에서 정의되도록 양수 구간과 음수 구간에 서로 연결된 수식을 사용합니다. 원 논문은 정규성이나 대칭성을 개선하려는 새로운 파워 변환 계열로 소개합니다. 음수가 가능하다는 이유만으로 항상 더 좋은 것은 아닙니다.
람다의 의미는 방법과 구간에 따라 달라집니다
Box-Cox에서 람다가 0인 경우 로그 형태를 사용합니다. Yeo-Johnson은 양수 쪽의 람다 0, 음수 쪽의 람다 2에 로그 형태의 예외식을 둡니다. 직접 구현할 때 0으로 나누는 일반식을 그대로 쓰지 말고 검증된 라이브러리를 쓰는 편이 안전합니다.
결측값과 상수 특징의 처리를 확인합니다
scikit-learn PowerTransformer는 NaN을 fit에서 제외하고 transform 결과에는 유지한다고 안내합니다. 값이 모두 같거나 유효한 관측치가 너무 적으면 람다 추정이 불안정하거나 실패할 수 있습니다. 상수 열과 결측 비율을 변환 전에 따로 점검하세요.
실전 팁: 최솟값이 0 이하라면 Box-Cox를 바로 선택할 수 없습니다. Yeo-Johnson을 검토하거나, 양수 이동의 업무적 의미와 역변환 절차를 먼저 정하세요.
헷갈리는 전처리와 무엇이 다른가요?
표준화와의 차이
표준화는 평균을 빼고 표준편차로 나누는 선형 변환입니다. 중심과 척도는 바뀌지만 분포의 기본 모양과 왜도는 그대로입니다. 파워 변환은 비선형 곡선으로 간격과 분포 모양을 바꾸며, 구현에 따라 그 뒤 표준화를 추가할 수 있습니다.
로그 변환과의 차이
로그 변환은 미리 정한 하나의 곡선을 적용합니다. 파워 변환은 여러 곡선 가운데 데이터에 맞는 람다를 추정하며 로그는 특정 람다에서 나타나는 한 형태입니다. log(x)는 양수만 받지만 log(1+x)는 0을 받을 수 있다는 입력 조건도 구분해야 합니다.
분위수 변환과의 차이
분위수 변환은 학습 데이터의 누적분포와 순위를 이용해 균등분포나 정규분포에 대응시킵니다. 파워 변환은 람다 하나로 정해지는 매개변수 곡선을 특징별로 적용합니다. scikit-learn 예시는 분위수 변환이 분포를 더 강하게 바꿀 수 있지만 표본이 적으면 과적합하기 쉽다고 설명합니다.
로버스트 스케일링과의 차이
로버스트 스케일링은 중앙값을 빼고 IQR 같은 분위수 범위로 나눕니다. 이상치가 중심과 척도 통계를 흔드는 영향을 줄이지만 분포 모양을 정규분포에 가깝게 만드는 함수는 아닙니다. 파워 변환과 목적, 계산 기준이 모두 다릅니다.
클리핑과의 차이
클리핑은 상한이나 하한 밖의 값을 경계값으로 잘라 정보 일부를 없앱니다. 파워 변환은 단조 곡선으로 큰 간격을 압축하되 보통 값의 순서를 유지하고 역변환도 제공합니다. 극단값이 데이터 오류라면 변환 전에 원인부터 고쳐야 합니다.
비교 정리: 표준화는 중심·척도, 로그는 고정 곡선, 분위수 변환은 순위, 로버스트 스케일링은 중앙값·IQR, 파워 변환은 학습한 람다 곡선을 기준으로 삼습니다.
실전에서는 어디에 쓰이나요?
거래 금액과 구매 횟수 특징
대부분은 작고 일부만 매우 큰 금액이나 횟수 특징에서 후보가 됩니다. 큰 값의 간격을 압축한 뒤 모델의 검증 성능과 잔차 패턴을 확인합니다. 사기 거래나 대형 고객처럼 극단값 자체가 중요한 신호라면 변환 전후의 구분력이 줄지 않았는지도 봐야 합니다.
센서와 운영 지표 전처리
응답 시간, 처리량, 고장 간격처럼 수준이 커질수록 변동 폭도 커지는 특징에 적용할 수 있습니다. 단위 오류와 측정 한계를 먼저 정리하고, 시간 순서가 있는 데이터는 미래 구간을 보지 않고 과거 학습 구간에서만 람다를 구합니다.
회귀 모델의 입력 또는 목표값
치우친 입력 특징이나 양수 목표값을 변환해 관계와 오차 구조를 단순하게 만들 수 있습니다. 목표값을 변환했다면 예측을 원래 단위로 되돌리는 inverse_transform 과정과 평가 지표의 단위를 명시해야 합니다. 변환 공간의 오차와 원래 공간의 오차는 같은 뜻이 아닙니다.
전처리 후보 비교 실험
파워 변환은 모든 수치 열에 자동 적용할 필수 단계가 아닙니다. 원본, 표준화, 로버스트 스케일링, Yeo-Johnson과 Box-Cox를 같은 학습 폴드에서 비교하고 선택합니다. 모델 종류와 업무 비용에 맞는 평가 지표를 고정해야 공정한 비교가 됩니다.
실전 팁: 변환 전후의 히스토그램과 분위수, 왜도만 보지 말고 검증 성능·잔차·역변환 오차까지 같은 실험 기록에 남기세요.
적용 전후를 어떻게 점검하나요?
1. 입력 범위와 결측값을 검사합니다
특징별 최솟값, 0과 음수의 개수, 결측 비율과 고유값 수를 확인합니다. Box-Cox 후보에 0 이하 값이 있거나 상수 열이 섞였다면 바로 분리합니다. 값에 상수를 더했다면 그 수와 이유도 전처리 설정에 기록합니다.
2. 학습 데이터에만 fit했는지 확인합니다
람다와 표준화 통계가 검증·테스트 데이터에서 계산되지 않았는지 봅니다. Pipeline과 교차 검증을 함께 쓰면 각 학습 폴드 안에서만 fit하도록 묶을 수 있습니다. 누수는 실행 오류 없이 평가 점수만 부풀릴 수 있습니다.
3. 변환 전후 분포를 함께 봅니다
히스토그램 하나만 보지 말고 분위수, 왜도, 분산과 이상치를 함께 확인합니다. scikit-learn 예시처럼 일부 분포에서는 정규분포에 가까워지지만 균등분포나 두 봉우리가 있는 분포에서는 효과가 제한될 수 있습니다. 눈으로 원하는 결과를 가정하지 않습니다.
4. 역변환과 특징 순서를 시험합니다
작은 고정 배열을 transform한 뒤 inverse_transform해 원래 값과 가까운지 확인합니다. 학습 때와 추론 때 열 순서가 바뀌면 다른 람다가 적용될 수 있습니다. 특징 이름, 순서, 자료형과 변환기 버전을 모델 버전에 묶어 관리합니다.
5. 모델 성능과 해석 변화를 비교합니다
같은 시드, 데이터 분할, 모델과 평가 지표에서 원본 전처리와 비교합니다. 성능이 좋아져도 계수와 거리의 단위가 변환 공간 기준이라는 점을 문서화합니다. 목표값을 되돌린 뒤 업무 단위의 오차도 반드시 계산합니다.
한 줄 정리: 입력 조건, fit 범위, 분포 변화, 역변환, 검증 성능과 해석을 차례로 확인합니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 정규분포가 보장된다고 생각하지 않습니다. 파워 변환은 더 가우시안에 가까운 분포를 목표로 하지만 모든 데이터에서 성공하지는 않습니다. 여러 봉우리가 있는 분포와 잘못 섞인 집단은 변환 전에 원인을 살펴야 합니다.
둘째, Box-Cox의 양수 조건을 무시하지 않습니다. 0과 음수를 몰래 버리거나 임의의 작은 수로 바꾸면 데이터 의미가 달라집니다. Yeo-Johnson을 비교하고, 이동값을 쓴다면 역변환까지 같은 파이프라인에 넣습니다.
셋째, 검증·테스트 데이터로 람다를 다시 구하지 않습니다. 새 데이터마다 fit하면 입력값의 척도가 요청마다 달라집니다. 학습 때 저장한 변환기를 재사용하고 분포 변화가 크면 모델과 함께 새 버전을 검증합니다.
넷째, 기본 표준화 옵션을 확인합니다. scikit-learn PowerTransformer는 기본적으로 파워 변환 뒤 평균 0·분산 1 표준화를 적용합니다. 다른 구현과 결과를 비교할 때 method와 standardize 설정을 모두 기록합니다.
다섯째, 원래 단위의 해석을 잃지 않습니다. 변환된 특징의 한 단위는 원래 금액이나 횟수의 한 단위와 다릅니다. 설명 자료와 평가 보고서에는 역변환 방법과 원래 단위 지표를 함께 둡니다.
주의: 파워 변환은 데이터 품질 점검을 대신하지 않습니다. 단위 혼합, 입력 오류, 서로 다른 집단의 결합과 데이터 누수는 곡선을 적용해도 남습니다.
자주 묻는 질문
Q1. 파워 변환과 PowerTransformer는 같은 말인가요?
파워 변환은 통계적 변환 계열을 가리키는 일반 용어입니다. PowerTransformer는 scikit-learn이 제공하는 구현 이름이며 Box-Cox와 Yeo-Johnson을 지원합니다. 다른 도구는 함수 이름, 람다 추정법과 후속 표준화 기본값이 다를 수 있습니다.
Q2. Box-Cox와 Yeo-Johnson 중 무엇을 쓰면 되나요?
입력에 0이나 음수가 있으면 그대로 쓸 수 있는 후보는 Yeo-Johnson입니다. 모든 값이 엄격한 양수라면 두 방법을 같은 검증 절차에서 비교할 수 있습니다. 입력 조건만으로 성능 우승자를 정할 수는 없습니다.
Q3. 파워 변환을 하면 이상치가 사라지나요?
아닙니다. 큰 값의 간격이 줄어들 수 있지만 관측치는 남아 있습니다. 측정 오류인지 드문 정상 사례인지 먼저 확인하고, 변환 전후의 값과 모델 영향력을 함께 비교해야 합니다.
Q4. 변환 뒤에 표준화를 또 해야 하나요?
사용한 구현과 모델에 따라 다릅니다. scikit-learn PowerTransformer는 standardize=True가 기본이라 별도의 StandardScaler를 다시 붙이면 중복 단계가 될 수 있습니다. 설정을 확인하고 검증 실험으로 결정하세요.
Q5. 새 데이터가 들어올 때마다 람다를 다시 계산하나요?
아닙니다. 운영 입력에는 학습 데이터에서 구해 저장한 람다와 표준화 통계를 적용합니다. 데이터 분포가 달라졌다면 즉석에서 람다만 바꾸지 말고 새 전처리와 모델을 함께 학습·평가한 뒤 버전으로 배포합니다.
출처
마무리
파워 변환은 특징별 람다를 이용해 값의 간격을 비선형으로 조정하고, 치우친 분포의 왜도와 불균일한 분산을 줄이려는 전처리입니다. Box-Cox는 엄격한 양수만 받고 Yeo-Johnson은 0과 음수도 처리한다는 입력 조건부터 구분해야 합니다.
실전에서는 데이터를 먼저 나누고 학습 부분에만 fit하며 람다·표준화 통계·특징 순서를 모델과 함께 저장하세요. 변환 전후 분포, 역변환, 검증 성능과 원래 단위의 오차를 함께 확인해야 파워 변환이 실제 AI 파이프라인에 도움이 됐는지 판단할 수 있습니다.
