JSP's Deep learning

[DACON] 2. 신용카드 사기 거래 탐지 AI 경진대회(rank : 7/740) - 수상 본문

AI Competition/DACON

[DACON] 2. 신용카드 사기 거래 탐지 AI 경진대회(rank : 7/740) - 수상

_JSP_ 2022. 9. 6. 21:15

[대회 링크] 

- https://dacon.io/competitions/official/235930/overview/description

 

월간 데이콘 신용카드 사기 거래 탐지 AI 경진대회 - DACON

분석시각화 대회 코드 공유 게시물은 내용 확인 후 좋아요(투표) 가능합니다.

dacon.io

[깃허브 코드 링크]

- https://github.com/wjsrlahrlco1998/DACON-code/blob/master/%5BDACON%5Dcreditcard_data_anomaly_detection/AutoEncoder_torch_submit.ipynb

 

GitHub - wjsrlahrlco1998/DACON-code: DACON 대회 참가 코드 모음

DACON 대회 참가 코드 모음. Contribute to wjsrlahrlco1998/DACON-code development by creating an account on GitHub.

github.com


2번째로 참여한 대회는 월간 데이콘 신용카드 사기 거래 탐지 AI 경진대회입니다.

 

해당 대회는 이상치 탐지 알고리즘(아이솔레이션 포레스트, 오토인코더 등)을 사용하여 PCA 알고리즘으로 차원이 압축된 피처들의 데이터를 가지고 이상치를 탐지하는 대회입니다.

 

이 대회를 시작하기에 앞서, 이상치 탐지 알고리즘에 대해서는 전혀 무지했기 때문에 그 개념부터 알아가면서 공부하였습니다.

 

최종적으로 10팀을 뽑는데, 7위로 수상을 하게되어서 뿌듯하고 기분이 좋네요 ^^ \\(하지만 아직 갈길이 멀기 때문에... 열심히 리뷰하겠습니다.)


1. 주제 : 신용카드 사기 거래 탐지

PCA 알고리즘으로 주성분을 추출한 데이터 (V1 ... V30)를 가지고 신용카드의 사기 거래를 탐지하는 대회이다. 

 

이 대회의 특이한 점이 있다면 학습 데이터는 라벨링이 되어있지 않은 데이터로 비지도 학습을 진행해야한다는 것이다. 

 

하지만 다행히도 라벨링이 된 검증 데이터를 제공하는데, 이 데이터로는 학습은 하지 못하지만 데이터의 분석은 진행할 수 있다.

 

2. 데이터 분석

먼저는, 검증 데이터를 적극 활용하여 이상치의 데이터는 어떤 분포를 가지며, 어떤 feature가 이상 데이터와 정상 데이터를 구분하는지 시각적으로 확인하는 방법으로 데이터를 분석하였다.

 

1) 이상치 분포

 

제공된 검증 데이터에서 전체 데이터 대비 이상치 데이터의 비율은 0.0010551491277433877로 1000개의 데이터에 1개 꼴로 나타났다.

 

이 과정을 통해서 학습을 진행해야하는 데이터 셋이 극심한 불균형을 이루는 데이터임을 확인했다.

(본래라면 데이터의 균형을 맞추어주지만, 이 데이터 셋의 균형을 맞춘다면 학습을 진행할 수 없을 정도로 적은 데이터만 남기 때문에 다른 방법을 생각해야한다.)

 

2) 이상 데이터와 정상 데이터가 확실하게 구분되는 feature를 시각적으로 확인

 

이상치 탐지를 공부하다보니 이상 데이터와 정상 데이터가 구분되지 않는 feature는 학습에 굳이 사용할 필요가 없다고 생각했다.(단, 시계열 데이터는 다르다)

 

그래서 matplotlib 패키지를 이용하여, 라벨링된 검증 데이터를 이상치와 정상 데이터로 나누어 feature 별로 시각화 하였다.

 

해당 과정을 거치니, 이상 데이터와 정상 데이터가 명확하게 구분되는 feature를 선별할 수 있었다.

 

3. 시도한 모델과 최종 선정된 모델

 

1) sklearn의 IsolationForest

 

해당 모델은 sklearn의 앙상블 모델이다. 

 

또한 머신러닝 기법을 이용한 모델로, 검증 데이터 셋의 이상치 비율과 학습 데이터 셋의 이상치 비율이 동일하다는 가정을 세우고 학습을 진행한다.

 

IsolationForest는 0.7의 정확도를 보였다. 

 

대체로 확실한 이상치는 잡아내지만, 조금이라도 정상치와 비슷하면 잡아내지 못했다.

반대로, 정상치의 경우에도 특이값이 존재하면 가차없이 이상치로 판단하는 상황이 발생했다... 

 

2) Deep AutoEncoder

 

해당 모델은 딥러닝 기법을 사용한 모델로, Layer을 축소하고 다시 원래의 차원으로 복구하는 과정에서 이상치가 존재하면 원본과 크게 차이가 날 것이라는 아이디어에서 비롯된 이상치 탐지 모델이다.

 

여기서 주의해야할 점이 존재했다. 총 feature는 30개인데, 앞선 데이터 분석으로 feature을 추출하니 16개의 feature만이 남게 되었다.

 

만약 16차원에서 더 압축을 진행하고 복구를 한다면, 너무 작은 차원의 벡터로 압축이 되기때문에 데이터의 특성을 충분히 담지 못한다.

 

그렇기 때문에 또 하나의 아이디어가 필요했다. 

 

그것은 바로 차원을 확장 시켰다가 다시 축소시키는 방법이다. 

 

해당 방법을 사용할 수 있는 이유는 우리는 이상치 탐지에서 원본 데이터와 복구된 데이터만 필요하지 압축된 벡터는 필요가 없다. 따라서 다음과 같이 차원을 확장시키고 다시 축소시키는 방법을 선택했다.

 

이 모델을 사용하여, 원본 데이터와 복구 데이터의 코사인 유사도를 비교했는데(유클리드, 맨허튼 등 다른 유사도 비교방법도 사용했으나 결과는 코사인 유사도 비교가 제일 좋았다) 유사도 96퍼센트미만을 이상치로 그 이상을 정상 데이터로 판명했다.

 

최종적으로 AutoEncoder의 모델은 Public에서 f1-score 0.93052, Private에서 f1-score 0.90988의 점수를 획득했다.

 

4. 대회를 마치며...

 

사실은 이 대회에서 특별하게 사용된 기술은 없다. 

 

모두 대중적인 이상치 탐지 알고리즘을 사용했으며, 차별점이 있다면 데이터 시각화를 통한 feature 선정이다.

 

결국에는 이 차이로 대회의 수상을 할 수 있었다.

 

처음에는 너무 간단한 방법이라 큰 효과를 보지 못할 것이라고 생각했는데, 이 대회를 통해서 작은 차이라도 모델의 성능을 크게 향상시킬 수 있다는 것을 알게되는 좋은 계기가 되어, 사소한 데이터 분석이라도 그냥 넘기지말고 철저하게 분석해야한다는 것을 배웠다!!

 

 

 

 

Comments