05-010.기술통계량
기초 통계량 확인
“기초 통계량”이라는 대단해 보이는 이 단어는 사실 뜻은 별 것 아니다. “통계량”은 통계 분석을 할 때 사용하는 여러 가지 계산값들을 말하고 “기초 통계량”은 그 중에서도 기본적으로 빈번하게 쓰이는 계산값을 말한다. 기초 통계량은 데이터를 요약하고 설명하는데 주로 사용하지만 다른 복잡한 계산을 할 때 사용하기도 한다. 평균, 중앙값, 최빈값, 최소값, 최대값, 분산, 표준편차 등 기본적인 데이터의 중심과 분포, 퍼짐 정도를 파악하는게 사용한다. 기본 요약값(Summary Values)이라고도 부른다.
((프롬프트)): 기초 통계량의 종류에 대해서 알려주세요 ((AI챗봇 답)):
-
평균(Mean, 산술평균)
- 모든 값을 더한 뒤 데이터의 개수로 나눈 값입니다. 데이터의 중심 위치를 대표합니다.
-
중앙값(Median)
- 데이터를 크기순으로 정렬했을 때 가운데 위치한 값입니다. 이상치(극단값)에 영향을 덜 받습니다.
-
최빈값(Mode)
- 데이터에서 가장 자주 나타나는 값입니다. 범주형 데이터에서 자주 사용됩니다.
-
최솟값(Minimum)
- 데이터 중에서 가장 작은 값입니다.
-
최댓값(Maximum)
- 데이터 중에서 가장 큰 값입니다.
-
분산(Variance)
- 데이터가 평균을 중심으로 얼마나 퍼져 있는지를 나타내는 값입니다.
-
표준편차(Standard Deviation)
- 분산의 제곱근으로, 데이터의 흩어짐 정도를 원래 단위로 나타냅니다.
-
사분위수(Quartiles)
- 데이터를 네 부분으로 나누는 값입니다. (제1사분위수(Q1), 제2사분위수(중앙값, Q2), 제3사분위수(Q3))
-
사분위 범위(IQR, Interquartile Range)
- Q3(제3사분위수)에서 Q1(제1사분위수)을 뺀 값으로, 중앙 50% 데이터의 범위를 나타냅니다.
-
합계(Sum)
- 데이터의 모든 값을 더한 값입니다.
- 개수(Count, N)
- 데이터의 전체 항목 수입니다.
이 외에도 데이터의 특성에 따라 비대칭도(Skewness), 첨도(Kurtosis) 등도 기초 통계량에 넣기도 한다. 계산은 어렵지 않지만 실제로 직접 코드로 구현하라고하면 쉽지 않은 면이 있다. 보통은 제공되는 함수나 라이브러리를 사용한다. 이 값을 뽑아서 숫자로 적어 놓는 것 만으로도 분석가들은 데이터 분포에 대해서 머릿속에 그려넣을 수 있다.물론 숫자로 하는 것 보다는 데이터 시각화를 하는 것이 사람이 이해하는데 도움이 된다.
데이터 분포 확인 (시각화)
- 히스토그램, 박스플롯, 바이올린 플롯 등 다양한 그래프를 활용하여 데이터가 어떻게 분포되어 있는지 시각적으로 확인합니다.
- 분포의 형태(정규분포, 치우침, 첨도 등)를 파악할 수 있습니다.
결측치 및 이상치 탐색
- 데이터에 결측치가 있는지, 이상치(극단값)가 존재하는지 확인합니다.
- 결측치와 이상치는 데이터 분석 결과에 큰 영향을 줄 수 있으므로 반드시 탐색해야 합니다.
변수 간 관계 분석
- 산점도, 상관계수, 페어플롯 등을 통해 변수들 간의 관계(상관관계, 선형성 등)를 탐색합니다.
- 범주형 변수의 경우 교차표, 막대그래프 등을 활용합니다.
그룹별 특성 비교
- 집단(그룹)별로 평균, 분포, 빈도 등을 비교하여 그룹 간 차이점을 파악합니다.
- 예를 들어, 성별, 지역, 등급 등으로 나누어 분석할 수 있습니다.
시계열 데이터의 경우
- 시간에 따른 추세, 계절성, 주기성 등을 시계열 그래프나 이동평균선 등으로 확인합니다.
기술 통계는 단순히 데이터를 요약하는 것을 넘어, 데이터에 숨겨진 의미를 발견하고 이를 통해 더 깊은 분석의 방향을 설정하는 중요한 과정이다. 이는 데이터 기반 의사결정의 첫 단계이자 기초가 된다.
기술통계에서 하는 것들과 최종 목표에 대한 내용을 기술한 것인데 이 자체로는 뭘 어떻게 해야 할지 알기 어렵다. 대학교 통계학과에서 배우는 어려운 통계용어로 설명되어 있다.
용어를 다른 쉬운 용어로 바꾸게 되면 일반성이 떨어지므로 용어를 그대로 두고 쉽게 설명할 것이다.
중심 경향성 측정
중심 경향성이라는 것은 데이터의 중심이 어디 있는가를 말하는 것인데 그러면 “중심은 어떻게 찾는가”라는 의문이 생길 것이다. 중심을 찾는 것은 모여 있는 숫자들에서 어떤 계산을 통해서 그 숫자들들 대표하는 값(숫자)를 알아내는 것이고 그런 값 중에 하나를 쓴다. 대푯값을 대부분 데이터(숫자 모음)에서 중심에 가까운 값을 찾는 것이기 때문에 중심값은 일반적으로 대푯값과 같은 의미로 많이 쓰인다. 예를 들어 숫자 묶음에서 최솟값이나 최댓값을 찾아내서 대푯값으로 쓸 수도 있겠지만 일반적으로 그런 경우는 보기 어렵다. 대푯값을 찾는 방법은 여러개 있다. 가장 많이 쓰이는 것들은 평균, 중앙값, 최빈값이 있는데 평균과 중앙값이 일반적으로 가장 많이 쓰인다.
※ 대푯값의 종류를 최대한 많이 알려주세요
대푯값을 대략 다음과 같은 것들이 있다.
대푯값의 종류
-
산술평균(Arithmetic Mean): 모든 값을 더한 후 개수로 나눈 값으로, 가장 흔히 사용되는 평균이다.
- 장점: 모든 데이터를 반영하며 계산이 쉽다.
- 단점: 극단값(이상치)에 민감하다.
-
중앙값(Median): 데이터를 크기순으로 정렬했을 때 정중앙에 위치한 값이다.
- 장점: 극단값에 영향을 덜 받는다.
- 단점: 데이터의 모든 값을 고려하지 않는다.
-
최빈값(Mode): 데이터에서 가장 자주 나타나는 값이다.
- 장점: 범주형 데이터에 적합하다.
- 단점: 여러 개의 최빈값이 존재할 수 있다.
-
기하평균(Geometric Mean): 모든 값을 곱한 후 데이터 개수만큼 제곱근을 취한 값이다.
- 장점: 비율이나 성장률 계산에 유용하다.
- 단점: 음수 값에는 적용할 수 없다.
-
조화평균(Harmonic Mean): 각 값의 역수를 취한 후 평균을 내고, 다시 역수를 취한 값이다.
- 장점: 비율이나 속도의 평균 계산에 유용하다.
- 단점: 0이나 음수 값에는 적용하기 어렵다.
-
가중평균(Weighted Mean): 각 값에 가중치를 부여하여 계산한 평균이다.
- 장점: 중요도가 다른 데이터를 반영할 수 있다.
- 단점: 적절한 가중치 설정이 필요하다.
-
절사평균(Trimmed Mean): 극단값을 일정 비율 제거한 후 계산한 평균이다.
- 장점: 이상치의 영향을 줄일 수 있다.
- 단점: 얼마나 절사할지 결정해야 한다.
-
윈저화 평균(Winsorized Mean): 극단값을 특정 백분위수 값으로 대체한 후 계산한 평균이다.
- 장점: 이상치를 완전히 제거하지 않고 영향을 줄인다.
- 단점: 윈저화 정도를 결정해야 한다.
-
중위수 절대편차(Median Absolute Deviation): 각 값과 중앙값의 차이의 절대값의 중앙값이다.
- 장점: 이상치에 강건하다.
- 단점: 계산이 복잡하다.
-
사분위수(Quartiles): 데이터를 4등분하는 값들로, 특히 중앙값(Q2)과 함께 Q1(25%), Q3(75%)가 많이 사용된다.
- 장점: 데이터의 분포를 파악하는 데 유용하다.
- 단점: 단일 대푯값이 아닌 여러 값을 사용한다.
이러한 다양한 대푯값은 데이터의 특성과 분석 목적에 따라 적절히 선택하여 사용해야 한다. 하나의 대푯값만으로는 데이터의 모든 특성을 파악하기 어렵기 때문에, 여러 대푯값을 함께 고려하는 것이 좋다.
상황에 따라 적절한 것을 선택해서 사용해야 하겠지만 가장 많이 쓰는 것은 평균과 중앙값이다.
평균
평균(Mean)의 공식은 대부분 알겠지만 잘 기억나지 않거나 수식을 보고 싶다면 AI에게 물어보면 된다. 평균은 산술 평균(Arithmetic Mean), 기하 평균(Geometric Mean), 조화 평균(Harmonic Mean) 등이 있는데 그냥 평균이라고 하면 산술 평균을 의미한다. 가장 많이 쓰이기 때문이다.
산술 평균은 데이터 값들의 합을 데이터의 개수로 나눈 값이다. 숫자 모음을 다 합친 다음 합쳐진 값을 숫자의 갯수로 나누면 된다.
평균은 모든 데이터 값을 고려하기 때문에 전체 데이터를 대표하는 값으로 자주 사용된다. 하지만 극단값(이상치, outlier)에 민감하다는 단점이 있어, 데이터에 극단값이 있을 경우 중앙값을 사용하는 것이 더 적절할 수 있다.
극단값이 문제가 되는 경우로 가장 잘 알려진 재밌는 사례는 마이클 조단 연봉 얘기다.
2013년 노스캐롤라이나 대학교 경제학과 졸업생들의 평균 연봉을 조사했을 때, 마이클 조던의 엄청난 수입(당시 연간 약 9천만 달러 이상)으로 인해 경제학과 졸업생의 평균 연봉이 비정상적으로 높게 나타났다. 경제학을 전공한 사람들의 연봉이 매우 높다고 오인할 수 있는 결과인데 실상은 그렇지 않았다. 노스캐롤라이나 대학교에서 농구 선수를 하기 위해서는 어떤 학과에든 소속이 되어야 하는데 단지 농구 선수를 하기 위해서 경제학과에 소속되어 있는 것이다. 따라서 경제학과 졸업생의 평균 연봉이 비정상적으로 높게 나타났다. 한 명의 극단적인 값이 전체 평균을 크게 왜곡시킨 대표적인 사례이다.
이런 경우, 중앙값을 사용하면 마이클 조던과 같은 극단값의 영향을 받지 않고 일반적인 경제학과 졸업생의 소득 수준을 더 정확하게 파악할 수 있다. 이처럼 데이터에 극단값이 존재할 때는 평균보다 중앙값이 더 적절한 대표값이 될 수 있다.
colab에서는 다음과 같이 한다.
코랩 코드 셀
import numpy as np
numbers = np.array([42, 17, 23, 89, 5, 36, 71, 54, 8, 62, 31])
np.mean(numbers)
결과
np.float64(39.81818181818182)
중앙값
중앙값(Median)은 데이터를 크기순으로 정렬했을 때 가장 중앙에 위치한 값이다. 중앙값은 평균과 달리 극단값에 영향을 덜 받는다.
중앙값을 계산하는 방법은 데이터를 크기순으로 정렬하고 가장 중앙에 위치한 값을 찾는 것이다. 데이터가 짝수개일 경우는 가장 중앙에 있는 두 값의 평균을 계산한다.
예를 들어, 다음과 같은 11개의 숫자가 있다고 가정해 보자.
[42, 17, 23, 89, 5, 36, 71, 54, 8, 62, 31]
중앙값을 구하기 위해 먼저 이 숫자들을 오름차순으로 정렬하면 다음과 같이 된다.
[5, 8, 17, 23, 31, 36, 42, 54, 62, 71, 89]
데이터의 개수가 11개(홀수)이므로, 중앙값은 정렬된 데이터에서 정확히 중앙에 위치한 6번째 값이다. 따라서 중앙값은 36이다.
colab에서는 다음과 같이 한다.
코랩 코드 셀
import numpy as np
numbers = np.array([42, 17, 23, 89, 5, 36, 71, 54, 8, 62, 31])
np.median(numbers)
결과
np.float64(36)
만약 데이터 개수가 짝수라면, 중앙에 위치한 두 값의 평균을 중앙값으로 사용한다. 예를 들어
[42, 17, 23, 89, 5, 36, 71, 54, 8, 62, 31, 29]
이라고 하면 데이터를 크기순으로 정렬하면 다음과 같이 되는데
[5, 8, 17, 23, 29, 31, 36, 42, 54, 62, 71, 89]
데이터가 짝수개이므로 중앙에 위치한 두 값의 평균을 중앙값으로 사용한다.
중앙값은 (36 + 42) / 2 = 39이다.
이 계산을 colab에서 numpy를 사용해서 하면 다음과 같이 할 수 있다.
주피터 노트북 코드 셀
import numpy as np
numbers = np.array([42, 17, 23, 89, 5, 36, 71, 54, 8, 62, 31])
np.median(numbers)
결과
np.float64(36.5)
이 외에 사분위수를 비롯한 몇가지는 고급 데이터 분석(데이터마이닝 또는 기계학습)에서 사용되는데 그 부분은 후에 다루기로 한다.
분산 (Variance)과 표준편차 (Standard Deviation)
분산은 데이터가 평균으로부터 얼마나 떨어져 있는지를 측정하는 값이다.
숫자 뭉치에서 평균값을 구한 뒤 각 숫자와 평균값의 차이를 제곱한 값을 모두 더한 다음 데이터의 개수로 나눈 값이다.
더 쉽게 설명하면 숫자 뭉치에서 각각의 숫자가 평균값에서 보편적으로 얼마 정도 떨어져 있는지를 계산한 값이다.
숫자의 흩어짐 정도를 측정하는 값인데 이값을 알면 숫자의 어느 부분을 어떻게 다뤄야 할지도 알 수 있으며 대푯값이 얼마나 대표성을 잘 가지고 있는지도 알 수 있다.
분산이 가지는 의미는 깊이 생각하지 않으면 어디에 쓰는지 알기 어려운데 앞서 평균을 구할 사용한 숫자들을 다시 사용해서 이해하자.
어떤 학급의 학생들의 수학 시험의 결과 점수가 다음과 같다고 하자.
[42, 17, 23, 89, 5, 36, 71, 54, 8, 62, 31]
평균은 위에선 계산했지만 다시 계산해 보자.
import numpy as np
numbers = np.array([42, 17, 23, 89, 5, 36, 71, 54, 8, 62, 31])
np.mean(numbers)
결과
np.float64(39.81818181818182)
이 학급의 수학 시험 성적의 평균은 39.8점이다. 평균을 대푯값으로 쓰기로 한다면 이 학급의 수학 성적은 39.8점이라고 말할 수 있다. 그런데 이 학급의 학생 중에는 5점, 8점인 학생도 있고 89점인 학생도 있다. 이 학생들은 평균에 비해 너무 낮거나 너무 높은 점수를 받았다. 이런 경우 평균을 대푯값으로 쓰지 못하는 것은 아니지만 무리가 생긴다. 평균 하나로만 대푯값으로 이 학급의 수학 점수는 39.8점이라고 말하면 왜곡이나 오해의 소지가 생길 수 있다. 학급 학생 11명 전부가 39.8을 받았다고 말할 수도 있기 때문이다.
분산을 계산해서 중심에서 각각의 숫자가 얼마나 멀리 있는지 계산해보자. 분산도 계산을 하고 하나의 숫자가 결과값으로 나온다.
import numpy as np
numbers = np.array([42, 17, 23, 89, 5, 36, 71, 54, 8, 62, 31])
np.var(numbers)
결과
np.float64(627.0909090909091)
627인데 이 값은 무엇을 의미하는지 연상하기 어렵다. 사람이 좀 더 이해하기 쉽게하려면 표준편차를 계산하면 된다. 표준편차는 분산의 제곱근(루트 값)을 계산한 값이다.
import numpy as np
numbers = np.array([42, 17, 23, 89, 5, 36, 71, 54, 8, 62, 31])
np.std(numbers)
결과
np.float64(25.04179176114788)
표준편차는 25인데 이 의미는 이제 학생의 성적이 평균값인 39.8점에서 대체로 25점 정도 떨어져 있다는 것을 의미한다. 좀더 쉽게 이해할 수 있다.
**궁금할 수 있는 것 1 **
추가 설명을 하나 더 하면 평균에서 각각의 숫자가 얼마나 떨어져 있는지 알아낼 때 어째서 평균을 구해서 각각 숫자를 뺀 다음에 그 값들의 평균을 구하지 않고 제곱한 다음에 제곱근을 구하는지 궁금할 수 있다.
이유는 간단하다. 평균을 구해서 각각 숫자를 뺀 다음에 그 값들을 합하면 0이 되기 때문이다. 이 것은 평균의 특성 중 하나이다. 결국 이 숫자들로 평균을 구해도 모두 0이 되버리므로 이렇게 계산할 수는 없는 것이다.
궁금할 수 있는 것 2
분산을 구한 다음에 그 값에서 제곱근을 구하면 표준편차가 된다. 그런데 분산은 그 자체로 보통 사람이 직관적으로 이해하기에는 조금 어렵다. 그래서 표준편차를 계산해서 쓰는데 그러면 표준편차를 주로 쓰면 되는데 어째서 분산을 쓰는 것인가? 그리고 분산이 유융하긴 한 것인가?
통계학에서는 표준편차 보다는 분산을 더 많이 쓴다. 여러가지 이유가 있지만
프롬프트: 통계학에서 분산과 표준편차가 있는데 표준편차보다 분산을 더 많이 사용하는 이유를 알려주세요.
매우 어려운 답이 나올 것인데 간단한 것만 설명한기로 한다.
우선 분산은 데이터 분석의 복잡한 계산에서 미분과 적분을 할 때 편리하다. 값에 제곱을 해 놓은 상태가 더 쓰기 편한 경우가 매우 많다. 그외에 제곱근이 없는 분산은 고등수학(대수학) 계산에서 여러 모로 편리하고 통계 분포의 독립성·가법성에서도 추가 계산없이 바로 이용할 수 있으며, 통계검정의 근간인 제곱합 분해를 쓸 때 유리하다.
간단하게 이해라면 표준편차를 해두면 뒤에 다른 계산에서 여러가지 불편한 점이 더 많다는 것이다. 여기에서 더 자세히 설명하면 지루해지므로 더 자세한 것은 직접 AI를 이용하거나 통계학 교과서를 보고 공부하는 것이 좋을 것이다.
여기에서 잠깐 짚고 가자면
평균과 분산(표준편차)를 이용하면 무엇을 할 수 있는가?
통계적 데이터 분석에서는 데이터의 평균과 분산을 매우 빈번하게 사용한다. 평균과 분산을 계산하는 것 만으로는 데이터 분석이라고 하기 어렵다. 단순히 공식으로 계산한 것이기 때문이다. EDA에서도 매우 빈번하게 평균과 분산을 계산하고 기록하는데 대체 이 값들을 이용하면 뭘 알 수 있는지 또 이 값들로 무엇을 설명하고 분석에 이용하는지 생각해야 한다.
평균과 분산을 알면 데이터의 분포를 대략 알 수 있다. 플롯(plot, 그래프)을 그려보면 이해하기 쉽다.
앞서의 평균값으로 다음과 같이 해보자.
import numpy as np
numbers = np.array([42, 17, 23, 89, 5, 36, 71, 54, 8, 62, 31])
mean = np.mean(numbers)
variance = np.var(numbers)
# 평균과 분산을 이용해서 데이터의 분포를 그래프로 그리기
import matplotlib.pyplot as plt
import numpy as np
# 평균과 표준편차를 이용한 정규분포 함수 생성
std_dev = np.sqrt(variance) # 표준편차 계산
x = np.linspace(mean - 3*std_dev, mean + 3*std_dev, 100) # x축 범위 설정
y = (1 / (std_dev * np.sqrt(2 * np.pi))) * np.exp(-0.5 * ((x - mean) / std_dev)**2) # 정규분포 함수
# 선그래프 그리기
plt.figure(figsize=(10, 6))
plt.plot(x, y, 'b-', linewidth=2)
plt.axvline(mean, color='r', linestyle='--', label=f'평균: {mean:.2f}')
plt.title('평균과 표준편차를 이용한 정규분포')
plt.xlabel('값')
plt.ylabel('확률 밀도')
plt.legend()
plt.grid(True)
plt.show()
종모양의 플롯(그래프)을 볼 수 있는데 이 그래프는 평균과 분산을 이용해서 정규분포(normal distribution)를 그린 것이다. 정규분포는 나중에 설명하기로 한다.
정규분포는 평균을 중심으로 종모양의 그래프를 이루는데 이것은 데이터의 분포를 대략적으로 이해하는데 가장 쉽고 많이 쓰이는 방법이다. 하지만 이 방법이 정확하다는 것은 아니며 원래 데이터의 분포를 정학하게 나타내는 것도 아니다. 하지만 전통적으로 이 방법으로 매우 많은 과학적인 데이터 분석을 하고 결정을 하는데 사용했으며 그 나름대로 효과를 보았다. 다만 빅데이터 시대에 들어서 데이터의 양이 많아지면서 이런 방법의 한계가 더 부각되었다.
정규분포 (normal distribution)
정규분포는 통계학에서 가장 중요한 확률분포 중 하나인데 서양 종 모양의 대칭적인 곡선 형태를 가진다. 이 분포는 가우스 분포(Gaussian distribution)라고도 하는데 유명한 독일의 수학자이자 물리학자인 카를 프리드리히 가우스(Carl Friedrich Gauss, 1777-1855)의 이름을 따서 붙여진 것이다. 가우스가 발견했거나 처음 연구한 것은 아니지만 가우스가 정규분포의 수학적 공식을 체계화했고 현대 통계학의 기초를 다진 것으로 알려진다. 정규 분포와 가우스 분포는 같은 말이다. 정규 분포라고 이름을 붙인 이유는 자연 현상의 데이터는 정규 분포를 따르는 그러니까 정규 분포인 경우가 많기 때문이다. 가장 일반적인 분포라고 생각해서 정규라는 이름을 붙인 것이다. 자연계의 데이터는 흔히 태양이나 별들의 빛의 분포와 우주 물리 등에서 나오는 데이터를 말한다. 후에 인간의 행동과 관련이 있는 사회적 데이터도 일부 정규 분포를 따른 다는 것이 발견되었고 연구가 되어 더 널리 쓰이게 되었다. 하지만 세상의 모든 데이터가 정규 분포를 따르는 것이 아니며 각각의 데이터는 각기 다른 분포를 가지고 있으며 사회적 데이터는 정규분포가 아닌 것이 더 많다.
더 자세한 내용은 역시 AI를 이용하거나 위키피디아를 참고하자.