(가장 유명하고 자주쓰이는 추정 방법은 제곱편차를 이용한 분산과 표준편차이다)
(분산, 표준편차, 평균절대편차 모두 Outlier(특잇값, 극단값)에 로버스트하지 않다. 그 중에서도 분산과 표준편차는 제곱편차를 이용하는 계산이므로 더욱 특잇값에 민감하다.)
# statsmodels Download
!pip install statsmodels
# import
from statsmodels import robust
# make DataFrame
state = pd.DataFrame({'State':['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware'],
'Population':[4779736, 710231, 6392017, 2915918, 37253956, 5029196, 3574097, 897934],
'Murder': [5.7, 5.6, 4.7, 5.6, 4.4, 2.8, 2.4, 5.8],
'Abbreviation':['AL', 'AK', 'AZ', 'AR', 'CA', 'CO', 'CT', 'DE']})
# MAD구하기
robust.scale.mad(state['Population'])
>>>
2576836.044572552
# 실제로 해당데이터의 표준편차는 12105745.29585633 으로 MAD가 훨씬 robust한 결과를 얻는것을 알 수 있다.
# make DataFrame
state = pd.DataFrame({'State':['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware'],
'Population':[4779736, 710231, 6392017, 2915918, 37253956, 5029196, 3574097, 897934],
'Murder': [5.7, 5.6, 4.7, 5.6, 4.4, 2.8, 2.4, 5.8],
'Abbreviation':['AL', 'AK', 'AZ', 'AR', 'CA', 'CO', 'CT', 'DE']})
state['Population'].quantile(0.75) - state['Population'].quantile(0.25)
>>>
2958479.25
(정리 : 분산과 표준편차는 변이 측정에 있어서 주로 사용하는 방법이나 특잇값(outlier)에 민감하다는 단점때문에 중간값과 백분위수로부터 평균절대편차와, 중간값의 중위절대편차를 구하는 것이 좀 더 robust하다.)