결론부터 말하겠습니다. 제가 지금까지 죽는 걸 본 창고 AI 수요예측 프로젝트 가운데, 모델 선택이 틀려서 죽은 건 하나도 없었습니다.

요즘 창고 운영자들로부터 'AI 수요예측'에 대한 질문이 늘고 있습니다 — 수요 예측, 보충 제안, 인력 계획 추정치 같은 것들입니다. 데모는 항상 똑같습니다. 팀은 모델을 돌려가며 써봅니다 — 그래디언트 부스팅, Prophet, 유행하는 것들 — 하이퍼파라미터를 소수점 넷째 자리까지 튜닝합니다. 그러면 저는 질문 하나를 던집니다. '모델에 어떤 피처를 먹이고 있나요?' 돌아오는 스프레드시트는 대개 세 열입니다. 날짜, SKU, 매출.

그런 프로젝트는 시작부터 죽어 있습니다. 모델은 셰프이고, 피처는 재료입니다. 셰프에게 썩은 야채 바구니를 건네면 누가 요리하든 맛은 똑같습니다. 수요예측에서 진짜 일은 프롬프트 밖에 있습니다 — 데이터가 모델에 닿기 전에 아무도 하고 싶어 하지 않는 지루한 작업, 바로 피처 엔지니어링에 있습니다.

창고 데이터의 10분의 9는 모델에 바로 쓸 수 없습니다

2023년 저는 캘리포니아 온타리오에 있는 120,000제곱피트 규모의 3PL을 방문했습니다. 그들은 매출 예측 모델에 꽤 많은 돈을 썼습니다. 가동 3개월이 지나도, 현장에서 10년 넘게 일한 베테랑 운영 슈퍼바이저의 감을 이기지 못했습니다. '이 모델은 블랙 프라이데이가 뭔지도 몰라'라고 그는 말했습니다.

진단은 이렇습니다. 모델은 과거 주문량만으로 학습했습니다. 블랙 프라이데이? 시스템에 판촉 캘린더가 없습니다. 개학 시즌? 아무것도 없습니다. 항만 혼잡으로 입고가 2주 늦어지고 모든 보충 예측을 날려버리는 일? 당연히 아무것도 없습니다.

이게 첫 번째 함정입니다. 창고에서 가장 풍부한 데이터셋 — 과거 매출 — 은 가장 얇은 피처이기도 합니다. 무슨 일이 있었는지는 말해주지만, 왜 그런 일인지는 절대 말해주지 않습니다. 매출 곡선만 읽는 모델은 어제의 모양을 따라 그리고 내일의 모양을 찍어맞히는 일을 할 뿐입니다. 판촉, 재고 부족, 신규 SKU 출시 같은 구조적인 변화가 일어나는 순간 무너집니다.

그래서 어떤 모델이든 건드리기 전에, 데이터 기반부터 정리해야 합니다. 제가 고객에게 건네는 체크리스트는 이렇습니다.

SKU별·거점별 일일 매출 — 최소 2년분, 3년이면 더 좋습니다. 판촉 캘린더: 누가 정했는지, 할인 폭, 일수, 모든 이벤트. 재고 부족 기록 — 수요는 있었는데 재고가 없었던 날은 매출 0인 날이 아닙니다. 시스템은 둘 다 0으로 기록하지만요. 공휴일과 학교 방학(추수감사절은 매년 날짜가 바뀝니다). 날씨 데이터 — 지역 리테일 물류센터에서는 이상 기상이 수요를 크게 움직입니다. 항만과 간선 운송의 혼잡 — 수입 오퍼레이션에서는 이것이 입고 시기를 결정합니다. SKU별 반품 — 반품률이 높은 곳에서는 총매출과 순매출이 전혀 다른 이야기입니다.

이 목록의 절반 이상은 WMS 안에 없습니다. 마케팅팀의 스프레드시트, 운영 매니저의 머리 속, 포워더의 이메일에 있습니다. AI 이전에, 그것들을 모아서 구조화하고 하나의 테이블에 모아야 합니다. 지름길은 없고, 거대 언어 모델이 대신 해주지도 않습니다.

창고만의 '재료'

일반 튜토리얼은 래그 피처, 이동평균, 요일 플래그를 가르쳐줍니다. 다 하세요. 하지만 창고에는 고유의 맛이 있고, 튜토리얼에는 절대 나오지 않는 피처가 몇 가지 있습니다.

운송 중 재고. 시스템상의 '재고'와 '팔 수 있는 재고'는 종종 다릅니다. 수입 오퍼레이션에서는 컨테이너가 해상 운송으로 30일을 씁니다. 그 30일 동안 시스템 재고는 0을 가리키지만, 판매 계획은 그것을 0으로 다룰 수 없습니다. '주문했지만 아직 입고되지 않은' 운송 중 물량을 피처로 넣어, '재고는 적지만 걱정 없음'과 '재고가 적고 진짜 위험'의 차이를 모델이 배우게 합니다. 2024년 홍해 우회 당시, 한 가정용품 창고는 해상 운송이 35일에서 60일로 늘어났습니다 — 그런데 모델은 '보충이 필요 없습니다'라고 계속 조언했습니다. 상품은 아직 배 위에 있었습니다.

슬로팅 속도. 같은 SKU라도 골든 픽 존에서 팔릴 때와 최상단 랙에서 팔릴 때는 판매가 다릅니다 — 픽 효율이 이행 속도를 올리고, 속도가 재구매를 만듭니다. 아무도 잘 떠올리지 않는 피처입니다. '지난 30일간의 평균 픽 이동 거리', 혹은 단순히 '판촉용 엔드캡에 있었는지'. 그렇지 않으면 수수께끼일 매출 변동의 상당 부분을 흡수합니다.

이동 반품률. 의류나 신발 물류센터는 반품률이 20%대, 30%대인 경우가 있습니다. 총매출로 학습한 모델은 실제 수요를 체계적으로 과대평가합니다. '이 SKU의 지난 8주 반품률'을 넣어 모델이 그만큼을 깎아내는 법을 배우게 하세요.

재고 부족 플래그. 가장 자주 간과되지만 효과가 가장 큰 피처입니다. 매출 0인 날 — 수요가 없었던 건가요, 재고가 없었던 건가요? 시스템은 둘 다 0으로 기록합니다. '그날 판매 가능한 재고가 0이었는지'를 나타내는 이진 플래그가 없으면, 모델은 재고 부족에서 '이 SKU는 아무도 원하지 않는다'를 배우고, 다음번엔 안전재고를 더 적게 권합니다 — 죽음의 나선입니다.

창고 수요예측 대시보드를 검토하는 데이터 분석가

세 가지 일꾼: 래그, 이동 윈도우, 정렬

피처를 골랐으면 이제 구축입니다. 창고 수요예측은 세 가지 일꾼에 기대고 있으며, 조정 방법이 핵심입니다.

첫째, 래그 피처: 지난 N일간의 매출로 미래를 예측합니다. 7일이면 주간 리듬만 보이고, 90일이면 피처가 노이즈 투성이가 됩니다. 7, 14, 28부터 시작해서 검증 세트에서 어느 구간이 가장 기여하는지 확인하고 미세 조정합니다. 첫날부터 365일치를 전부 넣지 마세요 — 피처가 너무 많으면 모델은 학습 대신 암기를 시작합니다. 오버피팅으로 가는 지름길입니다.

둘째, 이동 윈도우: 지난 4주 평균, 지난 8주 최댓값, 지난 12주 표준편차. 이동 윈도우는 추세를 잡습니다. 하지만 4, 8, 12주 윈도우는 상관관계가 매우 높아서, 같은 얘기를 세 번 하는 셈입니다. 하나나 두 개면 충분합니다.

셋째 — 창고 색이 가장 짙은 것 — 시간 정렬: 원인과 결과를 맞추는 일입니다. 판촉은 11월 20일에 시작하지만, 재고 결정은 10월 하순에 내려졌습니다 — 피처의 타임스탬프는 이벤트 시점이 아니라 결정 시점을 반영해야 합니다. 이런 정렬은 창고마다 다릅니다. 운영팀, 구매팀과 한 자리씩 앉아 하나하나 매핑합니다. 피처 엔지니어링에서 가장 가치 있고, 가장 베끼기 어려운 부분입니다.

가장 조용한 죽음의 방식: 데이터 누수

'어떻게 하는지'는 끝났습니다. 이제 '프로젝트가 어떻게 죽는지'입니다. 데이터 누수는 수요예측 작업에서 가장 조용한 킬러이고, 죽을 때는 떳떳한 모습으로 죽습니다 — 검증 정확도가 너무 높아 모두가 축하하고, 그 뒤에 운영 환경에서 완전히 무너집니다.

전형적인 누수: '이번 달 실제 판촉 깊이'를 써서 '이번 달 매출'을 예측하는 것. 학습에서는 아름답게 잘 됩니다 — 깊은 판촉, 높은 매출. 하지만 예측 시점에는 다음 달 판촉 깊이가 아직 정해지지 않았습니다. 모델에 미래의 데이터를 먹이고 있는 겁니다. 그건 수요예측이 아니라 시간 여행입니다. 수정 방법은: 결정 시점에 알려진 '계획된 판촉'을 쓰거나, 피처를 기지·미지 버전으로 나누는 것입니다.

이동 윈도우에도 누수가 숨어 있습니다. 12월을 예측하면서 12월 첫째 주를 조용히 포함한 '지난 8주 평균'을 쓰는 것 — 예측 시점에는 존재하지 않는 데이터입니다. 점검은 단순하지만 효과적입니다. 학습의 각 행에 대해 '예측 시점에 이 숫자를 실제로 갖고 있을 수 있었을까?'라고 묻습니다. 아니라면 삭제합니다.

그리고 정규화 누수: 검증을 포함한 전체 데이터로 스케일링 통계량을 계산하는 것. 사소해 보이지만, 표본이 적은 SKU에서는 검증 점수를 몇 포인트 부풀립니다. 통계량은 학습 데이터로만 계산하고, 검증과 테스트에 적용합니다.

많으면 많을수록 좋을까? 트레이드오프를 이야기하자

인기 없는 결론 하나: 피처가 많다고 좋은 건 아닙니다.

한 번은 200개 피처 모델이 30개 피처 모델을 검증에서 2포인트 이기는 걸 봤습니다. 고객은 신이 났습니다. 그런데 세어보니, 60개 피처가 외부 피드 — 날씨 API, 혼잡 지수, 소셜 시그널 — 에 의존하고 있었습니다. 피드 하나가 떨어지거나, 포맷이 바뀌거나, 유료화되면 파이프라인을 다시 만들어야 합니다. 200개 피처 파이프라인에는 전담 데이터 엔지니어가 필요하고, 30개 피처면 운영팀이 혼자 감당합니다.

정확도 2포인트가 정규직 한 명 값어치를 할까요? 월 400,000주문이면 그럴 수도 있습니다. 30,000이면 아닙니다. 목표는 가장 정확한 모델이 아니라 — 조직이 계속 살려둘 수 있는 가장 정확한 모델입니다. 먼저 20~30개의 핵심 피처로 출시하세요. 운영에 올리고, 검증하고, 비즈니스 임팩트를 보고, 늘릴지 정합니다. 2년 동안 안정적으로 돌아가는 30개 피처 모델이, 3개월 뒤 아무도 유지보수하지 않는 200개 피처 모델을 이깁니다.

수락 시점에 정확도 숫자 하나를 뚫어져라 보지 마세요. 저는 고객에게 세 가지를 확인시킵니다. 첫째, 베이스라인을 이길 것 — '작년 같은 기간'이나 '지난 4주 평균' 같은 단순한 대안을 명확히 이겨야 합니다. 못 이기면 출시하지 않습니다. 둘째, 잘라볼 것 — 베스트셀러, 롱테일, 신규 SKU를 나눠서 따로 점수를 냅니다. 평균은 거짓말을 하고, 모델은 베스트셀러를 멋지게 맞히고 테일에서는 찍는 경우가 많습니다. 셋째, 비즈니스 가치를 증명할 것 — 정확도 5포인트 향상은 품절을 몇 건 줄이고, 사장 재고를 얼마나 줄입니까? P&L에 닿지 않는 지표는 허영입니다.

처음 한 마디로 돌아오자면, 틀린 모델이 당신을 죽이는 일은 드뭅니다. 틀린 피처는 항상 죽입니다. 다음에 누군가 창고 AI 수요예측을 들고 오면, 어떤 모델을 쓰는지가 아니라 피처 테이블이 어떻게 생겼는지를 물어보세요. 대답을 못 하면 그 프로젝트는 아직 '멋진 데모' 단계입니다. 진짜 장인정신은 언제나 프롬프트 너머에 있습니다.

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