이상치 처리하기
Coddy Machine Learning 여정의 머신러닝을 위한 통계 섹션에 포함된 레슨. 64개 중 27번째.
아파트 10곳은 각각 물을 약 10 m³ 사용했지만, 누수로 한 곳의 사용량이 64까지 늘어났습니다. 이 값을 제외하거나 가장 가까운 경계값으로 제한할 수 있습니다:
np.clip(a, low, high)는 배열 전체의 값을 지정된 범위로 제한합니다:
water = np.array([8, 11, 9, 10, 12, 9, 64, 10, 11, 8])
low, high = 6.0, 14.0 # IQR 경계값
dropped = water[(water >= low) & (water <= high)]
capped = np.clip(water, low, high)
print(len(dropped), len(capped))
print(capped)다음과 같이 출력됩니다:
9 10
[ 8. 11. 9. 10. 12. 9. 14. 10. 11. 8.]모델은 그 하나의 이상치에 과도하게 맞춰질 수 있으므로 학습 전에 결정하세요. 오타는 수정하거나 제거하고, 실제 극단값은 유지하거나 상한을 설정하세요. 절대 알리지 않고 삭제하지 마세요. 몇 개를 변경했는지 말하세요.
챌린지
중급사이클링 앱이 speeds에 15회 주행의 평균 속도를 기록했는데, 두 개가 이상해 보입니다. 시작 코드에서 IQR 경계를 low와 high에 저장했습니다.
- 경계 안에 있는 속도(경계값 포함)로
dropped와capped를 만드세요. - keep, drop, cap에 대해 각각 한 줄씩 출력하세요. 주행 횟수, 평균,
.std()를 소수점 이하 2자리까지 반올림해 표시하세요. - 상한·하한 적용으로 값이 바뀐 주행 횟수를 출력하세요.
다른 라이더의 10회 주행 결과는 다음과 같습니다.
Keep: 10 rides, mean 21.38, std 6.58
Drop: 9 rides, mean 19.2, std 0.77
Cap: 10 rides, mean 19.45, std 1.04
Capping changed 1 of 10 rides직접 해보기
import numpy as np
# 배열의 IQR 하한 경계와 상한 경계를 반환합니다
def iqr_fences(a):
q1 = np.percentile(a, 25)
q3 = np.percentile(a, 75)
iqr = q3 - q1
return q1 - 1.5 * iqr, q3 + 1.5 * iqr
speeds = np.array([24.5, 22.8, 26.1, 23.9, 3.1, 25.4, 21.7, 24.2, 27.3, 78.4, 23.1, 25.8, 22.4, 24.9, 26.6])
low, high = iqr_fences(speeds)
# 아래에 코드를 작성하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
머신러닝을 위한 통계의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러