일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- SQL코테
- update
- 서브쿼리
- GRU
- torch
- 짝수
- MySQL
- LSTM
- 자연어처리
- 논문리뷰
- HackerRank
- CASE
- SQL 날짜 데이터
- t분포
- NLP
- Window Function
- sql
- leetcode
- 그룹바이
- inner join
- 표준편차
- 자연어 논문
- 코딩테스트
- 카이제곱분포
- nlp논문
- Statistics
- sigmoid
- 자연어 논문 리뷰
- 설명의무
- airflow
- Today
- Total
HAZEL
[ Statistics with Code ] 위치 추정 ( 평균, 중앙값, 절사 평균 ) , 변이 추정 ( 중위 절대 편차, 표준편차 ) 본문
[ Statistics with Code ] 위치 추정 ( 평균, 중앙값, 절사 평균 ) , 변이 추정 ( 중위 절대 편차, 표준편차 )
Rmsid01 2021. 9. 23. 04:44[ Practical Statistics for Data Scientists : 데이터 과학을 위한 통계 ] 의 내용을 스터디하면서 정리한 내용입니다.
1. 위치 추정
: 데이터를 살표보는 가장 기초적인 단계는 각 피처(변수)의 ‘대푯값’을 구하는 것이다.
이는 곧 대부분의 값이 어디쯤 위치 하는지 (중심경향성)을 나타내는 추정값이다.
중심경향도란, 데이터들을 종합하여 그 중심을 이루는 값이 어느 정도가 될지를 구한 것 이다.
1. 평균 ( mean, average )
: 대푯값을 구하는 것으로 대표적으로 생각할 수 있는 방법이다. 평균은 모든 값의 총합을 값의 계수로 나눈 값으로 계산이 용의하고 사용하기도 편하다. 그러나 데이터를 대표로 하는 값으로 적당하지 않다. 평균을 의미하는 기호로 $ \bar{x} $ ( '엑스바' ) 라고 읽는다.
state['Population'].mean()
2. 절사 평균 ( trimmed mean )
: 값들을 크기 순으로 정렬하여, 정해진 개수의 극단값을 제외한 나머지 값들의 평균이다. 이러한 방식을 통해 평균에 비해 극단값의 영향을 덜 받는다.
# Signature: trim_mean(a, proportiontocut, axis=0)
# trim=0.1 은 각 끝에서 10%을 제외한다는 의미이다.
# 이 방법을 사용하면, 직접 데이터를 삭제한 후, 평균을 구하는 불편함을 줄일 수있다.
from scipy.stats import trim_mean
trim_mean(state['Population'], 0.1)
3. 가중 평균 ( weighted mean )
: 각 데이터 값에 사용자가 지정한 가중치를 곱한 값의 총합(wx)을 가중치의 총합(w)으로 나눈값이다. 이러한 평균을 사용하는 이유는 데이터를 수집할때, 서로 다른 대조군의 수가 다르기 때문에 이를 보정하는 방법으로 부족한 소수 그룹에 더 높은 가중치를 주는 것이다.
np.average(state['Murder.Rate'], weights=state['Population'])
4. 중간값 ( median )
: 데이터를 일렬로 정렬했을때, 한 가운데 위치하는 값이다. 이는 평균에 비해 극단값의 영향을 덜 받게 된다.
state['Population'].median()
5. 가중 중간값 (weighted median )
: 각 데이터는 각자의 가중치를 가지고 있고, 가중 중간값은 순서를 나열하여 가운데 있는 값이 아닌, 어떤 위치를 기준으로 상위 절반의 가중치의 합이 하위 가중치의 합과 동일한 위치의 값이 된다.
import wquantiles
wquantiles.median(state['Murder.Rate'], weights=state['Population'])
6. 최빈값( mode )
: 표본에서 가장 많이 나타나는 관측치
-> 여러번 확인된다는 특성으로 중심경향도에 있으나, 최소 부분과 최대 부분으로 쏠림 현상이 나타날 수도 있기 때문에, 특별히 필요성이 없는 한 잘 사용되지 않음
결과를 잘못 이해하게 하는 특잇값(극단값)들의 영향을 덜 받은 것을 '로버스트하다' 라고 한다. 이 말은, 모델이나 데이터가 견고하다 라도 생각하면 된다. 즉, 조금더 로버스트한 대표값을 얻기 위해서 평균보다 중간값 혹은 절사 평균 등이 도움이 된다.
2. 변이 추정
: 변이 ( variability ) 는 데이터의 값이 얼마나 밀집 혹은 퍼져있는지를 나타내는 산포도이다.
: 중심경향도만으로는 집단에 대한 성격과 분포를 파악하는데 부족하므로, 측정된 데이터가 어떻게 분포하고 있는지에 대해 파악해야 데이터를 제대로 이해할 수 있다.
: 변이 추정은 편차를 기본으로 하는데, 편차란, 관측 데이터와 위치 추정값 사이의 차이이며, 이는 데이터가 중앙값을 주변으로 얼마나 퍼져있는가를 나타낸다.
1. 평균 절대 편차
: 편차의 절댓값의 평균을 구하는 것이다. 그냥 단순히 편차 자체를 평균으로 나타내는 것은 옳지 않다. 그 이유는, 음의 편차는 양의 편차를 상쇄해버리기 때문이다. 따라서, 평균 절대 편차라는 방법을 사용하는 것이다.
$$ \frac{\sum_{i=1}^{n} \left | x_{i} - \bar{x} \right|}{n} $$
2. 분산과 표준 편차
: 분산은 제곱편차의 평균이고, 표준편차는 분산의 제곱근이다. 표준편차는 분산에서 제곱한 것을 다시 원래의 데이터의 척도(scale)로 돌아가게 해주기 때문에, 해석하기 쉽다.
$$ 분산 = \frac{\sum_{i=1}^{n} \left ( x_{i} - \bar{x} \right )^{2}}{n-1} $$
state['Population'].var() # 분산
state['Population'].std() # 표준 편차
- 분산이 큼 : 값들이 퍼져있음. 평균이 값들의 특성을 잘 나타낸다고 말하기 어려움
- 분산이 작음 : 값들이 모여져있음. 값들이 평균값에 모아져 있음.
3. 중위 절대 편차 ( MAD : Median Absolute Deviation )
: 분간, 표준편차, 평균절대편차 모두 로버스트하지 않고 특잇값에 민간하기 때문에 이것을 사용한다.
이것은 관측값에서 중앙값을 빼고, 그 차이에 절댓값을 취한 값들의 중앙값을 구하는 것이다.
from statsmodels import robust
robust.scale.mad(state['Population'])
통계학에서는 표준편차를 평균절대편차 보다 더 선호하는데, 그 이유는 수학적으로 제곱한 값이 절댓값보다 통계모델을 다룬데 더 편리하다는 통계 이론이 뒷받침하고 있어서 라고 한다.
또한, 표준편차는 항상 평균절대편차보다 크다. 그리고 평균 절대편차는 중위절대편차보다 크다.
- 자유도
: 모집단을 기준으로 하지 않고, 표본을 선정해서 표본의 개수 (n-1)로 계산한 분산을 표본분산이라 한다.
** 자유도는 왜 n-1 이냐? : ex, A, B, C 의 값의 평균이 10이라면, A/B는 10 이상/이하이어도 상관 X, 하지만, A/B값이 정해져버리면, C의 값은 무조건 하나의 값으로 정해져야 평균이 10이 됨. 따라서, 자유롭게 값이 변할수 있는 것은 n-1개가 됨.
4. 사분위 범위 ( IQR )
: 순서통계량 ( 순위데이터를 나타내는 통계량 ) 에서 가장 큰값과 작은 값의 차이를 나타내는 범위가 가장 기본이 된느 측도이나, 이는 특잇값에 민감하다. 이를 해결하기 위해서 백분위수 사이의 차이를 가지고 식을 추정하는 방법이있다. 그중, 사분위 범위는 25번째 백분위수와 75번재 백분위 수의 차이를 보는 것이다. 데이터가 크면, 데이터를 정렬하는데 많은 연산이 필요로 하게 된다.
- 보통 백분위수는 가중평균이다. R 에서는 분위수 계산하는 방식이 9개가 있지만, 파이썬 numpy.quantile 에는 선형보간법이라는 방법만 지원한다.
state['Population'].quantile(0.75) - state['Population'].quantile(0.25)