Menu
CoddyTech

이상치 처리하기

Coddy Machine Learning 여정의 머신러닝을 위한 통계 섹션에 포함된 레슨. 64개 중 27번째.

아파트 10곳은 각각 물을 약 10 m³ 사용했지만, 누수로 한 곳의 사용량이 64까지 늘어났습니다. 이 값을 제외하거나 가장 가까운 경계값으로 제한할 수 있습니다:

세 줄로 표시된 아파트 10곳의 물 사용량. 유지: 10 근처의 점 9개와 64의 누수값, 평균 15.2. 제외: 누수값 제거, 평균 9.8. 제한: 누수값을 경계값인 14로 낮춤, 평균 10.2

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.]

모델은 그 하나의 이상치에 과도하게 맞춰질 수 있으므로 학습 전에 결정하세요. 오타는 수정하거나 제거하고, 실제 극단값은 유지하거나 상한을 설정하세요. 절대 알리지 않고 삭제하지 마세요. 몇 개를 변경했는지 말하세요.

challenge icon

챌린지

중급

사이클링 앱이 speeds에 15회 주행의 평균 속도를 기록했는데, 두 개가 이상해 보입니다. 시작 코드에서 IQR 경계를 low와 high에 저장했습니다.

  1. 경계 안에 있는 속도(경계값 포함)로 dropped와 capped를 만드세요.
  2. keep, drop, cap에 대해 각각 한 줄씩 출력하세요. 주행 횟수, 평균, .std()를 소수점 이하 2자리까지 반올림해 표시하세요.
  3. 상한·하한 적용으로 값이 바뀐 주행 횟수를 출력하세요.

다른 라이더의 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)

# 아래에 코드를 작성하세요
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

머신러닝을 위한 통계의 모든 레슨

직접 연습해 보세요: 온라인 Python 컴파일러