통계 분석에서 데이터 변동성 연구는 주어진 데이터 샘플 안의 값들이 얼마나 퍼져 있는지를 파악하는 중요한 과정입니다. 변동성을 측정하는 대표적인 두 가지 방법은 절대 편차(Absolute Deviation)와 평균 절대 편차(Mean Absolute Deviation)입니다.
절대 편차(Absolute Deviation)
이 방법에서는 먼저 주어진 샘플의 평균값을 구하고, 그다음 각 데이터 값과 샘플 평균값 사이의 차이를 계산합니다. 이렇게 구한 차이값을 각 데이터 샘플의 절대 편차라고 부릅니다. 평균보다 큰 값의 편차는 양수가 되고, 평균보다 작은 값의 편차는 음수가 됩니다.
이후 NumPy의 absolute 함수로 각 편차의 절댓값을 취해 모두 양수로 만듭니다. 절대 편차들을 모두 더하면 항상 양수 결과가 나오지만, 절댓값을 취하지 않으면 편차들의 합은 0이 되어 버립니다. 이는 평균보다 큰 값들의 편차와 작은 값들의 편차가 서로 상쇄되기 때문입니다.
아래 예제에서는 하나의 데이터 샘플을 만들고 각 데이터 요소의 절대 편차를 계산합니다.
예제
from numpy import mean, absolute
data = [12, 42, 53, 13, 112]
# 샘플의 평균값 구하기
M = mean(data)
print("샘플 평균값 =", M)
print()
# 절대 편차 계산
print("데이터-평균", " ", "편차")
for i in range(len(data)):
dev = absolute(data[i] - M)
print(data[i], "-", M, round(dev, 2))실행 결과
위 코드를 실행하면 다음과 같은 결과를 얻습니다.
샘플 평균값 = 46.4 데이터-평균 편차 12 - 46.4 34.4 42 - 46.4 4.4 53 - 46.4 6.6 13 - 46.4 33.4 112 - 46.4 65.6
평균 절대 편차(MAD)
평균 절대 편차(Mean Absolute Deviation, MAD)는 각 데이터 포인트마다 계산한 모든 절대 편차의 평균값입니다. 앞선 예제에서 사용한 것과 동일한 샘플을 기준으로, 절대 편차들의 합을 구한 뒤 샘플 크기로 나누는 코드를 추가합니다.
예제
from numpy import mean, absolute
data = [12, 42, 53, 13, 112]
# 샘플의 평균값 구하기
M = mean(data)
print("샘플 평균값 =", M)
total = 0
# 평균 절대 편차 계산
for i in range(len(data)):
dev = absolute(data[i] - M)
total = total + round(dev, 2)
print("평균 절대 편차:", total / len(data))실행 결과
위 코드를 실행하면 다음과 같은 결과를 얻습니다.
샘플 평균값 = 46.4 평균 절대 편차: 28.88
벡터화 연산으로 더 간단하게 계산하기
NumPy 배열과 유니버설 함수를 활용하면 반복문 없이 한 줄로도 평균 절대 편차를 계산할 수 있습니다.
import numpy as np data = np.array([12, 42, 53, 13, 112]) mad = np.mean(np.abs(data - data.mean())) print(round(mad, 2)) # 28.88
이처럼 절대 편차는 개별 데이터가 평균에서 얼마나 떨어져 있는지 보여주고, 평균 절대 편차는 그 정도를 하나의 수치로 요약해 줍니다. 두 지표는 표준편차보다 이상치(outlier)의 영향을 덜 받는다는 장점이 있어, 데이터 분포의 산포도를 직관적으로 파악할 때 유용하게 사용됩니다.