STORY
MinJ is_

2022년/[멋쟁이 사자처럼] AI 회고

[8주차] 추가공부

KMinJis 2022. 11. 10. 17:47

# 오늘 코드 - 조은 강사님과 함께하는 수업💖

# 7주차 동안 진행한 3일의 수업 중 더 공부해보고싶거나 복습해보고 싶었던 내용 정리입니다.

 

이상치 탐지 (Anomaly Detection)


◆ 이상치

  • 정의
    - 변수의 분포상 비정상적으로 극단적인 값을 가져 일반적으로 생각할 수 있는 범위를 벗어난 관측치
  • 원인
    - 잘못된 데이터 입력
    - 샘플링 오류 또는 잘못된 위치에서 추출
    - 다른 데이터와 혼합
    - 데이터의 자연적인 편차

 

◆ 단변량 자료에서 이상치 탐색

  • 표준화 점수(Z-score)를 활용한 이상치 탐색
    • 표준화 점수는 평균이 μ 이고, 표준편차가  σ 인 정규분포를 따르는 관측치들이
      자료의 중심(평균)에서 얼마나 떨어져 있는지를 나타냄
    • 일반적으로 표준화 점수의 절대값이 3보다 큰 경우에 이상치로 정의
    • 표준화 점수는 평균과 표준편차에 의존하므로, 산출 과정에 이상치의 영향을 받는 문제점이 있음
  • 수정된 표준화 점수(Modified Z-score)를 활용한 이상치 탐색
    • 표준화 점수의 문제점을 보완하기 위해 중앙값과 중앙값 절대편차를 이용하여 산출함
    • 절대값이 3.5보다 큰 경우에 이상치로 판단하는 것을 제안됨
  • 통계적 가설검정을 활용한 이상치 탐색
    • 최소값 혹은 최대값의 이상치 여부에 대한 검정
    • 이상치로 판단된 관측치를 제외해 나가면서
      이상치가 존재하지 않을 때까지 반복적으로 검정을 수행하여 이상치를 정의함
      1. 딕슨의 Q 검정(Dixon Q-test)
        - 오름차순으로 정렬된 데이터에서 범위에 대한 관측치 간의 차이에 대한 비율을 활용하여
          이상치 여부를 검정하는 방법
        - 데이터 수가 30개 미만인 경우에 적절한 방법
      2. 그럽스 T 검정(Grubbs T-Test)
        - t-분포에 근거한 임계치를 산출하여 검정통계량이 임계치보다 큰 경우 이상치로 결정
        - 정규분포를 만족하는 단변량 자료에서 이상치를 검정하는 방법
      3. 이 외의 검정 방법
        - Generalized ESD(Extreme Studentized Deviate) Test
        - 카이제곱 검정(Chi-Square Test)
  • 사분위수범위를 활용한 이상치 탐색
    • 상자그림은 최소값, 최대값, 제 1사분위수, 제 2사분위수, 제 3사분위수를 활용하여
      데이터를 시각적으로 요약한 그래프
    • 상자그림에서 표현되는 최소값과 최대값은 이상치를 제외한 데이터의 최대값과 최소값을 의미
      이상치는 사분위수범위를 활용하여 정의
      ( 사분위수범위 : 제 1사분위수와 제 3사분위수의 차이)
    • 사분위수 범위의 1.5배를 초과하는 관측치는 약한 이상치
      3배를 초과하는 관측치는 강한 이상치로 정의
  • 이 외의 방법
    • 수정된 사분위수범위를 활용한 이상치 탐색
    • 준사분위수범위을 활용한 이상치 탐색

 

◆ 다변량 자료에서 이상치 탐색

  • 회귀진단(Regression diagnostics)에서의 이상치 탐색
    • 회귀진단은 추정된 회귀식에 대한 전반적인 검토를 의미
      회귀식 추정에 영향을 미치는 극단치를 탐색하는 것을 포함함
    • 회귀진단을 통한 이상치 탐색 방법
      : 레버리지, 표준화 잔차, 스튜던트 잔차, 스튜던트 제외 잔차, 쿡의 거리, DFFTS, DFBETAS 등
      1. 레버리지(Leverage)
        - 독립변수의 각 관측치가 독립변수들의 평균에서 떨어진 정도를 나타내는 통계량
        - 0과 1사이의 값
        - 일반적으로 레버리지 평균의 2~4배를 초과하는 관측치를 이상치로 정의
      2. 표준화 잔차(Standardized residual)
        - 표준화 잔차는 잔차를 표준화한 통계량
           (잔차 : 추정된 회귀모형에 의해 산출된 예측치와 실제로 측정된 관측치의 차이)
        - 일반적으로 표준화 잔차의 절대값이 2나 3을 초과하는 관측치를 이상치로 정의
      3. 쿡의 거리(Cook’s distance)
        - 추정된 회귀모형에 대한 각 관측치들의 전반적인 영향력 정도를 측정 하기 위해
           잔차와 레버리지를 동시에 고려한 척도
        - 쿡의 거리가 1보다 큰 경우, 강한 이상치로 판단
  • 마할라노비스 거리(Mahalanobis Distance)를 활용한 이상치 탐색
    • 마할라노비스 거리 : 데이터의 분포를 고려한 거리 측도 / 관측치가 평균으로부터 벗어난 정도를 측정하는 통계량
    • 모든 변수 간에 선형관계가 만족하고, 각 변수들이 정규 분포를 따르는 경우에 적용할 수 있는 전통적인 접근법
    • k개의 변수에 대해, 자유도가 k인 카이제곱 분포의 임계값을 초과하는 경우에 이상치로 정의
  • LOF(Local Outlier Factor)
    • 관측치 주변의 밀도와 근접한 관측치 주변의 밀도의 상대적인 비교를 통해 이상치를 탐색하는 기법
    • 각 관측치에서 k번째 근접이웃까지의 거리를 산출하여
      해당 거리 안에 포함되는 관측치의 개수를 나눈 역수 값의 개념으로 산출
    • 1에 가까울수록 주변 관측치와 유사한 밀도임을 의미
      1보다 커질 수록 밀도가 낮음을 의미하므로 이상치로 의심
    • Sklearn의 LocalOutlierFactor 함수 기능

  • iForest(Isolation Forest)
    • 관측치 사이의 거리 또는 밀도에 의존하지 않고,
      의사결정나무(Decision tree)를 이용하여 이상치를 탐지하는 방법
    • 분류모형을 생성하여 모든 관측치를 고립시켜나가면서 분할 횟수로 이상치를 탐색
    • 적은 횟수로 Leaf 노드에 도달하는 관측치일수록 이상치일 가능성이 큼
    • Sklearn의 IsolationForest 함수 기능
      - Sklearn 공식 문서의 예제 코드
import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest

rng = np.random.RandomState(42)

# Generate train data
X = 0.3 * rng.randn(100, 2)
X_train = np.r_[X + 2, X - 2]
# Generate some regular novel observations
X = 0.3 * rng.randn(20, 2)
X_test = np.r_[X + 2, X - 2]
# Generate some abnormal novel observations
X_outliers = rng.uniform(low=-4, high=4, size=(20, 2))

# fit the model
clf = IsolationForest(max_samples=100, random_state=rng)
clf.fit(X_train)
y_pred_train = clf.predict(X_train)
y_pred_test = clf.predict(X_test)
y_pred_outliers = clf.predict(X_outliers)

# plot the line, the samples, and the nearest vectors to the plane
xx, yy = np.meshgrid(np.linspace(-5, 5, 50), np.linspace(-5, 5, 50))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.title("IsolationForest")
plt.contourf(xx, yy, Z, cmap=plt.cm.Blues_r)

b1 = plt.scatter(X_train[:, 0], X_train[:, 1], c="white", s=20, edgecolor="k")
b2 = plt.scatter(X_test[:, 0], X_test[:, 1], c="green", s=20, edgecolor="k")
c = plt.scatter(X_outliers[:, 0], X_outliers[:, 1], c="red", s=20, edgecolor="k")
plt.axis("tight")
plt.xlim((-5, 5))
plt.ylim((-5, 5))
plt.legend(
    [b1, b2, c],
    ["training observations", "new regular observations", "new abnormal observations"],
    loc="upper left",
)
plt.show()

 

* 참고 및 출처 *

<1>

https://repository.hira.or.kr/bitstream/2019.oak/1659/2/%EC%9D%B4%EC%83%81%EC%B9%98%20%ED%83%90%EC%83%89%EC%9D%84%20%EC%9C%84%ED%95%9C%20%ED%86%B5%EA%B3%84%EC%A0%81%20%EB%B0%A9%EB%B2%95%EA%B3%BC%20%ED%99%9C%EC%9A%A9%20%EB%B0%A9%EC%95%88.pdf

<2>

https://scikit-learn.org/stable/auto_examples/ensemble/plot_isolation_forest.html

 

IsolationForest example

An example using IsolationForest for anomaly detection. The IsolationForest ‘isolates’ observations by randomly selecting a feature and then randomly selecting a split value between the maximum and...

scikit-learn.org

<3>

https://godongyoung.github.io/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D/2019/03/11/Local-Outlier-Factor(LOF).html 

 

[데이터분석 정리]Local Outlier Factor(LOF) 개인적 정리(with python) · Go's BLOG

원논문 : https://dl.acm.org/citation.cfm?id=335388 LOF는 대표적인 outlier detection의 기법중 하나이다. LOF의 문제의식은, 문제의식은 기존의 방법들이 local정보에 대한 고려가 없다는것이다. 데이터들간의 특

godongyoung.github.io

 

'2022년 > [멋쟁이 사자처럼] AI 회고' 카테고리의 다른 글

[10주차] 추가공부  (1) 2022.11.24
[9주차] 추가공부  (0) 2022.11.17
[7주차] 추가공부  (0) 2022.11.03
[2주차] 추가 공부  (1) 2022.09.29
[1주차] 추가 공부  (0) 2022.09.22