본문 바로가기
카테고리 없음

Anomaly Detection_ Box Plot

by Foxy현 2023. 4. 11.
728x90
반응형

 

Box Plot은 데이터의 분포를 시각화하는 도구 중 하나로, 데이터의 중심값과 산포도를 한 눈에 파악할 수 있어 데이터 분석에서 매우 유용하게 사용됩니다. 이번 글에서는 Box Plot을 이용한 이상치 탐지 방법에 대해 알아보겠습니다.

Box Plot은 데이터의 중앙값, 1사분위수(Q1), 3사분위수(Q3)를 이용하여 상자를 그리고, 상자 외부의 데이터를 이상치로 판단합니다. 이때, 이상치의 기준은 Q1 - 1.5IQR 이하의 값 또는 Q3 + 1.5IQR 이상의 값으로 설정합니다. IQR(Interquartile range)은 Q3 - Q1로 계산됩니다.

Box Plot을 이용한 이상치 탐지의 장점은 다음과 같습니다. 첫째, Box Plot은 데이터의 분포를 시각적으로 파악할 수 있기 때문에 데이터의 특성을 빠르게 파악할 수 있습니다. 둘째, Box Plot은 데이터의 분포가 정규분포를 따르지 않아도 적용할 수 있습니다. 셋째, Box Plot은 이상치를 탐지하는 데 효과적입니다.

하지만, Box Plot을 이용한 이상치 탐지 방법에는 다음과 같은 단점이 있습니다. 첫째, Box Plot은 이상치의 개수와 위치를 파악하기 어렵습니다. 둘째, Box Plot은 이상치를 감지하는 기준이 명확하지 않습니다. 이때문에, 데이터 분석의 목적과 상황에 따라 다른 이상치 탐지 방법을 함께 사용하는 것이 좋습니다.

Box Plot을 이용한 이상치 탐지는 다음과 같은 방법으로 수행할 수 있습니다.

Box Plot을 이용한 이상치 탐지는 데이터 분석에서 매우 중요한 역할을 합니다. 이상치가 발생하는 원인을 파악하고, 이상치를 처리하여 데이터 분석 결과의 신뢰성을 높이는 것이 필요합니다. 또한, 데이터의 분포를 시각적으로 파악하여 데이터의 특성을 파악하는 데 활용할 수 있습니다. 이러한 이유로, Box Plot을 이용한 이상치 탐지는 데이터 분석에서 꼭 필요한 기술 중 하나입니다.

 

아래는 위 이론에 대한 예시 코드입니다.

 

# Pandas 라이브러리를 가져와서, DataFrame의 몇몇 display 옵션을 설정합니다.
import pandas as pd
pd.set_option('display.max_columns',100)
pd.set_option('display.max_row',100)

# 5명의 축구 선수의 체중과 키 정보를 포함하는 DataFrame을 생성합니다.
df = pd.DataFrame({
    "name":['Kane','Son','Skeep','romero','dier'],
    "weight":['90','80','85','83','95'],
    "height":['188','184','178','182','192']
                  })

# 'weight'와 'height' 열의 값을 문자열에서 정수형으로 변환합니다.
df['weight'] = df['weight'].astype(int)
df['height'] = df['height'].astype(int)

# 평균과 표준편차를 사용하여, 체중과 키의 상한 제어 한계(UCL)와 하한 제어 한계(LCL)를 계산합니다.
df['UCL_W'] = df['weight'].mean() + 2*df['weight'].std()
df['LCL_W'] = df['weight'].mean() - 2*df['weight'].std()
df['UCL_H'] = df['height'].mean() + 2*df['height'].std()
df['LCL_H'] = df['height'].mean() - 2*df['height'].std()

# Matplotlib 및 Seaborn 라이브러리를 가져오고, plot 스타일을 'dark_background'로 설정합니다.
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
plt.style.use(['dark_background'])

# Seaborn의 scatterplot() 함수를 사용하여 각 선수의 체중과 키를 시각화합니다.
sns.scatterplot(x=df['name'], y=df['weight'])
sns.scatterplot(x=df['name'], y=df['height'])

# 각 plot에 체중과 키에 대한 UCL 및 LCL을 나타내는 빨간색 수평선을 추가합니다.
plt.axhline(y=df['UCL_W'][0], color='r', linewidth=1)
plt.axhline(y=df['LCL_W'][0], color='r', linewidth=1)
plt.axhline(y=df['UCL_H'][0], color='r', linewidth=1)
plt.axhline(y=df['LCL_H'][0], color='r', linewidth=1)

# 각 plot의 크기를 설정합니다.
plt.gcf().set_size_inches(15,5)

 

 

 

 

728x90
반응형