3P by GN⁺ 3시간전 | ★ favorite | 댓글 1개
  • 사기 탐지는 머신러닝보다 먼저 테이블과 조인을 제대로 잡고, 속도·위치·금액·가맹점·시간대의 이상 패턴을 SQL로 찾는 데서 시작되는 경우가 많음
  • Velocity는 짧은 시간 안에 같은 카드 소유자 거래가 몰리는 구간을 찾으며, 시간 창·임계값 조정과 오탐 화이트리스트가 필요함
  • Impossible travelLAG()와 거리 계산으로 Chicago 결제 7분 뒤 Los Angeles 결제처럼 물리적으로 불가능한 이동을 강한 복제 카드 신호로 잡아냄
  • 금액 이상$1.00, $99.99, $499.99처럼 카드 테스트나 규칙 회피를 시사하는 금액대를 찾지만, 혜택 거래에는 잘 맞지 않음
  • 가맹점 급증, 평소 시간대 밖 거래, 윈도 함수 파생 컬럼을 함께 쓰면 거래를 여러 신호로 점수화하고 반복 주기를 몇 주에서 몇 시간으로 줄일 수 있음

거래 데이터에서 사기 징후를 찾는 SQL 패턴

  • 사기 탐지는 머신러닝이나 그래프 데이터베이스보다 먼저 올바른 테이블과 조인, 그리고 이상한 거래 형태를 찾는 SQL에서 시작되는 경우가 많음
  • 신용카드, 의료 청구, 전자상거래, POS, 정부 지원 혜택 프로그램처럼 돈이 이동하고 로그가 남는 데이터에 적용 가능함
  • 새 데이터셋에서는 보통 속도, 불가능한 이동, 금액 이상, 가맹점 집중, 비정상 시간대, 윈도 함수 기반 신호 순서로 패턴을 쌓아감

1. Velocity: 짧은 시간에 과도한 거래

  • 훔친 카드나 계정을 빨리 소진하려는 경우, 같은 카드 소유자에게 짧은 시간 안에 거래가 몰리는 패턴이 나타남
  • 기본 쿼리는 최근 30일 거래를 시간 단위로 묶고, cardholder_id별 거래 수가 기준을 넘는 구간을 찾음
  • 핵심 조정값은 시간 창 크기거래 수 임계값
    • 1분, 5분, 1시간 버전을 병렬로 돌려 비교 가능함
    • 카드 테스트 조직은 몇 초 안에 거래를 몰아넣고, 혜택 부정 거래 조직은 한나절에 걸쳐 움직일 수 있어 스케일이 다름
  • 정상 사용자도 기준을 넘을 수 있음
    • 자판기를 관리하는 운영자
    • 선불카드를 대량 충전하는 사람
    • 첫 탐색 이후에는 이런 오탐 대상 화이트리스트가 필요함
  • 슬라이딩 윈도 방식은 COUNT(*) OVER (...) RANGE BETWEEN INTERVAL '5 minutes' PRECEDING AND CURRENT ROW로 최근 5분 내 거래 수를 계산함
  • QUALIFYSnowflake, BigQuery, Databricks, Teradata에서 동작함
    • Postgres에서는 전체 쿼리를 CTE로 감싸고 바깥에서 필터링해야 함

2. Impossible travel: 물리적으로 불가능한 이동

  • 한 카드가 Chicago에서 결제되고 7분 뒤 Los Angeles에서 결제되면, 둘 중 하나는 가짜일 가능성이 큼
  • 이 패턴은 복제 카드를 잡는 강한 신호이며, 한 카드가 몇 분 안에 먼 두 장소에 있을 정상 사유는 거의 없음
  • 쿼리는 LAG()로 직전 거래의 시간과 위치를 가져오고, 현재 위치와 직전 위치 사이의 거리와 시간을 계산함
  • haversine대권 거리(great-circle distance) 를 계산하는 함수임
    • 대부분의 데이터 웨어하우스가 제공함
    • 없으면 직접 작성할 수 있는 수준의 함수임
  • 예시 임계값은 600mph
    • 상업용 제트기의 순항 속도가 약 575mph이므로, 비행기로도 불가능한 속도라는 뜻임
    • 100mph로 낮추면 빠른 지상 이동도 잡을 수 있지만, 실제 항공 여행객이나 부모가 자녀를 태워오는 정상 거래까지 걸리기 시작함
  • 같은 계열에서 추가로 볼 수 있는 신호가 있음
    • 5분 안에 같은 주의 먼 두 도시에서 거래되면 지역 복제 조직을 시사할 수 있음
    • 한 시간 안에 여러 ZIP 코드에서 거래되면 한 지역에서 움직이는 스키머 조직을 시사할 수 있음
    • 10분 안에 국경을 넘는 거래는 국제 조직 신호가 될 수 있음

3. Amount anomalies: 특정 금액대의 이상 거래

  • 사기에서는 자주 나타나지만 정상 사용에서는 드문 금액 패턴이 있음
  • 예시 조건은 다음 금액대를 찾음
    • $1.00, $5.00, $10.00
    • $99.50 이상 $100.00 미만
    • $499.50 이상 $500.00 미만
  • 작은 정수 달러 금액은 대체로 카드 테스트 신호임
    • 카드 번호 덤프에서 얻은 번호가 실제로 동작하는지 확인한 뒤 재판매하려는 흐름임
    • 실제 카드 소유자가 정확히 $1.00짜리 물건을 사는 경우는 드묾
    • 커피는 $4.73, 주유는 $52.81처럼 정확히 둥근 금액이 아닐 가능성이 높음
  • 임계값 바로 아래 금액은 다른 의미를 가짐
    • $99.99는 많은 곳에서 $100부터 신분증 확인을 요구하는 선을 피하려는 형태일 수 있음
    • $499.99$500 일일 ATM 한도를 피하려는 형태일 수 있음
    • 거래자가 규칙을 알고 그 아래에 머무르는 신호가 됨
  • 혜택 거래에서는 둥근 금액 패턴이 크게 도움이 되지 않음
    • 혜택은 같은 방식으로 카드 테스트되지 않음
    • 보통은 중복 수급자가 더 중요한 신호가 됨

4. Suspicious merchants: 가맹점 단위의 이상 집중

  • 주유기 카드 리더처럼 특정 리더가 스키머에 감염되면, 한 건이 아니라 수십 건의 사기로 이어질 수 있음
  • 해당 리더를 몇 주간 사용한 모든 카드가 누군가의 데이터베이스에 들어갈 수 있음
  • 가맹점 관점에서는 짧은 기간에 서로 관련 없는 카드 수가 평소보다 많이 늘고, 거래 금액도 커지는 형태로 나타남
  • 단순 기준 예시는 최근 7일 동안 가맹점과 시간 단위로 묶어 다음을 계산함
    • 고유 카드 수
    • 전체 거래 수
    • 총 거래 금액
    • 고유 카드 수가 20개를 넘고 총액이 $5000을 넘는 시간대를 탐색함
  • 정적 임계값에는 크기 보정 문제가 있음
    • Costco는 90초 안에 이 기준을 넘을 수 있음
    • 중고 서점은 거의 넘지 않음
  • 더 나은 방식은 각 가맹점을 자기 자신의 과거 기준선과 비교하는 것임
    • 최근 60일 거래를 시간 단위로 묶음
    • 각 가맹점의 과거 168개 시간 버킷을 기준으로 평균 고유 카드 수를 계산함
    • 현재 고유 카드 수가 과거 평균의 3배를 넘는 구간을 찾음
  • 168개 시간 버킷은 지난 7일의 시간 단위 구간
    • 일별·주별 계절성이 중요하기 때문임
    • 같은 커피숍도 화요일 오후 2시와 토요일 오전 9시는 기준선이 다름
  • 시작점으로는 평소의 3배를 사용할 수 있음
    • 알림이 과도하게 쏟아지지 않을 만큼 느슨함
    • 실제로 이상한 시간대를 잡을 만큼은 빡빡함

5. Off-hours: 개인의 평소 사용 시간대 밖 거래

  • 대부분의 사람에게는 지출 습관이 있음
  • 9시부터 5시까지 일하는 사람이 갑자기 새벽 3시에 주유를 시작하면, 카드가 다른 사람에게 쓰였거나 여행 중일 가능성이 있음
  • 여행 중인지 여부는 다른 신호로 추가 확인 가능함
  • 쿼리는 최근 90일 동안 카드 소유자별·시간대별 거래 수를 구한 뒤, 거래가 2번 이상 있었던 시간대만 평소 시간대로 인정함
  • 이후 새 거래의 시간이 해당 카드 소유자의 earliest_hourlatest_hour 범위 밖이면 탐지함
  • 내부 쿼리의 “해당 시간대에 2건 이상” 조건이 중요함
    • 3개월 전 우연히 있었던 심야 주유 1건이 평소 시간대에 포함되는 것을 막음
    • 기준을 “한 번 있었던 일”이 아니라 실제 습관에 맞춤
  • 단점은 이력 데이터가 필요하다는 점임
    • 신규 계정에는 기준선이 없음
    • 신규 계정은 전체 사용자 시간대 패턴을 쓰거나, 계정이 몇 달 쌓일 때까지 이 패턴을 건너뛸 수 있음

6. 윈도 함수로 신호 조합하기

  • 윈도 함수 패턴은 별도 사기 유형이라기보다, 앞선 다섯 패턴을 조합 가능한 신호로 만드는 준비 작업임
  • 거래별로 다음 파생 컬럼을 만들어둘 수 있음
    • 직전 거래 이후 경과 시간: timestamp - LAG(timestamp)
    • 가맹점 변경 여부: 직전 merchant_id와 현재 merchant_id 비교
    • 최근 24시간 누적 금액: SUM(amount) OVER (...)
    • 해당 날짜의 몇 번째 거래인지: ROW_NUMBER()
  • 이런 컬럼을 물리화하면 사기 규칙이 단순한 필터 표현식으로 줄어듦
  • 카드 테스트 조직은 다음 조건으로 찾을 수 있음
    • 하루 5번째 이상 거래
    • 직전 거래 후 60초 미만
    • 가맹점이 직전 거래와 다름
  • 새 사기 가설을 엔지니어링 티켓이 아니라 SQL 필터로 표현할 수 있으면, 반복 주기가 몇 주에서 몇 시간으로 줄어듦
  • 결과적으로 더 많은 사기를 더 빠르게 잡을 수 있음

패턴을 함께 쓰는 방식

  • 어느 한 패턴만으로는 충분하지 않음
  • 각 패턴에는 명확한 한계가 있음
    • Velocity는 자판기 운영자 같은 오탐이 있음
    • 지리적으로 불가능한 이동은 한 대도시권 안에서 벌어지는 사기를 놓침
    • 금액 이상은 카드 테스트 맥락 밖에서는 잘 맞지 않음
    • 비정상 시간대 규칙은 이력이 필요함
  • 실무에서는 모든 패턴을 돌리고 각 거래를 여러 신호에 걸쳐 점수화하는 방식이 동작함
  • 세 개나 네 개 신호에 걸리는 거래는 거의 항상 사기임
  • 한 개 신호에만 걸리는 거래는 여행 중인 정상 카드 소유자의 특이한 사용일 수 있음
  • 사기 탐지를 처음 시작한다면 Velocity부터 시작하는 것이 좋음
    • 유용한 양의 사기를 드러냄
    • 정상 활동은 비교적 적게 잡음
    • 실행 비용도 낮음
  • 이미 1번부터 5번까지 갖췄다면 다음 투자처는 윈도 함수 기반 원시 컬럼
    • 한 번 만들어두면 팀의 모든 분석가가 사용함
    • 다음 사기 패턴 추가가 별도 프로젝트가 아니게 됨

주의할 점

  • NULL 처리

    • 실제 거래 테이블은 SQL 입문서처럼 NULL을 쓰지 않는 경우가 많음
    • 많은 레거시 시스템은 “종료일 없음”에 9999-12-31, “시작일 없음”에 0001-01-01 같은 센티널 값을 사용함
    • IS NULL로 필터링하면 이런 행을 조용히 놓칠 수 있음
    • 특정 테이블의 관례를 확인한 뒤 WHERE 절을 작성해야 함
  • 오탐

    • 모든 규칙은 이상하지만 합법적인 행동을 하는 실제 카드 소유자를 잡을 수 있음
    • 플래그가 붙은 건에는 사람의 검토가 필요함
    • 실제 사기와 아닌 것을 기준으로 임계값을 조정하는 피드백 루프가 필요함
    • 단일 규칙으로 자동 차단하면 고객을 잃을 수 있음
  • 개인정보

    • 데이터에 PII가 있으면 적용되는 데이터 사용 정책을 지켜야 함
    • 먼저 비식별화 또는 샘플 데이터로 작업하고, 프로덕션 데이터는 승인 후 사용해야 함
  • 비용

    • 큰 파티션에서 윈도 함수는 저렴하지 않음
    • 먼저 날짜 범위를 필터링한 뒤 윈도 함수를 적용해야 함
    • 전체 데이터셋의 2년치 거래에 LAG()를 먼저 돌리고 나중에 WHERE를 붙이면 웨어하우스 크레딧 예산을 크게 소모할 수 있음

댓글과 토론

Hacker News 의견들
  • 실제 카드 소유자가 정확히 $1.00짜리를 거의 사지 않는다는 기준은 판매자가 가격을 어떻게 정하느냐에 달린 것 아닌가 싶음
    훔친 신용카드를 테스트하려고 웹사이트에서 뭔가를 살 때 구매자가 가격을 마음대로 정할 수는 없음
    또한 미국처럼 가격에 세금이 포함되지 않는 상황에 너무 맞춰 생각하는 듯하고, 다른 지역에서는 딱 떨어지는 가격이 매우 흔함
    글의 다른 기준들도 잘 작동할지 의문임. 예를 들어 최근 90일 안에 평소 2건 이상 거래하던 시간대 밖에서 거래한 사람을 표시한다면 사람 절반쯤이 걸리지 않겠나 싶음
    복잡한 전문 지식을 지나치게 단순한 SQL 질의로 풀어낸 글인지, 전부 추측과 창작인지 불분명함. “거래 사기를 잡는 데 쓰는 여섯 가지 SQL 패턴”과 “여기에는 내가 실제로 작업했거나 본 내용이 없다”는 문장이 서로 충돌함

    • “평소 시간대 밖 거래”는 꽤 기초적인 기준으로 보임
      보통 새벽 2시에 주유, 커피, 간식을 사지는 않지만, 아주 드물게 그런 일을 할 때는 개인적인 비상상황일 가능성이 크고 그 와중에 은행에 전화하고 싶지는 않음
      기회주의적 도둑도 그 시간에 활동할 수 있다는 건 알지만, 오탐 비용도 분명 존재함
    • 그보다 더 나쁨. 내 경험상 커피는 보통 딱 떨어지는 금액인 경우가 많고, 주유할 때 일부러 딱 맞는 금액을 넣는 사람도 있음
      또 10, 20, 50유로처럼 미리 정한 금액을 요구하는 주유소도 있음
    • 어느 날 밤 술집에서 배가 고파 감자칩 한 봉지를 사려 했는데 카드 최소 결제 금액이 £5라고 해서 그냥 £5로 결제해 달라고 했음
      그런데 사기로 의심된다며 카드가 막혔고 꽤 짜증났음. 새벽 2시에 취한 상태로 처리하고 싶은 일이 아니었음
      어쩌면 나 자신으로부터 보호해 준 것일 수도 있지만 그래도 불편했음
    • 지금도 쓰이는지는 모르겠지만, 예전에는 호텔이나 렌터카 같은 곳에서 방 예약이나 차량 대여 전에 $1.00 거래로 신용카드 유효성을 확인하는 경우가 있었음
    • 이 방식은 테스트 거래에 약간의 흔들림값을 넣으면 쉽게 우회 가능하고, 제대로 된 통계 분석으로 쉽게 개선할 수도 있음
      그리고 거의 100% 정확도를 기대하지 않는 이런 휴리스틱 패턴 인식이야말로 AI가 잘해야 하는 영역 아닌가 싶음
  • “10분 안의 국경 통과는 국제 조직”이라는 기준은 유럽의 국경 인접 지역에 사는 평범한 사람들에게도 해당될 수 있음
    카드 비대면 거래는 제외한다고 해도, 모든 가맹점 위치가 정확히 설정되어 있고 모든 판매가 오프라인 매장에서 일어나며 이동 판매 같은 건 없고 모든 거래가 온라인으로 처리된다고 잘못 가정하는 듯함

    • 몇 주 전 미국에서 캐나다로 넘어갈 때도 아마 10분 정도였음
  • 끝까지 읽어보면 내용이 비어 있고 서로 모순되는 조언이 드러남. 거의 확실히 LLM 생성 글 같음
    “당신의 팀”은 어떤 패턴 하나에도 의존하면 안 된다고 하면서도, 패턴 1만으로도 “유용한 양의 사기”를 드러낼 수 있다고 함
    “팀의 모든 분석가가 그것들, 즉 윈도 함수가 생기면 사용할 것이고, 다음 사기 패턴을 추가하는 일이 프로젝트가 아니게 된다” 같은 이상한 문장도 있음
    또 거의 모든 예제가 IS NULL을 쓰지 않는데도 IS NULL 필터링이 적용되지 않을 수 있다는 관련성 낮은 논의가 나오고, 유일하게 쓰는 예제도 다른 맥락임
    전반적으로 품질이 낮고 너무 긴 글

  • Hacker News, 이건 짚고 넘어가야 함
    “Fixel Smith”는 AI가 만든 인물이고, 글은 사기 분석과 거의 관련이 없음. 이 이름은 음악가(1), 소설가(2), 사기 분석가(3), 인플루언서(4) 등 상상할 수 있는 거의 모든 정체성으로도 쓰임
    220점 넘게 받고 댓글도 70개가 넘는데, 이 글이 꽤 가짜라는 걸 알아차린 사람이 거의 없고 AI 생성 인물이라는 점을 본 사람은 없음

    1. https://www.amazon.it/Forged-Soundtrack-Explicit-Fixel-Smith...

    2. https://fixelsmith.com

    3. https://analytics.fixelsmith.com/

    4. https://www.instagram.com/fixeltales/

    • Hacker News가 최근 이런 저품질 AI 투고를 올려주는 답답한 습관이 생긴 듯함
      이 AI 홍수가 커뮤니티의 판단력에 대한 불편한 진실을 드러내는 건지, 아니면 기존 방어 장치의 실패라서 바꾸기만 하면 되는 건지 궁금해짐
    • 휴대폰으로 글을 확인하다가 댓글만 살짝 봤음. 어떤 글이 AI 생성인지 편집된 것인지 항상 판단하기 쉽지는 않지만, 여기서는 인용문만 봐도 첫눈에 분명했음
      모든 댓글이 선의로 작성됐다고 가정하면, 여기서조차 AI 문해력이 낮다는 건 꽤 걱정스러움
    • 대충 봐도 매우 다작하는 개인이거나 봇처럼 보임
      소설은 분석 글과 거의 관련이 없고, 분석 글들은 LLM 문체를 띠는 듯해서 전체가 수상함. 원문의 주제가 사기라는 점을 생각하면 아이러니함
    • 대부분의 사람들이 읽는 글의 작성자를 습관적으로 조사한다고 하면 오히려 더 놀랄 것 같음
      솔직히 나는 보통 바이라인조차 보지 않고, 사이트의 다른 부분은 더더욱 안 봄
    • 이건 분명 실제로 존재하는 글임. 당연히 LLM이 쓴 것처럼 보이지만, 글에 대해 할 수 있는 최악의 비판이 LLM처럼 보인다는 것뿐이라면 실질적인 비판이 없는 셈일 수도 있음
      내용이 지어낸 것인지 아닌지는 불분명하지만, LLM이 썼는지 소설인지 추측하지 않고도 글의 내용을 비판할 수 있음. 훨씬 더 구체적인 결함이 많음
  • 우리는 오픈소스 보안 프레임워크 tirreno를 개발하고 있음
    여기서 설명한 접근에는 의문이 듦. 예를 들어 불가능한 이동은 정당하고 널리 쓰이는 기법이지만, 이는 IP 주소 기반의 온라인 사용자 행동과 관련 있음
    tirreno에는 IP가 Apple Relay나 VPN/Tor에서 온 것이 명확한 경우를 위한 별도 규칙이 있고, 그것들은 별도의 플래그임
    일부 또는 전체 예제가 LLM 생성이라고 봄. 맥락이 뒤섞여 있고, 카드 결제에서 GPS 위치를 대량으로 수집하는 곳은 실제로 없기 때문임

    1. https://github.com/tirrenotechnologies/tirreno
  • 이건 “근거 데이터 없이 SQL 질의로 인코딩한 규칙 기반 로직”에 가깝음
    임계값은 잔뜩 있지만, 그 임계값이 의미 있다는 데이터는 없음

  • “거래 데이터의 사기 탐지는 대부분 SQL이지, 머신러닝도 그래프 데이터베이스도 Gartner가 올해 띄우는 무엇도 아니다”라는 식의 단정은 프로그램 무결성 업무 전체를 다루는 경우에나 정당화될 수 있음
    문제 영역을 해결한다면 더 단순하고 거친 방식이 나을 수도 있음
    핀테크 고객은 보통 지금 일어나는 거래가 사기인지 알고 싶어 하고, 고차원 데이터에 대해 몇 밀리초 안에 답을 원함. 관계형 데이터베이스가 이런 실시간 제약을 맞추기 어려운 규모의 작업이고, 대신 과거 데이터 적재 같은 다른 용도로 쓰임
    그래서 인메모리 데이터베이스, 스트림 처리 엔진, 그리고 머신러닝까지 등장함
    그래도 글쓴이의 일부 지점은 타당하고, 특히 잡음 많은 알림을 다루는 문제는 성능 엔지니어링을 넘어선 일반 문제라 다음 글이 기대됨

    • 내 경험상 설명한 것은 더 구체적으로는 사기 탐지보다 사기 예방이라고 부르는 편이 맞음. 성숙한 구성에서는 둘 다 공존하고 서로 보완함
      예방에서는 항상 지연 시간 요구사항, 사용 가능한 데이터, 불완전한 사용자 행동 그림에 제약을 받음. 머신러닝과 규칙으로 빠른 결정을 내려 대부분의 경우를 처리하지만, 그런 제약 때문에 모든 사기를 정확히 막을 수는 없음
      탐지는 그 이후의 결과를 다룸. 분석가 팀이 승인된 거래를 분석해 사기 징후를 찾는 경우가 일반적임. 차지백이나 고객 불만 같은 외부 신호가 없는 사기 유형에서는 특히 중요함. 플랫폼 무결성이 그런 예이고, 핀테크의 자금세탁 방지 시스템도 사기를 찾아 나서야 함
      둘이 보완적이라는 이유는, 탐지된 거래가 다음 예방 모델을 학습하고 평가하는 레이블이 되기 때문임
  • 시카고에서 카드가 긁히고 7분 뒤 로스앤젤레스에서 다시 긁히면 둘 중 하나는 가짜라고 했는데, 온라인 쇼핑에서는 어떻게 작동하는지 궁금함
    소파에 앉아 Amazon에서 물건을 사면 주소는 어디로 등록되나?
    또 부부가 온라인 계정을 공유하고, 한 명은 여행 중에 저장된 카드 정보로 구매하는 경계 사례도 가능해 보임

    • 카드를 긁거나 꽂거나 탭하는 것은 카드 대면 거래임. 온라인 쇼핑처럼 카드 번호를 입력하는 것은 카드 비대면 거래임
      소매업체와 은행은 이 차이를 구분할 수 있음
    • 거래 메타데이터로 구분할 수 있음. 신용카드 회사에서 일해 봤음
    • 시스템이 카드 대면과 카드 비대면을 구분한다고 알고 있음
  • “이 방식은 이력이 쌓일 때까지 작동하지 않고, 신규 계정에는 기준선이 없다”는 건 과소평가된 고객 경험 요소임
    새 고객이거나 새로운 패턴을 보일 때 카드가 거절되면 소프트웨어가 잘한다고 느껴짐
    하지만 내가 인증한 과거 이력이 있는데도 거래를 거절하면, 순진하고 편집증적인 알고리즘 때문에 짜증남

    • 은행의 유인은 사기를 줄이는 것
      사기 거래는 결국 취소나 환불로 은행이 손실을 떠안게 됨. 거절된 거래는 화난 고객 한 명을 만들 뿐이고, 고객은 불평한 뒤 금방 잊음. 그래서 외부화된 비용의 부담은 고객에게 감
      따라서 은행은 더 조심하는 쪽으로 오류를 내고, 오탐이 있더라도 거래를 거절할 유인이 있음
  • 머신러닝의 핵심은 이런 규칙을 데이터에서 배우는 것 아닌가 싶음
    맞는 접근은 머신러닝 모델로 사기와 대응되는 패턴을 찾고, 그중 말이 되는 것이 있는지 평가하는 것이라고 봄. 그러면 새 가설을 발견할 수도 있음

    • 설명 가능하고 결정적으로 반복 개선할 수 없는 것은 금융 거래 거절 업무에 너무 위험함
      인간 분석가는 특정 거래가 왜 거절됐는지, 그리고 불리한 결정을 피하려면 무엇을 다르게 했어야 하는지를 컴플라이언스 팀에 5분짜리 이메일 하나로 설명할 수 있어야 함
      머신러닝으로 한 문제를 고치면 아직 뚜렷하지 않은 새 문제 두 개가 생기는 경우가 많음. 시간이 지나며 바뀔 때 회귀나 예상 못 한 부작용 측면에서는 SQL이 대체로 놀랄 일이 적음