일단 불평부터: Amazon의 재입고 제안은 진짜 수요 예측을 대신할 수 없다. 지난 피크 시즌에 잘 나가는 SKU를 8,000개 비축하라고 했다. 난 6,000개를 비축했는데 — 2,300개가 팔렸다. 나머지는 FBA 창고에 4개월간 묵혔고, 보관료만으로도 아팠다. 그날 배웠다. 재고 계획에서는 플랫폼보다 나 자신을, 감보다 모델을 믿으라고.

2025년에 카탈로그가 40개에서 200개 SKU로, 일일 주문이 300건에서 1,500건으로 늘었다. 감으로 엑셀에 재고 계획을 세운 결과는 예상 그대로였다. 품절률이 12%까지 치솟고, 인기 상품 하나가 21일간 품절됐고, 경쟁사가 우리 Best Seller 배지를 훔쳐 가는 걸 지켜봤다. 그 21일이 날린 주문이 약 9,000건. 계산은 이미 해봤다. 지금도 쓰리다.

그래서 2026년 1분기에 이를 악물고 진짜 예측 모델을 돌렸다 — 시계열과 머신러닝, 정면 승부. 결론이 의외일 수도 있다.

시계열 vs 머신러닝: 먼저 수요 예측 비교표

시계열 (이동평균 / 지수평활 / Prophet) 머신러닝 (XGBoost 등)
데이터 식욕 1–2년치 판매 기록으로 돌아감 2–3년치 + 외부 변수(가격, 프로모, 휴일, 트래픽) 필요
피처 엔지니어링 거의 없음, 바로 사용 가능 직접 만든다: 프로모 플래그, 가격 변동, 카테고리 이벤트, 전부
실측 WAPE 18% 12%
도입 비용 엑셀로 반나절 3주간의 튜닝(내 심야 시간)
유지보수 거의 제로 대형 프로모마다 재학습, 안 하면 정확도가 절벽으로 추락

WAPE = 실제 판매 대비 예측 오차 비율, 낮을수록 좋다. 같은 120개 SKU, 2년치 기록, 같은 테스트 기간에 둘 다 돌렸다. 공정한 싸움이었다.

표를 옆으로 읽어라: 먼저 '데이터 식욕' 행 — 이게 관문이다. 여기를 못 넘으면 나머지는 무의미하다. 다음 '실측 WAPE' — 이게 수익이다. 다음 도입과 유지 비용 — 이게 대가다. 관문 × 대가 vs 수익: 이 계산을 해보면 선택은 스스로 정해진다.

머신러닝이 6점 차로 이겼다. 좋아 보이지 — 하지만 들뜨기 전에 전체 계산을 해보자: 3주간의 튜닝과 피처 작업, 대형 프로모마다 재학습(안 하면 정확도가 주가처럼 미끄러진다), 그리고 롱테일 SKU에서는 ML의 정확도 개선이 2점 미만 — 순수한 연극이었다.

그래서 실제 구성은 이렇다: 상위 20개 SKU(매출의 70%)는 XGBoost로, 주간 갱신. 나머지 100개는 이동평균 + 15% 안전재고 — 10분 작업이다. 아낀 시간은 공급업체 결제 조건 협상에 썼다 — 30일에서 45일로. 확보된 현금 흐름이 그 2점의 정확도보다 가치가 있다.

가득 찬 선반이 늘어선 창고 통로, 휴대 단말기로 순환 실사를 하는 작업자

머신러닝에 손대지 말아야 할 때

역설적인 판단이다: SKU가 ~100개 미만이거나 하루 주문이 ~500건 미만이면, 머신러닝은 모기를 잡는 대포다.

왜냐고? ML은 데이터를 먹고 사는 짐승이다. 굶기면 감보다 못하다. 연간 400개 팔리는 롱테일 SKU가 있었다 — XGBoost가 자신 있게 1,200개를 예측했다. 우연한 작은 스파이크를 패턴으로 착각한 거다. 이런 SKU에는 정직한 이동평균이 이긴다: 파는 만큼 비축하고, 15% 안전재고를 더하고, 끝.

시계열조차 도움 안 되는 카테고리가 두 개 더 있다: 신상품(기록 없음 — 모델은 눈이 멀었다)과 강한 계절 상품(할로윈 의상은 9월에만 깨어나고, 매년 곡선이 다르다). 이런 것들은 모델을 건너뛰어라. 카테고리 리듬을 보고, 안전재고는 넉넉히, 첫 소량으로 테스트해라.

자학 개그 하나. 2026년 3월에 신상품을 냈다 — 기록 제로. XGBoost는 그래도 카테고리 평균으로 '첫 발주: 4,000개'라고 자신 있게 말했다. 안 믿고 1,500개를 발주했다. 900개가 팔렸고, 나머지 600개는 아직 안 빠졌다. 모델을 믿었으면 4,000개가 현금 흐름을 납작하게 만들었을 거다. 신상품 단계에서 모델의 자신감은 순수한 연극이다. 첫 소량, 2주간 판매 추이를 보고, 재발주 — 어떤 모델보다 낫다.

한 줄: 데이터는 모델의 밥이다. 먹이를 못 줄 짐승은 키우지 마라.

나쁜 수요 예측이 연간 실제로 얼마를 먹는지

품절: 하루 품절 = 일일 판매량 × 단위당 마진. 21일간 품절된 SKU는 하루 430개, 개당 약 $4 마진 — 21일간 $36,000의 마진이 사라졌다. Best Seller 순위를 잃고 다시 올라가는 데 필요한 추가 광고비는 별도다.

과잉 재고: FBA 장기 보관료 + 묶인 현금. 남은 3,700개가 4개월 묵었다. 보관료는 작은 쪽이다. 큰 쪽: 개당 $6 × 3,700개 = $22,000의 현금이 그 자리에서 얼어붙었다 — 피크 시즌 신상품을 잡는 데 필요했던 돈이다.

그 3,700개의 최후는? 30% 가격 인하와 두 달간의 땡처리. 마진은 거의 제로로, 처분용 광고비까지 얹어서. 이게 나쁜 예측의 전체 비용 체인이다: 품절은 주문을 잃고, 과잉은 현금을 얼리고, 땡처리는 마진을 죽인다. 세 번의 상처, 모두 깊다.

그래서 예측 정확도 1점은 진짜 돈이다. 우리 WAPE는 18%에서 12%로, 품절률은 12%에서 7%로 — 한 분기에 구한 주문이 그 3주간의 모델 작업값을 충분히 남기고도 지불했다.

규모 얘기를 하나: 판매자들이 'ML이 본전을 뽑냐'고 자주 묻는다. 우리 경우는 20개 SKU가 매출의 70%를 차지해서 계산이 맞았다. 매출이 200개 SKU에 납작하게 흩어져 뚜렷한 헤드가 없으면, 튜닝 비용이 정확도 이득을 먹어버린다. 집중이 대포를 쏠 만한 가치를 만든다.

함정: 모델이 하는 말을 다 믿지 마라

세 가지 함정, 전부 직접 밟았다.

첫째, 데모 정확도를 믿지 마라. 표본 내 적합 수치는 종이 호랑이다 — 미래의 진짜 데이터를 만나기 전까지는 화려하다. 표본 외 테스트 결과만 봐라. 나머지는 전부 연극이다.

둘째, Prime Day 같은 이상값은 따로 플래그를 세워라. 2025년에 한 SKU가 Prime Day에 평소 일일 판매량의 20배를 팔았다. 그걸 표시 없이 모델에 먹이면 매일 크리스마스인 줄 안다 — 천장까지 재고가 쌓인다.

셋째, 모델의 모든 출력은 사람을 거친다. XGBoost가 5,000개를 비축하라 해도, 나는 3,500개로 깎는다 — 공급업체 리드타임이 45일에서 30일로 줄었는데 모델은 그걸 모르니까. 모델은 데이터를 이해한다, 현장은 이해 못 한다. 최종 판단은 역시 내 몫이다.

넷째, 모델에 먹이기 전에 데이터를 청소해라. 첫 실행에서는 반품과 취소 주문이 '매출'에 섞여 있었다 — 모델이 현실보다 8% 높은 수요를 학습해서 예측이 전부 무거웠다. 이제는 매주 실행 전에 반품과 취소를 제거한다. Garbage in, garbage out — 예측만큼 이 말이 진실인 곳은 없다.

직접 해봤고, 된다. 헤드 SKU는 머신러닝, 롱테일은 이동평균, 이상값은 따로 플래그, 모든 출력은 사람이 승인 — 이 네 가지 규칙에 $36,000의 수업료를 냈다. 예측 모델은 마법이 아니다. 그냥 잠 안 자고 밤새 숫자를 돌릴 수 있는 동료다. 그리고 아무리 훌륭한 동료라도, 배의 키를 잡는 건 결국 선장이다.

Ah K, 이커머스 셀러(5년차) 지음

영어판 번역본입니다. 내용이 다를 경우 영어판을 우선합니다.