-
[Python] Outlier(이상치) 찾기 , 마할라노비스 거리 (이론)Programming/Python 2022. 12. 28. 12:23
이상치에 대해 정리된 문서
이상치 탐색을 위한 통계적 방법과 활용 방안.pdf (hira.or.kr)
내가 사용하는 알고리즘에서 outlier를 계산하는 부분의 문제를 발견하였다.
위의 그림에서 맨 밑의 파란 점(outlier)을 제거하면 주황색 선이 더 효율적인 모양으로 바뀔 것이다.
그래서 나는 처음에 z-score라는 방법으로 outlier를 계산했었다.
위 그림처럼 z-score값을 그래프로 나타낸 후,
내가 지정한 threshold값을 넘는 것을 outlier로 판단하였다.
그런데!
여기서 문제가 발생했다. 아래 그림을 보자.
이러한 케이스에서 가로축 60에 가까운 데이터들이 전부 outlier로 판단되는 상황이 발생하였다.
물론 이 상황은 내가 원하던 게 아니다.
그래프의 경향에서 크게 벗어난 outlier를 잡고싶었는데 위처럼 계산해버리면 그래프 자체에 손실을 주게 된다.
문제 원인을 먼저 파악해보았다.
3 methods to deal with outliers - KDnuggets
내가 outlier를 계산한 방식이 univariate한 방법이었기 때문에 많은 값이 outlier로 잘못 계산된 상황이었다.
이를 해결하기 위해 multivariate method를 찾아보던 중 Mahalanobis distance를 알게되었다.
Norm의 개념을 먼저 이해해보자.
많이들 알고있는 유클리디언 거리는 두 점간의 직선 거리를 의미한다.
마할라노비스 거리는 확률분포상의 거리라고 한다.
Norm의 종류( 마할라노비스(Mahalanobis Distance), 유클리디언(Euclidean Distance) ) : 네이버 블로그 (naver.com)
[Distance] 유클리드 거리(Euclid.. : 네이버블로그 (naver.com)
해당 블로그 글을 참고하니 이해가 쉬웠다.
일단 내가 찾는 방법이 마할라노비스가 맞는지 테스트를 하기로 했다.
먼저 파이썬으로 구현하려고 한다.
실제 코드 구현 과정은 다음글에서 !
참고
Multivariate Outlier Detection (linkedin.com)
다크 프로그래머 :: 평균, 표준편차, 분산, 그리고 Mahalanobis 거리 (tistory.com)
추가
데이터의 이상치, 객관적으로 솎아내려면 | 경영일반 | DBR (donga.com)
구글링을 하다가 좋은 레터 기사를 발견했다.
이상치에 대한 정의를 잘 정리해준 글이다.
무엇을 "이상하다"고 볼 것이냐에 따라 계산 방식도 알고리즘도 달라질 것이다.
이 글에서 마할라노비스 거리는 비선형적 데이터에서는 사용하면 안된다고 설명하고 있다.
참고...
'Programming > Python' 카테고리의 다른 글
[Python] File / Exception / Log (0) 2023.08.29 [Python] String, Function, Scoping rule, 함수 작성 가이드라인 (0) 2023.08.15 [Python] outlier 찾기, 마할라노비스 거리 계산 (실전) (0) 2022.12.28 [Python] print .format 자릿수 맞추기, 오른정렬, 소수점 출력 (0) 2022.09.02 [Python] curve_fit : data로 그래프 그리고 fitting하기 (0) 2022.07.19