TL;DR
- AI Sales Forecasting에서 "SKU 합 = 카테고리 합 = 전체 합"이 깨지면 계획/발주가 바로 꼬인다. 해결책은 Forecast Reconciliation(조정)이다.
- 계층 예측은 보통 (1) 모든 레벨에 대해 base forecast 생성 → (2) MinT 같은 방법으로 coherent(합 일치)하게 조정이 표준이다.
- 신제품(콜드스타트)은 "예측 모델을 바꾸는 문제"라기보다 정보를 어디서 빌려오느냐(유사 상품/계층/콘텐츠 특징/가격대) 설계가 핵심이다.
- 프로모션은 평균 수요를 흔드는 이벤트라서, (a) 예측 피처로 넣는 방식과 (b) uplift를 따로 추정(인과/반사실)하는 방식을 분리해 설계해야 한다.
본문
0) 주제 정규화
- 1문장 정의: 계층 예측·콜드스타트·프로모션 Uplift 설계는 AI Sales Forecasting을 "조직의 계획 단위(전체-카테고리-SKU)와 이벤트(신제품/할인)"에 맞게 일관된(coherent) 수요 예측과 의사결정 입력으로 만드는 방법이다.
- 포함/제외: 포함 = 계층 구조(합 제약), 신제품 데이터 부족, 프로모션의 비정상 변동. 제외 = 재고정책(ROP 등) 상세(Part 6에서 다룸).
- 대표 오해: "전체 예측만 맞으면 SKU 합은 자동으로 맞는다" → 실제로는 레벨별 모델이 달라지면서 합 불일치가 흔히 발생한다.
TOC
- 사전 요구사항(계층 설계/키/이벤트 정의)
- 계층 예측: 합이 맞는 예측(coherent) 만들기
- 콜드스타트(신제품): 유사도·계층·콘텐츠로 정보 빌리기
- 프로모션 Uplift: “피처로 넣기” vs “따로 추정하기”
- 검증 방법(레벨별·이벤트별·coherency)
- 트러블슈팅(3종)
- 실무 체크리스트(배포 전 / 운영 중)
- FAQ(6개)
- 결론 / Summary / References
1) 사전 요구사항(계층 설계/키/이벤트 정의)
1-1. 계층(Hierarchy) 정의를 “데이터 모델”로 먼저 고정
최소한 아래가 명확해야 계층 예측을 할 수 있다.
- Bottom level(최하위) 단위: 보통
SKU × 점포(또는 지역) × 일 - 상위 레벨 매핑: SKU→브랜드→카테고리→전체, 점포→지역→권역 등
- Summing matrix(S) 개념: 아래 레벨 합으로 위 레벨이 구성됨(합 제약)
Why it matters: 계층을 "나중에" 붙이면, 일관성 문제를 모델이 아니라 운영자가 수동으로 맞추게 된다(=비용 폭발).
1-2. 이벤트(신제품/프로모션) 정의도 스키마로 고정
- 프로모션은 시작/종료, 할인율/쿠폰/묶음, 진열/광고 등 “정의”가 다르면 모델이 학습할 신호가 달라진다.
- 할인 판매가 있을 때 예측이 체계적으로 과소추정될 수 있다는 실증 연구도 있어(=이벤트 처리 중요), 이벤트 정의/라벨이 품질의 1순위가 된다.
Why it matters: 이벤트 정의가 흔들리면 드리프트보다 더 위험한 “라벨/피처 불일치”가 생긴다(Part 7의 품질 게이트 대상).
2) 계층 예측: 합이 맞는 예측(coherent) 만들기
2-1. 왜 base forecast만으로는 합이 깨지나?
SKU는 LightGBM, 카테고리는 ETS, 전체는 다른 모델… 이렇게 레벨별로 접근하면 각자 최적화가 달라 합이 안 맞는 게 정상이다. 그래서 "base forecast → reconcile" 프레임이 널리 쓰인다.
2-2. 표준 접근: Forecast Reconciliation(조정)
- Base forecasts: 합 제약 무시하고 각 시계열을 따로 예측
- Reconciled forecasts: 조정(reconciliation)으로 "합이 맞는(coherent)" 예측으로 변환
실무에서 가장 많이 언급되는 최적 조정 계열이 MinT(Minimum Trace)다.
2-3. 구현 옵션(실무 친화)
- sktime:
ReconcilerForecaster로 base forecaster + reconciliation을 결합할 수 있다. - Nixtla HierarchicalForecast: 여러 reconciliation 방법을 제공한다고 명시한다.
# (개념 코드) sktime: base forecaster + reconcile
from sktime.forecasting.reconcile import ReconcilerForecaster
from sktime.forecasting.exp_smoothing import ExponentialSmoothing
base = ExponentialSmoothing()
recon = ReconcilerForecaster(forecaster=base, method="mint_shrink") # 예: MinT 계열
recon.fit(y_train, X=X_train, hierarchy=hierarchy_spec)
y_pred = recon.predict(fh=fh, X=X_future)
Why it matters: 발주/예산/인력계획은 보통 "상위 합계"로 승인되고, 실행은 "하위 SKU/점포"에서 일어난다. 합이 깨지면 조직 내 숫자 싸움이 된다.
3) 콜드스타트(신제품): 유사도·계층·콘텐츠로 정보 빌리기
신제품은 “시계열이 없다”가 본질이다. 그래서 답은 보통 (1) 계층/풀링 + (2) 유사도 기반 특징 + (3) 빠른 피드백 루프다.
3-1. 계층/풀링으로 “상위 레벨 신호”를 빌린다
- 신제품 SKU는 카테고리/브랜드 레벨 수요와 함께 움직이는 경우가 많다 → 계층 예측 + 조정이 콜드스타트 완충재가 된다.
3-2. 유사 상품을 “특징 공간”에서 찾는다(콘텐츠/가격대)
패션/리테일에서는 이미지/텍스트 등 콘텐츠 특징으로 유사 상품을 찾고 콜드스타트를 완화하는 연구가 제시돼 있다.
또한 콜드스타트 수요 예측 자체가 최근(2022–2025 등) 계속 연구되는 문제로 정리된다.
# (개념 코드) 신제품 초기 예측: 유사 SKU KNN 풀링 + 상위 레벨 보정
# 1) 상품 메타(카테고리/가격대/브랜드/콘텐츠 임베딩)로 유사 SKU top-K
# 2) 유사 SKU의 최근 패턴을 가중 평균해 seed forecast 생성
# 3) 계층 reconciliation으로 카테고리/전체 합과 일치시키기
3-3. “관측된 판매”가 아니라 “검열(censoring)” 문제를 먼저 체크
신제품은 재고/진열/초기 공급 부족 때문에 판매가 실제 수요보다 낮게 관측될 수 있다(재고절단). 이런 상황을 고려한 수요 보정 접근이 언급된다.
Why it matters: 콜드스타트는 모델보다 데이터 생성 과정(재고절단/노출 부족)이 더 큰 오차를 만든다.
4) 프로모션 Uplift: “피처로 넣기” vs “따로 추정하기”
프로모션은 두 가지 설계가 있다. 둘을 섞지 말고 목적에 따라 선택한다.
4-1. 설계 A — 예측 모델에 프로모션을 피처로 넣기
- 과거 연구에서 "프로모션이 있는 기간"은 단순 시계열보다 프로모션 정보를 반영한 모델이 유리할 수 있음을 보여준다.
- 장점: 예측 파이프라인이 단순(한 번에 예측)
- 단점: “프로모션이 없었으면 어땠나(반사실)”를 직접 답하긴 어렵다
4-2. 설계 B — Uplift를 인과/반사실로 따로 추정
프로모션의 “추가 판매분”을 알고 싶다면, 반사실(없었을 때)을 모델링하는 접근이 필요하다.
Google의 Bayesian structural time series 기반 방법은 "개입이 없었으면 어땠을지"를 추정하는 프레임을 제안하고, CausalImpact 패키지로 구현을 제공한다.
# (개념 코드) CausalImpact: 프로모션 전/후 + 통제 시계열로 uplift 추정
library(CausalImpact)
impact <- CausalImpact(y, pre.period=c(1, T0), post.period=c(T0+1, T1))
summary(impact)
plot(impact)
4-3. 실무 팁: “잔여 Uplift” 모니터링
할인 판매(discount)가 있을 때 예측이 체계적으로 과소추정되는 잔여 uplift 현상을 보고하는 연구도 있으니, 프로모션 기간 성능을 별도로 모니터링하는 게 안전하다.
Why it matters: 발주는 “프로모션 uplift만큼 더”가 핵심인데, uplift가 섞여버리면 과잉재고/품절 둘 중 하나로 간다.
5) 검증 방법(레벨별·이벤트별·coherency)
5-1. Coherency 체크(합 일치)
- 모든 예측 호라이즌 h에 대해:
sum(bottom) == total이 성립하는지 자동 테스트 - reconciliation 적용 전/후를 비교(전: 불일치, 후: 일치)
5-2. 레벨별 성능 + 가중 성능
- SKU 평균만 보면 “중요 카테고리”가 망가진 걸 놓친다
- 상위(카테고리/전체) + 하위(SKU) 동시에 보고, 매출 가중 지표도 함께 본다(Part 7의 슬라이스 원칙)
5-3. 이벤트별 성능(프로모션/신제품 기간 분리)
- 프로모션 기간 vs 비프로모션 기간
- 신제품 출시 후 1~4주(초기 구간) 성능을 별도로 분리
- 할인/진열 변경 같은 이벤트가 들어간 기간은 분포가 달라진다(드리프트와 비슷하게 취급)
Why it matters: “전체 평균 성능”은 보통 정상처럼 보이는데, 실제 손실은 이벤트 구간에서 크게 난다.
6) 트러블슈팅(3종)
(1) 상위 합계는 맞는데 SKU가 비현실적으로 찢어진다
- 원인: bottom-level base forecast가 너무 불안정(희소/간헐) + reconciliation이 강제로 맞추면서 왜곡
- 해결: 간헐 수요는 Croston/SBA/TSB 계열 같은 벤치마크를 반드시 비교하고(희소 SKU 분리), 계층을 더 거칠게 시작(점포→지역)
(2) 신제품 예측이 계속 0에 붙는다
- 원인: 초기 재고 부족/노출 부족으로 판매가 검열되어 “0처럼” 보임
- 해결: 재고/품절 신호를 피처로 넣고, 유사 상품 풀링으로 seed를 만든 뒤 빠른 재학습 루프(Part 7)
(3) 프로모션 때마다 과소예측(품절) 반복
- 원인: 프로모션 정의가 누락/불일치, 혹은 할인 기간 uplift가 모델에 반영되지 않음
- 해결: (A) 피처 방식이면 프로모션 테이블 품질 게이트 강화, (B) uplift 분리 방식이면 반사실 추정 파이프라인을 별도 운영
7) 실무 체크리스트
배포 전
- 계층 매핑(브랜드/카테고리/지역)과 키 유일성 테스트
- reconciliation 적용 전/후 coherency 자동 테스트
- 희소 SKU(간헐 수요) 라벨링 및 별도 베이스라인(Croston/SBA/TSB) 준비
- 신제품용 seed 전략(유사도/가격대/콘텐츠) 정의
- 프로모션 정의(시작/종료/할인율/쿠폰/진열)를 스키마로 고정 + 품질 게이트
운영 중
- 레벨별 성능(전체/카테고리/SKU) + 이벤트별 성능(프로모션/신제품) 대시보드
- "프로모션 기간 잔여 uplift" 모니터링 알림
- 신규 SKU 비중 증가 시 재학습 트리거(Part 7)
- override(현업 수동 수정) 로그 수집 → 콜드스타트/프로모션 규칙 개선에 피드백
FAQ
계층 예측은 bottom-up만 쓰면 되는 거 아닌가요?
bottom-up은 단순하지만, base forecast를 여러 레벨에서 만들고 조정하는 프레임이 널리 정리돼 있다(각 방법 장단점이 다름).MinT는 왜 자주 언급되나요?
계층/그룹 시계열 조정에서 오차 공분산을 이용해 "최적 조정"을 정식화한 대표 방법으로 소개된다.sktime/Nixtla 중 무엇을 쓰나요?
둘 다 reconciliation을 지원한다는 점을 문서로 명시한다. (선택은 기존 파이프라인/언어/모델 스택에 맞추면 됨)신제품은 결국 운 아닌가요?
콜드스타트는 "유사도/계층/콘텐츠"로 정보 빌리기가 핵심이라는 접근이 연구로 다뤄진다.프로모션 uplift는 꼭 인과 추정이 필요한가요?
"추가 판매분(없었으면 어땠나)"을 답하려면 반사실이 필요하고, 그 프레임을 제안한 방법/구현이 공개돼 있다.할인 기간만 유독 과소예측됩니다.
할인 판매가 있을 때 체계적 과소추정이 생길 수 있다는 보고가 있어, 프로모션 기간을 별도 슬라이스로 모니터링하는 게 안전하다.
결론 (요약 정리)
- 계층 예측의 핵심은 coherent(합 일치)이며, 실무 표준은 base forecast 후 reconciliation이다.
- 콜드스타트는 "시계열 부족"이 아니라 "정보를 빌리는 설계(유사도/계층/콘텐츠/가격대)" 문제다.
- 프로모션은 (A) 피처로 넣기 vs (B) uplift 분리(반사실) 중 목적에 맞게 선택하고, 이벤트 구간을 반드시 별도 검증/모니터링해야 한다.
Summary
- 계층(합 제약) + reconciliation 없이는 조직 단위 숫자가 깨진다.
- 신제품은 유사도/계층으로 seed를 만들고 빠르게 학습 루프를 돌린다.
- 프로모션은 이벤트 구간 슬라이스 검증이 필수이며, uplift가 필요하면 반사실 추정 파이프라인을 분리한다.
References
- (Forecast reconciliation, 2026-02-10)[https://otexts.com/fpp3/reconciliation.html]
- (Optimal forecast reconciliation for hierarchical and grouped time series through trace minimization, 2017)[https://robjhyndman.com/papers/mint.pdf]
- (ReconcilerForecaster API, 2026-02-10)[https://www.sktime.net/en/stable/api_reference/auto_generated/sktime.forecasting.reconcile.ReconcilerForecaster.html]
- (HierarchicalForecast documentation, 2026-02-10)[https://nixtlaverse.nixtla.io/hierarchicalforecast/index.html]
- (A new method to forecast intermittent demand in the presence of obsolescence, 2019)[https://www.sciencedirect.com/science/article/abs/pii/S0925527318300562]
- (Dynamic Dual-Phase Forecasting Model for New Product Demand, 2025)[https://www.mdpi.com/2227-7390/13/10/1613]
- (Deep learning for new fashion product demand prediction, 2026)[https://link.springer.com/article/10.1007/s41060-025-00888-8]
- (SKU demand forecasting in the presence of promotions, 2009)[https://www.sciencedirect.com/science/article/abs/pii/S0957417409004035]
- (Forecast reconciliation: A review, 2023)[https://www.sciencedirect.com/science/article/pii/S0169207023001097]
- (Inferring causal impact using Bayesian structural time-series models, 2015)[https://research.google.com/pubs/archive/41854.pdf]
- (CausalImpact package documentation, 2026-02-10)[https://google.github.io/CausalImpact/CausalImpact.html]
- (CausalImpact CRAN vignette, 2026-02-10)[https://cran.r-project.org/web/packages/CausalImpact/vignettes/CausalImpact.html]
- (Challenges for Demand Forecasting in Grocery Retail, 2026)[https://arxiv.org/html/2602.04464v1]
- (Forecasting hierarchical and grouped time series, 2026-02-10)[https://otexts.com/fpppy/nbs/11-hierarchical-forecasting.html]
'AI > Technical' 카테고리의 다른 글
| AI Sales Forecasting Part 10: 가격 탄력성 모델링과 수요 시뮬레이션 설계 (7) | 2026.02.12 |
|---|---|
| AI Sales Forecasting 9: 간헐수요 예측: 제로(0) 많은 SKU를 AI Sales Forecasting에 붙이는 법 (6) | 2026.02.11 |
| AI Sales Forecasting 7: 운영(MLOps) 설계—모니터링·드리프트·재학습·릴리즈 (3) | 2026.02.10 |
| AI Sales Forecasting 5: 딥러닝·파운데이션 모델로 판매 예측 설계 (4) | 2026.02.10 |
| AI Sales Forecasting 4: 피처 기반 ML로 판매 예측 설계 (1) | 2026.02.09 |