변산성(Variability)
- 중심 경향치만으로는 데이터의 전체적인 모양을 파악하기 어려움
- 데이터가 평균이나 중간값 주변에 얼마나 모여 있는지, 혹은 넓게 퍼져 있는지를 나타내는 척도
- 분산도(Dispersion) 또는 산포도라고도 함
- 왜 변산성을 측정해야 하는가?
- 평균이 같더라도 데이터의 퍼짐 정도에 따라 데이터의 특성이 완전히 다를 수 있음
- 퍼짐 정도가 작으면 중심값 주변에 데이터가 밀집되어 있어 중심값이 전체를 잘 대표함
- 퍼짐 정도가 크면 불확실성이 크고 극단적인 값이 존재할 가능성이 높음
범위(Range)
- 데이터 세트에서 최댓값과 최솟값의 차이
- 계산이 직관적이고 매우 간단함
- 예: 최대 속도가 30노트, 최소 속도가 10노트일 때 범위는 20노트
- 극단적인 이상치(outlier) 하나만 있어도 값이 크게 변하므로 안정적이지 않음
df['speed'].max() - df['speed'].min()
분산(Variance)
- 각 데이터 값이 평균으로부터 얼마나 떨어져 있는지(편차)를 제곱하여 평균 낸 값
Var(x)=n1i=1∑n(xi−E[x])2
- 편차를 단순히 더하면 0이 되므로, 부호를 무시하기 위해 제곱을 사용
- 값이 클수록 데이터가 넓게 흩어져 있다는 의미
- 제곱을 했기 때문에 단위도 제곱이 되어 직관적인 해석이 어려움
표준편차(Standard Deviation)
Std(x)=Var(x)
- 원래 데이터와 동일한 단위를 가지므로 해석이 매우 직관적
- 대부분의 통계 분석에서 데이터의 흩어짐을 나타내는 대표적인 척도로 사용
표준편차를 활용한 이상치 식별
- 정규 분포를 따르는 경우, 평균을 중심으로 ±3× 표준편차를 벗어나는 데이터를 이상치로 간주하는 경우가 많음(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퍼센타일이라고 함
- 다른 데이터들과 비교했을 때 상대적으로 상위 또는 하위에 속하는지 파악 가능
df['speed'].quantile([0.1, 0.9])
사분위수(Quartiles)와 IQR
- 전체 데이터를 순서대로 4등분하는 지점의 값(25%, 50%, 75%)
- 제1사분위수(Q1, 25%), 제2사분위수(Q2, 중간값), 제3사분위수(Q3, 75%)
- 사분위수 범위(IQR, Interquartile Range)는 Q3−Q1이며, 중간 50% 데이터의 퍼짐 정도를 나타냄
- 양 극단의 이상치에 영향을 덜 받는 강건한(robust) 척도
q1 = df['speed'].quantile(0.25)
q3 = df['speed'].quantile(0.75)
iqr = q3 - q1
사분위수 범위를 활용한 이상치 식별
- IQR에 1.5를 곱한 값을 사용하여 이상치 판단의 일반적인 기준으로 삼음(Tukey 방법)
- 상한선: Q3+1.5×IQR보다 큰 값
- 하한선: Q1−1.5×IQR보다 작은 값
- 표준편차를 이용한 식별 방법보다 이상치에 강건한 방식
lower = q1 - 1.5 * iqr
upper = q3 + 1.5 * iqr
df.query('speed < @lower or speed > @upper')
상자 수염 그림
- 사분위수 범위와 이상치를 한눈에 볼 수 있도록 도식화한 그래프
- 상자(Box)는 Q1부터 Q3까지(IQR)를 그리며, 그 안의 선은 중간값 표시
- 수염(Whisker)은 Q1−1.5×IQR 이상, Q3+1.5×IQR 이하 범위 안의 실제 최솟값과 최댓값까지 표시
import seaborn as sns
sns.boxplot(data=df, x='speed')

평균, 분산, 표준편차
- 평균: 데이터 값을 모두 더한 후 총 개수로 나눈 값
n1i=1∑nxi
- 분산: 각 데이터 값이 평균으로부터 얼마나 떨어져 있는지(편차)를 제곱하여 평균 낸 값
Var(x)=n1i=1∑n(xi−E[x])2
Std(x)=Var(x)