Skip to content

LDY5388/Production_Decision_Support_Project

Repository files navigation

제조업 수요 예측 및 안전재고 시뮬레이션

프로젝트 개요

제조업 환경에서 제품별/창고별 수요를 예측하고, 예측 불확실성을 반영한 안전재고 수준을 시뮬레이션하여 생산 의사결정을 지원하는 프로젝트.

양산 현장에서 생산 계획을 수립할 때, "다음 달에 얼마나 만들어야 하는가?"에 대한 통계적 근거를 제공하는 것이 목표다.

프로젝트 구조

demand-forecast-project/
├── data/                  # 원본 데이터 및 전처리 데이터
├── notebooks/             # 분석 노트북 (EDA, 모델링 등)
├── src/                   # 재사용 가능한 함수 모듈
├── outputs/               # 분석 결과물 (그래프, 리포트 등)
├── dashboard/             # Streamlit 대시보드
├── README.md
├── requirements.txt
└── .gitignore

데이터

분석 흐름

  1. 전처리 및 EDA

    • 결측치 처리 (날짜 11,239건, 음수 주문 10,469건)
    • 월별 집계 및 시계열 구조 변환
    • 창고별/카테고리별 수요 패턴 탐색
    • 계절성, 추세, 정상성 검정
  2. 수요 예측 모델링

    • ARIMA / SARIMA
    • 지수평활법 (Holt-Winters)
    • Prophet
    • 모델별 성능 비교 (RMSE, MAPE, 예측 구간 커버리지)
  3. 안전재고 시뮬레이션

    • 예측 오차 분포 기반 안전재고 산출
    • 몬테카를로 시뮬레이션으로 서비스 수준별 재고 수준 도출
    • 과잉 생산 비용 vs 품절 비용 트레이드오프 분석
  4. 대시보드

    • Streamlit 기반 생산 의사결정 지원 대시보드
    • 제품별 수요 예측 결과 및 신뢰구간 시각화
    • 안전재고 추천 및 시나리오 비교

EDA 주요 발견

전처리 결과:

  • 원본 1,048,575행에서 날짜 결측(11,239건), 음수 주문(5,899건), 0 주문(28,672건) 제거
  • 최종 분석 대상: 1,002,765행 (2011-01 ~ 2017-01)

데이터 특성:

  • 2011년은 데이터가 거의 없고, 2017년은 1월만 존재. 모델링 시 2012~2016년 사용 권장.
  • Whse_J가 전체 수요의 65.5%를 차지. 반도체 양산 관점에서 메인 FAB에 해당.
  • 주문량 분포가 극심하게 right-skewed (평균 5,105 vs 중앙값 300). 로그 변환 고려.
  • Whse_C는 뚜렷한 상승 추세, Whse_S는 2016년부터 하락 추세.

시계열 특성:

  • ADF 검정 결과 원본 시계열은 비정상(p=0.0599), 1차 차분 후 정상성 확보(p<0.001).
  • 12개월 주기 계절성 존재하나 강하지 않음. 3월, 10월에 약한 피크.
  • ARIMA 기반 모델링 시 d=1 사용, 계절 차분도 검토 필요.
  • ACF가 서서히 감소하는 패턴 -> AR 성분 존재.

모델링 결과

수요 예측 (2016년 하반기 6개월 테스트):

모델 RMSE MAPE 95% 커버리지
SARIMA(1,1,1)(1,1,0,12) 9,604,501 8.31% 100%
Holt-Winters (additive) 4,869,605 4.60% 100%
Prophet 5,207,065 5.59% 100%

Holt-Winters가 RMSE, MAPE 모두에서 가장 우수. 이 데이터의 계절성이 비교적 안정적이기 때문.

창고별 예측 (Holt-Winters):

  • Whse_J: MAPE 6.3% (메인 창고, 수요 안정적)
  • Whse_C: MAPE 12.6% (상승 추세로 인해 예측 난이도 높음)
  • Whse_A: MAPE 14.3%
  • Whse_S: MAPE 16.6% (하락 추세 + 높은 변동성)

안전재고 시뮬레이션 결과

몬테카를로 시뮬레이션 (N=10,000):

  • 90% 서비스 수준: 안전재고 약 830만, 생산목표 약 8,890만
  • 95% 서비스 수준: 안전재고 약 1,070만, 생산목표 약 9,130만
  • 99% 서비스 수준: 안전재고 약 1,510만, 생산목표 약 9,570만

비용 트레이드오프 분석 (과잉:품절 = 1:5 가정):

  • 비용 최적 생산량: 약 8,690만 (서비스 수준 83.2%)
  • 품절 비용 비중이 높을수록 최적점이 오른쪽(더 많이 생산)으로 이동

창고별 변동계수(CV): Whse_J 7.5% < Whse_A 11.0% < Whse_C 18.2% < Whse_S 29.4%

  • CV가 높은 창고일수록 상대적으로 더 많은 안전재고 필요

진행 기록

날짜 작업 내용 비고
2026-03-01 프로젝트 구조 설정, README 작성 초기 세팅
2026-03-01 데이터 전처리 및 EDA 완료 시각화 9개, 집계 데이터 3개 생성
2026-03-01 수요 예측 모델링 완료 SARIMA, Holt-Winters, Prophet 비교. HW 최적 (MAPE 4.6%)
2026-03-10 안전재고 시뮬레이션 완료 몬테카를로 10,000회, 비용 트레이드오프 분석
2026-03-12 Streamlit 대시보드 완료 4개 탭, 실시간 파라미터 조절 가능

기술 스택

  • Python (pandas, numpy, scipy, statsmodels, prophet, scikit-learn)
  • 시각화: plotly, matplotlib
  • 대시보드: Streamlit
  • 데이터 처리: SQL 스타일 쿼리 (pandas)

실행 방법

pip install -r requirements.txt

# EDA 노트북 실행
jupyter notebook notebooks/01_eda.ipynb

# 대시보드 실행
streamlit run dashboard/app.py

About

A project designed to support production decision making in a manufacturing environment by forecasting demand by product and warehouse and simulating safety stock levels to account for forecast uncertainty.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages