Review/대회 리뷰

[Kaggle] IEEE-CIS fraud detection, 이상거래 탐지 캐글 1등 솔루션

어쩌다통계 2022. 10. 19. 01:00
728x90

이 글이 도움되셨다면 광고 클릭 부탁드립니다 : )

이번 포스팅에서는 2년 전 캐글에서 3개월간 진행된 Fraud detection Competition에서 우승한 분의 분석 과정과 팁에 대해 배워보려고 합니다. 평소 관심 있었던 주제이기도 하고 1등 하는 사람들은 데이터 불균형 문제를 어떻게 해결하고 어떤 모델을 쓰는지가 무척 궁금했습니다.
이상치 탐지를 위한 새롭고 복잡한 방법론들이 많이 나오긴 했지만 실제 적용해봐도 성능이 좋은지 모르겠더라고요...ㅎ 제가 뭘 빠트리고 있는지 체크할 겸! IEEE-CIS fraud detection의 1등 솔루션을 번역 및 정리해보겠습니다.


 

0. Overview

식료품점의 계산대 앞에 긴 줄을 서고 계산원이 조용히 카드가 거부되었다고 발표한다고 상상해 보십시오. 이 순간, 당신은 아마도 당신의 운명을 결정한 데이터 과학에 대해 생각하고 있지 않을 것입니다.
당혹스럽고 가장 친한 친구 50명을 위한 장대한 나초 파티에 필요한 모든 것을 충당할 자금이 있다고 확신하면 카드를 다시 시도합니다. 같은 결과. 한 걸음 물러나서 계산원이 다음 고객을 돌볼 수 있도록 하면 은행에서 문자 메시지를 받게 됩니다. "정말로 체다 치즈에 500달러를 쓰려고 했다면 1번을 누르십시오."
당장은 번거롭고 종종 당황스러울 수도 있지만 이 사기 방지 시스템은 실제로 소비자에게 연간 수백만 달러를 절약하고 있습니다. IEEE Computational Intelligence Society (IEEE-CIS)의 연구원은 이 수치를 개선하는 동시에 고객 경험을 개선하기를 원합니다. 더 높은 정확도의 사기 감지 기능을 사용하면 번거로움없이 칩을 사용할 수 있습니다.
IEEE-CIS는 심층 신경망, 퍼지 시스템, 진화 계산 및 군집 인텔리전스를 포함한 다양한 AI 및 기계 학습 영역에서 작동합니다. 오늘날 그들은 세계 최고의 결제 서비스 회사인 Vesta Corporation 과 협력하여 사기 방지 산업을 위한 최고의 솔루션을 찾고 있으며 이제 여러분을 그 도전에 초대합니다.

 

우선 대회의 목적은 실제 상거래 데이터에서 이상거래를 탐지하는 것입니다.
이상 거래라고 하면 일반적인 classification 문제와 가장 크게 다른 점이라고 한다면 타겟 불균형이 되겠습니다. 그래서 보통 over/under sampling 기법을 활용하기도 하고 요즘엔 unsupervised learning을 활용한 방법도 많이 나와있습니다.
여기서는 어떻게 해결하는지 차차 살펴보도록 하겠습니다.

 

0.1 Data

데이터는 아래와 같은 피처들로 이루어져 있고 우리는 사기 거래일 확률을 예측하면 됩니다 : )

Features_transaction(거래 관련)

TransactionDT: 주어진 참조 datetime의 timedelta(실제 타임스탬프가 아님), 초단위
TransactionAMT: 거래 결제 금액(USD)
ProductCD: 제품 코드, 각 거래에 대한 제품(categorical)
card1 - card6: 카드 종류, 카드 카테고리, 발행 은행, 국가 등의 결제 카드 정보(categorical)
addr: 주소(categorical)
dist: 청구 주소, 우편 주소, 우편 번호, IP 주소, 전화 지역 등 사이의 거리
P_ and (R__) emaildomain: 구매자 및 수신자 이메일 도메인(categorical)
C1-C14 : 결제 카드와 관련된 것으로 확인된 주소 수 등과 같은 계산. 실제 의미는 마스킹됩니다.
D1-D15: 이전 트랜잭션 사이의 날짜 등과 같은 timedelta
M1-M9: 카드의 이름 및 주소 등과 같은 일치
Vxxx: Vesta는 순위, 계산 및 기타 엔터티 관계를 포함하여 풍부한 기능을 설계했습니다. IP 및 이메일 또는 주소와 연결된 결제 카드가 24시간 동안 몇 번 나타났는지 등

Features_identity(접근 환경 관련)

네트워크 연결정보(IP, ISP, Proxy 등)
트랜잭션과 관련된 디지털 서명(UA/브라우저/os/버전 등)
id01 ~ id11은 기기 등급, ip_domain 등급, 프록시 등급 등 Vesta와 보안 파트너가 수집하는 신원에 대한 숫자 기능입니다. 또한 계정 로그인 횟수/로그인 실패 횟수, 계정 기간과 같은 행동 지문을 기록했습니다. 페이지에 머물렀다 등.

Features_Target

isFraud: 사기 거래일 확률

 

 

1. 1st Place Solution

1등 솔루션말고도 사람들이 discussion에 공유해준 솔루션을 다시 정리해준 고마운 포스팅이 있어 이 글을 참고하면 좋을 것 같습니다.

 

1.1 Summary

Very short summary에서 가장 1등하는데 가장 주요했던 요인은 UID를 찾아냈다는 점이라고 합니다. 사실 사기인 거래를 판별하는 것이지만 한 사람이 사기거래를 하면 그 사람의 모든? 거래가 사기 거래화되기 때문에 UID를 나타내는 다른 변수로 UID를 만들어내어서 분석에 활용했다고 합니다.

Main magic:
- client identification (uid) using card/D/C/V columns (we found almost all 600 000 unique cards and respective clients)
- uid (unique client ID) generalization by agg to remove train set overfitting for known clients and cards
- categorical features / supportive features for models
- horizontal blend by model / vertical blend by client post-process

Features validation:We've used several validation schemes to select features:
- Train 2 month / skip 2 / predict 2
- Train 4 / skip 1 / predict 1
We were believing that it was the most stable option to predict future and unknown clients.

Models:We had 3 main models (with single scores):
- Catboost (0.963915 public / 0.940826 private), LGBM (0.961748 / 0.938359), XGB (0.960205 / 0.932369)
Simple blend (equal weights) of these models gave us (0.966889 public / 0.944795 private).

Predictions:
- 6 folds / GroupKfold by monthal
- most no fine-tuning for models

 

1.2 Details

해설 솔루션/코드를 다 읽어봤는데 처음에 기대했던 신비롭고 처음 보는 그런 기법은 없었습니다. 이번 단락이 Details이긴 하지만 Summary보다 짧을 것 같네요 ㅎㅎ.
역시나 가장 중요하고 어려운 것은 EDA였고 이 걸 얼마나 잘 활용하는지가 승패를 가르지 않았나 생각됩니다. 아래는 우승자가 해설 솔루션에 공유한 내용 중 다른 분석에 활용하면 좋을 법한 내용만 가져왔습니다.

 

1.2.1 EDA

특히나 이번 대회는 분석해야하는 컬럼 450개라 EDA가 아주 힘들었는데요. NaN과 상관있는 변수 탐색, 변수 간 corr(이 후 feature selection에 활용)를 살펴보며 EDA를 진행했다고 합니다. 변수가 너무 많아 다른 팀이 분석한 내용도 참고를 많이 했다고 하는데, 캐글 내 discussion이 활성화되어있다보니 각자 분석한 결과를 공유하며 함께 문제를 풀어나갈 수 있었던 것 같습니다.

 

1.2.2 Feature Selection

필자는 450개의 컬럼을 250개로 줄여 모델을 효율적으로 만드는데 집중했다고 합니다. 이때 사용한 방법들은 아래와 같습니다. 본인들이 아는 모든 트릭을 사용했다고 하는데요 ㅎㅎ 정말 다양하게 썼습니다.
그중에서 흥미로운 방법은 time consistency인데, 시간의 흐름에 상관없는? 변수만 뽑아내어 1월 -> 6월 예측과 6월 -> 1월 예측이 일관성 있도록, 시간에 robust 한 모델을 세울 수 있었던 것 같습니다.

- forward feature selection (using single or groups of features)
- recursive feature elimination (using single or groups of features)
- permutation importance
- adversarial validation
- correlation analysis
- time consistency
- client consistency
- train/test distribution analysis

 

1.2.3 Validation Starategy

feature selection도 그렇지만, 이 분들은 validation에도 신경을 많이 썼습니다. We never trusted a single validation strategy...라며 다양한 시도를 해봤다고 합니다.
Validation을 생소한 방법으로 했는데, 데이터를 월별로 나눠(총 6개월) 2개로 학습/ 2개 스킵/ 2개로 테스트해보기도 하고, 4개로 학습/ 1개 스킵/ 1개로 테스트.... 등 스킵을 넣어주어서 과적합을 방지하는 것 같습니다.

 


(마무리...)

역시 꼼꼼함과 빈틈없음과 다양한 시도가 1등 솔루션을 완성시킨 것 같네요. 엄청나게 특별한 방법은 없어서 아쉬웠지만, 또 그렇기에 희망을 가질 수 있었던 시간이었습니다 : )

반응형