기하평균과 로그변환의 관계
안녕하세요! 이번에 일주일에 최소 1개씩 데이터 지식 글을 써보기로 마음 먹었습니다. 그중 첫번째 글이 되겠네요.
첫번째 주제는 기하평균과 자주 사용했던 "로그 스케일링"과 연결 지을 수 있다는 점이 재밌어 작성해보려고 합니다.
사실 어렵지도 않고 엄청난 발견도 아니지만 가볍게 글을 써보기엔 좋을 것 같아 주제로 선정하게 되었습니다 ㅎㅎ
기하평균이란 무엇일까?
기하평균은 여러 수치를 곱한 뒤 n제곱근을 취하는 방식으로 계산하는 평균입니다. 곱셈적 관계를 다룰 때 특히 유용합니다.
\[
\text{Geometric Mean} = \left( \prod_{i=1}^{n} x_i \right)^{1/n}
\]
기하평균은 다음과 같은 상황에서 많이 활용됩니다:
- 연간 성장률 (CAGR, Compound Annual Growth Rate)
- 금융 상품의 수익률 종합
- 머신러닝 앙상블 모델에서 soft voting
- 바이오 분야 데이터 (예: 농도 평균)
로그 스케일링, 왜 필요할까?
데이터 전처리 과정에서 로그 스케일링을 적용하는 가장 큰 이유는, 데이터 분포의 왜곡을 완화하고 모델 학습을 안정화하기 위해서입니다.
값의 크기 차이가 너무 클 때나 이상치가 많을 때, 로그 변환을 통해 다음과 같은 효과를 얻을 수 있습니다:
- 작은 값은 상대적으로 덜 변하고
- 큰 값은 크게 눌려서
전체적으로 분포가 부드럽게 정리됩니다.
이 덕분에 모델이 이상치(outlier)에 덜 민감하게 되고, 학습이 더 안정적으로 이루어질 수 있습니다.
예시:
- 원래 값: 1,2,5,10,10001, 2, 5, 10, 1000
- 로그 변환 후: 0,0.3,0.7,1,30, 0.3, 0.7, 1, 3
이처럼 극단적인 값들도 상대적으로 작아지기 때문에, 모델이 데이터 전체를 더 균형 있게 학습할 수 있습니다.
기하평균과 로그, 어떤 관계가 있을까?
기하평균 기본 정의는:
\[
\text{Geometric Mean} = \left( \prod_{i=1}^{n} x_i \right)^{1/n}
\]
그런데 이걸 다른 방식으로 표현할 수도 있는데요.
- 각각 \( x_i \)에 대해 로그를 취하고,
- 로그값들의 산술 평균을 구하고,
- 그 결과를 지수화하면,
기하평균이 됩니다.
즉,
\[
\text{Geometric Mean} = \exp\left( \frac{1}{n} \sum_{i=1}^{n} \log\left( x_i \right) \right)
\]
간단한 예시:
- 값: 2, 8
- 로그 취하기: log(2)≈0.693, log(8)≈2.079
- 산술 평균: (0.693+2.079)/2≈1.386
- 지수화: exp(1.386)≈4
따라서 2와 8의 기하평균은 4입니다.
두 식이 같다는 간단한 증명
저 식들이 왜 같은건지 간단하게 증명해보겠습니다.
기본 정의에서 시작해볼게요:
\[
\text{Geometric Mean} = \left( \prod_{i=1}^{n} x_i \right)^{1/n}
\]
이 식에 로그를 취해봅니다:
\[
\log\left( \left( \prod_{i=1}^{n} x_i \right)^{1/n} \right) = \frac{1}{n} \log\left( \prod_{i=1}^{n} x_i \right)
\]
로그의 성질을 이용하면:
\[
\log\left( \prod_{i=1}^{n} x_i \right) = \sum_{i=1}^{n} \log\left( x_i \right)
\]
따라서,
\[
\log\left( \text{Geometric Mean} \right) = \frac{1}{n} \sum_{i=1}^{n} \log\left( x_i \right)
\]
이제 양변에 지수(exp)를 취하면:
\[
\text{Geometric Mean} = \exp\left( \frac{1}{n} \sum_{i=1}^{n} \log\left( x_i \right) \right)
\]
따라서 두 식이 완전히 같다는 것을 증명할 수 있습니다!
머신러닝에서는 어떻게 쓰일까?
머신러닝 모델에서는 로그 변환이 아주 자연스럽게 활용됩니다.
예를 들면:
- Loss 함수 계산: Cross Entropy
- Feature Engineering: 수치형 데이터(log income, log size 등)
- 출력 변환: Regression 문제에서 로그 스케일로 출력 예측 후 다시 지수화하는 방식
Cross Entropy 자체도 로그 공간에서의 평균을 활용합니다.
Cross Entropy의 정의는 다음과 같습니다:
\[
\text{Cross Entropy} = -\frac{1}{n} \sum_{i=1}^{n} \log\left( p_i \right)
\]
모델이 예측한 확률 $pip_i$들의 로그를 평균내고, 그것에 음수를 취해 손실로 삼습니다.
- 기하평균은 로그-평균-지수화까지 하는 구조
- Cross Entropy는 로그-평균까지만 하고, 바로 손실로 사용한다는 차이점이 있습니다.
구조는 비슷하지만, 목적은 다릅니다.
마무리하며
이렇게 정리해보니까 모든 개념들은 정말 다 유기적으로 연결되어 있음을 느끼게 되네요!
- 로그 스케일링은 데이터 분포를 안정화하고
- 기하평균은 곱셈적 관계를 요약하는 도구이고
- Cross Entropy는 로그 공간에서 확률을 평가하는 손실 함수다.
이제 로그를 쓸 때나 기하평균을 볼 때, 단순한 계산이 아니라 그 안에 숨어 있는 의미까지 함께 떠올릴 수 있을 것 같습니다.