데이터 백색화(Data Whitening)란? AI 특징의 상관을 없애고 분산을 맞추는 방법
TL;DR
데이터 백색화(Data Whitening)는 여러 특징을 함께 선형 변환해 출력 성분의 공분산 행렬을 단위행렬에 가깝게 만드는 전처리입니다. 출력 성분끼리 상관이 없고 각 분산이 1이 되도록 중심 이동·회전·크기 조정을 적용합니다. 표준화보다 특징 사이 관계를 더 크게 바꾸며, 작은 고윳값을 그대로 뒤집으면 잡음이 증폭될 수 있어 학습 데이터 분리와 안정화 값 점검이 필요합니다.
핵심 3줄 요약
- 핵심 1
분산과 상관을 함께 다룹니다. 각 성분의 분산을 1로 맞추고 성분 사이 공분산을 0으로 만듭니다. - 핵심 2
방법은 하나가 아닙니다. PCA·ZCA·Cholesky 백색화는 같은 백색 공분산을 만들면서 출력 방향은 다를 수 있습니다. - 핵심 3
학습 기준을 재사용합니다. 평균과 백색화 행렬은 학습 데이터에서만 구해 검증·추론 입력에 그대로 적용합니다.
이 글에서 다룰 내용
- 데이터 백색화와 sphering의 한 문장 정의
- 키와 몸무게 예시로 보는 상관 제거
- 평균·공분산·고유분해·역제곱근의 작동 순서
- PCA 백색화와 ZCA 백색화의 차이
- 표준화·PCA·배치 정규화·L2 정규화와의 차이
- 이미지·임베딩·전통 머신러닝에서의 사용처
- 작은 고윳값·누수·열 순서·분포 변화 점검법
데이터 백색화를 한 문장으로 정의하면 무엇인가요?
데이터 백색화는 평균을 중심으로 옮긴 다변량 입력에 백색화 행렬을 곱해 출력의 공분산이 단위행렬이 되도록 만드는 선형 변환입니다. 백색화는 sphering이라고도 부르며, 단위행렬의 대각 원소 1은 각 성분의 단위 분산을, 나머지 0은 성분 사이 무상관을 뜻합니다.
Kessy·Lewin·Strimmer 논문은 백색화를 여러 확률변수를 직교 성분으로 바꾸는 전처리로 설명합니다. 다만 조건을 만족하는 행렬은 하나로 정해지지 않습니다. 회전 자유도가 있기 때문에 PCA, ZCA, Cholesky, PCA-cor, ZCA-cor처럼 서로 다른 결과 좌표를 만드는 방법이 존재합니다.
여기서 무상관은 독립과 같은 말이 아닙니다. 공분산이 0이어도 비선형 관계는 남을 수 있습니다. 백색화가 라벨 오류나 이상치를 없애는 것도 아닙니다. 여러 특징의 선형적인 척도와 상관 구조를 바꾸는 연산으로 이해해야 합니다.
한 줄 정리: 백색화는 각 특징을 따로 나누는 스케일링이 아니라 공분산 행렬 전체를 보고 여러 특징을 함께 바꾸는 전처리입니다.
쉬운 예시로 이해해 볼까요?
사람의 키와 몸무게를 AI 모델의 두 입력 특징으로 쓴다고 가정해 보겠습니다. 표본에서는 키가 큰 사람이 대체로 몸무게도 커서 두 값이 같은 방향으로 움직일 수 있습니다. 산점도는 둥근 원보다 비스듬하고 길쭉한 타원에 가깝게 보입니다.
표준화는 키와 몸무게에서 각각 평균을 빼고 표준편차로 나눕니다. 두 축의 분산은 비슷해지지만 비스듬한 방향은 남습니다. 백색화는 공분산의 주된 방향에 맞춰 데이터를 돌리고, 방향별 분산의 제곱근으로 나눠 타원을 원에 가까운 모양으로 바꿉니다.
변환 뒤 첫 번째 성분은 원래 키 하나, 두 번째 성분은 몸무게 하나와 정확히 대응하지 않을 수 있습니다. PCA 백색화에서는 두 특징이 섞인 새 축으로 바뀝니다. ZCA 백색화는 다시 원래 좌표 방향으로 돌려 결과를 원본과 더 비슷하게 유지하려고 합니다.
쉬운 예시: 기울어진 타원형 점 구름을 바르게 돌린 뒤 긴 방향은 줄이고 짧은 방향은 늘려 원에 가깝게 만드는 과정입니다.
왜 AI에서 데이터 백색화가 중요한가요?
서로 겹치는 선형 정보를 줄입니다
센서 채널, 이미지의 이웃 픽셀, 임베딩 차원처럼 특징들이 함께 움직이면 같은 변화가 여러 축에 겹쳐 나타납니다. 백색화는 공분산 기준의 선형 상관을 제거해 성분마다 겹치지 않는 방향을 만들 수 있습니다. 후속 알고리즘이 등방성 입력을 가정할 때 비교 후보가 됩니다.
방향별 분산 차이를 맞춥니다
원래 공간에서는 한 방향의 분산이 다른 방향보다 매우 클 수 있습니다. 백색화는 고윳값의 역제곱근으로 방향별 크기를 조정해 각 출력 성분의 분산을 1로 맞춥니다. scikit-learn은 이런 입력이 RBF 커널 SVM이나 K-means처럼 등방성 가정이 강한 모델에 유용할 수 있다고 설명합니다.
전처리 가정을 명시적으로 검증하게 합니다
백색화를 쓰면 평균, 공분산 추정법, 성분 수, 작은 고윳값 처리와 출력 방향을 모두 정해야 합니다. 이 기준을 저장하고 검증하면 전처리가 모델에 어떤 기하 구조를 전달했는지 추적하기 쉬워집니다. 반대로 기록하지 않으면 같은 이름의 백색화도 구현마다 다른 결과를 낼 수 있습니다.
핵심 인사이트: 백색화의 목표는 모든 데이터를 더 좋은 데이터로 만드는 것이 아닙니다. 후속 모델이 다루기 쉬운 무상관·단위 분산 좌표를 만드는 것입니다.
데이터 백색화는 어떻게 작동하나요?
1. 데이터를 학습·검증·테스트로 나눕니다
평균과 공분산을 계산하기 전에 데이터 역할부터 나눕니다. 검증이나 테스트 입력까지 섞어 행렬을 구하면 미래 분포가 전처리에 들어가 평가가 낙관적으로 보일 수 있습니다. 교차 검증에서는 각 폴드의 학습 부분마다 백색화 기준을 새로 fit합니다.
2. 학습 특징의 평균을 뺍니다
학습 데이터의 열별 평균을 구해 각 행에서 뺍니다. 중심화하지 않으면 공분산 계산과 변환 기준이 달라질 수 있습니다. 운영 입력에도 학습 때 저장한 평균을 빼야 하며, 운영 배치의 평균으로 대신하면 요청마다 좌표가 달라집니다.
3. 공분산 행렬을 계산합니다
중심화한 학습 데이터에서 특징별 분산과 특징 쌍의 공분산을 모은 행렬을 구합니다. NumPy 문서에서 대각 원소는 각 변수의 분산, 비대각 원소는 두 변수가 함께 변하는 정도입니다. 표본 수보다 특징 수가 많으면 행렬이 특이하거나 불안정할 수 있습니다.
4. 고윳값과 고유벡터를 구합니다
대칭인 공분산 행렬을 고유분해하면 데이터가 주로 퍼진 방향과 각 방향의 분산을 얻습니다. NumPy의 eigh는 실수 대칭 행렬의 고윳값과 고유벡터를 반환합니다. 고유벡터는 회전 방향, 고윳값은 그 방향에서의 분산 크기로 볼 수 있습니다.
5. 분산의 역제곱근으로 크기를 조정합니다
각 방향의 값을 고윳값 제곱근으로 나누면 분산이 1에 가까워집니다. 고윳값이 0에 가깝다면 역제곱근이 매우 커져 작은 잡음도 크게 증폭합니다. 실제 구현은 엡실론을 더하거나 작은 성분을 버리거나 공분산 축소 추정을 사용해 안정화할 수 있습니다.
6. 평균과 행렬을 저장해 재사용합니다
학습 평균, 백색화 행렬, 특징 이름과 순서, 성분 수, 엡실론, 공분산 추정법을 모델과 함께 저장합니다. 새 데이터에는 이 기준으로 transform만 실행합니다. 운영 중 공분산이 달라져도 변환기만 즉석에서 다시 맞추지 말고 모델까지 함께 재학습·평가합니다.
한 줄 정리: 데이터 분리 → 중심화 → 공분산 계산 → 고유분해 → 역제곱근 스케일링 → 기준 저장·재사용 순서입니다.
PCA 백색화와 ZCA 백색화는 무엇이 다른가요?
PCA 백색화는 주성분 좌표를 그대로 씁니다
PCA 백색화는 데이터를 공분산의 고유벡터 방향으로 회전한 뒤 각 주성분을 고윳값 제곱근으로 나눕니다. scikit-learn의 PCA에서 whiten=True를 켜면 서로 무상관이고 성분별 분산이 1인 출력을 만들도록 주성분을 조정합니다. 대신 성분 사이의 원래 상대 분산 정보는 사라집니다.
ZCA 백색화는 원래 좌표 방향으로 다시 돌립니다
ZCA 백색화는 PCA 방식으로 분산을 맞춘 뒤 고유벡터를 이용해 원래 좌표계 방향으로 다시 회전합니다. Kessy 논문은 ZCA를 대칭 백색화 행렬을 쓰는 방법이자 Mahalanobis whitening이라고 설명합니다. 출력 차원을 유지하면서 변환 결과를 원본 변수와 가깝게 만들려는 목적에 맞습니다.
같은 단위 공분산이어도 출력은 다릅니다
두 방식 모두 조건이 맞으면 단위 공분산을 만들지만 좌표 방향과 해석은 달라집니다. PCA 백색화는 압축과 성분 순서에 연결하기 쉽고, ZCA는 원래 특징 구조를 더 닮은 출력을 원할 때 살펴볼 수 있습니다. 방법 이름과 구현 행렬을 기록해야 재현할 수 있습니다.
비교 정리: PCA 백색화는 회전한 주성분 축을 유지하고, ZCA 백색화는 백색화 뒤 원래 좌표 방향으로 다시 돌립니다.
헷갈리는 전처리와 무엇이 다른가요?
표준화와의 차이
표준화는 특징마다 평균을 빼고 표준편차로 나눕니다. 각 열의 분산은 맞출 수 있지만 열 사이 상관은 그대로 남습니다. 백색화는 비대각 공분산까지 사용해 특징을 섞으므로 출력 성분의 의미와 방향이 달라질 수 있습니다.
일반 PCA와의 차이
PCA는 분산이 큰 직교 방향을 찾고 필요하면 일부 성분만 남겨 차원을 줄입니다. 일반 PCA 출력의 성분별 분산은 고윳값에 따라 다릅니다. PCA 백색화는 선택한 주성분을 한 번 더 나눠 각 분산을 1로 맞춥니다. 차원 축소와 백색화는 함께 쓸 수 있지만 같은 목표는 아닙니다.
배치 정규화와의 차이
배치 정규화는 신경망의 중간 활성값을 미니배치 통계로 조정하고 학습 가능한 감마·베타를 적용하는 층입니다. 일반적인 배치 정규화는 특징마다 평균과 분산을 다루며 전체 공분산을 단위행렬로 만들지 않습니다. 데이터 백색화는 입력이나 표현의 다변량 공분산을 직접 변환하는 개념입니다.
L2 정규화와의 차이
L2 정규화는 보통 각 샘플 벡터를 자신의 유클리드 길이로 나눠 길이를 1로 맞춥니다. 백색화는 여러 학습 샘플에서 추정한 평균과 공분산으로 특징 공간을 바꿉니다. 하나는 행 단위 길이, 다른 하나는 데이터셋 전체의 열 관계가 기준입니다.
상관 제거와 독립성의 차이
백색화 뒤 공분산이 0이면 선형 상관은 제거됐다고 말할 수 있습니다. 하지만 두 성분 사이에 곡선형 관계가 있으면 독립이라고 단정할 수 없습니다. 독립 성분 분석 같은 후속 방법이 백색화를 먼저 쓰더라도, 백색화 자체가 독립 성분을 모두 찾아주는 것은 아닙니다.
한 줄 정리: 표준화는 열별 척도, PCA는 분산 방향과 차원, L2 정규화는 행별 길이, 백색화는 공분산 전체를 기준으로 합니다.
실전에서는 어디에 쓰이나요?
상관이 큰 이미지 패치 전처리
가까운 픽셀끼리 밝기가 비슷한 이미지 패치는 상관이 큽니다. PCA 또는 ZCA 백색화로 공통 밝기 변화와 중복된 선형 성분을 줄이는 고전적인 전처리를 시험할 수 있습니다. 다만 최신 사전 학습 모델의 입력 규칙이 따로 있다면 임의로 백색화를 추가하지 말고 모델 문서를 우선합니다.
센서와 다채널 신호
온도·습도·압력처럼 함께 움직이는 센서 특징이나 여러 채널 신호를 후속 모델에 넣기 전에 비교할 수 있습니다. 장비 교체나 계절 변화로 공분산이 달라지면 학습 행렬이 운영 데이터를 잘 나타내지 못합니다. 시간 순서가 있는 경우 과거 구간에서만 기준을 계산합니다.
임베딩 후처리 실험
임베딩 차원에서 일부 방향의 분산이 지나치게 크고 차원 사이 공분산이 클 때 백색화를 실험 후보로 둘 수 있습니다. 검색 품질이 자동으로 좋아진다는 보장은 없습니다. 같은 질의·문서 집합에서 재현율, 순위 지표, 코사인 유사도 분포와 지연 시간을 비교해야 합니다.
등방성 가정이 강한 모델 입력
RBF 커널 SVM이나 K-means처럼 방향별 척도 차이에 민감한 알고리즘에서 PCA 백색화를 후보로 평가할 수 있습니다. scikit-learn 문서는 백색화가 일부 후속 추정기의 가정에 맞아 예측 정확도를 높일 때도 있다고 설명하지만 상대 분산 정보를 제거한다는 손실도 함께 밝힙니다.
실전 팁: 원본·표준화·PCA·PCA 백색화를 같은 데이터 분할과 지표에서 비교하고, 가장 단순한 전처리가 충분하면 복잡한 행렬 변환을 추가하지 마세요.
적용 전후를 어떻게 점검하나요?
1. 평균과 공분산을 학습 데이터에서만 구합니다
검증·테스트·미래 운영 구간이 fit에 섞이지 않았는지 확인합니다. 파이프라인과 교차 검증을 쓰면 각 학습 폴드 안에서 평균과 행렬을 계산할 수 있습니다. 누수는 코드 오류를 내지 않고 평가 수치만 좋아 보이게 할 수 있습니다.
2. 작은 고윳값과 조건수를 확인합니다
0에 가깝거나 음수로 흔들린 고윳값이 있는지 봅니다. 매우 작은 값을 그대로 역제곱근으로 바꾸면 출력이 폭주할 수 있습니다. 엡실론, 성분 절단, 공분산 축소 같은 안정화 설정을 데이터와 함께 기록합니다.
3. 출력 공분산을 직접 계산합니다
학습 데이터와 별도 검증 데이터에서 백색화 출력의 공분산을 구합니다. 대각 원소가 1에 가깝고 비대각 원소가 0에 가까운지 확인하되, 정규화 방식과 표본 수 차이도 함께 봅니다. 안정화 값을 넣었다면 정확한 단위행렬이 아닐 수 있습니다.
4. 특징 순서와 차원을 고정합니다
열 이름이나 임베딩 차원 순서가 바뀌면 다른 변수에 잘못된 행렬이 곱해집니다. 입력 스키마, 열 순서, 자료형, 누락 열 처리와 출력 성분 수를 모델 계약에 넣습니다. PCA 축의 부호가 구현이나 재학습에서 달라질 수 있다는 점도 테스트합니다.
5. 다운스트림 지표와 분포 변화를 봅니다
공분산이 단위행렬에 가까워졌다는 사실만으로 성공을 판단하지 않습니다. 최종 분류·군집·검색 지표와 설명 가능성, 추론 비용을 비교합니다. 운영 구간의 평균과 공분산이 학습 기준에서 멀어지는지도 모니터링합니다.
한 줄 정리: fit 범위 → 고윳값 안정성 → 출력 공분산 → 열 순서 → 최종 업무 지표 순서로 확인합니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 작은 고윳값을 그대로 뒤집지 않습니다. 분산이 거의 없는 방향을 1로 키우면 측정 오차와 수치 잡음까지 확대됩니다. 엡실론이나 성분 절단 기준을 검증 데이터에서 비교합니다.
둘째, 백색화를 표준화의 다른 이름으로 보지 않습니다. 표준화는 열별 변환이지만 백색화는 특징을 서로 섞습니다. 원래 변수 하나의 의미가 출력 성분 하나에 그대로 남지 않을 수 있습니다.
셋째, 방법 이름을 생략하지 않습니다. PCA, ZCA, Cholesky와 상관 기반 변형은 모두 백색 공분산을 만들 수 있어도 좌표와 해석이 다릅니다. 사용한 공식과 라이브러리 버전을 기록합니다.
넷째, 고차원 공분산을 과신하지 않습니다. 표본 수가 특징 수보다 적거나 비슷하면 경험적 공분산이 불안정할 수 있습니다. 성분 수를 줄이거나 축소 공분산을 검토하고 검증 구간에서도 성질이 유지되는지 봅니다.
다섯째, 운영 데이터로 즉석 재학습하지 않습니다. 새 배치마다 평균과 행렬을 다시 계산하면 같은 입력도 시점에 따라 다른 값이 됩니다. 분포 변화가 확인되면 변환기와 모델을 함께 새 버전으로 평가합니다.
주의: 백색화는 공분산 구조를 바꿀 뿐 데이터 오류, 편향, 라벨 누락, 이상치와 개인정보 문제를 해결하지 않습니다.
자주 묻는 질문
Q1. 백색화와 표준화는 같은 말인가요?
아닙니다. 표준화는 각 특징을 독립적으로 평균 0과 분산 1에 맞추지만 특징 사이 상관은 남습니다. 백색화는 공분산 전체를 사용해 출력 성분 사이 상관까지 제거합니다.
Q2. 백색화하면 출력 성분은 서로 독립인가요?
반드시 그렇지는 않습니다. 공분산 0은 선형 상관이 없다는 뜻입니다. 비선형 의존 관계는 남을 수 있으므로 단위 공분산만 보고 통계적 독립을 단정하면 안 됩니다.
Q3. PCA에서 whiten=True만 켜면 되나요?
scikit-learn의 PCA 백색화를 원한다면 해당 옵션을 사용할 수 있습니다. 다만 성분 수, 솔버, 학습 데이터 범위와 상대 분산 정보 손실을 확인해야 합니다. ZCA 백색화와 같은 출력은 아닙니다.
Q4. 엡실론은 왜 더하나요?
0에 가까운 고윳값의 역제곱근이 지나치게 커지는 일을 막기 위해서입니다. 엡실론을 크게 두면 안정성은 높아지지만 출력 공분산이 정확한 단위행렬에서 더 멀어질 수 있어 검증이 필요합니다.
Q5. 새 데이터가 올 때마다 백색화 행렬을 다시 구하나요?
아닙니다. 추론에는 학습 데이터에서 저장한 평균과 행렬을 적용합니다. 분포가 달라져 재계산이 필요하다면 백색화 변환기와 모델을 함께 재학습하고 평가한 뒤 새 버전으로 배포합니다.
출처
마무리
데이터 백색화는 여러 특징의 공분산을 함께 사용해 출력 성분을 무상관·단위 분산 좌표로 바꾸는 선형 전처리입니다. 표준화보다 특징 구조를 더 크게 바꾸며, PCA·ZCA·Cholesky처럼 회전 기준이 다른 여러 방법이 있습니다.
실전에서는 데이터를 먼저 나누고 학습 부분에서만 평균과 공분산을 구하세요. 작은 고윳값을 안정화하고 방법·행렬·열 순서를 모델과 함께 저장해야 합니다. 출력 공분산뿐 아니라 최종 모델 성능, 해석 가능성, 운영 분포 변화까지 비교해야 백색화가 실제 AI 파이프라인에 맞는지 판단할 수 있습니다.
