본문으로 건너뛰기

© 2026 Molayo

Zenn헤드라인2026. 05. 25. 16:49

수요 예측에서의 절단 문제 ② 이론편·전편 ─ 왜 일반적인 예측 모델은 계통적으로 틀리는가

요약

재고 부족으로 인해 실제 수요가 데이터에 제대로 반영되지 않는 '절단(Censoring)' 문제를 통계학적 관점에서 분석합니다. Censoring, Truncation, Sample selection의 차이를 정의하고, 합성 데이터를 통해 일반적인 OLS 모델이 수요를 어떻게 과소평가하는지 시각화합니다.

핵심 포인트

  • 재고 상한선에 의한 수요 절단은 모델의 계통적 과소평가를 유발함
  • Censoring, Truncation, Sample selection의 개념적 차이 명확화
  • Python 합성 데이터를 활용해 진정한 수요와 관측 매출의 괴리 확인
  • 일반 OLS 모델 대신 Tobit 모델 등 적절한 통계 기법의 필요성 제시

총 5회 시리즈 중

제 2회. 이전 회차: 제 1 회 (도입편) / 다음 회차: 제 3 회 (이론편·후편). 전체 구성은 제 1 회 서두를 참조하십시오.

1. 지난 회차 복습과 이번 회차의 목표

제 1 회에서는 **"선반이 비게 된 날의 판매 수량은 진정한 수요가 아니라, 재고 상한선에 의해 절단(Censoring)된 값이다"**라는 사실을 레이와 시대의 쌀 소동을 소재로 설명했습니다. POS 데이터를 그대로 믿고 예측 모델을 구축하면, 수요를 계통적으로 과소평가하게 되어, 품절 → 추가적인 과소 예측 → 품절이라는 악순환에 빠지게 된다고 논했습니다.

여기까지는 정성적인 이야기였습니다. 본 기사에서는 드디어 Python을 실행합니다. 다만 목적은 "모델을 만드는 것"이 아니라, "문제의 크기를 수치와 그래프로 실감하는 것"입니다.

구체적으로는 다음 3단계로 진행합니다.

  • 비슷하지만 다른 3가지 개념 (절단(Censoring)·절단(Truncation)·표본 선택(Sample selection))을 정리한다
  • 합성 데이터(Synthetic data)를 만들어 절단을 시각화한다
  • 일반적인 OLS간이 Tobit의 추정 결과를 나란히 놓고 차이를 눈으로 확인한다

도중에 수식이 등장하지만, 제 3 회에서 본격적으로 다룰 예정이므로, 여기서는 "식의 형태를 살펴보며 무엇이 일어나고 있는지 상상하는" 수준에 머뭅니다.

2. 절단(Censoring), 절단(Truncation), 표본 선택(Sample selection) ― 비슷하지만 다른 3가지 개념

제 1 회에서는 편의상 "절단"이라는 단어만 사용했지만, 통계학 문헌에서는 다음 3가지 개념이 엄격히 구분됩니다. 혼동하기 쉬우므로 여기서 정리해 두겠습니다. Breen (1996)[2]의 제 1 장을 따랐습니다.

개념정의쌀 소동에서의 대응 예시
Censoring (절단)임계값을 초과한 관측값은 임계값으로 대체되지만, 관측 자체는 남는다. 설명 변수(날짜, 기온, 요일 등)는 모든 관측에서 알 수 있다.선반이 비게 된 날에 "판매 50포대·날짜 있음·기온 있음"이라고 기록됨
Truncation (절단/절단)임계값을 초과한 관측값은 데이터에서 완전히 사라진다. 설명 변수조차 남지 않는다.POS 시스템이 정지하여 그날의 로그가 존재하지 않음
Sample selection (표본 선택)관측 여부가 다른 변수 z에 의존한다.회원 카드 등록자만 사용하는 POS (미등록 고객의 수요는 기록되지 않음)

본 시리즈에서는 주로 censoring을 다룹니다. 왜냐하면 쌀 소동에 국한되지 않고 소매·유통의 "재고 부족에 의한 수요 절단" 문제는 구조적으로 대부분 censoring이기 때문입니다. POS 데이터에는 "그날 임계값 이상의 수요가 있었다"라는 사실 그 자체는 (재고 데이터와의 대조를 통해) 복원 가능한 형태로 남아 있습니다.

Sample selection은 제 3 회에서 간단히 다루며, 실제로 쌀 소동기의 "1가구 1포대"라는 매장 규칙으로 인해 수요 관측이 왜곡되는 사례를 언급하겠습니다.

3. Python을 이용한 첫 번째 실험: 진정한 수요와 관측되는 매출

그럼 합성 데이터를 만들어 봅시다. 합성 데이터를 사용하는 이유는 명확합니다. **진정한 수요(True demand)**를 알 수 있기 때문입니다.

다음 코드는 Google Colab (Python 3.11 이상)에서 그대로 실행됩니다.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
...

출력되는 절단 일수는 90일 (150일째239일째의 쌀 소동기)입니다. 실제 레이와 시대의 쌀 소동도 2024년 8월10월에 걸쳐 3개월 가까이 품귀 현상이 지속되었으므로, 이와 유사하게 설정했습니다. 평상시에는 캐파시티(Capacity)가 200으로 충분히 크기 때문에 절단은 발생하지 않습니다.

다음으로, 3개의 선을 겹쳐서 그립니다.

fig, ax = plt.subplots(figsize=(12, 5))
ax.plot(df["day"], df["capacity"], label="재고 캐파시티 (c)", color="tab:red", linestyle="--", zorder=2)
ax.fill_between(
...

이 그래프에서 강조하고 싶은 점은 다음 3가지입니다.

  • 평상시(0149일, 240364일)에는 매출선(파란색)과 진정한 수요선(검은색)이 거의 일치한다.
  • 쌀 소동기(150~239일)에는 매출선(파란색)이 캐파시티 선(빨간색 점선)에 달라붙는다. 진정한 수요(검은색)는 캐파시티보다 위에 있지만, 매출에는 나타나지 않는다.
  • 주황색으로 채워진 부분이 바로 "데이터에서 손실된 수요"이다.

4. 실험 그 1: 단순한 OLS로 예측하면 어떻게 되는가

여기서 간단한 실험을 하나 해보겠습니다. 위에서 만든 sales 열을 "진정한 수요다"라고 가정하고, 일반적인 선형 회귀 (Linear Regression)로 트렌드와 계절성을 추정해 보겠습니다.

이는 실무에서 흔히 수행되는 분석입니다. 많은 데이터 사이언티스트들은 일별 매출 데이터가 주어지면 가장 먼저 OLS (Ordinary Least Squares, 최소제곱법)를 사용하여 트렌드와 계절성을 맞추기 시작합니다.

import statsmodels.api as sm
# 설명 변수: 선형 트렌드 + 1주기 sin/cos
X_design = np.column_stack([
...

전형적인 출력 결과는 다음과 같습니다 (난수 시드에 따라 다소 차이가 있을 수 있습니다).

파라미터오라클 (진정한 수요 기준)방침 A (전체 데이터 OLS)방침 B (절단 데이터 제외 OLS)
절편99.0888.9098.70
...
절편, 트렌드 계수, sin 계수(계절성의 진폭)가 모두 진정한 값보다 작은 방향으로 편향되어 있음을 확인할 수 있습니다. 구체적으로 방침 A에서는 트렌드 계수가 약 24% 과소 추정되었으며, 계절성의 진폭 또한 20 이상이어야 할 것이 15.6 정도로 줄어들었습니다 (약 23% 감소).

왜 방침 B(절단된 날짜를 제외)를 사용해도 편향 (Bias)이 완전히 제거되지 않는 걸까요? 이는 Breen (1996)[2:1]의 제2장에서도 자세히 다루어지는 중요한 지점입니다. 직관적으로 말하자면, 절단된 날짜를 제외한다는 것은 "수요가 캐파시티 미만이었던 날만" 사용하여 회귀 분석을 수행한다는 의미이며, 이는 진정한 수요의 분포에서 비대칭적으로 잘려 나간 (truncated) 샘플을 사용하고 있다는 뜻이 됩니다. 남은 샘플의 "수요"에는 더 이상

SALT2 について

본 시리즈를 집필하고 있는 SALT2는 생성 AI, 예측 모델, 최적화를 결합한 맞춤형 AI 솔루션을 제공하는 AI 스타트업입니다. 수요 예측 및 재고 최적화와 같은 ML 프로젝트뿐만 아니라, AI Agent를 통한 컨설팅 업무 DX, 비구조화 데이터의 자율적 구조화 파이프라인, Media 구축 등 폭넓은 영역에서 기업 과제 해결을 지원하고 있습니다. 2025년 10월에는 부스트 컨설팅 주식회사(Boost Consulting Co., Ltd.)의 그룹사가 되어, 전략 컨설팅의 지견과 최첨단 기술력을 결합한 체제를 갖추었습니다. 제공 사례는 SALT2의 사례 페이지에서 공개하고 있습니다.

5. 왜 편향이 발생하는가: 조건부 기대값이라는 관점

여기서 이번 시리즈의 유일한 가벼운 수식을 하나 소개하겠습니다. 그저 훑어보기만 해도 괜찮습니다.

매출

여기서

관측되는 매출의 기대값은 두 세계의 가중 평균이 됩니다. 제1항은 "수요가 캐파시티 미만이라서 그대로 관측되는 세계", 제2항은 "수요가 캐파시티 이상이라서 천장에 붙어버리는 세계"입니다. 일반적인 OLS는 암묵적으로 "$x'\beta$는 선형 함수 $y$와 같다"라고 가정하고 추정하기 때문에, 제2항의 구조를 무시하게 되어 계수가 왜곡됩니다.

중요한 것은 제2항의

그렇기 때문에 OLS는 계통적으로 어긋나게 됩니다. 어긋나는 이유는 "우리 데이터가 특수해서"가 아니라, 회귀 모델이 절단의 존재를 상정하지 않았다는 수학적·구조적 이유 때문입니다.

6. Tobit 모델의 직관적인 소개

여기서 본 시리즈의 주인공인 Tobit 모델을 도입합니다.

Tobit 모델은 1958년 경제학자 James Tobin이 제안했습니다 [1:1]. 당시 Tobin이 대상으로 삼았던 것은 쌀 소동과는 반대 방향의 절단 문제인 "가계의 내구 소비재 지출"이었습니다. 구체적으로는 다음과 같은 상황입니다:

  • 많은 가계를 대상으로 그해의 내구 소비재(자동차, 가전제품 등) 지출을 조사함
  • 조사한 해에 아무것도 사지 않은 가계는 "지출 = 0"으로 기록됨
  • 이는 "지출이 정확히 0원"이라는 관측이 아니라, "잠재 수요가 임계치 이하라서 표면화되지 않았다"라고 해석됨

Tobin의 모델에서는 잠재 변수 (Latent Variable)

쌀의 예에서는 방향이 반대입니다. 진정한 수요가 초과했을 때 관측이

하지만 수학적으로는 동일한 구조를 가집니다. 둘 다 "잠재 변수의 상향 절단 (censoring from above)"을 다룹니다.

이 "부분 정보로서 사용한다"는 발상이 Tobit와 OLS를 결정적으로 가르는 지점입니다.

  • OLS: "~라고 관측되었다" $\rightarrow$ 어쨌든 50을 예측하고 싶다 $y = 50$
  • Tobit: "~라고 관측되었으며, 이는 절단값(Censoring value)이다" $\rightarrow$ 진정한 $y = 50$은 $y^* \ge 50$인 어딘가에 있다. 이 '어딘가'라는 정보를 우도(Likelihood)에 포함시킨다.

7. Tobit 추정을 간단히 시도하기

안타깝게도 statsmodels에는 직접적인 Tobit 추정기가 포함되어 있지 않습니다 (2026년 4월 기준). 그래서 짧은 자작 로그 우도 함수(Log-likelihood function)를 작성하여, scipy.optimize.minimize로 최대화해 보겠습니다.

from scipy.optimize import minimize
from scipy.stats import norm
import numpy as np
...

전 절과 동일한 시드(Seed)로 실행했을 경우, Tobit의 추정치는 전형적으로 다음과 같습니다.

파라미터오라클 (Oracle)OLS (전체 데이터)Tobit
절편99.0888.9099.14
...

보충: 왜 최적화가 잘 작동하는가?

Tobit의 로그 우도 함수는 적절하게 파라미터를 재파라미터화(Re-parameterization)했을 때 **대역적 오목성 (Globally concave)**을 가진다는 것이 Olsen (1978)[4]에 의해 증명되었습니다. 대역적 오목성은 '지역 최솟값(Local minima)이 없으며, 어디서 시작하든 동일한 정점에 도달한다'는 것을 의미합니다. 따라서 초기값을 다소 대충 주더라도 L-BFGS-B와 같은 일반적인 수치 최적화(Numerical optimization)를 통해 안정적으로 해를 얻을 수 있습니다.

이는 실무상 매우 반가운 성질입니다. 뉴럴 네트워크(Neural Network)처럼 초기값이나 학습률(Learning rate)에 따라 결과가 계속 변하는 모델과 달리, Tobit의 추정은 재현성이 높습니다. 자세한 증명과 log-reparametrization의 기법에 대해서는 제3회에서 소개하겠습니다.

8. 예측 정밀도도 비교해 보기

추정된 파라미터를 사용하여, 진정한 수요를 예측하는 정밀도도 비교해 봅시다.

# 각 모델로 진정한 수요를 예측 (설명 변수는 동일한 X_design)
pred_ols = model_naive_all.predict(X_design)
pred_tobit = X_design @ tobit_params
...

전형적인 출력 예시:

OLS의 RMSE: 16.29
Tobit의 RMSE: 9.41
[쌀 소동기만] OLS의 RMSE: 17.44
...

주목해야 할 점은, 쌀 소동기에는 OLS의 예측 오차가 Tobit의 약 1.7배로 불어난다는 것입니다. OLS는 쌀 소동기의 수요를 과소평가하기 때문에 소동기의 RMSE가 커집니다. 반면 Tobit는 쌀 소동기에서도 평상시와 거의 비슷한 수준의 예측 정밀도를 유지할 수 있습니다. 이는 Tobit가 "절단(Censoring)이 일어나고 있던 기간이었기에, 진정한 수요는 더 높을 것이다"라고 우도(Likelihood)를 통해 추정할 수 있기 때문입니다.

실무적으로는 이벤트 기간 및 이상기(Anomaly period)의 예측 정밀도 개선이야말로 절단 보정의 가장 큰 혜택인 경우가 많습니다. 평상시에는 OLS를 사용해도 큰 차이가 없는 경우가 종종 있습니다. 하지만 재고 결정이 정말로 효과를 발휘하는 시점은 사실 바로 이벤트 기간이나 이상기입니다. 동일한 발상이 최근에는 지수 평활법 (ETS)에 대한 절단 대응으로서 재정식화(Re-formulation)가 진행되고 있습니다 [5].

9. 이번 회차의 요약 및 다음 회차 예고

  • Censoring / Truncation / Sample selection의 3가지 개념을 구분하며, 본 시리즈는 Censoring을 중심으로 다룬다.
  • 합성 데이터로 "진정한 수요 / 매출 / 캐파시티 (Capacity)"의 3개 선을 그리면, 절단 기간에는 매출이 캐파시티에 달라붙는다.
  • 일반적인 OLS는 절단을 무시하면 계통적인 하향 편향(Downward bias)이 발생하고, 절단된 데이터를 제외하면 절단된(Truncated) 샘플이 되기 때문에 편향이 남는다.
  • Tobit 모델 [1:2]은 절단된 관측치를 "~ 이상의 어딘가에 있다"라는 부분 정보로서 우도에 포함함으로써, 진정한 파라미터에 가까운 추정을 얻을 수 있다.
  • 예측 정밀도 (RMSE)는 특히 이벤트 기간에서 Tobit가 압도적으로 우세해진다.

다음 회차 (제3회)에서는 이 Tobit 모델 내부에서 어떤 일이 일어나고 있는지를 수학적으로 깊이 있게 파헤칩니다. 구체적으로는 다음 질문에 답할 것입니다.

  • 왜 우도 함수 (Likelihood function)에 「밀도 함수 (Density function)」와 「상측 생존 확률 (Upper survival probability)」이라는 두 종류의 항이 등장하는가?
  • 잠재 변수 (Latent variable)라는 개념은 무엇인가?
  • Inverse Mills Ratio라는 보정항의 정체는 무엇인가?
  • Sample selection (Heckman 2단계법 [3:1])은 Tobit과 어떻게 다른가?

다음 회차에서는 수식이 본격적으로 등장하며, Tobit 내부의 동작 원리를 유도합니다. 제3회가 끝나면, 제4·5회의 구현을 통해 그 이론이 작동하는 코드를 다루게 됩니다.

SALT2에서는 함께 일할 동료를 모집하고 있습니다

SALT2에서는 본 기사에서 다룬 Tobit 모델과 같은 계량경제학·머신러닝 (Machine Learning) 기법을 실제 프로젝트에 적용하여, 논문 → 구현 → 의사결정까지 일관되게 다룰 수 있는 환경에서 일하고 싶은 엔지니어/데이터 사이언티스트(Data Scientist) 분들의 채용 및 인턴십을 지속적으로 진행하고 있습니다. 최신 AI·LLM 논문 독해 모임이나, 현장에서 얻은 개발 노하우를 공유하는 활동이 일상적으로 이루어지는 환경입니다. 관심이 있으신 분은 SALT2 공식 사이트에서 확인해 주시기 바랍니다.

Tobin, J. (1958). "Estimation of Relationships for Limited Dependent Variables,"

Econometrica, 26(1), 24–36. https://doi.org/10.2307/1907382 ↩︎ ↩︎ ↩︎ -
Breen, R. (1996).

*Regression Models: Censored, Sample-Selected, or Truncated Data.*Sage Publications. https://doi.org/10.4135/9781412985611 ↩︎ ↩︎ -
Heckman, J. J. (1979). "Sample Selection Bias as a Specification Error,"

Econometrica, 47(1), 153–161. https://doi.org/10.2307/1912352 ↩︎ ↩︎ -
Olsen, R. J. (1978). "Note on the Uniqueness of the Maximum Likelihood Estimator for the Tobit Model,"

Econometrica, 46(5), 1211–1215. https://doi.org/10.2307/1911447 ↩︎ -
Pedregal, D. J., Trapero, J. R., & Holgado, E. (2024). "Tobit Exponential Smoothing, towards an enhanced demand planning in the presence of censored data." arXiv:2407.17920。 https://arxiv.org/abs/2407.17920 ↩︎

Discussion

AI 자동 생성 콘텐츠

본 콘텐츠는 Zenn ML의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0