Pandas 박스플랏과 이상치

|

개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.


box plot으로 이상치 확인하기

데이터 분석을 할 때 데이터 전처리에 많은 시간을 할애하게 된다. 데이터 전처리 단계에서 해야하는 것은 여러가지가 있겠지만 그중 하나가 데이터 이상치 처리이다. 데이터에 이상치가 많이 포함되어 있을 경우, 모델의 성능을 저하시킬 수 있기 때문에 이를 처리해주는 것이 필요하다. 이때 이상치라고 해서 무조건 제거해야하는 것은 아니고 해당 도메인에 맞게 판단하는 것이 중요하다. 하여튼, 이러한 이상치를 잘 볼수 있는 방법중에 하나가 boxplot을 그려보는 방법이다.

이상치: 관측된 데이터의 일반적인 범위에서 많이 벗어난 값, 너무 작거나 너무 큰 값

위 그림과 같이 상자 수염 도표를 이용해 데이터의 분포와 패턴을 파악하거나 해당 데이터셋에 이상치가 있는지 시작적으로 나타낸 것을 박스플롯(box plot)이라고 한다.

박스플롯의 사분위 범위(IQR)을 이용해 이상치 포함여부를 확인할 수 있는데, 이때의 사분위 범위란 Q3-Q1값을 의미한다. (위 이미지에서 분홍색 박스를 의미함) 그리고 이상치 판단 기준은 Q1 - 1.5*IQR 미만에 해당하는 값 또는 Q3 + 1.5*IQR초과에 해당되는 값이면 이상치로 볼 수 있다. (위 이미지에서 초록색 점을 의미함)

그러나 해당부분에 위치해 있어도 이상치가 아닐 가능성도 있기 때문에 도메인 지식을 통해 해당 데이터의 특성을 파악해야 조금 더 정확하게 처리할 수 있다.

q3 = df['views'].quatile(.75)  # 3분위 수 > 75%
q1 = df['views'].quatile(.25)  # 1분위 수 > 25%

iqr = q3 - q1

min_outlier = q1 - (iqr*1.5)
max_outlier = q3 + (iqr*1.5)

df_outlier = df[(df['views'] < min_outlier) | df['views'] > max_outlier)]