AI/Technical

AI Sales Forecasting 8: 계층 예측·콜드스타트·프로모션 Uplift 설계

Royzero 2026. 2. 11. 01:15
반응형

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

    1. 사전 요구사항(계층 설계/키/이벤트 정의)
    1. 계층 예측: 합이 맞는 예측(coherent) 만들기
    1. 콜드스타트(신제품): 유사도·계층·콘텐츠로 정보 빌리기
    1. 프로모션 Uplift: “피처로 넣기” vs “따로 추정하기”
    1. 검증 방법(레벨별·이벤트별·coherency)
    1. 트러블슈팅(3종)
    1. 실무 체크리스트(배포 전 / 운영 중)
  • 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

  1. 계층 예측은 bottom-up만 쓰면 되는 거 아닌가요?
    bottom-up은 단순하지만, base forecast를 여러 레벨에서 만들고 조정하는 프레임이 널리 정리돼 있다(각 방법 장단점이 다름).

  2. MinT는 왜 자주 언급되나요?
    계층/그룹 시계열 조정에서 오차 공분산을 이용해 "최적 조정"을 정식화한 대표 방법으로 소개된다.

  3. sktime/Nixtla 중 무엇을 쓰나요?
    둘 다 reconciliation을 지원한다는 점을 문서로 명시한다. (선택은 기존 파이프라인/언어/모델 스택에 맞추면 됨)

  4. 신제품은 결국 운 아닌가요?
    콜드스타트는 "유사도/계층/콘텐츠"로 정보 빌리기가 핵심이라는 접근이 연구로 다뤄진다.

  5. 프로모션 uplift는 꼭 인과 추정이 필요한가요?
    "추가 판매분(없었으면 어땠나)"을 답하려면 반사실이 필요하고, 그 프레임을 제안한 방법/구현이 공개돼 있다.

  6. 할인 기간만 유독 과소예측됩니다.
    할인 판매가 있을 때 체계적 과소추정이 생길 수 있다는 보고가 있어, 프로모션 기간을 별도 슬라이스로 모니터링하는 게 안전하다.


결론 (요약 정리)

  • 계층 예측의 핵심은 coherent(합 일치)이며, 실무 표준은 base forecast 후 reconciliation이다.
  • 콜드스타트는 "시계열 부족"이 아니라 "정보를 빌리는 설계(유사도/계층/콘텐츠/가격대)" 문제다.
  • 프로모션은 (A) 피처로 넣기 vs (B) uplift 분리(반사실) 중 목적에 맞게 선택하고, 이벤트 구간을 반드시 별도 검증/모니터링해야 한다.

Summary

  • 계층(합 제약) + reconciliation 없이는 조직 단위 숫자가 깨진다.
  • 신제품은 유사도/계층으로 seed를 만들고 빠르게 학습 루프를 돌린다.
  • 프로모션은 이벤트 구간 슬라이스 검증이 필수이며, uplift가 필요하면 반사실 추정 파이프라인을 분리한다.

References

반응형