1 개요
선형대수에서 \(X^\top X\) 는 Gram Matrix라고 불린다. 통계학에서는 같은 행렬이 분산-공분산 행렬의 핵심 구성 요소로 등장한다. OLS 추정량의 분산 \(\text{Var}(\hat{\beta}) = \sigma^2 (X^\top X)^{-1}\) 에서도, 주성분 분석(PCA)에서도, 다중공선성 진단(VIF)에서도 \(X^\top X\) 가 중심에 있다.
이 포스트는 “왜 내적 연산이 분산이 되는가?”라는 질문에 답한다. 결론부터 말하면, 중심화된 데이터의 자기 내적은 편차 제곱합과 수학적으로 동치이기 때문이다. 선형대수의 언어로는 “내적”이고, 통계의 언어로는 “분산”이다.
2 수식적 유도: 내적에서 공분산으로
2.1 데이터 행렬의 구조
데이터 행렬 \(X\) 는 \(n \times p\) 행렬이다. 각 행(row)이 관측치, 각 열(column)이 변수다.
\[X = \begin{pmatrix} x_{11} & x_{12} & \cdots & x_{1p} \\ x_{21} & x_{22} & \cdots & x_{2p} \\ \vdots & \vdots & \ddots & \vdots \\ x_{n1} & x_{n2} & \cdots & x_{np} \end{pmatrix}\]
\(X\) 의 \(j\) 번째 열을 \(\mathbf{x}_j \in \mathbb{R}^n\) 이라 쓰면, 이것은 변수 \(j\) 의 \(n\) 개 관측값을 모은 벡터다.
2.2 \(X^\top X\) 의 \((i, j)\) 원소
\(X^\top X\) 는 \(p \times p\) 행렬이며, 그 \((i, j)\) 원소는 두 열 벡터의 내적이다:
\[(X^\top X)_{ij} = \mathbf{x}_i^\top \mathbf{x}_j = \sum_{k=1}^{n} x_{ki} \, x_{kj}\]
이것이 무엇을 의미하는지는 데이터가 평균 중심화(mean-centered)되어 있는지에 달려 있다.
2.3 평균 중심화와 분산의 연결
각 열의 평균을 \(\bar{x}_j = \frac{1}{n} \sum_{k=1}^n x_{kj}\) 라 하자. 중심화된 데이터 행렬 \(\tilde{X}\) 는 각 원소에서 열 평균을 뺀 것이다:
\[\tilde{x}_{kj} = x_{kj} - \bar{x}_j\]
이 중심화된 행렬에 대해 \(\tilde{X}^\top \tilde{X}\) 를 계산하면:
대각 원소 ( \(i = j\) ):
\[(\tilde{X}^\top \tilde{X})_{jj} = \sum_{k=1}^{n} (x_{kj} - \bar{x}_j)^2 = (n-1) \, s_j^2\]
여기서 \(s_j^2 = \frac{1}{n-1}\sum_{k=1}^n (x_{kj} - \bar{x}_j)^2\) 는 변수 \(j\) 의 표본 분산이다.
비대각 원소 ( \(i \neq j\) ):
\[(\tilde{X}^\top \tilde{X})_{ij} = \sum_{k=1}^{n} (x_{ki} - \bar{x}_i)(x_{kj} - \bar{x}_j) = (n-1) \, \text{Cov}(x_i, x_j)\]
여기서 \(\text{Cov}(x_i, x_j) = \frac{1}{n-1}\sum_{k=1}^n (x_{ki} - \bar{x}_i)(x_{kj} - \bar{x}_j)\) 는 표본 공분산이다.
2.4 핵심 등식
중심화된 데이터 행렬 \(\tilde{X}\) 에 대해:
\[S = \frac{1}{n-1} \tilde{X}^\top \tilde{X}\]
여기서 \(S\) 는 \(p \times p\) 표본 공분산 행렬이다.
이 등식이 ” \(X^\top X\) 가 분산”이라는 말의 정확한 의미다. \(X^\top X\) 자체는 편차 제곱합 행렬(Sum of Squares and Cross Products, SSCP)이며, 이를 자유도 \(n-1\) 로 나누면 공분산 행렬이 된다.
3 기하학적 직관: “Scatter”의 의미
3.1 내적이 측정하는 것
두 벡터의 내적 \(\mathbf{u}^\top \mathbf{v} = \|\mathbf{u}\| \|\mathbf{v}\| \cos\theta\) 는 두 가지 정보를 동시에 담고 있다:
- 크기: 두 벡터가 얼마나 큰가 ( \(\|\mathbf{u}\|, \|\mathbf{v}\|\) )
- 방향 유사성: 두 벡터가 얼마나 같은 방향을 가리키는가 ( \(\cos\theta\) )
3.2 분산이 측정하는 것
통계학에서 분산은 “평균으로부터 얼마나 멀리 퍼져 있는가”를 측정한다:
\[s^2 = \frac{1}{n-1} \sum_{k=1}^n (x_k - \bar{x})^2\]
중심화된 벡터 \(\tilde{\mathbf{x}} = (x_1 - \bar{x}, \ldots, x_n - \bar{x})^\top\) 에 대해 이것은:
\[s^2 = \frac{1}{n-1} \tilde{\mathbf{x}}^\top \tilde{\mathbf{x}} = \frac{\|\tilde{\mathbf{x}}\|^2}{n-1}\]
분산 = 중심화된 벡터의 제곱 노름을 자유도로 나눈 것이다.
기하학적으로 해석하면: 데이터를 평균(원점)으로 이동시킨 후, 각 관측치가 원점에서 뻗어 나간 “에너지”의 총합이 \(\|\tilde{\mathbf{x}}\|^2\) 이다. 이것을 관측치 수(자유도)로 평균 내면 분산이 된다.
3.3 Gram Matrix와 Scatter Matrix
| 용어 | 정의 | 맥락 |
|---|---|---|
| Gram Matrix | \(G = X^\top X\) | 선형대수 — 벡터들의 모든 내적 조합 |
| Scatter Matrix | \(\tilde{X}^\top \tilde{X}\) | 다변량 통계 — 중심화된 데이터의 제곱합 행렬 |
| Sample Covariance Matrix | \(S = \frac{1}{n-1}\tilde{X}^\top \tilde{X}\) | 추론 통계 — Scatter를 자유도로 정규화 |
Scatter Matrix는 Gram Matrix의 중심화 버전이다. 중심화 없이 \(X^\top X\) 를 바로 쓰면 평균의 기여분이 포함되어 순수한 “변동성”을 측정하지 못한다.
4 중심화의 행렬 표현
앞에서 중심화된 데이터 \(\tilde{X}\) 를 사용해야 공분산 행렬을 얻는다는 것을 보았다. 그렇다면 “각 열에서 평균을 빼는” 연산 자체를 행렬 하나로 표현할 수 있을까? 이것이 중심화 행렬이다.
평균 중심화는 중심화 행렬(centering matrix) \(H\) 로 표현할 수 있다:
\[H = I_n - \frac{1}{n} \mathbf{1}\mathbf{1}^\top\]
여기서 \(\mathbf{1}\) 은 모든 원소가 1인 \(n\) 차원 벡터다. \(\mathbf{1}\mathbf{1}^\top\) 은 모든 원소가 1인 \(n \times n\) 행렬이므로, \(\frac{1}{n}\mathbf{1}\mathbf{1}^\top\) 은 “모든 행의 평균을 구하는” 행렬이다. \(I\) 에서 이것을 빼면 “원래 값에서 평균을 빼는” 연산이 된다.
\(H\) 는 대칭이고 멱등( \(H^2 = H\) )이다. 멱등이라는 것은 중심화를 두 번 해도 결과가 같다는 뜻이다 — 이미 평균이 0인 데이터에서 다시 평균을 빼면 아무 변화가 없다.
\[\tilde{X} = HX\]
따라서:
\[\tilde{X}^\top \tilde{X} = X^\top H^\top H X = X^\top H X\]
\(H\) 의 멱등성 \(H^2 = H\) 과 대칭성 \(H^\top = H\) 을 이용했다.
\(H\mathbf{x}\) 는 벡터 \(\mathbf{x}\) 에서 “모든 성분의 평균” 방향의 성분을 제거한다. 기하학적으로 \(H\) 는 \(\mathbf{1}\) 방향으로의 정사영을 빼는 연산이다. 결과 벡터의 성분 합은 항상 0이 된다.
5 \(X^\top X\) vs \(XX^\top\) : 차원과 역할
\(X^\top X\) 가 변수 간 관계를 요약한다면, 전치 순서를 바꾼 \(XX^\top\) 는 무엇을 의미하는가? 두 행렬은 같은 데이터에서 나오지만 전혀 다른 질문에 답한다.
\(X\) 가 \(n \times p\) 일 때:
| \(X^\top X\) | \(XX^\top\) | |
|---|---|---|
| 크기 | \(p \times p\) | \(n \times n\) |
| 원소 의미 | 변수 \(i\) 와 변수 \(j\) 의 내적 | 관측치 \(i\) 와 관측치 \(j\) 의 내적 |
| 측정 대상 | 변수 간 관계 (분산, 공분산) | 관측치 간 유사도 |
| 통계적 용도 | 공분산 행렬, OLS, PCA (변수 공간) | 커널 행렬, 클러스터링, 유사도 분석 |
| 고유값 | 비영 고유값이 \(XX^\top\) 와 동일 | 비영 고유값이 \(X^\top X\) 와 동일 |
마지막 행이 핵심이다. \(X^\top X\) 와 \(XX^\top\) 는 서로 다른 크기의 행렬이지만 비영 고유값이 동일하다. 이것이 SVD에서 \(X = U\Sigma V^\top\) 일 때 \(X^\top X = V\Sigma^2 V^\top\) , \(XX^\top = U\Sigma^2 U^\top\) 으로 이어지는 구조다.
PCA에서 \(p < n\) 이면 \(p \times p\) 인 \(X^\top X\) 의 고유값 분해가 효율적이고, \(n < p\) (고차원 데이터)이면 \(n \times n\) 인 \(XX^\top\) 를 쓰는 것이 계산적으로 유리하다. 이것이 커널 PCA의 동기 중 하나다.
6 OLS에서 \(X^\top X\) 의 역할
\(X^\top X\) 가 변수 간 분산-공분산을 요약한다는 사실은 회귀 분석에서 직접적인 실무적 함의를 갖는다. OLS 추정량 \(\hat{\beta} = (X^\top X)^{-1} X^\top y\) 에서 \(X^\top X\) 는 세 가지 역할을 한다:
6.1 정규방정식의 의미
정규방정식 \(X^\top X \hat{\beta} = X^\top y\) 는 기하학적으로 “잔차 벡터 \(y - X\hat{\beta}\) 가 \(X\) 의 열공간에 직교한다”는 조건이다.
\(X^\top X\) 가 변수들의 상호 관계를 요약하고, \(X^\top y\) 가 각 변수와 반응변수의 관계를 요약한다. \((X^\top X)^{-1}\) 을 곱하는 것은 변수 간 중복(공선성)을 보정하여 각 변수의 순수한 기여분을 분리하는 과정이다.
6.2 추정량의 분산
\[\text{Var}(\hat{\beta}) = \sigma^2 (X^\top X)^{-1}\]
\((X^\top X)^{-1}\) 의 대각 원소가 각 \(\hat{\beta}_j\) 의 분산을 결정한다. 다중공선성이 있으면 \(X^\top X\) 의 조건수(condition number)가 커져 역행렬의 원소가 폭발하고, 이것이 VIF로 나타난다:
\[\text{VIF}_j = [(X^\top X)^{-1}]_{jj} \cdot (X^\top X)_{jj}\]
이 공식이 말하는 것은: \((X^\top X)_{jj}\) 는 변수 \(j\) 의 총 분산이고, \([(X^\top X)^{-1}]_{jj}\) 는 다른 변수들과의 관계를 보정한 후의 역분산이다. 두 값의 곱이 1이면 변수 \(j\) 는 다른 변수들과 독립이고, 1보다 크면 그만큼 다른 변수들과 정보가 중복된다는 뜻이다.
7 양정치성과 분산
앞에서 \(X^\top X\) 가 분산을 담는다는 것을 보았다. 그렇다면 분산의 가장 기본적인 성질 — “분산은 항상 0 이상이다” — 도 \(X^\top X\) 에서 자연스럽게 나오는가?
임의의 벡터 \(\mathbf{v} \in \mathbb{R}^p\) 에 대해:
\[\mathbf{v}^\top (X^\top X) \mathbf{v} = (X\mathbf{v})^\top (X\mathbf{v}) = \|X\mathbf{v}\|^2 \geq 0\]
등호는 \(X\mathbf{v} = \mathbf{0}\) , 즉 \(\mathbf{v}\) 가 \(X\) 의 영공간에 속할 때만 성립한다.
이 성질이 통계학의 “분산은 항상 0 이상”이라는 사실과 정확히 대응한다. 공분산 행렬 \(S\) 의 양정치성은 \(S = \frac{1}{n-1}\tilde{X}^\top \tilde{X}\) 로부터 자동으로 보장된다. 분산이 음수가 될 수 없는 이유는 그것이 벡터 노름의 제곱이기 때문이다.
8 코드 예시
8.1 Step 1: 순수 Python 구현
def mean_center(X):
"""각 열에서 평균을 빼서 중심화한다."""
n, p = len(X), len(X[0])
col_means = [sum(X[k][j] for k in range(n)) / n for j in range(p)]
return [[X[k][j] - col_means[j] for j in range(p)] for k in range(n)]
def matmul_transpose(A):
"""A^T A 를 직접 계산한다."""
n, p = len(A), len(A[0])
result = [[0.0] * p for _ in range(p)]
for i in range(p):
for j in range(p):
result[i][j] = sum(A[k][i] * A[k][j] for k in range(n))
return result
# 3개 관측치, 2개 변수
X = [[2, 4], [4, 6], [6, 8]]
X_centered = mean_center(X) # [[-2, -2], [0, 0], [2, 2]]
XtX = matmul_transpose(X_centered)
n = len(X)
cov_matrix = [[XtX[i][j] / (n - 1) for j in range(len(XtX[0]))]
for i in range(len(XtX))]
print("Scatter Matrix (X~^T X~):", XtX)
# [[8, 8], [8, 8]]
print("Covariance Matrix:", cov_matrix)
# [[4.0, 4.0], [4.0, 4.0]]8.2 Step 2: NumPy 구현
import numpy as np
X = np.array([[2, 4], [4, 6], [6, 8]], dtype=float)
# 중심화
X_centered = X - X.mean(axis=0)
# Scatter Matrix
scatter = X_centered.T @ X_centered
print("Scatter Matrix:\n", scatter)
# 공분산 행렬 (자유도 n-1)
cov_manual = scatter / (X.shape[0] - 1)
print("Cov (manual):\n", cov_manual)
# NumPy의 cov 함수와 비교
cov_numpy = np.cov(X, rowvar=False)
print("Cov (numpy):\n", cov_numpy)
# 두 결과가 동일함을 확인
assert np.allclose(cov_manual, cov_numpy)8.3 고유값 동치 확인
import numpy as np
np.random.seed(42)
X = np.random.randn(100, 5)
X_centered = X - X.mean(axis=0)
# X^T X 와 XX^T 의 비영 고유값이 동일함을 확인
eig_XtX = np.linalg.eigvalsh(X_centered.T @ X_centered)
eig_XXt = np.linalg.eigvalsh(X_centered @ X_centered.T)
# XX^T 는 100x100이므로 95개의 영 고유값과 5개의 비영 고유값이 있다
nonzero_XXt = np.sort(eig_XXt[eig_XXt > 1e-10])[::-1]
nonzero_XtX = np.sort(eig_XtX[eig_XtX > 1e-10])[::-1]
print("X^T X eigenvalues:", np.round(nonzero_XtX, 4))
print("XX^T eigenvalues:", np.round(nonzero_XXt, 4))
assert np.allclose(nonzero_XtX, nonzero_XXt)9 관련 주제
선행 지식
직접 관련
- Ch.6 $$6.4 — 대칭 행렬: 실수 고유값, 직교 고유벡터, 스펙트럼 정리
- Ch.6 $$6.5 — 양정치 행렬
- Ch.6 $$6.7 — SVD
- Ch.8 $$8.6 — Statistics and Probability
통계학 연결
- 회귀 모델의 샘플 수 추정 — \(\text{Var}(\hat{\beta}) = \sigma^2 (X^\top X)^{-1}\) 의 실무적 함의
- 제곱합 분해 — ANOVA에서 Scatter Matrix의 분해