삼성SDS Brightics

[Brightics Studio] 개인 미션 1-3. 이상치 탐지 (python VS Brightics, 운명을 건 한 판 승부)

해붕 2021. 6. 22. 10:45
반응형

안녕하세요 😀

Brightics 서포터즈 2기 정해웅입니다.

바로 직전 게시물에서는 데이터 Load와 전처리를 살펴보았습니다.

혹시라도~ 놓치신 분 있으실 까봐 링크 올려드리겠습니다 ☺

https://blog.naver.com/mbmb7777/222394153391

 

[Brightics Studio] 개인 미션 1-1. 데이터 Load (Load가 반이다...)

안녕하세요 §(* ̄▽ ̄*)§ Brightics 서포터즈 2기 정해웅입니다 😀 6월 10일 발대식이 진행되고 진행 하...

blog.naver.com

https://blog.naver.com/mbmb7777/222405644201

 

[Brightics Studio] 개인 미션 1-2. 데이터 전처리 (이렇게 쉽게 데이터 확인과 주성분 분석이 가능하다

안녕하세요 ヽ(≧□≦)ノ Brightics 서포터즈 2기 정해웅입니다. 지난 주에는 데이터 수집 및 Load을 ...

blog.naver.com


이번에는 PCA로 차원 축소한 데이터를 가지고 본격적인 Outlier Detection을 진행해보려고 합니다.

Outlier Detection, 즉 이상치 탐지를 하는데에는 많은 이유가 있을 텐데요.

Bearing dataset으로 예를 들자면

기계 부품의 회전축이 설정한 임계값을 넘어간다면 고장나거나 고장날 위험이 있기에

미연에 방지하기 위해 이상치를 탐지한다거나(스마트 팩토리나 기계 설비에서 많이 쓰이겠죠?)

또, 저희 연구단의 환경 센서 데이터로 예를 들자면

이상치 탐지를 통해 센서의 신뢰성을 검증할 때도 사용되는 기법입니다.

이상치가 분포하면 실제로 이 데이터가 환경에 의해 나타난 독특한 값인지 or 센서가 고장나서 발생하는 이상치인지

판단할 때도 사용되게 됩니다.

또한, Outlier Detection에는 정말 다양한 기법들이 존재하는데

그 중 Brightics Studio 에서는

- Tukey

- Carling

- LOF(Local Outlier Factor)

이렇게 세 가지의 기법을 제공하고 있습니다.

하나 하나 개념과 적용한 결과를 살펴보겠습니다 !

(사실 이상치 탐지 자체를 데이터 전처리 과정의 일부로서도 사용하는 경우도 많은데,

저는 특정 상황에서 Alarm을 울린다와 같은 요인을 만들기 위한 이상치 탐지를 구현하고자 하였습니다.

즉, 이상치를 제거하는 것이 아닌 이상치로 판단하기 시작하는 임계값을 파악함으로써

기계 설비 등의 더 큰 고장 이전에 파악하고자 하는 의도를 가진 분석 과정입니다.)


1. Outlier Detection(Tukey)

https://blog.naver.com/000__eun/222046853234

가장 먼저 Tukey 기법에 대해 알아보겠습니다.

Tukey와 Carling 이 두 가지 기법은 사분위수를 이용하여

일련의 데이터를 Q1, Q2, Q3, Q4 이렇게 25%씩 나눕니다.

여기서 IQR(InterQuartile Range) = Q3-Q1 을 의미하는데요.

이 IQR을 기반으로 이상치를 탐색하는 과정이 Tukey와 Carling 기법입니다.

그 중에서 Tukey 기법의 이상치 산출 식에 대해 알아보면

이상값 < (Q1 - multiplier X IQR)

또는

이상값 > (Q3 + multiplier X IQR)

을 이상값으로 판단합니다.

이 때, multiplier의 default 값은 일반적으로 약한 이상치는 1.5 그리고 강한 이상치는 3으로 잡습니다.

Brightics에서 Tukey 기법을 사용한 이상치 탐지를 구현해보겠습니다.

어떻게 모델을 구성해야 비교가 좋을까 고민을 하다가

Split을 통해 Train/Test로 구분하여 Test에서의 이상치 값을 선정하는 것이 아닌

PCA로 산출된 데이터 그대로 Outlier Detection하는 것을 보여드리는 것이 임계값 산정에 분명하게 보일 것 같아

그대로 진행했습니다.

PCA에서 하나로 압축시킨 데이터를 Outlier Detection(Tukey)로 연결합니다.

PCA에서 압축시킨 데이터를 그래프로 다시 한 번 볼까요?

이 데이터를 가지고 Tukey 기법을 적용해보겠습니다.

Multiplier를 위에서 보셨다시피 1.5인 default값으로 선정하고

결과로는 Add Prediction을 선택했습니다.

결과값 산정 과정은 2. (4) 결과 확인에서 자세하게 다뤘습니다.

참고하세요 😉

https://blog.naver.com/mbmb7777/222384918160

 

[Brightics Studio] 2. Brightics Studio 실습기 (이렇게 좋은 데 웨않써? feat. 비운의 Azure)

안녕하세요 삼성SDS Brightics 서포터즈 2기 정해웅입니다😀💙 이번 포스팅은 Brightics Studio ...

blog.naver.com

저는 임계값을 산출하기 위해

이상치를 제거하는 것이 아닌 Add Prediction을 선택했습니다.

Table로 데이터 확인 시

쭈우우우우욱 내리다 보면 거의 끝자락 부터 이상치(out)으로 판별한 열이 생긴 것을 볼 수 있습니다!

PCA 값을 다시 내림차순으로 정렬 후, 제일 먼저 outlier로 detect한 값을 확인해보면

0.082711... 임을 확인할 수 있습니다.

Brightics만의 엄청나게 간편한 시각화 기능을 통해

그래프에 임계값을 그려보겠습니다.

Chart setting에 들어가

Lines를 들어간 후, 임계값인 0.082711을 입력 후 원하는 색깔과 굵기를 선택합니다.

이렇게 간편하게 임계값까지 설정할 수 있습니다.

2. Outlier Detection(Carling)

다음은 Carling 기법에 대해 설명드리겠습니다.

이는 Tukey와 유사함으로

간단한 수식과 진행 과정을 살펴보겠습니다.

Carling의 수식을 살펴보면

이상값 < (중앙값 - multiplier X IQR)

또는

이상값 > (중앙값 + multiplier X IQR)

으로 tukey와 비교한다면 중앙값을 사용하냐 Q1을 수식에서 사용하냐의 차이를 보입니다.

또한, Carling에서의 multiplier의 default 값은 2.3입니다.

Method : carling

Multiplier : 2.3

Result : Add Prediction

을 선택 후 모델을 구동시킵니다.

결과는 Tukey와 동일하게 0.082711을 최소 Outlier로 판단하는 것을 확인할 수 있습니다.

동일하게 그래프로 나타낸다면

Tukey 모델과 동일한 그래프 형태 & 임계값을 보임을 알 수 있습니다.


3. LOF(Local Outlier Factor)

https://jayhey.github.io/novelty%20detection/2017/11/10/Novelty_detection_LOF/

LOF는 위의 IQR기반의 기법들과는 다른 방식으로 이상치를 검출합니다.

관측치 주변의 밀도와 근접한 관측치 주변의 밀도의 상대적 비교를 통해 이상치를 탐색하는 기법입니다.

이런 식의 그림에서

O1은 누가 봐도 따로 떨어져 있기에 이상치라고 분류할 수 있겠지만

O2는 과연 이상치일까요?

LOF 관점에서 O2도 밀집도가 급격하게 떨어지기에

이상치라고 볼 수 있습니다.

이처럼 데이터가 가지는 상대적인 밀도를 기반으로 한 이상치 탐지 기법을 Brightics를 통해 적용해보겠습니다.


Outlier Detection (Local Outlier Factor)과 PCA 데이터를 연결해줍니다.

Number of Neighbors : 얼마나 밀집해있느냐 선택

Result: Add Prediction

결과값을 Table로 확인하면

projected_0을 내림차순으로 배열 시

이렇게 0.44359가 임계값으로 착각 수도 있습니다.

LOF에서의 Local 처럼 말그대로 각 그룹마다의 밀집도에서 떨어지는 데이터를 이상치로 판별하기에

 

이렇게 데이터의 값이 작아져도

소규모(Local)로 이상치가 분포하는 것을 확인할 수 있습니다.

따라서 그래프에서 임계값을 선정하기가 모호해졌으므로

결국 LOF에서는 임계값을 그리는 대신 Outlier을 제거하는 모습을 구현하였습니다.

 

그래프 모양이 PCA 이후의 그래프와 달라진 점을 느끼실 수 있나요?

LOF 전후의 Box Plot 비교를 통해 분석해보겠습니다.

 

좌측이 PCA 후의 이상치 분포이고 우측이 LOF 이후의 데이터 분포입니다.

이상치가 확실히 잡힌 것을 확인할 수 있습니다.


python에서 PCA를 통해 차원 축소하고

Mahalanobis 거리를 기반으로 이상치 탐지하는 과정을 코드가 아닌 이미지로 확인해보겠습니다.

 

이렇게 Threshold 값 산정을 비롯해서

거리 비교 함수 정의, plotting 등 굉장히 복잡한 과정을 거쳐야 비로소 PCA 이후의 이상치 탐지를 얻어낼 수 있습니다.

https://blog.naver.com/mbmb7777/222356672936

 

[Anomaly Detection] PCA

1. 모델 비교 (1) 모델 선택 기준 - ML/DL 선택 뿐 아니라, 비지도/지도 학습까지 굉장히 다양한 모델...

blog.naver.com

위 게시물을 참고한다면

python으로 전개하는 것이 얼마나 복잡하고 많은 코드/모듈이 쓰이는 지 알 수 있습니다.


이렇게 Brightics Studio에서 제공하는 함수들을 사용하여

데이터 선정부터 시작하여 overview, 정규화, PCA, Outlier Detection 까지

포스팅이 아니였다면

정말 단숨에 끝날 수 있었던 데이터 분석 프로젝트였습니다.

(위 python으로 PCA 했을 때는 최소 며칠은 걸렸던 것 같네요...😂0

이미 진행해 본 분석 프로젝트를 Brightics Studio를 활용하여 진행해보니 몇 가지 느낀점을 끄적여보자면

1. 확연하게 빠르다. (python에서 진행 시, 수많은 에러들과 싸우고,,, 데이터 불러오는 데도 한세월에,,, 저만 그런거 아니죠?)

2. PCA 와 같은 잘 짜여진 함수들이 존재하기에 분석이 편하다.

3. Box Plot과 같은 시각화 효과를 사용하니 이상치 분포가 확연하게 보인다.

4. Profile Table과 같은 함수를 통해 미리 데이터 분포를 확인할 수 있다. (이게 이번 프로젝트를 하며 느낀 가장 놀라운 포인트가 아닌가 싶어요)


Brightics도 python을 기반으로 한 데이터 분석 '툴' 이기에

직접적인 비교는 힘들지만

바로 위에서 언급한 python을 통해 분석한 이상치 탐지와 Brightics를 이용한 이 게시물을 번갈아가며

처음부터 따라오신다면

시간 소요와 시각화 측면에서 확연한 차이를 느끼실 것 같습니다.

어떤 것이 좋고 나쁘고를 떠나서

사용 용도에 맞게 환경을 조성하는 것이 가장 중요하다고 생각듭니다!


이렇게 해서 이상치 탐지 관련한 2주짜리 개인 프로젝트는 마치고

다음 주는 새로운 주제로 Brightics Studio를 이용한 데이터 분석을 가지고 오겠습니다 ╰(艹皿艹 )

벌써 기대되시죠? (나만 기대되는거야? ㅎ,ㅎ)

* Brightics 서포터즈 활동의 일환으로 작성된 포스팅입니다.

#삼성SDS #브라이틱스 #브라이틱스서포터즈 #AI #분석플랫폼 #분석프로그램 #데이터분석 #빅데이터 #인공지능 #SamsungSDS #초보자분석 #분석초보 #코딩 #코딩초보 #통계 #데이터사이언스 #Python #R #SQL #Scala #분석툴 #BrighticsAI #BrighticsStudio #브라이틱스스튜디오 #Brightics