F-값 유도식

파이썬 라이브러리를 활용한 머신러닝‘ p286 페이지에 나와 있는 F-값을 Scikit-Learn에서 어떻게 계산하는지 살펴 보겠습니다. F-값에 대한 정의는 다음과 같습니다.

F = \dfrac{\dfrac{SS_{between}}{k-1}}{\dfrac{SS_{tot}-SS_{between}}{n-k}}

여기에서 k는 클래스의 수, n은 데이터의 개수입니다. 보통 클래스별 평균 분산 SS_{between}과 전체 분산 SS_{tot}는 다음과 같이 정의됩니다.

SS_{between} = \sum_{j=1}^{k}n_j(\bar{x}_j-\bar{x})^2

SS_{tot} = \sum_{i=1}^{n}(x_i-\bar{x})^2

\bar{x}_j는 클래스별 평균이고, \bar{x}는 전체 데이터에 대한 평균입니다. n_j는 클래스별 데이터 개수입니다.

클래스별 평균 분산을 풀어서 간략히 나타내 보겠습니다.

SS_{between} = \sum_{j=1}^{k}n_j(\bar{x}_j-\bar{x})^2=\sum_{j=1}^{k}n_j(\bar{x}_j^2-2\bar{x}_j\bar{x}+\bar{x}^2) \\ \\ = \sum_{j=1}^{k}n_j\bar{x}_j^2 - \sum_{j=1}^{k}2n_j\bar{x}_j\bar{x} + \sum_{j=1}^{k}n_j\bar{x}^2 

여기에서 \bar{x} 은 전체 데이터의 평균이므로 상수값입니다. 또한 \sum_{j=1}^{k}n_j는 전체 데이터의 개수 n과 같습니다. 따라서,

= \sum_{j=1}^{k}n_j\bar{x}_j^2 - \bar{x}\sum_{j=1}^{k}2n_j\bar{x}_j + \bar{x}^2\sum_{j=1}^{k}n_j = \sum_{j=1}^{k}n_j\bar{x}_j^2 - 2\bar{x}\sum_{j=1}^{k}n_j\bar{x}_j + \bar{x}^2n

로 나타낼 수 있습니다. 평균 \bar{x}_j를 클래스별 데이터의 합으로 풀어서 쓰면

= \sum_{j=1}^{k}n_j\left(\dfrac{\sum x_j}{n_j}\right)^2 - 2\bar{x}\sum_{j=1}^{k}n_j\left(\dfrac{\sum x_j}{n_j}\right) + n\bar{x}^2 \\ \\ = \sum_{j=1}^{k}\dfrac{(\sum x_j)^2}{n_j} - 2\bar{x}\sum_{j=1}^{k}\sum x_j + n\bar{x}^2

마찬가지로 \bar{x}를 전체 데이터의 합으로 풀어서 쓸 수 있습니다.

= \sum_{j=1}^{k}\dfrac{(\sum x_j)^2}{n_j} - 2\left(\dfrac{\sum x_i}{n}\right)\sum x_i + n\left(\dfrac{\sum x_i}{n}\right)^2 \\ \\ = \sum_{j=1}^{k}\dfrac{(\sum x_j)^2}{n_j} - 2\dfrac{(\sum x_i)^2}{n} + \dfrac{(\sum x_i)^2}{n} \\ \\ = \sum_{j=1}^{k}\dfrac{(\sum x_j)^2}{n_j} - \dfrac{(\sum x_i)^2}{n}

결국 정리된 식을 보면 클래스별 데이터 합의 제곱을 클래스별 데이터 개수로 나누고 이를 모든 클래스에 대해 계산하여 더합니다. 그리고 전체 데이터 합의 제곱을 전체 데이터 개수로 나눈 것을 빼 줍니다.  이 식이 http://vassarstats.net/textbook/ch14pt1.html 에 있는 Step 4a의 식입니다.

다음은 SS_{tot} 를 풀어 보겠습니다.

SS_{tot} = \sum_{i=1}^{n}(x_i-\bar{x})^2 = \sum_{i=1}^n(x_i^2-2x_i\bar{x}+\bar{x}^2) \\ \\ = \sum_{i=1}^n x_i^2 - 2\bar{x}\sum_{i=1}^n x_i + \bar{x}^2\sum_{i=1}^n 1

위 식과 표현을 맞추기 위해 \sum_{i=1}^{n} x_i을 간단히 \sum x_i로 표현하겠습니다. 또한 \sum_{i=1}^{n} 1=n이므로

= \sum x_i^2 - 2\bar{x}n\dfrac{\sum x_i}{n} + n\bar{x}^2 \\ \\ = \sum x_i^2 - 2\bar{x}n\bar{x} + n\bar{x}^2 = \sum x_i^2 - 2n\bar{x}^2 + n\bar{x}^2 \\ \\ = \sum x_i^2 - n\bar{x}^2 = \sum x_i^2 - \dfrac{(\sum x_i)^2}{n}

정리된 식은 전체 데이터 합의 제곱에서 이 값을 데이터 개수로 나눈 것을 빼고 있습니다. 이 식은 Step 1의 식에 해당합니다. 따라서 SS_{tot} - SS_{between} 은,

SS_{tot} - SS_{between} = \sum x_i^2 - \sum_{j=1}^{k}\dfrac{(\sum x_j)^2}{n_j}

이 됩니다.

이렇게 유도된 계산식을 사용하는 목적은 계산의 효율성때문입니다. 전체 데이터의 합과 클래스별 데이터의 합을 알고 있으면 손쉽게 F-값을 계산할 수 있습니다. 하지만 우리가 직관적으로 이해하기에는 원래의 공식이 더 낫습니다. : )