HOWTO · NumPy

Python NumPy의 공분산

numpy.cov()를 사용해 Python에서 공분산을 계산하세요. 공분산의 의미, 두 배열로 푼 예제, 표본 정규화와 모집단 정규화(bias/ddof)의 차이, 공분산 행렬을 읽는 방법을 다룹니다.

이 페이지의 내용

공분산을 이해하는 것은 데이터 분석에 매우 중요하며, 특히 두 변수가 어떻게 함께 변하는지 파악하려고 할 때 중요합니다. Python에서 NumPy 라이브러리는 두 개 이상의 배열 사이의 공분산을 계산해 주는 함수 numpy.cov()를 제공합니다. 데이터 과학자, 통계학자, 또는 단순히 데이터 분석에 관심이 있는 사람이든, 이 함수를 숙달하면 분석 능력을 향상시키고 프로젝트를 개선할 수 있습니다.

이 기사에서는 numpy.cov()를 효과적으로 사용하는 방법을 살펴보고, Python에서 공분산의 개념을 파악하는 데 도움이 되는 명확한 예제와 자세한 설명을 제공합니다. 자, 시작해 보겠습니다!

공분산이란 무엇입니까?

공분산은 두 확률 변수가 얼마나 함께 변하는지를 나타내는 통계적 척도입니다. 변수들이 함께 증가하고 감소하는 경향이 있으면 공분산은 양수입니다. 반대로, 한 변수가 증가하는 경향이 있고 다른 변수가 감소하면 공분산은 음수입니다. 0에 가까운 공분산은 변수들 사이에 선형 관계가 없음을 나타냅니다 — 이는 독립성보다 약한 개념이라는 점에 유의하세요. 두 변수는 비선형 방식으로 서로 의존하면서도 공분산이 0일 수 있습니다.

실제로 공분산은 금융, 통계, 기계 학습에서 서로 다른 데이터 세트 사이의 관계를 이해하는 데 자주 사용됩니다. 공분산을 계산하면 한 데이터 세트의 변화가 다른 데이터 세트에 어떤 영향을 미칠 수 있는지에 대한 통찰을 얻을 수 있습니다.

numpy.cov()를 사용하여 공분산 계산하기

numpy.cov() 함수는 Python에서 공분산을 계산하는 대표적인 방법입니다. 두 개의 1차원 배열(또는 행이 변수인 2차원 배열 하나)을 전달하면 공분산 행렬을 반환합니다. 대각선에는 각 변수의 분산이, 대각선 밖에는 각 쌍 사이의 공분산이 들어갑니다. 기본적으로 N을 관측 수로 하여 N-1로 나누는 표본 공분산을 계산합니다.

두 배열 사이의 공분산 계산 예제

두 NumPy 배열 사이의 공분산을 계산하는 간단한 예제부터 시작하겠습니다. 한 그룹의 사람들의 키와 몸무게를 나타내는 두 개의 데이터 세트가 있다고 상상해 보세요.

import numpy as np

heights = np.array([1.5, 1.6, 1.7, 1.8, 1.9])
weights = np.array([50, 55, 60, 65, 70])

cov_matrix = np.cov(heights, weights)
print(cov_matrix)

출력:

[[2.50e-02 1.25e+00]
 [1.25e+00 6.25e+01]]

이 예제에서는 먼저 NumPy 라이브러리를 가져오고 heights와 weights라는 두 개의 배열을 만듭니다. 그런 다음 numpy.cov()를 사용하여 이 두 배열 사이의 공분산 행렬을 계산합니다. (현재 NumPy는 여기서 작은 값을 과학적 표기법으로 출력합니다. 2.50e-02는 0.025이고 6.25e+01는 62.5입니다.)

왼쪽 위의 값(0.025)은 키의 분산이고, 오른쪽 아래의 값(62.5)은 몸무게의 분산입니다. 대각선 밖의 두 값(1.25)은 키와 몸무게 사이의 공분산으로, 이 데이터에서는 키가 큰 사람이 더 무겁기 때문에 양수입니다. 이 행렬은 이 두 변수가 어떻게 상호작용하는지를 간결하게 보여줍니다.

모집단 정규화로 공분산 계산하기

기본적으로 numpy.cov()는 N-1로 나눕니다 — 이는 표본 정규화로, 데이터가 더 큰 모집단의 표본일 때 올바른 선택입니다. 데이터가 모집단 자체라면, 대신 bias=True(동등하게는 ddof=0)를 전달하여 N으로 나누세요.

import numpy as np

heights = np.array([1.5, 1.6, 1.7, 1.8, 1.9])
weights = np.array([50, 55, 60, 65, 70])

cov_matrix_population = np.cov(heights, weights, bias=True)
print(cov_matrix_population)

출력:

[[2.e-02 1.e+00]
 [1.e+00 5.e+01]]

모든 값은 표본 버전보다 (N-1)/N 배만큼 작습니다 — 여기서는 4/5이므로 공분산이 1.25에서 1.0으로 떨어집니다. 어느 버전도 일반적으로 “더 정확"하지는 않습니다. 답하는 질문이 다를 뿐이며, N이 크면 그 차이는 무시할 수 있을 만큼 작아집니다. 데이터가 관심 있는 모집단 전체를 포괄할 때는 모집단 형식을, 그렇지 않을 때는 기본 표본 형식을 사용하세요.

공분산 행렬 해석하기

공분산 행렬을 이해하는 것은 데이터를 바탕으로 정보에 입각한 결정을 내리는 데 필수적입니다. 공분산 행렬의 대각 요소는 각 변수의 분산을 나타내고, 대각선 밖의 요소는 변수들 사이의 공분산을 나타냅니다.

공분산 값을 해석할 때는 다음 사항을 고려하세요.

  • 양의 공분산은 변수들이 함께 증가하거나 감소하는 경향이 있음을 나타냅니다.
  • 음의 공분산은 한 변수가 증가하고 다른 변수가 감소하는 역의 관계를 시사합니다.
  • 0에 가까운 공분산은 변수들 사이에 선형 관계가 없음을 의미합니다.

공분산이 알려주지 않는 것 중 하나는 관계의 강도입니다. 그 크기는 변수들의 단위와 척도에 의존하므로, 공분산 값은 서로 다른 데이터 세트 간에 비교할 수 없습니다. 그 비교 가능성은 공분산을 -1에서 1의 범위로 정규화함으로써 상관관계가 더해 주는 것입니다. 우리의 예에서 키와 몸무게 사이의 양의 공분산은 키가 증가함에 따라 몸무게도 증가하는 경향이 있다는 것만 말해줍니다 — 이 통찰은 추가 분석이나 의사 결정 과정의 지침이 될 수 있습니다.

결론

공분산은 통계와 데이터 분석의 기본 개념이며, Python의 numpy.cov() 함수를 사용하면 데이터 세트 사이의 공분산을 쉽게 계산할 수 있습니다. 표본 정규화와 모집단 정규화 사이의 선택을 포함하여 이 함수를 사용하는 방법을 이해하면, 서로 다른 변수들 사이의 관계에 대한 귀중한 통찰을 얻을 수 있습니다. 금융 데이터를 분석하든, 과학 연구를 수행하든, 기계 학습 프로젝트를 진행하든, 공분산을 숙달하면 분석 도구 상자가 강화될 것입니다. 자, NumPy를 시작하고 데이터 관계라는 매력적인 세계를 탐험해 보세요!

FAQ

  1. 공분산이란 무엇입니까?
    공분산은 두 확률 변수가 어떻게 함께 변하는지를 나타내어 그 관계를 보여주는 통계적 척도입니다.

  2. Python에서 공분산을 어떻게 계산합니까?
    하나 이상의 NumPy 배열을 받아 공분산 행렬을 반환하는 numpy.cov() 함수를 사용하여 Python에서 공분산을 계산할 수 있습니다.

  3. 양의 공분산은 무엇을 의미합니까?
    양의 공분산은 한 변수가 증가하면 다른 변수도 증가하는 경향이 있음을 나타냅니다.

  4. 공분산이 음수일 수 있습니까?
    예, 음의 공분산은 한 변수가 증가하는 경향이 있고 다른 변수가 감소함을 시사합니다.

  5. 공분산과 상관관계의 차이점은 무엇입니까?
    공분산은 두 변수 사이의 관계의 방향을 측정하고, 상관관계는 그 관계의 강도와 방향을 모두 측정하며 -1과 1 사이로 정규화됩니다.