통계 기초 밑바닥부터

참고: 여기서 사용하는 코드는 조엘 그루스(Joel Grus)의 밑다닥부터 시작하는 데이터 과학 5장에 사용된 소스코드의 일부를 기반으로 작성되었다.

주요 내용

데이터 분석의 기본이 바로 통계 분야의 주요 개념과 기법이다. 여기서는 앞으로 우리에게 필요한 정도의 통계의 기본 개념과 기법을 간단하게 소개한다.

다루는 주제는 다음과 같다.

  1. 중심경향성
  2. 산포도
  3. 상관관계
  4. 심슨의 역설
  5. 상관관계와 인과관계

데이터셋 설명하기

총 204명의 사용자 각각의 친구수에 데이터가 다음과 같이 주어졌다고 가정한다. 즉, 사용자별 최대 친구수는 100명이고, 최소 1명이다.

사용자 수는 204명이고, 사용자별 최대 친구수는 100명, 최소 친구수는 1명이다.

위 히스토그램에서 보여지는 것은 다음과 같다.

다른 정보를 어떻게 구할 수 있을까?

예를 들어, 대다수 사람들의 친구 수는 어딘가로 쏠리는 경향이 있어 보인다. 이것을 전문용어로 표현하면 중심 경향성이다. 즉, 일반적으로 사용자들의 친구 수를 대표하는 중심이 존재한다는 의미이다.

중심 경향성

중심 경향성은 데이터의 중심의 위치를 알려주며, 중심 경향성을 지정하기 위해 보통 세 종류의 평균(average)을 사용한다.

  1. 평균값(mean)
  2. 중앙값(median)
  3. 최빈값(mode)

주의: 평균(average)과 평균값(mean)를 혼동하지 말아야 한다.

전제

$X$를 데이터셋이라 하고, $X$의 크기, 즉, 테이터 개수를 $n$이라 하자.

평균값

평균값(mean)은 우리가 보통 평균이라 부르는 값이며 모든 데이터의 합을 데이터 개수로 나눈다. 그러면, 데이터셋 $X$의 평균값은 보통 그리스 알파벳 뮤($\mu$) 또는 $E(X)$로 표시하며 값은 아래와 같다.

$$ E(X) = \mu = \frac{\sum X}{n} $$

$X=$ num_friends 일 때 사용자들의 평균 친구수는 7.33명이다.

중앙값

중앙값(median) 말 그대로, 데이터의 중앙위치에 자리잡은 값이다. 단, 데이터를 크기순으로 정렬했을 때 중앙위치에 있는 값이다. 따라서 중앙값을 구하려면 먼저 데이터를 크기순으로 정렬해야 한다. 그 다음에 중앙위치를 찾아내어 그곳에 위치한 값을 확인한다.

그런데 $n$이 짝수이면 중앙위치에 두 수 사이에 있기 때문에 두 수의 평균값을 중앙값으로 사용한다.

출처: 위키백과

친구수의 중앙값은 6명이다.

평균값과 중앙값의 차이

평균값은 데이터에 민감한 반면에 중앙값은 그렇지 않다. 예를 들어, num_friends에서 최대 친구수를 100명에서 200명으로 바꾸면 그러면 평균값은 7.33명에서 7.82명으로 올라간다.

하지만 중앙값은 변하지 않는다.

이상치

앞서 살펴보았듯 평균값은 특정 값에 민감하게 반응한다. num_friends의 경우 친구수가 평규 7.33명인데 100명의 친구가 있는 경우는 매우 특이하다고 할 수 있다. 이런 데이터를 이상치(outlier)라 부른다. 따라서 이상치가 존재하면 평균값이 데이터에 대한 잘못된 정보를 전달할 수 있다.

예를 들어, 2013년 3월 당시, 국회의원들의 평균재산은 94억 9000만원이었다. 하지만 이상치값을 보인 두 의원을 제외하면 23억 3000만원이다. 두 개의 이상치는 현대중공업의 대주주인 정몽준의 약 2조원 가량의 재산과 다른 한 명의 약 2000억원 가량의 재산이었다.

사분위수

중앙값은 중앙위치에 있는 값이며, 세 개의 사분위수(quantile) 중에 하나이다. 다룬 두 개의 사분위수는 하위 25% 위치에 있는 제1사분위수와 상위 25% 위치에 있는 제3사분위수이다. 즉, 중앙값은 상위 50%에 해당하는 제2사분위수에 해당한다.

num_friends의 제1사분위수와 제3사분위수는 각각 3명과 9명이다.

최빈값

데이터에서 가장 자주 나오는 값을 최빈값(mode)라 부르며, 경우에 따라 평균값, 중앙값 대신에 중심을 대표하는 값으로 사용된다.

num_friends의 최빈값은 1과 6이다.

산포도

산포도는 데이터가 얼마나 퍼져 있는지를 측정한다. 산포도가 0에 가까운 값이면 퍼져있지 않고 한 값 주위에 뭉쳐있다는 의미이고, 0에서 멀어질 수록 퍼져있는 정도가 커진다는 의미이다.

산포도를 측정하는 기준은 보통 다음과 같다.

  1. 범위(range)
  2. 사분범위(interquntile range)
  3. 분산(variance)
  4. 표준편차(standard deviation)

범위

범위는 데이터셋의 최대값과 최소값의 차이를 가리킨다. 일반적으로 범위가 크다는 것은 데이터의 퍼짐 정도가 크다는 것을 의미한다.

그런데 범위는 최대, 최소값에만 의존한다. 예를 들어, 최대값 100, 최소값 1인 데이터는 모두 num_friends와 동일한 범위를 갖는다. 따라서 데이터의 특성을 제대로 반영하지 못할 수가 있다.

num_friends의 범위는 99임을 다시 한 번 확인할 수 있다.

사분범위

평균, 분산, 표준편차와 함께 범위도 이상치에 민감하다. 이런 점을 해소하기 위해 제1사분위수와 제3사분위수 사이의 범위인 사분범위를 사용하기도 한다.

예를 들어, num_friends의 사분범위는 6이다. 범위가 99였던 것에 비해 매우 작은 산포도를 의미한다.

분산

데이터 평균값과의 차이의 제곱들의 평균값이 분산이다. 쉽게 말하면, 데이터가 평균값으로부터 얼마나 떨어져 있는가를 알려주는 값이며, 정확한 계산식은 다음과 같으며, 데이터셋 $X$의 분산은 보통 $\textit{Var}(X)$ 기호로 나타낸다.

$$ \textit{Var}(X) = \frac{\sum (X - \mu)^2}{n-1} $$

주의: 일반적으로 분모를 $n$으로 한다. 하지만 데이터 표본으로부터 전체에 대한 분산을 추정하는 경우 $(n-1)$을 사용한다. 실제로 데이터분석에 다루는 데이터는 거의 표본 데이터이다.

num_friends 데이터의 분산값은 81.54이다.

표준편차

분간값의 단위는 원래 단위의 제곱이다. 따라서 분산값 보다는 분산값의 제곱근을 보다 많이 사용한다.

표본의 표준편차를 나타내는 기호는 보통 $s$이다.

$$s_X = \sqrt{\textit{Var}(X)}$$

num_friends의 표준편차는 9.03이다.

이상치의 영향

앞서 평균값이 이상치의 영향을 크게 받는다는 것을 보았다. 따라서 분산과 표준편차 역시 이상치의 영향을 받는다.

상관관계

두 데이터셋이 서로 상관이 있는가를 알고자 할 때 상관관계를 파악하며, 상관관계의 정도는 보통 공분산(covariance) 또는 피어슨 상관계수(correlation)로 측정한다.

예를 들어, 사용자가 사이트에서 보내는 시간과 친구 수 사이의 연관성을 파악하고자 한다.

num_friendsdaily_minutes는 각각 사용자별 친구수와 사이트에서 머무르는 시간을 순서에 맞게 데이터로 담고 있다.

공분산

두 데이터셋의 공분산은 각 데이터넷의 변수가 각각의 평균값으로부터 떨어져 있는 정도를 계산하며, 수식은 다음과 같다.

두 데이터셋 $X$와 $Y$를 크기를 $n$이라 하자.

그러면, $X$와 $Y$의 공분산 $Cov(X, Y)$는 다음과 같다.

$$ Cov(X,Y) = \frac{\sum (X- E(X))(Y- E(Y))}{n-1} $$

친구수와 사용시간 사이의 공분산은 22.43이다.

공분산의 특징과 한계

어떤 사용자에 대해 친구수와 사용시간 모두 평균보다 작거나 모두 크면 공분산에 양수의 값이 더해진다. 반면에 친구수가 평균보다 작지만, 사용시간은 평균보다 크면 음수의 값이 공분산에 더해진다. 따라서 친구수와 사용시간이 평균을 기준으로 동일한 방향(크거나 작다 기준)이냐 아니냐가 공분산 값에 영향을 미친다.

그런데 친구수는 그대로인데 사용시간만 늘면 공분산은 증가한다. 하지만 그렇다고 해서 친구수와 사용시간의 연관성이 어떻게 변한 것인지를 판단하기는 어렵다. 즉, 공분산이 크다, 작다의 기준을 잡기가 어렵다.

피어슨 상관계수

공분산의 한계를 해결하기 위해 피어슨 상관계수가 제시되었다. 피어슨 상관계수는 공분산을 각 데이터셋의 표준편차의 곱으로 나누어 두 데이터셋 사이의 선형 상관관계를 수치로 계산한다.

두 데이터셋 $X, Y$의 피어슨 상관계수 계산은 다음과 같다.

$$ Correl(X,Y) = \frac{Cov(X,Y)}{s_X \cdot s_Y} $$

피어슨 상관계수의 특징

출처: 위키백과

친구수와 사용시간 사이의 상관관계는 0.25이며, 이는 두 데이터셋 사이의 상관 정도가 크지 않음을 의미한다.

이상치와 상관관계

이상치가 상관관계에도 영향을 준다.

위 예제에서 100명의 친구를 가진 사용자의 사이트 사용시간이 1분이며, 이 사용자의 데이터는 확실히 이상치라고 할 수 있다. 이제 이 사용자의 데이터를 제거하고 상관관계를 계산하면, 이번에는 상관계수가 0.57이 된다. 두 데이터셋의 상관정도가 두 배이상 커졌다.

이상치의 존재여부에 따른 두 데이터셋의 그래프도 모양이 달라지며, 이상치를 제거한 후의 그래프의 선형 상관관계가 보다 명확하게 보여진다.

이상치 제거 후

심슨의 역설

상관계수를 계산할 때 소위 혼재변수(confounding variable)를 고려하지 않으면 잘못된 결과를 얻는다.

예를 들어, 모든 데이터 과학자를 서부와 동부로 구분할 수 있다고 가정하자. 그리고 각 데이터 과학자들의 친구수를 확인해 보았다.

지역 데이터 과학자 수 평균 친구 수
서부 101 8.2명
동부 103 6.5명

위 표에 의하면 서부에 사는 데이터 과학자들이 보다 사교적이다. 그런데 이번엔 박사학위 소유여부를 포함하여 데이터를 조사하였다.

지역 학위 데이터 과학자 수 평균 친구 수
서부 박사 35 3.1명
동부 박사 70 3.2명
서부 기타 66 10.9명
동부 기타 33 13.4명

그랬더니 박사학위가 있거나 없거나 동부 지역의 데이터 과학자가 평균적으로 보다 많은 친구관계를 맺고 있다. 앞서 박사학위 여부를 따지지 않을 때와 서로 모순되는 결과를 보여준다. 왜 그럴까?

정답은 두 데이터셋 사이의 상관계수를 측정할 때 주어진 데이터셋 이외의 다른 조건들은 모두 동일하다고 전제하는 데에 있다. 그런데 위 데이터 과학자들의 경우 박사학위 소지 여부가 평균 친구 수에 영향을 준다.

따라서 단순히 서부와 동부로 구분해서 친구 수를 비교하여 상관계수를 구하면 다른 조건이 동일해야 한다는 전제조건을 어긴 조건에서 결과를 유도한 것이다.

박사학위 소지 여부를 조건으로 첨가하면 동부 지역의 데이터 과학자가 보다 사교적으로 나오지만 그렇지 않은 경우에는 반대의 결과가 나오는 이유는 두 가지이다.

  1. 박사들의 친구 수가 상대적으로 적다.
  2. 동부 지역에 박사 데이터 과학자가 보다 많이 산다.

따라서 서부 지역의 경우 박사학위가 없는 사람들이 보다 많고 그들이 보다 많은 친구를 가지고 있기에 전체 데이터 과학자들의 평균 친구수가 동부 보다 높아게 된다.

상관계수 관련 추가 주의사항

상관관계가 0 또는 1에 아주 가깝다고 해서 반드시 어떤 관계도 없다거나 매우 밀접합 선형관계이다라고 섣부르게 결론 내리면 위험하다.

예제 1

다음 두 개의 데이터셋 x와 y를 살펴보자.

x -2 -1 0 1 2
y 2 1 0 1 2

x와 y의 상관계수는 0이다.

하지만 y는 x의 항목의 절댓값을 항목으로 갖는다. 즉, 이런 데이터는 상관계수로 두 데이터셋의 연관성을 측정할 수 없다.

예제 2

다음 두 개의 데이터셋 x와 y를 살펴보자.

x -2 -1 0 1 2
y 99.98 99.99 100 100.01 100.02

x와 y의 상관계수는 1이다.

하지만 두 데이터셋 사이의 선형관계가 정말로 완벽하게 선형인지에 대해서는 장담할 수 없다.

상관관계와 인과관계

두 데이터셋 사이에 상관관계가 있다고 해서 한 쪽이 다른 쪽에 영향을 주는 인과관계가 있다고 주장할 수 없다. 왜냐하면 두 데이터셋에 영향을 주는 다른 외부 요소가 존재할 수 있기 때문이다.

예를 들어, 친구 수를 담은 num_friends와 사이트 사용시간을 담은 daily_minutes의 관계를 살펴보자. 그러면 최소 세 가지 시나리오가 가능하다.

  1. 사이트에서 많은 시간을 보낼 수록 많은 친구를 사귄다.
  2. 많은 친구가 있으니까 사이트에서 시간을 보다 많이 보낸다.
  3. 사이트에서 많은 정보를 얻을 수 있으니까 사용시간이 길어지고, 그러다 보니까 친구가 늘어난다.

이 중에 어떤 것이 맞는지는 다른 방법으로 확인해봐야 한다. 예를 들어, 사용자 집단을 임의로 두 모둠으로 나누고, 한쪽 모둠에만 특정 친구들의 글만 보여주는 것과 같이, 한 쪽 모둠에만 영향을 주는 실험을 하고 그 결과를 비교한다. 이런 식으로 해서 상관관계의 진짜 근거를 얻어내도록 해야 한다.

연습문제

문제 1

본문 내용을 넘파이 어레이 객체를 이용하여 구현하라.

문제 2

본문 내용을 판다스 시리즈와 데이터프레임 객체를 이용하여 구현하라.