AWS 기술 블로그
수요 패턴이 수요 모델을 고른다: Amazon Connect Decisions로 살펴보는 Agentic Demand Forecasting
들어가며
수요 예측 시스템을 도입해 본 기업이라면 익숙한 패턴이 있습니다. 도입 첫해, 컨설턴트와 함께 수개월에 걸쳐 데이터를 정비하고 모델과 파라미터를 최적화합니다. 시스템은 그 시점의 비즈니스를 잘 반영하여 정확하게 예측합니다.
문제는 신규 채널에 진출하고, 프로모션 전략이 바뀌고, 신제품이 출시되고, 주력 상품의 라이프사이클이 끝날 때에 발생합니다. 비즈니스는 계속 변화하는데, 시스템은 구축 시점의 스냅샷에 멈춰 있습니다. 시스템의 예측을 믿지 못하는 현장 플래너가 매주 엑셀 시트에 숫자를 수정합니다. 그 조정 과정에서 나오는 “다음 달 행사를 한다”, “이 상품은 시즌이 끝나간다”와 같은 귀중한 현장 지식은 엑셀 시트에만 저장될 뿐, 시스템이 학습하진 못합니다.
점점 벌어진 비즈니스와 시스템 간의 차이를 메꾸려면, 또 한번의 재구축 프로젝트의 집행과 어떻게 고칠지를 판단할 수요 예측 전문가가 필요합니다. 안타깝게도 많은 경우에 둘 다 갖추기는 어렵습니다.
이에 아마존이 30년 동안 4억개 이상의 SKU를 운영하여 쌓은 공급망 노하우가 적용된 Agentic AI서비스인 Amazon Connect Decisions(ACD)를 출시하였습니다. ACD 내의 AI Teammates가 반세기 검증된 통계 기법부터 최신 시계열 파운데이션 모델까지 18종 이상의 예측 도구를 후보로 두고, SKU마다 진단한 패턴에 맞춰 동적으로 오케스트레이션 하여 item 단위로 forecast를 만듭니다.
그래서 이 글은 다음 순서로 진행합니다. 진단·측정·처방·신호의 각 단계에서 사람이 어떤 작업을 하는지 짚고, 바로 그 자리에서 그 일을 ACD에 올려 돌린 결과를 화면으로 확인합니다. 그리고 마지막에, 이 단계 전부를 매 사이클 자동으로 오케스트레이션하는 것이 agentic forecasting임을 봅니다.
| 단계 | 무엇을 하나 | 핵심 도구 |
| 1. 진단 | SKU별 수요 패턴을 분류 | ADI × CV² 4사분면 |
| 2. 측정 | 좋은 예측의 기준을 정의 | WAPE(크기) + Bias(방향) |
| 3. 처방 | 패턴에 맞는 예측 기법 적용 | Croston류, ETS/ARIMA, 편향 보정 |
| 4. 외부 신호 | 프로모션·캘린더 등 반영 | demand drivers (covariate) |
| 5. 오케스트레이션 | 위 전부를 SKU별로 자동 선택 | agentic ensemble |
표 1: 진행 단계
따라가며 볼 예시: AnyFashion
추상적인 설명만으로는 와닿지 않으니, 이 글은 가상의 패션 리테일러 AnyFashion의 수요 데이터를 활용합니다. AnyFashion은 베이직(기본 티·양말), 트렌드 의류(시즌 원피스·블라우스), 한정판 콜라보, 비인기 사이즈 슈즈까지 성격이 제각각인 SKU를 팝니다. 바로 “한 데이터셋 안에 여러 패턴이 섞인” 전형적인 경우죠.
데이터에 관하여: AnyFashion은 가상의 회사이고, 이 글의 모든 수치는 전형적인 패션 리테일 수요 패턴을 본떠 만든 합성 데이터입니다. 다만, 패턴의 통계적 성격(발생 간격, 변동성, 시즌 추세)은 현실 데이터에서 관찰되는 것을 충실히 반영했습니다. 그리고 각 단계마다 이 데이터를 Amazon Connect Decisions에 올려 돌린 결과를 화면과 함께 보여드립니다.
1. 진단 – 왜 특정 SKU의 예측력은 항상 떨어질까?
예측 오차가 큰 SKU들을 개별적으로 분석해보면, 모델 자체의 결함보다는 수요 패턴의 본질적인 차이인 경우가 많습니다. 매주 꾸준히 발생하는 수요와 간헐적으로 발생하는 수요는 애초에 접근 방식부터 달라야 하는 별개의 문제입니다. 따라서 분석에 앞서 “해당 SKU가 어떤 수요 유형에 속하는가”를 정량적으로 분류해야 합니다. 이 때 주로 활용하는 두가지 핵심 지표가 있습니다.
- ADI (Average Demand Interval, 평균 수요 발생 간격): 수요의 발생 빈도를 나타냅니다. 전체 기간을 실제 수요가 발생한 횟수로 나누어 산출합니다.
- ADI = 전체 기간 수 / 수요가 발생한 버킷 수
- CV² (Squared Coefficient of Variation, 변동계수의 제곱): 수요가 발생했을 때 그 크기가 얼마나 들쭉날쭉한 지를 봅니다. 발생한 수요량의 변동계수 (표준편차÷평균)를 제곱합니다.
- CV² = (발생시 수요량의 표준편차 / 발생시 수요량의 평균)²
ADI × CV² 4사분면
이 두 지표를 축으로 삼아 기준치(Threshold)에 따라 영역을 나누면 총 네 가지의 수요 패턴이 도출됩니다. 학계에서 표준으로 사용하는 임계값은 ADI 1.32, CV² 0.49이며, 이를 제안한 연구자들의 이름을 따서 SBC(Syntetos-Boylan Classification) 분류법이라고 부릅니다. Amazon Connect Decisions도 이 학술적 방법론에 기반한 임계값을 활용해 SKU의 수요 패턴을 자동으로 분류하고 있습니다.
참고: ACD의 전신인 AWS Supply Chain Demand Planning 문서에 이 4분류와 임계값(ADI 1.32, CV² 0.49)이 명시돼 있습니다. 최신 ACD User Guide는 알고리즘 세부를 별도 노출하지 않습니다. 본문의 “SBC” 명칭은 학술 표준을, 임계값은 이 전신 문서를 근거로 합니다

그림 1: 수요 패턴 분류
ADI(발생 간격)와 CV²(크기 변동성) 두 축으로 SKU를 네 패턴으로 나눕니다. 각 분면의 미니 차트가 그 패턴의 전형적인 수요 모양입니다. 왼쪽 아래(Smooth)로 갈수록 예측이 쉽고, 오른쪽 위(Lumpy)로 갈수록 어렵습니다.
이론은 이렇고, 실제 데이터에 적용하면 어떻게 될까요? AnyFashion의 SKU들을 이 두 축으로 찍어보면 한눈에 파악이 됩니다.

그림 2: AnyFashion SKU를 ADI × CV²로 분류한 결과
베이직(티·양말·레깅스)은 좌하단 Smooth, 트렌드 의류(DRESS-TREND-FW: 원피스·블라우스 등)는 우하단 Erratic, 한정판 콜라보(COLLAB-LTD-01)는 우상단 Lumpy, 비인기 사이즈 슈즈(SHOE-SZ-EXTREME)는 좌상단 Intermittent에 떨어집니다. 이 진단 한 장이 가설을 만들어줍니다. 잘 맞을 SKU는 Smooth(베이직) 쪽이고, 어려울 SKU는 변동성 큰 Erratic·Lumpy(트렌드 의류·한정판) 쪽일 겁니다.
한 축이 더 있다: product lifecycle (추세 전환)
SBC 분류는 강력하지만, 수요의 “모양”(발생 빈도·크기 변동)만 봅니다. 그런데 패션·리테일에는 한 축이 더 있습니다. 바로 시간에 따른 방향, 즉 product lifecycle(추세 전환)입니다.
시즌 트렌드 원피스를 생각해봅시다. 출시 직후 수요가 폭발적으로 늘었다가, 시즌이 끝나갈 수록 수요가 줄어듭니다. 이 SKU는 SBC상으로는 Erratic(자주 팔리되, 판매량의 변동성이 큼)으로 분류되지만, 그것만 고려하면 “방향이 바뀐다”는 핵심 특성을 놓칩니다. 같은 Erratic이라도, 수준이 일정하게 변동하는 SKU와 시즌 끝물로 우하향하는 SKU는 예측 난이도가 전혀 다릅니다.
이 차이가 중요한 이유는, 이런 추세 전환을 놓치는 것이 흔한 예측 실패의 원인이기 때문입니다. 모델이 직전의 높은 수요를 그대로 미래로 적용하면, 추세가 꺾인 뒤에도 과대예측을 합니다. 패션에서 이건 곧 시즌오프 재고입니다. 그렇기 때문에 SBC 분류로 “Erratic이네”까지 본 다음에는 “이게 lifecycle상 어느 국면인가?”를 한번 더 물어야 합니다.
2. 측정 – “개선됐다”고 하려면, 먼저 뭘 재야 하나
진단을 했으니 이제 적절한 처방을 해야겠죠? 이 “적절한”을 평가할 측정 기준을 정해야 합니다. 흔히 쓰는 MAPE(평균 절대 백분율 오차)는 lumpy/intermittent 수요에는 사용하기 어렵습니다. 실제 수요가 0인 구간에서 0으로 나누게 되고, 작은 값에서는 백분율이 급격히 증가하기 때문입니다.
WAPE와 Bias
대신, 두 지표를 쌍으로 활용합니다. 하나는 오차의 크기를, 다른 하나는 오차의 방향을 잡아냅니다.
- WAPE (Weighted Absolute Percentage Error): 전체 기간의 |예측 − 실측| 합계를 실측 합계로 나누기 때문에, 특정 주차의 실측 값이 0이더라도 분모가 0이 되는 오류(Zero Division)가 발생하지 않습니다.
- WAPE = Σ|forecast − actual| / Σ|actual|
- Bias:전체 기간의 (예측 − 실측) 합계를 실측 합계로 나누기 때문에 오차의 부호가 그대로 유지되므로, 결과가 양수(+)이면 과대 예측(over-forecast)을, 음수(-)이면 과소 예측(under-forecast)을 의미합니다.
- Bias = Σ(forecast − actual) / Σ|actual|
WAPE은 오차의 크기(얼마나 틀렸는가)를 보고, Bias는 오차의 방향(어느 쪽으로 틀렸는가)를 측정합니다. 당연히 두 지표 모두 낮을 수록 이상적인 모델입니다. 특히, Bias가 한쪽으로 쏠려 있다면, 이는 단순한 무작위 오차(Random Error)가 아니라 모델이 체계적으로 놓치고 있는 패턴이 있다는 뜻입니다. 무작위 오차는 줄이기 어렵지만, 체계적 오차는 원인을 찾아 고칠 수 있습니다.
왜 꼭 쌍으로 보는가
WAPE과 Bias를 하나만 선택해서 모델을 평가하면 함정에 빠집니다.
- 상쇄 함정: 매 기간 크게 틀려도 +와 −가 상쇄되면 Bias는 0 근처로 “괜찮아 보입니다”. 이 정체는 WAPE로만 발각됩니다.
- 반대 상황: WAPE는 낮은데 예측이 한쪽으로 슬금슬금 쏠리는 편향이 있을 수 있습니다. 이건 Bias로만 발각됩니다.

그림 3: WAPE-BIAS 진단 매트릭스
WAPE(오차 크기)와 Bias(오차 방향)를 두 축으로 놓으면, 한 지표만으로는 안 보이는 실패가 드러납니다. Bias는 부호가 있어 같은 크기의 오차라도 과대(재고·마크다운, 즉 안 팔린 상품을 가격 인하로 처분)와 과소(품절·기회손실)의 비즈니스 결과가 정반대입니다. 수요분류패턴(그림 1)이 데이터의 난이도를 보는 지도였다면 WAPE-BIAS 진단 매트릭스(그림 3)은 결과의 채점표입니다. 앞의 사분면(ADI×CV²)은 바꿀 수 없지만 이 행렬(WAPE-Bias)은 바꿀 수 있습니다. 그래서 “오차크기(WAPE)는 낮고, 편향(Bias)는 0 근처”를 동시에 만족할 때 진짜 좋은 예측이 됩니다.
집계의 함정 : 어느 단위에서 재는가
WAPE와 Bias를 쌍으로 봐도, 아직 함정이 하나 남아있습니다. 어느 단위에서 측정하는지 입니다. 전체를 한 번에 집계하면, 큰 볼륨 SKU 몇 개만 잘 맞혀도 전체 WAPE가 낮게 나와서 “예측을 잘했다”가 아니라 “큰 볼륨을 잘 맞췄다”는 뜻이 되어 버립니다. 그래서 집계된 숫자에 의존하면 안됩니다. 진단을 SKU별로 했듯, 채점도 세그먼트별로 쪼개야 큰 볼륨 뒤에 숨은 실패가 드러납니다.
3. 처방 – 패턴마다 정확도가 갈린다
진단으로 패턴을 나누고 측정 기준까지 세웠으니, 이제 실제 데이터에서 예측 정확도가 패턴별로 어떻게 갈리는지 직접 확인할 차례입니다.
실제 데이터에서 사분면별 WAPE 비교
AnyFashion 데이터를 ACD에 올려 26주를 백테스트(과거 일부 구간을 가린 채 예측하게 한 뒤 실제값과 비교하는 방식)한 baseline결과를 보면, 이 두 지표의 역할이 뚜렷합니다.
| SKU (패턴) | WAPE | Bias | 무슨 일이 일어났나 |
| TEE-BASIC-WHT (Smooth) | 16.7% | −0.9% | 안정적인 베이직 수요 → 잘 맞고 편향도 거의 없음 |
| DRESS-TREND-FW (Erratic) | 64.7% | +8.9% | 크게 틀리지만 방향은 한쪽으로 쏠리지 않음 |
| BLAZER-SEASON (Erratic) | 62.6% | −59.6% | 프로모션 폭발 주를 평탄하게 예측 → 큰 폭의 과소예측 |
| SHOE-SZ-EXTREME (Intermittent) | 80.2% | −80.2% | 8주만 팔리는 수요를 26주에 나눠 깔아 → 발생 주 전부 과소예측 |
| COLLAB-LTD-01 (Lumpy) | 98.9% | −98.9% | 띄엄띄엄 터지는 한정판 → 예측이 사실상 0에 붙어 거의 못 맞음 |
표 2: AnyFashion ACD 백테스트 결과
참고: ACD는 실제 수요가 0인 주를 정확도 계산에서 건너뜁니다. Intermittent 품목의 높은 정확도는 “팔린 주”에서만 측정된 결과이므로, 반드시 총 예측 수량도 함께 확인해야 합니다.
표를 세로로 읽으면 WAPE은 Smooth 16.7%에서 Erratic 60%대, Intermittent 80.2%, Lumpy 98.9%로 패턴이 어려워질수록 가파르게 오릅니다. 맨 아래 COLLAB-LTD-01(lumpy)은 WAPE과 |Bias|가 나란히 98.9%입니다. 두 값이 같아진 건 오차가 전부 한 방향이었다는 뜻입니다. 채점된 기간 내내 예측이 사실상 0에 붙어 있고, 띄엄띄엄 발생하는 한정판 수요를 baseline 모델이 그 주에 “안 팔린다”로 본 것이죠. 위 표에는 생략되었지만, 팔리지 않은 기간에는 반대로 과대예측이 있었습니다. 팔릴 때는 못 내놓고, 안 팔릴 때는 내놓는 셈인데, 방향이 정반대인 이 두 실패 중 WAPE은 앞의 것만 봅니다.
진짜 중요한 건 Bias열입니다. BLAZER, SHOE, COLLAB은 음(−)의 Bias, 즉 과소예측에 쏠려 있습니다. 반면에 DRESS는 WAPE이 64.7%인데 Bias는 +8.9%입니다. 크게 틀렸는데 방향이 거의 0이라는 건, 과대와 과소가 섞여 서로를 지웠다는 뜻이죠. 앞서 말한 상쇄함정이 실제로 나타난 것입니다. 예측은 거의 평탄한데 실측은 프로모션 주에 솟고 시즌 끝물로 꺾이니, 모자란 주와 넘친 주가 상쇄된 것입니다.
발주는 숫자 하나로 하지 않는다 (P50/P90밴드)
지금까지 본 정확도는 모두 P50, 즉 중앙값 예측을 채점한 값입니다. 그런데 ACD는 P10부터 P90까지의 분위수를 함께 제공합니다. 어느 분위수를 기준으로 삼는지에 따라 결과가 어떻게 달라지는지를 네 패턴을 나란히 놓고 계산했습니다. “부족량”은 주별로 실측이 그 분위수를 넘은 만큼을 더한 값입니다. 즉, “그 주의 수요를 충족했는가”를 봅니다. 실제 품절이 나는지는 안전재고 수준·리드타임·보충 주기 같은 재고 정책이 함께 정하는 문제라 이 글에서는 다루지 않습니다.
| SKU (패턴) | 밴드 (P90/P50) | P50 기준 부족량 | P90 기준 부족량 |
| TEE-BASIC-WHT (Smooth) | 1.1배 | 1,626개 (9%) | 1,069개 (6%) |
| DRESS-TREND-FW (Erratic) | 4.2배 | 2,950개 (28%) | 0개 |
| SHOE-SZ-EXTREME (Intermittent) | 5.9배 | 1,029개 (80%) | 15개 (1%) |
| COLLAB-LTD-01 (Lumpy) | 39.9배 | 3,759개 (99%) | 1,284개 (34%) |
표 3: AnyFashion ACD 백분위 결과
부족량 = Σ max(0, 실측 – 분위수);% = 부족량(개) ÷ 그 SKU의 총 실측 수요
Smooth인 베이직은 밴드가 1.1배로 좁습니다. P50과 P90 사이가 거의 붙어 있다는 뜻이죠. 부족량도 9%에서 6%로, 원래 크지 않던 것이 조금 더 줄어듭니다. 어느 분위수를 고르든 결과가 크게 달라지지 않습니다.
Erratic인 DRESS와 Intermittent인 SHOE는 밴드가 4~6배로 벌어집니다. P50기준으로는 각각 28%와 80%가 부족한데, P90기준으로는 0%와 1%로 떨어집니다. 분위수를 증가시켜 부족량을 해결하는 구간이죠. 대가는 밴드 폭 그 자체입니다. P50과 P90 사이가 벌어져 있다는 것은, 품절을 막으려면 평소 팔리는 양의 몇 배에 해당하는 물량을 여유로 들고 가야 한단 뜻입니다.
Lumpy인 COLLAB은 밴드가 39.9배입니다. P50기준으로는 99%가 부족하고 P90으로 올려도 34%가 부족합니다. 앞의 두 패턴은 분위수를 올려서 부족을 해결했지만, 이 SKU는 그렇지 않습니다. 모델이 낸 분포의 가장 높은 구간마저 실수요에 미치지 못합니다.
밴드 폭이 곧 발주 판단의 난이도입니다. Smooth는 1.1배라 고민할 것이 없지만, Lumpy는 40배 밴드 안에서 보수적(P90)을 택하면 재고 폭탄, 공격적(P10)을 택하면 품절입니다. 확신을 가질 구간이 없습니다.
Intermittent인 SHOE와 Lumpy인 COLLAB은 둘 다 26주 중 8주만 팔리지만, 팔릴 때의 크기 변동이 각각 CV² 0.02와 0.93으로 전혀 다릅니다. 발생 간격이 같아도 크기가 안정적이면 분위수로 잡히고, 크기까지 변동이 크면 안 잡힙니다. 발생과 크기를 따로 봐야 하는 이유입니다.
Intermittent와 Lumpy를 어떻게 예측할까?
진단이 끝났으니 패턴에 맞는 도구를 고를 차례입니다. Smooth는 쉽습니다. 규칙적이고 크기도 안정적이라 지수평활(ETS)이나 ARIMA등으로 잘 맞습니다. Erratic은 크기의 변동이 큰 패턴이라, 변동의 원인을 알면 그 신호를 공변량(Covariate)으로 넣어 제어합니다.
진짜 문제는 Intermittent와 Lumpy입니다. 0이 잔뜩 섞여 있어서, 무심코 쓰는 “평균”이 거짓말을 하기 시작합니다. 예를 들어 0,0,0,5,0,0,3은 단순 평균이 주당 1.14개이지만, 이 SKU가 “매주 1.14개”씩 팔리는 일은 현실에 없습니다. 평균이 “언제 팔리는가”와 “얼마나 팔리는가”를 뭉개 버린 탓입니다.
그래서 수요를 하나의 숫자가 아니라 두개의 질문으로 분리합니다. 언제 팔리는가(발생 간격)와 팔리면 얼마나(크기)입니다. 이 분리를 처음 체계화한 것이 Croston’s method(1972)로, 간격과 크기를 각각 추정한 뒤 나눕니다.
예측값 = q̂ / â (크기 추정 ÷ 간격 추정)

그림 4: Croston’s method
“한 번 팔릴 때 평균 q̂개가, 평균 â주마다 팔린다”는 뜻입니다. Croston은 0을 평균에 섞지 않습니다. 팔린 것끼리 만 보기 때문에 0,0,0,5,0,0,3에서 매주 1.14개가 아니라 약 3주에 1번, 4개 안팎이라는 현실적인 그림이 나옵니다.
오해하기 쉬운 점이 하나 있습니다. Croston의 점 예측값 자체는 단순 평균과 다르지 않습니다. 진짜 차이는 두 가지입니다. 0인 주에는 추정치를 건드리지 않아 값이 안정적이고, 발생과 크기를 분리해 뒀기 때문에 “리드타임 동안 품절 없이 버티려면 몇 개가 필요한가”같은 재고 의사결정으로 바로 연결됩니다. 1972년 기법이 2026년에도 쓰이는 이유입니다.
이러한 Croston 기본형은 구조적인 양의 편향이 알려져 있고, 수요가 끊겨도 마지막 추정치를 유지하는 한계가 있습니다. 그래서 실무에서는 편향을 보정한 SBA, 쇠퇴에 빠르게 대응하는 TSB등과 같이 계열 안에서도 SKU 성격에 따라 취사선택합니다.
4. 외부 신호 – 프로모션·캘린더를 디맨드 드라이버(demand driver)로
지금까지는 과거의 수요 추이만을 분석 대상으로 삼았습니다. 하지만 수요는 진공 상태에서 독립적으로 결정되는 요인이 아닙니다. 실제로는 프로모션, 명절, 가격 변동, 마케팅 캠페인과 같은 외부 변수들의 영향을 강하게 받습니다. 데이터 분석에서는 이처럼 수요 변동을 유발하는 외부 신호를 “디맨드 드라이버(demand driver)” 혹은 “공변량(covariate)”이라 정의하며, 이를 모델의 입력값으로 활용할 때 예측 정확도가 크게 향상됩니다.
다만, 여기에는 간과하기 쉬운 함정이 존재합니다. 과거 데이터를 기반으로 “지난 프로모션 때 수요가 2배였다”는 사실을 학습시키는 것은 문제가 없습니다. 오류는 예측 시점의 입력값 설정에서 발생합니다.
모델 예측은 해당 시점에 실제로 확보 가능한 정보만을 기반으로 수행되어야 합니다. 그러나 백테스트의 홀드아웃(holdout) 구간은 이미 결과가 확정된 과거 데이터이므로, 사후적인 정보가 포함될 수 있습니다. 이처럼 실제 예측 시점에는 알 수 없는 미래 정보를 입력값에 반영하면, 백테스트 성능만 왜곡되어 높아질 뿐 실전 변별력은 상실됩니다. 이것이 전형적인 데이터 누수(data leakage)현상입니다.
그래서 외부 신호는 두 종류로 나눠 다뤄야 합니다.
- 과거에만 관측되는 신호 (past-only): 이미 일어난 일. 학습에는 쓰되 미래 예측 입력으로는 못 씀.
- 미래까지 아는 신호 (known-future): 달력(명절·요일), 확정된 프로모션 일정 등. 미래 구간에도 값을 알 수 있어 예측 입력으로 쓸 수 있음.
명절 캘린더가 대표적인 known-future 신호입니다. 다음 추석이 언제인지는 지금도 알 수 있으니까요. 이 구분을 지키지 않으면 데이터 누수(data leakage)가 발생합니다.
시스템이 먼저 짚어준다: surge 감지
앞서 DRESS-TREND-FW는 WAPE이 64.7%이고, Bias가 +8.9%였습니다. 과대와 과소가 서로 상쇄되어 두 지표를 함께 봐야 비로소 문제가 드러난 SKU입니다. 흥미로운 건, 이 문제를 우리가 찾아내기 전에 ACD가 먼저 짚었다는 점입니다. Baseline 예측을 돌리자, ACD는 해당 그룹이 정상 패턴을 크게 벗어난 일시적 수요 급증(surge) 10건을 자동으로 감지하고 이렇게 알려왔습니다.
“이 감지는 DRESS-TREND-FW가 DC-Central에서 정상 수요 패턴을 크게 벗어난 일시적 수요 증가를 겪은 기간을 식별합니다. 이 급증들을 적절히 반영하지 않으면 예측이 왜곡될 수 있습니다. 무엇이 이 급증을 일으켰는지(프로모션, 시즌 캠페인 등) 알려주면 모델이 패턴을 학습할 수 있습니다.” (ACD Decisions Teammate의 surge detection 응답, 국문 요약·번역. 그림 5에는 응답의 앞부분이 보인다.)

그림 5: ACD 일시적 수요 급증 자동 감지
지표로는 어느 주에 얼마나 빗나갔는지 까지는 알려주지만, 그 주에 왜 수요가 튀었는지는 말해주지 않습니다. ACD는 그 급증 지점을 찾아내서 “무엇이 이런 결과를 유도했는지 알려달라”고 요청했습니다. 사람이 데이터를 분석하기 전에 시스템이 먼저 진단하고 처방을 제안하며, 수천 개 SKU 중에서 봐야 할 것만 골라줍니다.
실제로 넣어보면: 프로모션 신호의 효과
그래서 ACD teammates의 요청대로 프로모션 캘린더를 디맨드 드라이버(known-future 신호)로 넣고 다시 백테스트를 돌렸습니다.
| SKU (패턴) | Before (신호 없음) | After (프로모션 신호) | 변화 |
| BLAZER-SEASON (Erratic) | WAPE 62.6% / Bias −59.6% | WAPE 14.1% / Bias −2.8% | WAPE −48pp, 편향 거의 해소 |
| TOP-BLOUSE-SS (Erratic) | WAPE 62.7% / Bias −54.8% | WAPE 19.1% / Bias −5.1% | WAPE −44pp, 편향 거의 해소 |
| TEE-BASIC-WHT (Smooth, 대조군) | WAPE 16.7% / Bias −0.9% | WAPE 16.2% / Bias −1.9% | 거의 무변화 (프로모션 없음) |
| 전체(All SKU) | WAPE 35.9% / Bias −34.5% | WAPE 6.7% / Bias +0.1% | 전체 WAPE 1/5로, 편향 0 |
표 4: AnyFashion ACD 프로모션 신호 결과
주의: AnyFashion은 프로모션이 수요 변동의 지배적 원인이 되도록 설계된 합성 데이터라, 위 표의 개선 폭(예: WAPE 62.6% → 14.1%)은 실제 환경보다 과장돼 있습니다. 숫자 자체가 아니라 “음의 편향을 원인 신호로 교정한다”는 메커니즘으로 읽어주세요.
결과는 분명합니다. 프로모션 신호 하나로 변동성 SKU의 WAPE이 60%대에서 10%대로 떨어지고, -55~60%로 쏠려 있던 음의 Bias가 거의 0으로 잡혔습니다. 앞서 “체계적 신호”라고 했던 그 음의 편향이 원인(프로모션 미반영)을 제거하자 사라진 것입니다.
핵심은 대조군입니다. 프로모션이 없는 BASIC(TEE-BASIC-WHT)은 신호를 넣어도 16.7% → 16.2%로 거의 변하지 않았습니다. 신호가 아무 데나 영향을 주는 게 아니라, 프로모션이 실제로 있는 SKU에서만 작동한다는 증거입니다.
물론, 외부 신호가 만능은 아닙니다. 추세 전환과 프로모션이 겹친 시즌 끝물로 가는 트렌드 원피스인 DRESS-TREND-FW에서는 프로모션 신호를 넣자 원래 있던 과대 예측이 오히려 크게 증폭되었습니다. 그리고 순수 lumpy인 COLLAB-LTD-01은 WAPE이 98.9%에서 66.8%로 크게 내려갔지만, 여전히 -58.3%의 큰 과소예측이 남았습니다. 발생 자체가 드문 수요는 프로모션 신호로 풀리는 문제가 아니라, 앞서 본 Croston류처럼 발생과 크기를 분리하는 접근이 필요합니다. 한 신호가 모든 문제를 풀지는 않습니다.
신호 말고도: 학습 전후로 손대는 두 레버
외부 신호가 모델에 정보를 더 주는 방식이라면, 도메인 지식을 직접 규칙에 넣는 두가지 레버가 ACD에 더 있습니다. 둘은 모델 학습을 기준으로 적용되는 시점이 다릅니다.
- Plan Input Rules (학습 전): 모델이 학습하기 전에 입력 데이터를 손봅니다. 예: 출시 전 0 판매 구간 제외, 극단 이상치 완화, 신제품을 유사 상품군으로 묶어 cold-start 보완.
- Forecast Override Rules (학습 후): 모델이 예측을 낸 뒤에 그 값을 조정합니다. 예: 특정 상품군의 과대예측을 상한선(cap)으로 누르거나, 분위수(quantile)를 올려 과소예측을 보정.

그림 6: 도메인 지식을 넣는 두 레버
결국 “데이터만 넣으면 끝”이 아니라, 사람의 도메인 지식이 학습 전후 어느 지점에 개입하느냐가 갈림길입니다. ACD는 이 규칙들을 자연어로 입력 받아 자동으로 적용합니다.
5. 오케스트레이션 – 이 모든 걸 사람이 매번 할 수 있을까
지금까지 진단·측정·처방·외부 신호를 각각 따로 살펴봤습니다. 그런데 현실에서는 이 단계들이 하나의 SKU에 동시에, 그것도 수천 개 SKU마다 적용돼야 합니다. 먼저 사람이 한 SKU를 골라 도메인 지식을 규칙으로 넣어 조정해 보고, 그 다음 이 전 과정을 ACD가 매 사이클 자동으로 오케스트레이션하는 모습을 봅니다.
실제로 처방해보면: 추세 전환 SKU, 그리고 사람의 지식이 들어가는 자리
앞에서 본 두 레버를 DRESS-TREND-FW(시즌 트렌드 원피스)에 적용했습니다. Lifecycle상 시즌 끝물로 우하향하는 전형적인 추세 전환 상품입니다. 세 단계로 처방해본 결과입니다.
| 단계 | WAPE | Bias | 무슨 일이 일어났나 |
| ① baseline (신호 없음) | 64.7% | +8.9% | 크게 틀리나 방향은 상쇄 |
| ② + 프로모션 신호 | 80.4% | +72.5% | driver가 과잉반응, lifecycle 하락을 무시 |
| ③ + override (상한 cap) | 48.7% | +12.7% | cap이 과대를 눌러 셋 중 최선, 그러나 불완전 |
표 5: DRESS-TREND-FW 두가지 레버 적용 결과
①에서 ②로 가는 대목이 핵심입니다. 다른 Erratic SKU에서는 디맨드 드라이버인 프로모션 신호가 음의 편향을 깔끔하게 잡았는데(예:BLAZER -59.6% → -2.8%), DRESS에서는 오히려 과대예측이 +8.9%에서 +72.5%로 증폭됐습니다. 이유는 lifecycle입니다. 프로모션 신호는 “이 주는 수요가 튄다”는 건 학습시켰지만, 이 SKU가 시즌 끝물로 전체 수준이 꺾이고 있다는 사실은 담지 못합니다. 그래서 모델이 과거 피크의 프로모션 반응을 미래로 밀어버려, 정작 수요가 식은 holdout 구간에서 크게 과대 예측한 것입니다.

그림 7: override 적용 후 DRESS-TREND-FW의 Demand Plan
그래서 ③ Forecast Override Rule을 적용했습니다. “예측이 상한선을 넘으면 누른다(cap)”는 “학습 후 보정”입니다. 최근 26주 평균 수요(811개)를 상한으로 잡아, 그를 넘는 예측은 811로 제한했습니다. 결과는 Bias +72.5% → +12.7%, WAPE 80.4% → 48.7%로 세 단계 중 가장 나은 값입니다. 그림 7에서 초록색의 Final Forecast선을 보면, 예측이 솟구치던 몇 주가 상한선(811)에 눌려 평탄해 졌습니다.
외부 신호가 만능은 아닙니다. 프로모션 신호는 DRESS의 변동을 잡아냈지만, 추세 자체가 하향하는 구간에서는 오히려 과대예측을 증폭시켰습니다. 상한 규칙(override rule)으로 급한 불을 끌 수 있지만, 추세 전환은 입력 단(lifecycle covariate, TSB 등)에서 다뤄야 합니다. 한 처방이 모든 SKU에 통하지 않습니다.
패턴이 모델을 고른다
자, 여기까지 정리해봅시다. 정확한 예측을 위해 우리는 모든 SKU를 SBC 방법론으로 진단하고, 어떤 메트릭으로 측정할지 기준을 정하고, Smooth는 ETS/ARIMA로 intermittent/lumpy는 Croston류로 나눠 처방하고, Croston의 편향은 보정하고, 외부 신호는 데이터 누수를 피해야 합니다.
SKU가 10개면 할 만합니다. 그런데 수백, 수천 개라면요? 게다가 패턴은 시간이 지나며 바뀌고, 신제품은 데이터가 아예 없습니다. 이걸 사람이 매 예측 주기마다 손으로 한다는 건 비현실적입니다.
바로 이 지점에서 “AI가 알아서 해준다”가 필요해 집니다. ACD는 진단-측정-처방-보정 루프를 자동화하고 이를 여러 인텔리전스(Intelligence)로 나눠 처리합니다.
전통적인 방식에서는 분석가가 “이 SKU엔 Croston, 저 SKU엔 ARIMA”를 직접 정했습니다. 에이젠틱 예측(agentic forecasting)에서는 시스템이 패턴을 진단하고, 후보 모델 풀에서 그 패턴에 맞는 모델을 골라 앙상블(Ensemble)합니다. 그 후보 풀에는 Croston 같은 반세기 된 전용 기법부터, 방대한 시계열로 미리 학습된 예측(forecast) 파운데이션 모델까지 함께 들어 있습니다. 둘은 경쟁이 아니라 역할 분담입니다.
데이터 없는 신제품은 파운데이션 모델의 제로샷 활용
정적 시스템은 데이터가 없는 신제품 앞에 무력합니다. 구축 당시 아무리 모델을 튜닝했어도 출시 첫날에는 예측이 불가능하기 때문입니다. 반면 파운데이션 모델은 방대한 시계열 사전 학습을 통해 이 한계를 극복합니다. 신규 SKU 데이터가 없어도 단 몇 주의 관측만으로 유사 패턴을 도출해 제로샷 예측을 수행합니다. 데이터가 전무한 첫날에는 “Plan Input Rules”에 따라 유사 상품군의 패턴을 공유 받을 수 있습니다. 즉, “구축 시점의 커스터마이징” 대신 “사전 학습된 범용 지식“으로 콜드 스타트를 해결하므로, 신제품 유입이 잦은 패션·리테일 환경에 가장 적합한 대안입니다.
ACD 수요 예측 엔진: 전통 시계열에서 파운데이션 모델까지
Amazon Connect Decisions(ACD)의 예측 엔진은 다양한 모델을 데이터에 맞춰 조합하는 앙상블(Ensemble) 구조입니다. 엔진의 후보군은 크게 세 계층으로 나뉩니다.
- 통계 baseline: ETS, ARIMA, Theta 등 전통 시계열 모델
- 간헐적(Intermittent) 수요 기법: Croston, ADIDA, NPTS 등 (0이 많은 간헐적 데이터에 특화)
- 파운데이션 모델(Foundation Model): Chronos2, SCOT 등 사전 학습된 시계열 모델 (신제품 및 데이터 부족 상황에 유용)
참고(엔진 구성의 근거): 최신 ACD 가이드는 세부 알고리즘 대신 “18개 이상의 예측 툴과 파운데이션 모델”로만 축약 표기합니다. 이에 본 글은 ACD의 전신인 “AWS Supply Chain Demand Planning User Guide“의 레거시 데이터(AutoGluon 앙상블 및 14종 알고리즘 명시)와 2026년 4월 AWS 뉴스룸 발표를 근거로 작성되었습니다.
핵심은 ACD가 항상 최신 파운데이션 모델만 고집하지 않는다는 점입니다. 앙상블 시스템은 백테스트 성능을 기반으로 데이터 패턴별 최적의 후보를 저울질합니다. 빈도가 낮은 순수 간헐적 SKU에서는 수십 년 된 Croston 알고리즘이 파운데이션 모델을 이기기도 하며, 변동이 크고 복잡한 패턴에서는 Chronos2가 앞서 나갑니다. “무엇이 우월한가”가 아닌 “이 데이터에는 무엇이 맞는가”를 데이터 스스로가 증명하는 구조입니다.
직접 해보기: AnyFashion 데이터를 ACD에 올려보기
말로만 “자동화”라고 하면 와닿지 않으니, 앞서 본 AnyFashion 합성 데이터를 실제로 Amazon Connect Decisions 콘솔에서 작업했습니다. 셋업은 생각보다 단순합니다.
- 산업과 목표 선택. Get Started에서 산업은 Automotive, CPG, Manufacturing, Retail, Other 중에 Retail을 선택하고, 목표는 “Improve demand forecast accuracy”를 고릅니다. ACD가 선택한 값에 맞춰 이후 설정을 준비합니다.

그림 8: Get started 화면
- 데이터 업로드와 자동 매핑 (Onboarding Intelligence). 수요 예측을 위해 필요한 데이터인 company·site·product·outbound orders등을 CSV를 올리면, Data Agent가 각 컬럼을 표준 데이터 모델(CDM)에 자동 매핑하고 변환 SQL까지 생성합니다. 전통적인 공급망 시스템에서 컨설턴트가 수 주씩 매달리던 데이터 통합을, 자연어 검토·승인만으로 끝냅니다.

그림 9: AnyFashion 데이터가 ACD 안에서 구성되는 모습
- Demand Plan 실행. 주기(weekly)·기간(26주)·예측 시작일만 정하면, ACD가 학습 구간 데이터로 모델을 만들고 holdout 구간을 예측합니다. 모델을 직접 고르지 않습니다. 패턴이 모델을 고릅니다.

그림 10: Demand Plan 설정 화면
이 세 단계는 기존에 사람이 수작업으로 처리하던 일련의 과정을 그대로 자동화한 것입니다. SBC 분류로 진단을, Demand Plan 실행으로 모델 선택을 수행하며, 최종 측정은 Demand Plan 대시보드의 정확도 타일(WAPE, Bias)로 이루어집니다.
정리: “알아서“의 안에 있는 것들
“AI가 수요를 알아서 예측해 준다”는 말의 실상을 들여다보면, 마법이 아니라 명확한 작업들이 유기적으로 연결되어 있습니다.
| 단계 | 질문 | 답 |
| 진단 | 이 SKU는 어떤 패턴인가 | ADI × CV² 4사분면 |
| 측정 | 좋은 예측이 뭔가 | WAPE(크기) 낮게 + Bias(방향) 0 근처. 발주에는 분위수까지 |
| 처방 | intermittent를 어떻게 | 발생 × 크기 분리. Croston류에서 SBA·TSB 등 변형 선택 |
| 신호 | 외부 요인은 | covariate, leakage 주의 |
| 자동화 | 수천 SKU를 어떻게 | 진단→측정→모델 선택을 ensemble로 오케스트레이션 |
표 6: AI의 작업 과정
각 단계는 독립된 트릭이 아니라, “왜 안 맞는지”를 한 단계씩 좁혀온 결과입니다. 그리고 이 연쇄 전체를 자동화한 것이 오늘날의 에이전틱 수요 예측(agentic demand forecasting)입니다.
마치며
이제 서두에 던졌던 질문으로 돌아가 봅시다. “구축 시점에 멈춰버리는 시스템”, 그리고 “쉽게 증발하는 현장의 지식”. 앞에서 살펴본 정교한 프로세스들은 바로 이 두가지 고질적인 문제를 해결하기 위함입니다.
첫째는 “누가, 언제 모델을 고르는가”의 문제입니다.
전통적인 방식에서는 도입 프로젝트 당시 컨설턴트가 그 시점의 데이터로 모델을 한 번 맞추어 놓으면, 다음 재구축 프로젝트 전까지 그 선택이 그대로 고정되었습니다. 반면 에이전틱 예측(Agentic Forecasting) 환경에서는 시스템이 매 사이클마다 데이터 패턴을 스스로 진단하고 최적의 모델을 고릅니다. 반세기 전 개발된 Croston알고리즘부터 최신 파운데이션 모델(Foundation Model)까지 모두 하나의 후보군에 두고, 비즈니스가 변해 패턴이 바뀌면 모델 선택도 함께 바뀝니다. 별도의 재구축 프로젝트 없이도, 데이터가 거의 없는 신제품 출시 초기부터 사전 학습된 파운데이션 모델과 유사 상품군 매핑을 활용해 첫날부터 유연하게 대응할 수 있습니다.
둘째는 “현장의 지식이 어디로 가는가”의 문제입니다.
먼저 시스템이 급격한 수요 변화(Surge)를 감지해 질문을 던지면, 사용자는 자연어 규칙과 디맨드 드라이버를 통해 피드백을 주고, 이 조정 내역은 시스템에 기록으로 남습니다. 굳이 수요 예측 전문가를 새로 채용하지 않더라도, 이미 회사 내에 존재하는 지식 – 즉, 플래너(planner)의 노하우와 영업팀의 프로모션 캘린더-을 AI 에이전트에게 고스란히 학습시키는 통로가 열리는 것입니다.
“AI가 알아서 해준다”는 말은 참 편리한 약속입니다. 하지만 이 글에서 들여다본 그 “알아서”의 내면에는 마법이 아닌, 진단 가능하고 측정 가능하며 설명 가능한 작업들의 유기적인 과정이 있었습니다.
그러므로 앞으로 새로운 수요 예측 시스템을 평가할 때는 다음 두가지를 반드시 질문해 보세요.
- 비즈니스가 바뀌면, 이 시스템은 스스로 다시 진단할 수 있는가?
- 우리 팀이 조정한 피드백을 이 시스템은 학습하고 기억하는가?
이 두가지 질문이 “구축하는 순간 멈추는 시스템”과 “비즈니스와 함께 자라는 시스템”을 가르는 기준이 될 것입니다.