본문 바로가기

데이터분석

[Python] min-max 벗어난 값을 min, max값으로 대체하기

일반적으로 데이터 정규화를 위해 min-max scaling을 많이 사용한다. 

하지만 min-max scaling의 단점은 기준이 scaling이 데이터의 min 값과 max값을 기준으로 이루어지기 때문에 아래와 같은 단점을 갖는다. 

① 이상치에 영향을 많이 받는다. 
② 운영 시 min, max값이 넘는 값이 유입되면 에러가 발생한다. 

이상치는 min-max scaling 하기 전 제거하고 scaling을 하면 어느 정도 해결할 수 있으나 
운영 상에서 기존 데이터 범위 외 데이터가 새롭게 들어올 경우는 코드를 추가해 미리 대비를 해야 한다. 

min-max값 범위 외 데이터가 유입되는 경우에 min-max scaling 결과의 예상 범위인 0~1을 넘는 데이터가 생겨나는데 이 때, np.maximum과 np.minimum을 이용해 0과 1을 넘는 데이터를 0과 1이 각각 최소 최대가 되도록 수정하고자 한다. 

np.maximum(array1, array2)

  • 두 array 사이에서 각 위치의 최대값을 반환 
  • 두 배열 크기가 다르면 브로드캐스팅 규칙에 따라 배열의 모양을 맞춘 후 요소 별로 최대값 계산
  • 예시) 0과 주어진 배열 중 큰 값을 가져오기 (min을 0으로 맞추기)   
    • 0이 브로드캐스팅되어 [0, 0, 0, 0] 배열이 됨
    • [0, 0, 0, 0]  과 [1, 0, -0.5, 2.5] 각 위치를 비교하여 작은 값이 반환됨
    • [1, 0, 0, 2.5] 이 반환
>>> arr = [1, 0, -0.5, 2.5]
>>> np.maximum(0, arr)
array([1. , 0. , 0. , 2.5])

 

np.minimum(array1, array2)

  • 두 array 사이에서 각 위치의 최소값을 반환 
  • 두 배열 크기가 다르면 브로드캐스팅 규칙에 따라 배열의 모양을 맞춘 후 요소 별로 최대값 계산 
  • 예시) 1과 배열 중 작은 값을 가져오기 (max를 1로 맞추기) 
    • 1이 브로드캐스팅되어 [1,1,1,1] 배열이 됨
    • [1, 1, 1, 1] 과 [1, 0, -0.5, 2.5] 각 위치를 비교하여 작은 값이 반환됨
    • [1, 0, -0.5, 1] 이 반환
>>> arr = [1, 0, -0.5, 2.5]
>>> np.minimum(1, arr)
array([ 1. ,  0. , -0.5,  1. ])