행인로 개인 작업실

산수는 맞았는데 살 수 없는 물건이었다

해외 중고 매물을 상시 감시해서 국내 착지원가 기준으로 남는 것만 골라내는 수집기를 지었다. 배관은 30분마다 매물을 모으고, 그 위에 관세·부가세·환율을 얹어 실제로 이득인지를 판정한다. 데모 데이터로 배관을 처음부터 끝까지 돌려본 날, 1위로 뜬 것이 문제를 보여줬다.

1등 매물은 “for parts / not working” — 부품용이라 작동하지 않는 카메라 바디였다. 시세 대비 74% 할인, 계산된 투자수익률(ROI) 132%. 산수를 하나씩 다시 짚어봤다. $280.40를 그날 환율 1,467.33원으로 환산하면 411,439원, 관세 8%가 32,915원, 부가세가 44,435원, 합계 493,729원 — 검산까지 정확히 일치했다. 계산은 처음부터 끝까지 맞았다. 물건이 틀렸을 뿐이다.

구조 자체가 함정을 1등으로 올린다

문제는 계산 실수가 아니었다. 어떤 카테고리든 가장 싼 매물은 ROI 랭킹에서 항상 1등으로 오른다 — 산수가 산수이기 때문이다. 그 매물이 무엇인지 걸러내는 장치가 없으면, 도구가 가장 자신 있게 내놓는 추천이 구조적으로 가장 못 믿을 추천이 된다. 함정 자동 추천기가 딜 파인더의 탈을 쓰고 있는 셈이다. 그래서 screen.py를 신설해 이런 매물을 걸러내는 자리를 만들었다.

필터는 시세를 내기 전에 있어야 한다

처음에는 판정 단계에서만 걸렀는데, 그 시점이면 이미 부품용 매물이 중앙값을 아래로 끌어내린 뒤였다. 순서를 바꿔 제목에서 오염 신호를 먼저 걷어내고 그다음에 중앙값을 내도록 고쳤다. 오염 제거는 평균을 내기 전에 해야 한다 — 순서가 뒤바뀌면 멀쩡한 매물이 “시세보다 비싸다”로 잘못 보인다.

묶음 판매 매물을 걸러내는 정규식도 새고 있었다. bundle of만 잡느라 bundle with lens and bag 같은 표현이 통과했고, 그것들이 시세를 위로 밀고 있었다. 정규식을 \bbundle\b로 넓히자 두 품목의 가격 산포가 눈에 띄게 줄었다.

품목가격 산포 (수정 전 → 후)중앙값 (수정 전 → 후)
Sony A7 III0.210 → 0.122$1015.18 → $1007.38
Ricoh GR III0.233 → 0.136$806.80 → $767.83

리코 GR III는 실제로 $39가 부풀어 있었다. 하지만 숫자보다 더 중요한 신호는 산포가 절반으로 줄었다는 사실이다 — 오염된 매물이 빠지자 중앙값 자체가 더 믿을 만한 값이 됐다.

데모 조건에서 전부 PASS로 나온 것이 정답이었다

배관을 다 고친 뒤, 그날 실시간 환율 1,467.33원 기준으로 A7 III의 착지원가를 계산하니 국내 판매가 추정치를 넘어섰다. 판정은 “사지 마라”였다. 처음엔 이것도 뭔가 잘못된 게 아닌가 싶었지만, “사지 마라”를 낼 수 있어야 도구다. 언제나 “사라”만 내놓는 계산기는 계산기가 아니라 광고다.

지금은 eBay 실키가 없어 데이터가 전부 데모이고, 배대지·카드수수료 같은 비용 모델의 숫자도 추정치일 뿐 검증되지 않았다. 다음 단계는 실제로 한 건을 사서 영수증으로 그 숫자를 교정하는 것이다 — 이 숫자가 결국 이 도구의 전부다.