logo

누적 평균 공식 유도 📂보조정리

누적 평균 공식 유도

공식

주어진 샘플 $x_{1} , \cdots , x_{n}$ 의 표본평균이 $y_{n}$ 이라면, 샘플 $x_{n+1}$ 가 새로이 주어졌을 때 전체의 표본평균 $y_{n+1}$ 은 다음과 같다. $$ y_{n+1} := {{ n } \over {n + 1}} y_{n} + {{1} \over {n+1}} x_{n+1} $$

설명

누적 평균cummulative Average이동 평균moving Average러닝 애버리지running Average라 불리기도 한다.

누구나 초중학교 시절 한번쯤 해볼 수 있는 실수인데, 필자는 채점을 하면서 중간에 미리 구해놓은 평균을 그냥 나머지 과목에다 때려넣고 평균을 내곤 했다.(이 당시엔 내가 훗날 통계학과에 진학할 거라곤 꿈에도 몰랐다.) 이를테면 국어, 영어가 각각 90, 80점이고 아직 수학을 매기지 않았다고 하자. 이 시점에서 내 평균은 $$ y_{2} = (90+80)/2 = 85 $$ 인데, 수학을 70점 받았다면 전체 평균은 $$ y_{3} = (90+80+70)/3 = 80 $$ 이어야하는데 그냥 $$ (85 + 70)/2 = 77.5 $$ 점으로 계산하는 식이었다. 정확히 이유는 모르겠지만, 전체를 다 더하고 나누는 것과 그냥 계속 한과목씩 때려넣어서 평균을 구하는 방법에는 차이가 있다는 걸 안 뒤론 늘 기존의 결과를 버리고 처음부터 다 더하고 나누었던 것 같다. 포스트에서 소개된 공식은 정확히 그 바보짓을 막을 수 있는 방법이다. 다시 숫자를 풀어헤쳐서 계산할 게 아니라 그냥 기존 평균과 새 데이터에 $n, 1$ 를 곱하는 가중평균weighted Average를 구하면 된다.

별것 아닌 것처럼 보이지만 의외로 많은 비전공자들이 이 공식을 모르고 비슷한 실수를 저지르며, 데이터 스트림data Stream과 같은 걸 다루는 인공지능 분야 등에서 아무런 설명 없이 갑자기 등장하기도 한다. 이 때 누적 평균 공식의 역할은 주로 새로운 데이터가 주어졌을 때 효율적으로 학습에 관련된 수치를 업데이트하는 것이다.

유도

$$ \begin{align*} y_{n+1} =& {{ x_{1} + \cdots + x_{n} + x_{n+1} } \over {n + 1}} \\ =& {{ n {{x_{1} + \cdots + x_{n}} \over {n}} + x_{n+1} } \over {n + 1}} \\ =& {{ n y_{n} + x_{n+1} } \over {n + 1}} \end{align*} $$