공분산 :: Python 기초 통계 - mindscale
Skip to content

공분산

공분산(covariance): 두 변수가 함께 변화하는 정도를 나타내는 지표

공분산

두 개의 데이터 xy가 있을 때

x = [8, 3, 6, 6, 9, 4, 3, 9, 3, 4]
y = [6, 2, 4, 6, 10, 5, 1, 8, 4, 5]

산점도로 나타내기. 가로축은 x, 세로축은 y를 나타냄.

import matplotlib.pyplot as plt
plt.plot(x, y, 'o')
[<matplotlib.lines.Line2D at 0x20e0fb52898>]

np.cov를 사용하면 x의 분산, y의 분산과 함께 x와 y의 공분산을 계산

import numpy as np

np.cov(x, y)
array([[6.05555556, 5.61111111],
       [5.61111111, 6.98888889]])

공분산만 보고자 한다면 아래와 같이 함

np.cov(x, y)[0, 1]
5.61111111111111

공분산의 해석

부호:

  • 공분산이 +인 경우: 두 변수가 같은 방향으로 변화(하나가 증가하면 다른 하나도 증가)
  • 공분산이 -인 경우: 두 변수가 반대 방향으로 변화(하나가 증가하면 다른 하나는 감소)

크기:

  • 공분산 = 0이면 두 변수가 독립, 즉, 한 변수의 변화로 다른 변수의 변화를 예측하지 못함
  • 공분산의 크기가 클 수록 두 변수는 함께 많이 변화
  • 단위에 따라 공분산의 크기가 달라지므로 절대적 크기로 판단이 어려움
  • 공분산을 -1 ~ 1 범위로 표준화 시킨 것이 상관계수

주의: 공분산은 선형적인 관계를 측정하기 때문에 두 변수가 비선형적으로 함께 변하는 경우는 잘 측정하지 못함

아래 z와 w는 $w = z^2$의 관계가 있지만 공분산은 0

z = [-3, -2, -1, 0, 1, 2, 3]
w = [9, 4, 1, 0, 1, 4, 9]

np.cov(z, w)[0, 1]
0.0