FDS 모델을 비교하기 전에 데이터가 그 비교를 지탱할 수 있는지부터 확인했다. 대상은 AI-Hub 71925 ‘이상 판별을 위한 금융거래 정보 및 사용자 패턴 합성데이터’의 공개 train·validation 6,386,977건이다. 전자금융공동망 4,434,106건과 카드 1,952,871건으로, AI-Hub가 밝힌 전체 라벨 데이터의 약 90%다.

결론부터 말하면 전자금융공동망 데이터는 행동 기반 FDS 모델의 성능을 비교하는 benchmark로 쓰기 어렵다. 전체의 98.97%를 차지하는 100만 원 이하 구간에 양성이 한 건도 없고, 443만 건의 거래금액은 48개 값으로만 구성돼 있었다. 금액 하나로 계산한 ROC-AUC가 0.9969였다.

이 결론은 ‘금액이 실제 사기 탐지에 쓸모없다’는 뜻이 아니다. 공개 데이터의 라벨을 거래 행동이 아니라 합성 과정의 금액 template만으로 대부분 복원할 수 있다는 뜻이다.

감사 범위

데이터행 수양성양성 비율
전자금융공동망4,434,10617,1750.39%
카드1,952,87172,0083.69%

검사는 모델 점수 하나가 아니라 split, 단일 피처 shortcut, ID 암기, 중복, 시간 이동, label leakage를 각각 분리했다. 규칙과 임계값은 코드에 고정하고 같은 protocol을 다른 공개 FDS 데이터에도 실행했다.

전자금융공동망: 금액 template이 라벨을 설명한다

첫 검사는 금액 구간별 양성 수였다.

low = df[df["거래금액"] <= 1_000_000]
 
len(low) / len(df)          # 0.9897
low["이상거래여부"].sum()   # 0

100만 원 이하 거래는 4,388,368건으로 전체의 98.97%였다. 이 구간에는 양성이 0건이었다. 거래금액의 구조를 더 확인하자 같은 문제가 반복됐다.

  • 4,434,106건의 거래금액이 48개 값만 사용
  • 상위 10개 금액이 전체의 98.05% 차지
  • 거래금액의 99.91%가 1,000원 단위
  • 금액만 사용한 ROC-AUC 0.9969
  • 양성과 음성의 금액 분포 overlap 0.0065
  • 거래금액=4,000,000 한 값이 전체 양성의 30.05% 포착, 기저율 대비 88.13배

연속형 행동 피처라기보다 코드북에 가깝다. 모델은 계좌 행동이나 거래 sequence를 학습하지 않아도 금액 template을 복원해 높은 점수를 낼 수 있다.

카드 데이터는 보조 근거로만 사용했다

카드 데이터에서도 shortcut은 확인됐다. train에서 선택한 통합승인금액 >= 318,000 규칙은 validation에서 F1 0.7204를 기록했다. 특정 코드값의 양성 비율도 높았다.

조건양성 비율전체 양성 중 포착 비율
일시불할부구분코드=B97.77%33.18%
승인거래코드=0190.85%23.01%

다만 카드 데이터에 대한 결론은 전자금융공동망만큼 강하지 않다. LightGBM을 기준 모델로 다시 측정하자 금액-only PR-AUC와 F1의 상대 비율 gate는 통과했다. 최종 판정은 split integrity, 금액 ROC-AUC 0.9519, 특정 범주값이 양성의 58.18%를 포착하는 현상에 근거했다.

카드는 shortcut이 존재한다는 보조 사례다. 전자금융공동망은 금액 template만으로 독립적인 실패 조건 일곱 개를 충족한 핵심 사례다.

약한 기준 모델이 만든 잘못된 판정을 철회했다

첫 audit에서는 dependency가 없는 Naive Bayes를 no-ID 기준 모델로 사용했다. amount-only 모델과의 성능 비율을 계산하기에는 기준 모델이 너무 약했다. 기준을 고정한 LightGBM으로 sensitivity test를 다시 실행하자 두 데이터의 상대 비율 gate가 모두 FAIL에서 PASS로 바뀌었다.

데이터LightGBM no-ID PR-AUCamount-only PR-AUC비율상대 비율 gate
카드0.99350.66400.6683PASS
전자금융공동망0.61610.46000.7466PASS

따라서 ‘금액 규칙이 강한 모델과 같은 성능을 낸다’는 주장은 최종 근거에서 제외했다. 전자금융공동망의 판정은 48개 금액값, 98.97% zero-positive 구간, amount-only ROC-AUC, 분포 overlap, 단일값 shortcut처럼 기준 모델에 의존하지 않는 결과로 유지했다.

benchmark 감사에서도 공격 대상과 비교 기준을 함께 검증해야 한다. 약한 기준 모델은 모델을 과대평가할 때만 문제가 되는 것이 아니라, 데이터 결함을 과대평가할 때도 문제가 된다.

배포된 검증 코드가 기존 split을 없앴다

데이터와 함께 배포된 공식 탐지 모델의 source도 확인했다. 카드와 전자금융공동망 스크립트는 제공된 train·validation·test를 불러온 뒤 하나로 합치고, 전처리 후 다시 무작위 층화 분할을 수행했다.

df = pd.concat([train_df, valid_df, test_df], ignore_index=True)
 
X_train, X_test, y_train, y_test = train_test_split(
    X,
    y,
    test_size=0.1,
    random_state=42,
    stratify=y,
)

범주형 factorization도 새 split 전에 전체 데이터에서 실행됐다. 이 구조에서는 시간 이동과 신규 entity에 대한 일반화를 측정할 수 없다. 전자금융공동망에는 label을 제외한 중복 feature row도 전체의 1.365% 있었다. 무작위 재분할은 같은 template이나 entity가 train과 test 양쪽에 들어갈 경로를 만든다.

모든 데이터를 실패시키는 protocol인지 확인했다

같은 검사를 ULB Credit Card Fraud, BAF Base, 자체 합성 데이터에 적용했다. 결과가 모두 FAIL이면 audit rule이 과도한 것이다.

데이터판정amount-only ROC-AUC금액 고유값상위 10개 금액 비중
K-Claims-Synth v0.2PASS0.538799,2270.11%
ULB Credit Card FraudWARN0.719632,76716.29%
BAF BaseWARN0.5939994,9710.00%
AI-Hub 카드FAIL0.95191,93186.01%
AI-Hub 전자금융공동망FAIL0.99694898.05%

비교군은 단일 피처 subgroup 때문에 WARN을 받았지만 금액 template, 분포 overlap, 중복, 시간 조건에서는 실패하지 않았다. 이 결과로 protocol이 FDS 데이터 전체를 일괄 탈락시키지 않는다는 점을 확인했다.

모델 개발 전에 통과시킬 gate

이 감사를 실제 ML workflow에 적용하면 순서는 다음과 같다.

  1. 시간과 entity 기준으로 split을 먼저 고정한다.
  2. 전처리와 집계는 train에서 fit하고 validation·test에 적용한다.
  3. 금액 임계값, 단일 범주값, ID-only 모델을 정식 baseline으로 둔다.
  4. zero-positive 구간, 고유값 수, 중복, label conflict를 모델 학습 전에 검사한다.
  5. 기준 모델과 audit threshold 자체도 다른 데이터셋에서 sensitivity test한다.
  6. 데이터가 gate를 통과한 뒤 AUPRC, Precision@K, 조사 용량별 recall로 모델을 선택한다.

AI-Hub 데이터는 대용량 적재, 스키마 처리, 불균형 학습 실습에는 사용할 수 있다. 현재 공개 구조에서 나온 F1이나 AUC만으로 행동 기반 FDS 모델의 우열을 주장하기는 어렵다.

감사 코드, 고정된 threshold, LightGBM sensitivity 결과, 데이터셋별 JSON·Markdown report는 fraud-dataset-validity에 공개했다. 공식 모델 source의 파일 hash와 검토 line도 함께 기록했다.

데이터: AI-Hub 71925