데이터 지식

기하평균과 로그변환의 관계

박윤서 2025. 4. 28. 15:07

안녕하세요! 이번에 일주일에 최소 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}
\]

그런데 이걸 다른 방식으로 표현할 수도 있는데요.

  1. 각각 \( x_i \)에 대해 로그를 취하고,
  2. 로그값들의 산술 평균을 구하고,
  3. 그 결과를 지수화하면,

기하평균이 됩니다.

즉,

\[
\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는 로그 공간에서 확률을 평가하는 손실 함수다.

이제 로그를 쓸 때나 기하평균을 볼 때, 단순한 계산이 아니라 그 안에 숨어 있는 의미까지 함께 떠올릴 수 있을 것 같습니다.