Data/Data Science

[캐글 메달리스트가 알려주는 캐글 노하우] 3장 IEEE - CIS Fraud Detection 정리

liz in data 2025. 3. 3. 10:00

1. Keyword

지불거절, Count Encoding, TimeSeries Split, GroupKfold, StratifiedKfold

2. IEEE - CIS Fraud Detection 컴피티션 개요 

주제 사기 거래 탐지 
대회 유형 Research 
제출 방식 Simple Competition
문제 유형 이진 분류(Binary Classification)
데이터 타입 정형(Tabular)
평가 지표 AUC(Area Under the Curve)

 

  • 대회 목적
    • 거래단계에서 사기탐지를 강화해 지불 거절을 줄이기 위해 대회 주최
    • 지불거절(Chargeback) 개념
      • 1. 이상 거래가 발생했다고 느낀 고객이 카드사에 문제 제기 (ex. 자신이 결제하지 않았는데 물건이 결제된 경우)
      • 2. 신고를 접수받은 카드사는 카드 결제사(ex. VISA, Master Card 등)에 해당 내용의 진위 파악 요청
      • 3. 카드 결제사가 진위 여부를 파악하는 과정에서 시간과 비용 소요 + 조사 과정 중에 사기 거래가 계속 일어난다면 2차, 3차 피해 발생 
      • 간단히 말해, 고객이 문제제기를 하면 지불거절이 발생하는데    카드사(또는 결제 서비스 제공업체)가 소비자에게 돈을 돌려주고   이 금액을 가맹점(판매자)에게 청구하는 방식 사기 거래라면 소비자는 피해를 보지 않지만, 가맹점과 결제 프로세서를 포함한 관련업체가 손실을 보게 됨 
      • 결과적으로, 애초에 거래 단계에서 사기 탐지를 강화하면 조사 비용 자체가 발생하지 않음
  • 평가 지표:  AUC(2장에서 이미 개념 다룸)
  • 데이터 소개
    • 훈련과 테스트가 각각 transction(결제가 일어난 시간, 카드, 주소 등의 변수), identity(결제 당시 네트워크(IP, Proxy) 브라우저 등)의 데이터셋으로 이루어져 있음 
    • 대부분의 변수들이 비식별화된 형태이며, 고객 아이디에 대한 정보는 제공하지 않음 

3. 솔루션 분석(단계별 핵심 개념 중심으로)

<EDA>

  • 어떤 캐글 솔루션에서도 그렇지만, EDA는 초기에만 하는 것이 아니라 분석 중간에도 계속 해야하고, 특히 초기에는 충분히 시간을 들여야 함 
  • `Transaction DT`변수는 초단위라서 사람이 이해하기 쉽게 변환해야하는데, 시작일은 제공된 변수 중 OS 버전 통해 날짜 유추 가능(앱 사용자의 가입일을 모를 때, 가장 오래된 OS버전을 기반으로 최소 시작일을 추정할 수 있음)
  • 날짜 변수를 만들고 분포를 보았을 때, 훈련 데이터와 테스트 데이터가 시간상으로 완벽하게 분리되어있어 훈련 데이터만 사용하면 과적합 위험 있음(시간 변수는 시계열 데이터에서 중요한 패턴을 형성하기 때문) →  '이전 이벤트로부터 얼마나 시간이 지났는지'와 같은 상대적 시간(Elapsed time)사용하는 방식 있음(해당 솔루션에서 이 방법 사용)
  • 기간별, 상품 코드 별로 거래 패턴이 다르다고 추정했기 때문에 상품 코드별로 각각의 모델 제작하는 방법 사용
  • 훈련과 테스트 데이터의 분포가 다르다면, 정규화 통해 과적합 방지 
  • 비식별화된 변수를 다룰 때, 히트맵을 통해 비슷한 변수들 찾아내고 → 추가 분석 통해서 그들간 어떤 공통점이 존재하는지 확인해야함(솔루션의 경우 NA 개수가 같았음) → 이 경우, 비슷한 성질을 나타내는 변수일 가능성이 크기 때문에 그룹별로 aggregation한 결괏값으로 대체하거나, PCA 적용하여 차원 축소 하는 등 다양한 변수 선택 전략 선택 가능

<피처 엔지니어링>

: 기존 변수를 변환하거나 새로운 변수를 생성하여 모델이 학습을 더욱 잘할 수 있도록 도와주는 과정

  • Count Encoding
    • 범주형 변수를 해당 값의 출현 빈도로 변환하는 기법. 즉, 특정 범주(category)가 데이터에서 몇 번 등장하는지 세고, 그 값을 새로운 특징(feature)로 사용하는 방식 
    • 효과 
      • 1. 변수의 발생 빈도 수에서 드러나는 패턴을 모델에 학습시킬 수 있음 
      • 2. 과적합을 방지하는 효과가 있음: 훈련데이터에서는 변수가 A,B,C이지만 테스트 데이터에서 새로운 변수 D,E가 등장할 경우 모델 학습 단계에서 경험하지 못한 라벨이기 때문에 예측력 낮아질 수 있음. 하지만 count encoding은 각 변수별로 빈도값만 반영하니까 더욱 강건하게 예측할 수 있음
  • Aggregation 
    • 한 개 , 또는 여러개 카테고리 변수들을 그룹화하고, 그룹별로 다른 연속형 변수들의 통곗값(평균, 표준편차, 최솟값, 최댓값 등)을 계산해서 피처를 생성하는 방식 
    • 그룹별 특성을 더욱 다양하게 표현할 수 있으며, 변수 간 상호작용을 피처로 담을 수 있다는 장점 
  • 유저가 비식별된 데이터일 때, 유저를 식별하는 방법
    • 주어진 데이터셋에 고객 정보는 없으나, 솔루션에서는 timedelta 변수들이 모여있는 D열들을 사용해 유저를 식별
    • 결제가 일어난 시점(Time)에서 D(첫 가입일, 첫 결제일, 이전 결제일과 같은 특정일로부터의 시간)을 빼줘서 같은 값을 가진다면, 같은 고객일 것이라는 아이디어 = Account_make_D 라는 새 변수 생성
  • 임베딩(Embedding): 데이터(텍스트, 카테고리, 이미지, 그래프)를 연속된 숫자 벡터(vextor)로 변환하는 역할 
  • LDA(Latent Dirichlet Allocation): 토픽 모델링 기법 중 하나로, 문서 안의 숨겨진 주제를 추출하는 알고리즘. 문서-토픽, 토픽-단어의 확률 분포를 학습하여 토픽 찾아냄 
    • ex. '스포츠기사(문서)'는 70% 스포츠, 30% 경제로 구성될 수 있음. '스포츠'(토픽)은 ['경기', '선수', '축구', '우승'] 같은 단어를 많이 포함할 확률이 높음 

<모델링>

(검증)

  • Kfold: 2장에서 이미 설명함
  • Timeseries Split:
    • 시계열 데이터에서 과거 데이터로 미래를 예측하는 모델을 만들 때 사용
    • 데이터를 시간 순서대로 분할하여 훈련 데이터는 항상 과거, 검증 데이터는 미래가 되도록 함 
  • GroupKfold 해당 솔루션의 경우 거래 패턴(ProductCD)가 다른 월과 너무 달랐기 때문에 각 ProductCD별 해당 방식을 적용하여 개별모델 만드는 방식으로 접근
    • 데이터가 그룹으로 묶여 있어서, 같은 그룹이 훈련과 검증에 동시에 포함되면 안될 때 사용(ex. 쇼핑몰 고객 행동 분석 시 같은 고객 ID를 가진 데이터가 훈련과 검증에 동시에 들어가면 안됨)
    • 각 그룹을 하나의 단위로 유지하면서 Kfold 교차 검증을 수행 
    • 같은 그룹에 속한 데이터는 훈련 또는 테스트 오직 하나의 세트에만 포함됨 
  • StratifiedKfold:
    • 타겟 값의 클래스 비율을 훈련/검증 세트에서 동일하게 유지하려고 할 때 사용 
    • 타겟 변수의 분포를 유지하면서 데이터를 k개의 폴드로 나눔
    • 불균형 데이터셋에서 각 클래스가 훈련/검증 데이터에 비슷한 비율로 들어가도록 함 

4. Tip

  • 1등한 팀의 솔루션에서 얻은 아이디어. 300개가 넘는 변수 중에서 수동으로 고객과 연관된 식별 변수를 찾는 것에는 한계가 있음. 그래서 1등 팀은 모델 스스로 고객 집합을 잘 분류하도록 학습 시킴 
    • 적대적 유효성 검사(Adversal Validation): 훈련 데이터와 테스트 데이터가 같은 분포에서 왔는지 확인하고, 다를 경우 이를 보정하는 기법 
      • 캐글러들이 데이터 간 분포 차이 및 과적합 가능성을 알기 위해 많이 사용하는 테크닉 
      • 예를 들어, 캐글에서 종종 훈련 데이터는 과거의 데이터, 테스트 데이터는 최근 데이터임(= 데이터의 분포가 다름)
      • 이 문제를 해결하기 위해서, 훈련 데이터와 테스트 데이터를 섞은 후, '이 샘플이 훈련/테스트 데이터인지' 맞히는 분류 모델을 훈련
      • 만약 모델이 훈련과 테스트를 잘 구별한다면 → 데이터 분포가 다름 / 차이가 크다면 → 훈련 데이터 조정하거나 특징 보완
    • 일반적인 피처 엔지니어링 과정
      1. 아이디어를 기반으로 새로운 변수를 만들고 모델에 추가해서 유효성 검사 진행
      2. 검증 데이터셋의 AUC가 증가하면 변수를 유지하고, 그렇지 않으면 변수 삭제3. 추가하는 모든 변수에 대해 위 과정을 거치면서 가장 좋은 파생 변수만 남김 
  • 고객 ID가 비식별된 열일 때, 여러 열을 조합하는 방법을 써도 중복되는 결과가 나옴. 이를 막기 위해 다른 변수를 추가해 엄격하게 고객 ID를 정의하는 방법이 있지만, 안 할 수도 있음(ID 변수에 모델이 과적합 될 수 있기 때문에) → 모델 스스로가 id 찾을 수 있도록 하기. 먼저 ID변수를 중복도 가능하게, 최대한 가볍고 대표적인 정보를 토대로 만들어준 후, 해당 ID를 변수로 바로 넣는 것이 아니라 '집계 변수'를 모델에 넣어줌 

5. 새로 알게 된 것

  • 카드사와 카드 결제사의 차이
    • 카드사(=신용카드 회사, Issuer): 소비자(카드 사용자)에게 신용카드를 발급하는 회사 
      • ex. 삼성카드, 현대카드, 신한카드, 국민카드, 롯데카드
      • 카드 사용자의 신용 한도를 정하고, 대금 청구하고, 연체 관리 담당함 
      • 주요 역할: 카드 발급, 신용 한도 관리, 결제 승인, 청구 및 결제 
      • 만약 소비자가 카드를 발급받아 편의점에서 5,000원을 결제하면, 신한카드가 '이 고객이 5,000원을 결제할 수 있는지' 확인 후 승인
    • 카드 결제사(=결제 프로세서): 가맹점(상점)과 카드사 사이에서 결제를 처리하는 회사 
      • ex. KG이니시스, KCP, 나이스페이먼츠, 토스페이먼츠, PayPal
      • 결제 데이터를 카드사와 연결하고, 돈이 실제로 이동하는 과정 담당
      • 주요 역할: 가맹점과 카드사 연결, 결제 정보 전달, 결제 승인 요청, 대금 정산 
      • 만약 소비자가 온라인 쇼핑몰에서 10,000원을 카드로 결제하면, 쇼핑몰이 결제사(KG이니시시스 등)에 결제 요청 → 결제사가 카드사(신한카드)에게 '이 고객 결제할 수 있나요?' 확인 → 카드사가 승인하면 결제 성공 →  결제사가 10,000을 가맹점(쇼핑몰)에 정산 
  • ID가 비식별 된 데이터셋을 다룰 때는 다른 열들과의 관계를 사용해야하는데, 열 간의 논리를 고려해 만든 새 변수를 '집계 변수'로 만드는 방법 
  • 일반적인 피처 엔지니어링 과정