프로젝트 개요
2020.01 — 2020.03
백엔드 3
서비스 개발 참여
들어가며
가격이 데이터가 되는 순간, 이상 가격도 데이터가 됩니다. 이 글은 쿠팡의 다이나믹 프라이싱 시스템에서 발생하는 이상 가격을 자동으로 탐지하기 위해 Z-Score 알고리즘 기반 파이프라인을 설계하고 구현한 과정을 SBI(Situation → Behavior → Impact) 구조로 정리한 기록입니다.
Situation — '가짜 낮은 가격'이 시스템을 속인다
수동 모니터링으로는 막을 수 없는 구조
쿠팡은 타 플랫폼과 가격을 자동으로 맞추는 다이나믹 프라이싱(Dynamic Pricing) 정책을 운영합니다. 이 시스템은 외부에 등록된 가격을 기준으로 자동 조정하는 구조인데, 문제는 그 기준 가격 자체가 잘못될 수 있다는 점이었습니다. 예를 들어 판매자가 3개 묶음 상품을 1개 단품 가격으로 잘못 등록하면, 다이나믹 프라이싱이 그 비정상적으로 낮은 가격을 기준으로 따라 내려가면서 회사에 경제적 손실이 발생했습니다.
기존에는 이런 이상 가격을 담당자가 수동으로 모니터링해야 했습니다. 수백만 건의 가격 데이터가 실시간으로 변동하는 환경에서 사람이 직접 이상을 탐지하는 것은 본질적으로 한계가 있었고, 조기 발견 및 즉각 대응이 어려운 구조였습니다.
"가격이 이상하다는 것을 알았을 때, 이미 다이나믹 프라이싱이 그 가격을 기준으로 조정을 마친 뒤였습니다."
Behavior — 수집 → 분석 → 리포팅 3단계 파이프라인 설계
1단계: 실시간 데이터 수집
수백만 건의 주문·가격 데이터를 Kafka를 통해 실시간으로 수집했습니다. Redis에 5분 단위의 집계를 수행하고, Couchbase 검색 엔진으로 시간대별·카테고리별 그룹핑을 처리하여 분석에 필요한 데이터 구조를 만들었습니다.
2단계: Z-Score 기반 이상 탐지 알고리즘 설계
이상 탐지 알고리즘 설계는 이 프로젝트에서 가장 핵심적인 기술적 기여였습니다. 먼저 '이상'의 기준을 명확히 정의했습니다. 원가 대비 과도한 가격 변동, 마진율 급락, 비정상적인 판매량 급증을 이상 신호로 정의하고, Z-Score 통계 기법을 활용하여 데이터 분포에서 벗어난 이상치를 탐지하도록 설계했습니다. 카테고리와 시간대에 따라 적용되는 정상 가격 범위(Threshold)를 동적으로 계산함으로써 탐지 정확도를 높였습니다.
3단계: 자동 리포팅 및 알림
분석 결과를 백오피스 대시보드에 실시간으로 반영하고, 이상 가격 탐지 시 유관 부서에 자동으로 이메일 알림을 발송하는 리포팅 시스템을 구축했습니다. 담당자가 대시보드를 직접 확인하지 않아도 이상 징후를 즉시 인지할 수 있는 환경을 만들었습니다.
Impact — 수동 모니터링의 시스템화와 특허 등록
이상 가격 탐지 업무가 완전히 자동화되었습니다. 담당자가 수동으로 수행하던 모니터링을 시스템이 대체하면서 운영 효율성이 높아졌고, 이상 가격 발생 즉시 관련 부서가 실시간 알림으로 인지하고 대응할 수 있는 환경이 갖춰졌습니다. 기존에는 몇 시간에서 하루가 걸리던 이상 탐지가 실시간으로 이루어지게 된 것입니다.
또한 이 프로젝트에서 개발한 이상 탐지 알고리즘이 특허로 등록되었습니다. Z-Score를 기반으로 가격 이상치를 동적으로 판별하는 방법론이 기술적 차별성을 인정받은 결과였습니다.
핵심 교훈
- 이상의 기준을 먼저 정의해야 알고리즘이 만들어집니다. '이상'을 수치로 정의하는 것이 기술 구현보다 선행되어야 합니다. 이 과정에 비즈니스 도메인 이해가 필수적이었습니다.
- 동적 Threshold는 단순 고정값보다 훨씬 강력합니다. 카테고리와 시간대에 따라 달라지는 정상 가격 범위를 고정값으로 정의했다면 오탐(False Positive)이 훨씬 많았을 것입니다.
- 탐지와 알림은 함께 설계해야 합니다. 아무리 정확한 탐지 알고리즘도 결과가 사람에게 즉시 전달되지 않으면 실전에서 가치를 발휘하기 어렵습니다.
정리하며
이 경험은 데이터 기반의 이상 탐지 시스템이 사람의 한계를 어떻게 구조적으로 보완하는지를 직접 설계하고 검증한 계기였습니다. 통계적 기법을 코드로 구현하고, 그 결과를 현업이 실제로 사용할 수 있는 형태로 만드는 과정에서 알고리즘이 비즈니스와 만나는 지점을 체감했습니다.