728x90

데이터를 살펴보면 자료값들이 키와 몸무게와 같이 연속적인 데이터가 있습니다. 

자료값들이 165, 170, 175, 180, 185와 같이 떨어져 있는 것으로 보이지만, 

실제 데이터에 들어갈 수 있는 자료는 165.000000001도 가능하며, 

연속적으로 어떤 숫자라도 들어갈 수 있기 때문에 연속형 변수라고 합니다. 

 

모든 자료값이 연속적이라고 생각될 수 있으나,

초등학교 학년과 같이 순서를 나타내는 자료값도 있으며,

남녀와 같이 연속적이지도 않고, 순서를 의미하지도 않는 자료값도 있습니다.

 

연속형 변수는 키와 몸무게의 예시처럼 서로 연관성을 지닐 수도 있습니다. 

이때 두 연속형 변수 사이의 연관성이 있는 정도를 보여주는 것이 공분산과 상관계수입니다.

 

공분산(Covariance)

공분산은 하나의 변수가 변할 때, 다른 나머지 변수가 어떻게 변하는지 보여줍니다. 

 

키와 몸무게의 경우, 키가 크면 몸무게 커지는 경향이 있으므로 양(+)의 선형관계가 있다고 하며,

키와 허리디스크의 경우, 키가 크면 허리디스크가 더 심해지는 경향이 있으므로 음(-)의 선형관계가 있다고 합니다.

선형관계는 그래프로 그려보면 직선으로 쭈욱 그을 수 있다는 뜻입니다.

 

만약 이러한 경향이 보이지 않으면, +와 -가 서로 상쇄되어 0이 되며, 이때 공분산은 0이 됩니다. 

다만 공분산이 0이라고 해서, 두 변수가 서로 관련이 없다고 말할 수는 없습니다. 

직선으로 쭈욱 그을 수는 없어도, 곡선으로 그을 수 있는 경우도 분명 서로 관련이 있는 경우이지만,

공분산이 0이 될 수 있기 때문입니다.

 

하지만, 반대로 두 변수가 서로 관련이 없다면, 이 경우에 공분산은 0이 됩니다.

 

 

공분산은 다음과 같이 구합니다.

첫번째 키에서 키의 평균을 빼주고,

첫번째 몸무게에서 몸무게의 평균을 빼준 후,

이 둘을 서로 곱합니다. 

 

두번째도, 세번째도, 마지막까지도 같은 방법으로 곱한 후,

모두 더해줍니다. 

 

모두 더해준 수를 데이터의 개수에서 1을 뺀 숫자로 나눠서 구합니다.

데이터의 개수가 아니라, 데이터의 개수에서 1을 뺀 숫자로 나눠주는 이유는,

위의 데이터와 같이 5개의 값이 있고, 그 평균을 알고 있다면, 

4개의 값이 정해지는 순간 나머지 1개의 값은 확정이 되기 때문입니다.

 

실제 수학적으로는,

샘플을 뽑은 표본의 분산이라, 전체의 분산과는 다를 가능성이 있지만,

표본의 분산(표본분산)에서 기대되는 값이 전체의 분산(모분산)과 같도록 하려면

데이터의 개수에서 1을 뺀 숫자로 나눠야 같아지게 됩니다.

 

예제의 공분산을 구하겠습니다.

각각의 키 데이터값에 키의 평균(data['height'].mean()을 빼고, 

각각의 몸무게 데이터값에 몸무게의 평균(data['weight'].mean()을 뺀 후,

이 둘을 곱(*)한 값들을 모두 더합니다.

그리고 len함수를 통해 구한 전체 데이터 개수에서 1을 빼준 수로 나눕니다.

 

조건식을 통해 공분산을 구하겠습니다.

zip함수를 통해 키와 몸무게에서 하나씩 가져오고, 

키에서 가져온 데이터를 x라 하고, 몸무게에서 가져온 데이터를 y로 정합니다. 

x에서 평균을 빼고, y에서 평균을 빼면, 5개 행에 대한 150, -50, 0, -50, 150의 값을 얻습니다. 

 

위와 동일한 조건식이며, 얻은 값들을 sum을 통해 모두 더해주고,

len함수를 통해 구한 전체 데이터 개수에서 1을 빼준 수로 나눠주면 공분산이 나옵니다.

 

위는 수식을 이해하기 위해 직접적으로 계산하여 공분산을 구하였으나,

numpy의 cov를 통해 쉽게 공분산을 구할 수 있습니다.

결괏값은 행렬로 나오므로, 공분산만 표시하기 위해, 공분산 값의 나오는 위치를 지정합니다.

파이썬은 0부터 숫자를 셉니다.

함수 뒤의 첫번째 [ ]는 행을, 두번째 [ ]는 열을 의미합니다.

[0][1]의 의미는 행렬의 첫번째 행[0]에서 두번째 열[1]의 값을 읽으라는 의미이며, 

위에서 구한 공분산과 결과는 같습니다.

 

참고로 [0][0]의 값인 62.5는 키의 분산이며, 

[1][1]의 값인 162.5는 몸무게의 분산입니다. 

공분산을 통해서 두 연속성 변수가 연관성이 있는 정도를 파악할 수 있습니다. 

그러나 공분산은 치명적인 약점이 있습니다. 

바로 공분산은 단위의 영향을 많이 받는다는 점입니다. 

 

앞서의 데이터와 같은 자료이지만, 

키의 단위를 센티미터(cm)가 아니라 미터(m)로 변경해 보겠습니다. 

data2의 공분산은 약 0.5입니다. 

단위는 다르지만 실질적으로 같은 데이터에 대해 공분산은 100배가 차이가 나므로,

공분산 값을 통해서는 어느 정도 연관성이 있는지 파악하기가 어렵습니다.

이를 해결하기 위해 공분산을 각 분산의 표준편차로 나눈 상관계수를 이용합니다.

상관계수에 대한 내용은 별도의 글로 게시합니다.

반응형

+ Recent posts