분포의 특성과 기술 통계
표준화 (standardization)
- 원래의 값에서 평균을 빼고, 표준편차로 나누는 것
- 표준화하면 평균 = 0, 표준편차 = 1이 되므로 서로 범위가 다른 값을 비교하기 쉬움
평균 = df['mileage'].mean()
표준편차 = df['mileage'].std()
df['Z_mileage'] = (df['mileage'] - 평균) / 표준편차
왜도(skewness)
꼬리가 한쪽 방향으로 늘어진 정도(0이면 좌우대칭)
from scipy.stats import skew
skew(df.price)
첨도(kurtosis)
- 꼬리의 두터움 또는 이상치의 존재
- 평균에서 ±1 표준편차 이내의 점들은 4제곱을 하면 거의 0이 됨 → 영향 X
- 평균에서 벗어난 점들이 많거나, 멀리 벗어날 수록 영향이 큼
- 초과(excess) 첨도: 위의 수식 -3
- 정규분포의 첨도 = 3이므로 비교를 위해 → 정규분포의 초과 첨도 = 0
- python에서도 대부분 이 방식을 사용
- 첨도 = 0
- 첨도가 높다(첨도 > 0) → 정규분포보다 꼬리가 두껍거나 이상치가 있음
- 첨도가 낮다(첨도 < 0) → 정규분포보다 꼬리가 얇음
from scipy.stats import kurtosis
kurtosis(df.price)
이상치 찾기
|Z-score|가 3보다 큰 사례
df.query('Z_mileage.abs() > 3')
또는(or)
df.query('Z_mileage < -3 or Z_mileage > 3')
아니다(not), 그리고(and)
df.query('not (-3 < Z_mileage and Z_mileage < 3)')
연쇄 비교(chaining comparison)
df.query('not (-3 < Z_mileage < 3)')
IQR의 1.5배를 넘는 사례
Q1 = df['mileage'].quantile(0.25)
Q3 = df['mileage'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
df.query('mileage < @lower_bound or @upper_bound < mileage')
퀴즈
사용자 정보 입력
퀴즈를 시작하기 전에 이름과 소속을 입력해주세요.