기술이야기 (Technomian)/데이터 분석 (Data Analysis)

[데이터 전처리] Preprocessing. 아웃라이어(outlier) 처리하기

economian 2021. 10. 24. 20:48

 

 


 

1. 아웃라이어(Outlier)란

 

아웃라이어란 데이터의 분포가 다른 값들에 비해 비정상적으로 떨어져 있는 관측값을 말하며, '이상치'라고도 부릅니다. 다만, 그 기준이 모호합니다. 어느 정도까지가 정상이고, 비정상인지 획일적인 잣대로 들이밀기 어렵기 때문입니다. 또한, 아웃라이어는 실제로 가치나 의미가 있는 정보를 담고 있는 값일수도 있고, 단순한 실수나 의미없는 값일 수도 있습니다.

계량분석이나 연구에서 아웃라이어는 통계 분석에 영향을 미치고, 그 결과를 왜곡할 수 있기 때문에 데이터 전처리 과정 중에 중요한 문제기도 합니다.

데이터 분석에서 아웃라이어를 제거하는데, 가장 좋은 것은 해당 산업이나 도메인에 관한 지식이 있을 경우 좋습니다. 배경 지식을 활용하여 기준을 정하고 아웃라이어를 제거하는게 가장 좋지만, 그렇지 않을 경우에는 표준화 점수나 마할라노비스 거리 등 다양한 해법을 통해 처리합니다.

이번 글에서는 간단하게 drop(제거)하는 방법만 보이겠습니다. 아마 정교한 기술적인 부분은 추후에 다룰 기회가 있을 것입니다.

 


 

반응형
728x90

 

2. 아웃라이어 처리하기 - Drop

 

# 현재 상태 파악

df = pd.read_csv(path)
plt.scatter(x=df['GrLivArea'], y=df['SalePrice'])
plt.xlabel('GrLivArea', fontsize = 12)
plt.ylabel('SalePrice', fontsize = 12)

GrLivArea 값이 4,000 이상되는 특이한 점 2개가 눈에 들어올 것입니다. 위 데이터는 부동산 시장 데이터셋임을 감안하면, 분명 아웃라이어(outlier)에 해당하는 값임을 알 수 있습니다. 아주 간단하게 DROP 방법으로 제거하겠습니다.

 

# 임의로 지정해서 outlier를 정의하고 그 값을 드랍(버림)

outlier = df[(df['GrLivArea'] > 4000) & (df['SalePrice'] < 500000)].index
df = df.drop(outlier, axis = 0)

plt.scatter(x=df['GrLivArea'], y=df['SalePrice'])
plt.xlabel('GrLivArea', fontsize = 12)
plt.ylabel('SalePrice', fontsize = 12)

아까 보였던 '두 점'이 사라졌습니다. 간단한 drop입니다.

 

 


사실 보다 정교한 방법들은 있는데, 그건 추후에 통계적 기법을 공부한 다음에 소개하도록 하겠습니다. 이상치 제거는 이전 글 '결측치' 제거 과정과 함께 전처리 과정에서 중요하게 다뤄집니다. 두 가지만 잘해도 반은 한다는 말이 있을 정도입니다...

 

다음 글에서는 카테고리 변수 다루는 것을 공부해보겠습니다.

 

이전 글.

https://econimian.tistory.com/52

 

[데이터 전처리] Preprocessing. 결측치 (missing value) 처리하기

결측치, 이상치 등 제거하고, 데이터값들을 일관성 있게 정제해주는 일련의 과정인 '데이터 전처리(Data Preprocessing)'를 실습하면서 공부해 보겠습니다. 데이터를 수집하고 난 후 본격적인 분석에

econimian.tistory.com

 

 

 

 

끝.

728x90
반응형