카드픽
METHODOLOGY · Trust Gate v1

데이터 방법론

카드픽의 가격은 단순 "최근 listing" 가격이 아닙니다. distinct 표본 수 + clean median + MAD outlier 제거 + price-band ratio gate로 4단계 신뢰도 등급을 산출해 표시합니다. 이 알고리즘으로 ₩152 같은 단일 listing outlier가 화면에 노출되는 사고를 자동 차단합니다.

1. 표본 정의 (distinct count)

같은 listing이 매일 적재되더라도 "다양성"은 늘지 않습니다. 카드픽은 단순 row count 대신 distinct (variant + date + source) 조합으로 표본을 정의합니다.

distinct_7d  = count(distinct (variant, date, source))
                 WHERE fetched_at > now() - interval '7 days'
distinct_30d = count(distinct (variant, date, source))
                 WHERE fetched_at > now() - interval '30 days'

예: 같은 variant·같은 source·같은 날 적재된 같은 가격은 1건으로 dedupe. 다양한 날·다양한 source에서 가격이 모이면 표본 수 증가.

2. Clean Median + MAD Outlier 제거

평균(mean)은 outlier에 오염됩니다. ₩152 같은 단발 outlier가 평균에 들어가면 다음 계산에서 또 오염을 만듭니다 (재귀 오염). 카드픽은 평균 대신 median + MAD (Median Absolute Deviation)를 사용합니다.

median = percentile_cont(0.5) over price_30d
MAD    = median(|p - median|) for p in price_30d
clean  = price_30d 중 |p - median| < max(3 × MAD, median × 5%)
clean_median = median(clean)
clean_n      = count(clean)

MAD 게이트로 outlier 자동 제거 후 남은 데이터의 중앙값을 사용합니다. max(3×MAD, median×5%)는 MAD가 0인 경우 (모든 가격 동일)에도 5% 폭 허용.

3. Price-band별 Ratio Gate

저가 카드와 고가 카드는 자연 변동률 폭이 다릅니다. 카드픽은 가격대별 차등 ratio gate를 적용합니다.

가격대허용 범위이유
< ₩3,000절대차 |new - median| < ₩5,000저가 카드는 배송비/상태로 변동 폭 큼, 절대값 기준 필요
₩3,000 ~ ₩50,0000.3배 ~ 3.0배일반적 변동 허용
> ₩50,0000.5배 ~ 2.0배고가 카드일수록 변동 폭 좁힘 (신뢰성 우선)
function cardpick_ratio_gate(p_new, p_median):
  if p_new is null or p_median is null: return false
  if p_median < 3000: return abs(p_new - p_median) < 5000
  if p_median < 50000: return 0.3 <= p_new/p_median <= 3.0
  else: return 0.5 <= p_new/p_median <= 2.0

4. 4단계 신뢰도 등급 산출

등급조건표시 가격화면 라벨
HIGH distinct_7d ≥ 5 AND ratio gate 통과 latest_krw (최신 가격) "현재 참고가 ₩X"
MEDIUM distinct_30d ≥ 10 clean_30d_median "최근 1개월 중앙값 ₩X"
LOW distinct_30d ≥ 5 clean_30d_median "30일 중앙값 ₩X ⚠ 표본 부족"
NONE distinct_30d < 5 null (가격 숨김) "참고가 산출 불가"

5. 신뢰도 분포 (매일 변동)

신뢰도 등급 분포는 가격 수집과 정제 결과에 따라 달라집니다. 특정 등급의 카드 수가 계속 늘거나 줄어든다고 가정하지 않으며, 각 집계 시점의 결과만 사용합니다.

분포는 고정 수치로 적지 않습니다. 등급별 카드 수를 확인할 때는 /facts/site JSON의 catalog.last_count_atcatalog.trust_distribution을 함께 확인해야 합니다.

6. 운영 기준 요약

7. 이미지·상표 안내

8. 절대 사용하지 않는 패턴

9. 알고리즘 보강 이력

Trust Gate v1은 코드 리뷰와 실제 운영 중 발견한 오류를 바탕으로 다음 항목을 보강했습니다.

10. 자주 묻는 질문

NONE 등급이 왜 이렇게 많나요?

서로 다른 날짜·variant·source 조합의 표본이 기준보다 적으면 NONE으로 분류합니다. 데이터가 추가돼도 이상치 제거 과정에서 유효 표본이 부족할 수 있으며, 다음 산정 때 조건을 충족한 카드만 다른 등급으로 변경됩니다.

왜 평균(avg) 안 쓰나요?

평균은 outlier에 오염됩니다. ₩152 같은 단발 outlier가 평균에 들어가면 다음 계산의 prev_avg가 또 오염되어 재귀적으로 잘못된 가격을 정상으로 인식하게 됩니다. 카드픽은 median + MAD로 outlier 자체를 제거합니다.

price_low / price_high는 신뢰 가능?

카드 상세 페이지의 "최저 (raw USD)" / "최고 (raw USD)"는 TCGplayer 단일 listing 원천값입니다. outlier 가능성이 있어 별도 라벨 처리합니다. 신뢰도 검증된 가격은 표시 가격(latest_krw 또는 clean_30d_median)을 참고하세요.


질문 · 알고리즘 정정 제안: admin@cardpick.kr · 알고리즘 마지막 검토 2026-09-04