logo

기술 통계: 변산성 측정치

변산성(Variability)

  • 중심 경향치만으로는 데이터의 전체적인 모양을 파악하기 어려움
  • 데이터가 평균이나 중간값 주변에 얼마나 모여 있는지, 혹은 넓게 퍼져 있는지를 나타내는 척도
  • 분산도(Dispersion) 또는 산포도라고도 함
  • 왜 변산성을 측정해야 하는가?
    • 평균이 같더라도 데이터의 퍼짐 정도에 따라 데이터의 특성이 완전히 다를 수 있음
    • 퍼짐 정도가 작으면 중심값 주변에 데이터가 밀집되어 있어 중심값이 전체를 잘 대표함
    • 퍼짐 정도가 크면 불확실성이 크고 극단적인 값이 존재할 가능성이 높음

범위(Range)

  • 데이터 세트에서 최댓값과 최솟값의 차이
  • 계산이 직관적이고 매우 간단함
  • 예: 최대 속도가 30노트, 최소 속도가 10노트일 때 범위는 20노트
  • 극단적인 이상치(outlier) 하나만 있어도 값이 크게 변하므로 안정적이지 않음
df['speed'].max() - df['speed'].min()

분산(Variance)

  • 각 데이터 값이 평균으로부터 얼마나 떨어져 있는지(편차)를 제곱하여 평균 낸 값
  • 편차를 단순히 더하면 0이 되므로, 부호를 무시하기 위해 제곱을 사용
  • 값이 클수록 데이터가 넓게 흩어져 있다는 의미
  • 제곱을 했기 때문에 단위도 제곱이 되어 직관적인 해석이 어려움
# 'speed' 열의 분산 계산
df['speed'].var()

표준편차(Standard Deviation)

  • 분산에 양의 제곱근을 취한 값
  • 원래 데이터와 동일한 단위를 가지므로 해석이 매우 직관적
  • 대부분의 통계 분석에서 데이터의 흩어짐을 나타내는 대표적인 척도로 사용
# 'speed' 열의 표준편차 계산
df['speed'].std()

표준편차를 활용한 이상치 식별

  • 정규 분포를 따르는 경우, 평균을 중심으로 표준편차를 벗어나는 데이터를 이상치로 간주하는 경우가 많음(3시그마 규칙)
  • 직관적이고 계산이 빠름
  • 평균과 표준편차 자체가 이상치에 취약하므로 데이터가 크게 왜곡된 경우 부정확할 수 있음
m = df['speed'].mean()
s = df['speed'].std()
lower = m - 3 * s
upper = m + 3 * s
df.query('speed < @lower or speed > @upper')
  • df.query에서 @를 사용하면 데이터프레임 바깥의 변수를 참조

백분위수(Percentiles)

  • 데이터를 크기 순으로 정렬했을 때, 특정 퍼센트에 해당하는 값
  • 하위 10%에 해당하는 위치의 값을 10퍼센타일이라고 함
  • 다른 데이터들과 비교했을 때 상대적으로 상위 또는 하위에 속하는지 파악 가능
# 'speed' 열의 10퍼센타일(0.1)과 90퍼센타일(0.9) 확인
df['speed'].quantile([0.1, 0.9])

사분위수(Quartiles)와 IQR

  • 전체 데이터를 순서대로 4등분하는 지점의 값(25%, 50%, 75%)
  • 제1사분위수(Q1, 25%), 제2사분위수(Q2, 중간값), 제3사분위수(Q3, 75%)
  • 사분위수 범위(IQR, Interquartile Range)는 이며, 중간 50% 데이터의 퍼짐 정도를 나타냄
  • 양 극단의 이상치에 영향을 덜 받는 강건한(robust) 척도
# Q1(25%)과 Q3(75%) 계산 및 IQR 도출
q1 = df['speed'].quantile(0.25)
q3 = df['speed'].quantile(0.75)
iqr = q3 - q1

사분위수 범위를 활용한 이상치 식별

  • IQR에 1.5를 곱한 값을 사용하여 이상치 판단의 일반적인 기준으로 삼음(Tukey 방법)
  • 상한선: 보다 큰 값
  • 하한선: 보다 작은 값
  • 표준편차를 이용한 식별 방법보다 이상치에 강건한 방식
lower = q1 - 1.5 * iqr
upper = q3 + 1.5 * iqr
df.query('speed < @lower or speed > @upper')

상자 수염 그림

  • 사분위수 범위와 이상치를 한눈에 볼 수 있도록 도식화한 그래프
  • 상자(Box)는 Q1부터 Q3까지(IQR)를 그리며, 그 안의 선은 중간값 표시
  • 수염(Whisker)은 이상, 이하 범위 안의 실제 최솟값과 최댓값까지 표시
import seaborn as sns

# 'speed' 데이터의 상자 수염 그림 시각화
sns.boxplot(data=df, x='speed')

speed 데이터의 사분위수 범위와 이상치를 나타낸 상자 수염 그림

평균, 분산, 표준편차

  • 평균: 데이터 값을 모두 더한 후 총 개수로 나눈 값
  • 분산: 각 데이터 값이 평균으로부터 얼마나 떨어져 있는지(편차)를 제곱하여 평균 낸 값
  • 표준편차: 분산에 양의 제곱근을 취한 값
Previous
기술 통계: 중심경향치