# 오늘 코드 - 조은 강사님과 함께하는 수업💖
# 7주차 동안 진행한 3일의 수업 중 더 공부해보고싶거나 복습해보고 싶었던 내용 정리입니다.
이상치 탐지 (Anomaly Detection)
◆ 이상치
- 정의
- 변수의 분포상 비정상적으로 극단적인 값을 가져 일반적으로 생각할 수 있는 범위를 벗어난 관측치 - 원인
- 잘못된 데이터 입력
- 샘플링 오류 또는 잘못된 위치에서 추출
- 다른 데이터와 혼합
- 데이터의 자연적인 편차
◆ 단변량 자료에서 이상치 탐색
- 표준화 점수(Z-score)를 활용한 이상치 탐색
- 표준화 점수는 평균이 μ 이고, 표준편차가 σ 인 정규분포를 따르는 관측치들이
자료의 중심(평균)에서 얼마나 떨어져 있는지를 나타냄 - 일반적으로 표준화 점수의 절대값이 3보다 큰 경우에 이상치로 정의
- 표준화 점수는 평균과 표준편차에 의존하므로, 산출 과정에 이상치의 영향을 받는 문제점이 있음
- 표준화 점수는 평균이 μ 이고, 표준편차가 σ 인 정규분포를 따르는 관측치들이
- 수정된 표준화 점수(Modified Z-score)를 활용한 이상치 탐색
- 표준화 점수의 문제점을 보완하기 위해 중앙값과 중앙값 절대편차를 이용하여 산출함
- 절대값이 3.5보다 큰 경우에 이상치로 판단하는 것을 제안됨
- 통계적 가설검정을 활용한 이상치 탐색
- 최소값 혹은 최대값의 이상치 여부에 대한 검정
- 이상치로 판단된 관측치를 제외해 나가면서
이상치가 존재하지 않을 때까지 반복적으로 검정을 수행하여 이상치를 정의함- 딕슨의 Q 검정(Dixon Q-test)
- 오름차순으로 정렬된 데이터에서 범위에 대한 관측치 간의 차이에 대한 비율을 활용하여
이상치 여부를 검정하는 방법
- 데이터 수가 30개 미만인 경우에 적절한 방법 - 그럽스 T 검정(Grubbs T-Test)
- t-분포에 근거한 임계치를 산출하여 검정통계량이 임계치보다 큰 경우 이상치로 결정
- 정규분포를 만족하는 단변량 자료에서 이상치를 검정하는 방법 - 이 외의 검정 방법
- Generalized ESD(Extreme Studentized Deviate) Test
- 카이제곱 검정(Chi-Square Test)
- 딕슨의 Q 검정(Dixon Q-test)
- 사분위수범위를 활용한 이상치 탐색
- 상자그림은 최소값, 최대값, 제 1사분위수, 제 2사분위수, 제 3사분위수를 활용하여
데이터를 시각적으로 요약한 그래프 - 상자그림에서 표현되는 최소값과 최대값은 이상치를 제외한 데이터의 최대값과 최소값을 의미
이상치는 사분위수범위를 활용하여 정의
( 사분위수범위 : 제 1사분위수와 제 3사분위수의 차이) - 사분위수 범위의 1.5배를 초과하는 관측치는 약한 이상치
3배를 초과하는 관측치는 강한 이상치로 정의
- 상자그림은 최소값, 최대값, 제 1사분위수, 제 2사분위수, 제 3사분위수를 활용하여
- 이 외의 방법
- 수정된 사분위수범위를 활용한 이상치 탐색
- 준사분위수범위을 활용한 이상치 탐색
◆ 다변량 자료에서 이상치 탐색
- 회귀진단(Regression diagnostics)에서의 이상치 탐색
- 회귀진단은 추정된 회귀식에 대한 전반적인 검토를 의미
회귀식 추정에 영향을 미치는 극단치를 탐색하는 것을 포함함 - 회귀진단을 통한 이상치 탐색 방법
: 레버리지, 표준화 잔차, 스튜던트 잔차, 스튜던트 제외 잔차, 쿡의 거리, DFFTS, DFBETAS 등
- 레버리지(Leverage)
- 독립변수의 각 관측치가 독립변수들의 평균에서 떨어진 정도를 나타내는 통계량
- 0과 1사이의 값
- 일반적으로 레버리지 평균의 2~4배를 초과하는 관측치를 이상치로 정의 - 표준화 잔차(Standardized residual)
- 표준화 잔차는 잔차를 표준화한 통계량
(잔차 : 추정된 회귀모형에 의해 산출된 예측치와 실제로 측정된 관측치의 차이)
- 일반적으로 표준화 잔차의 절대값이 2나 3을 초과하는 관측치를 이상치로 정의 - 쿡의 거리(Cook’s distance)
- 추정된 회귀모형에 대한 각 관측치들의 전반적인 영향력 정도를 측정 하기 위해
잔차와 레버리지를 동시에 고려한 척도
- 쿡의 거리가 1보다 큰 경우, 강한 이상치로 판단
- 레버리지(Leverage)
- 회귀진단은 추정된 회귀식에 대한 전반적인 검토를 의미
- 마할라노비스 거리(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>
<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>
[데이터분석 정리]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 |