TL;DR
- 공분산 행렬은 여러 변수의 분산(variance)과 공분산을 한 행렬에 모은 구조다.
- 대각 원소는 각 변수의 분산이고, 비대각 원소는 변수 쌍 사이의 공분산이다.
공분산 행렬
공분산 행렬(covariance matrix)은 다변량 데이터에서 변수들이 각각 얼마나 퍼져 있고, 서로 어떤 방향으로 함께 움직이는지를 한 번에 보여준다.
변수가 두 개일 때는 공분산 하나만 보면 된다. 하지만 변수가 개라면 변수 쌍이 많아진다. 공분산 행렬은 이 정보를 행렬로 정리한다.
구조
변수 가 있다고 하자. 공분산 행렬은 다음과 같은 형태다.
읽는 방식은 단순하다.
| 위치 | 의미 |
|---|---|
| 대각 원소 | 각 변수의 분산(variance) |
| 비대각 원소 | 두 변수 사이의 공분산 |
예를 들어 위치의 값은 과 의 공분산이다. 위치도 같은 값을 갖는다.
왜 대칭 행렬인가
공분산은 순서를 바꿔도 같다.
따라서 공분산 행렬은 대칭 행렬이다.
이 성질 때문에 공분산 행렬은 [[주성분 분석]]처럼 고유값 분해를 사용하는 방법에서 핵심 입력으로 쓰인다.
수식
확률변수 벡터 와 평균 벡터 가 있을 때 모집단 공분산 행렬은 다음과 같이 쓴다.
표본 데이터 행렬을 평균 중심화한 값을 라고 하면, 표본 공분산 행렬은 다음과 같이 계산할 수 있다.
여기서는 행이 관측치, 열이 변수인 데이터 행렬을 가정한다.
직관
공분산 행렬은 데이터의 “퍼짐 모양”을 설명한다.
- 대각 원소가 크다: 해당 변수가 평균 주변에서 많이 퍼져 있다.
- 비대각 원소가 양수다: 두 변수가 같은 방향으로 움직이는 경향이 있다.
- 비대각 원소가 음수다: 두 변수가 반대 방향으로 움직이는 경향이 있다.
- 비대각 원소가 0에 가깝다: 두 변수의 평균 기준 동반 움직임이 약하다.
2차원 데이터에서는 공분산 행렬이 점구름의 방향과 납작한 정도를 설명한다. 두 변수가 강하게 함께 움직이면 점구름은 대각선 방향으로 길어진다.
어디에 쓰이는가
PCA
[[주성분 분석]]은 데이터의 분산이 큰 방향을 찾는다. 이때 공분산 행렬의 고유벡터는 주요 방향을, 고유값은 그 방향의 분산 크기를 나타낸다.
변수 스케일이 서로 크게 다르면 공분산 행렬 기반 PCA는 스케일이 큰 변수에 끌릴 수 있다. 이 경우 표준화 후 상관계수 행렬을 사용하는 선택지가 생긴다.
Mahalanobis distance
[[마할라노비스 거리]]는 변수별 스케일과 변수 간 공분산 구조를 반영한 거리다. 단순 유클리드 거리가 각 축을 독립적으로 보는 데 비해, 마할라노비스 거리는 데이터의 퍼짐 방향을 고려한다.
LDA/QDA
[[선형 판별 분석]]과 [[이차 판별 분석]]은 클래스별 공분산 구조에 대한 가정을 사용한다. LDA는 클래스들이 같은 공분산 행렬을 공유한다고 가정하고, QDA는 클래스별 공분산 행렬이 다를 수 있다고 본다.
구현
import numpy as np
# 행은 관측치, 열은 변수
X = np.array([
[1, 50, 160],
[2, 55, 165],
[3, 65, 170],
[4, 75, 175],
[5, 90, 180],
])
cov_matrix = np.cov(X, rowvar=False)np.cov의 기본값은 각 행을 변수로 해석한다. 일반적인 데이터프레임처럼 행이 관측치, 열이 변수라면 rowvar=False를 지정해야 한다.
주의할 점
단위와 스케일에 민감하다
공분산 행렬은 각 변수의 단위가 그대로 반영된다. cm, kg, 원처럼 스케일이 다른 변수를 함께 넣으면 큰 스케일의 변수가 전체 구조를 지배할 수 있다.
상관계수 행렬과 다르다
공분산 행렬은 원래 단위를 보존한다. [[상관계수 행렬]]은 각 변수를 표준화한 뒤 관계를 부터 사이로 표현한다. 변수 간 상대적 관계만 비교하려면 상관계수 행렬이 더 적합할 수 있다.
변수 수가 표본 수보다 많으면 불안정할 수 있다
변수가 많고 표본이 적으면 공분산 행렬 추정이 불안정해진다. 이 경우 PCA, LDA, 마할라노비스 거리 같은 방법의 결과도 흔들릴 수 있다.
Connections
- 분산(variance) — 공분산 행렬의 대각 원소.
- 공분산 — 공분산 행렬의 비대각 원소.
- Pearson 상관계수 — 공분산을 표준편차로 표준화한 값.
- [[주성분 분석]] — 공분산 행렬의 고유값/고유벡터를 사용해 주요 변동 방향을 찾는다.
- [[마할라노비스 거리]] — 공분산 행렬을 이용해 데이터의 스케일과 상관 구조를 반영하는 거리.


Discussion
Comments
댓글은 승인 후 공개됩니다.