식품제조업 수요예측 오차 분석 — MAPE·MAD·Bias를 생산계획과 안전재고에 연결하기
식품 수요예측의 목적은 오차를 0으로 만드는 게 아니다. 예측이 틀렸을 때 그 오차를 MAPE·MAD·Bias로 측정하고 안전재고·수율·생산계획에 다시 반영하는 Feedback Loop를 정리한다.
식품공장의 수요예측은 판매량을 맞히는 통계 문제가 아니다.
예측보다 20% 적게 팔리면 완제품 재고가 남고 소비기한이 줄어든다. 반대로 예상보다 주문이 많이 들어오면 긴급생산과 원료 긴급구매가 발생하고, 생산능력이 부족하면 결품으로 이어진다.
같은 20%의 예측오차라도 일반 공산품과 식품의 손실구조는 다르다. 식품은 저장기간이 짧고, 원재료 역시 사용기한이 있으며, 생산한 완제품은 시간이 지나면 재고가 아니라 폐기위험으로 바뀐다.
따라서 식품제조업에서 Demand Forecasting의 목적은 예측오차를 0으로 만드는 데 있지 않다. 예측이 틀렸을 때 그 오차가 재고·생산·구매계획에 얼마나 영향을 주는지를 측정하고, 다음 계획에 다시 반영하는 것이 핵심이다.
영업팀의 예상수량이 틀리는 게 문제가 아니라, 틀린 정도를 기록하지 않는 게 문제다
많은 식품공장에서 월 생산계획은 영업예상과 전월 판매실적을 합쳐 만든다. 지난달 10,000박스가 팔렸으니 이번 달도 10,000박스, 프로모션이 있으니 2,000박스 추가, 영업담당자가 주문이 늘 것 같다고 하니 다시 1,000박스 추가 — 이 방식 자체가 항상 잘못된 것은 아니다. 영업정보에는 통계모델이 알지 못하는 거래처 행사·신규점포·경쟁사 상황이 들어 있기 때문이다.
문제는 예측이 끝난 뒤 실제 판매량과 비교하지 않는 것이다. 12,000박스를 예상했는데 8,000박스가 팔렸다면 왜 4,000박스가 틀렸는지 기록해야 한다. 다음 달에도 같은 품목을 12,000박스로 잡는다면 그것은 Forecast가 아니라 반복된 추정이다. 예측 시스템에서 가장 중요한 데이터는 Forecast 자체보다 Forecast와 Actual 사이에 발생한 Error History다.
MAPE는 ’몇 퍼센트 틀렸는가’를 보여준다
가장 많이 쓰는 지표 중 하나가 MAPE(Mean Absolute Percentage Error)다. 기간별 실제수요를 A, 예측치를 F라고 하면 MAPE = 평균(|A - F| / A) × 100으로 계산한다.
실제 판매량이 1,000박스인데 900박스를 예측했다면 절대백분율오차는 10%다. 실제 2,000박스에 2,200박스를 예측해도 10%다. 그래서 MAPE는 판매규모가 다른 품목의 Forecast Accuracy를 상대적으로 비교하기 편하다. 제품 A의 평균 판매량이 500박스이고 제품 B는 20,000박스여도 두 품목의 예측오차를 백분율로 비교할 수 있다.
하지만 약점도 분명하다. 실제 판매량이 10박스인데 20박스를 예측하면 오차는 100%, 실제 1박스에 5박스를 예측하면 400%가 된다. 실제값이 0이면 일반적인 MAPE 공식 자체가 계산되지 않는다. 따라서 신제품, 간헐적 주문품목, 주문 빈도가 낮은 B2B 제품을 MAPE 하나로 평가하면 Forecast Quality가 과도하게 나빠 보일 수 있다. MAPE는 상대적 정확도 지표이지 모든 품목에 적용되는 절대적 평가점수가 아니다.
MAD는 공장이 실제로 감당해야 할 오차량을 보여준다
MAD(Mean Absolute Deviation)는 백분율이 아니라 실제 수량으로 오차를 본다. MAD = Σ|A - F| / n이다. 최근 4주 예측오차가 각각 +100 · -150 · +80 · -70박스였다면 절대오차의 평균은 100박스다.
MAPE가 “몇 % 틀렸는가”를 보여준다면 MAD는 평균적으로 몇 박스를 틀리는가를 보여준다. 식품 제조에서는 이 숫자가 중요하다. 평균 Forecast Error가 500박스라면 그 오차가 팔레트 몇 장인지, 냉동창고 공간이 얼마나 필요한지, 생산라인 몇 시간이 필요한지 바로 계산할 수 있고 원재료 구매량과 연결하기도 쉽다. Oracle의 재고계획 문서에서도 Forecast와 Actual Demand의 차이에서 MAD를 계산하고 서비스 수준과 결합해 안전재고 산정에 활용하는 방식을 설명한다.
Bias는 예측이 ’틀리는 방향’을 본다
MAPE와 MAD에는 방향이 없다. 실제 1,000개인데 1,200개를 예측한 경우와 800개를 예측한 경우 모두 절대오차는 200개다. 하지만 경영 결과는 다르다. 계속 과대예측하면 재고와 폐기가 증가하고, 계속 과소예측하면 결품과 긴급생산이 증가한다. 그래서 Error의 부호를 유지한 Bias가 필요하다.
예측오차를 Error = Actual - Forecast로 정의한다면, 양수 Error가 지속되는 경우 실제수요가 예측보다 높았다는 뜻이므로 Under-Forecasting 경향이고, 음수가 계속 발생하면 Over-Forecasting이다. NC State의 수요예측 자료 역시 Actual minus Forecast 방식의 Forecast Error를 사용하며, 평균오차가 양수이면 Under-Forecasting, 음수이면 Over-Forecasting 경향으로 설명한다.
중요한 것은 회사 내부에서 Error의 부호 정의를 하나로 통일하는 것이다. Forecast - Actual을 써도 계산 자체는 가능하지만, 그 경우 Bias 부호의 해석은 반대로 바뀐다.
Tracking Signal은 작은 편향이 계속 누적되는지를 찾는다
한두 번의 예측오차만으로 Forecast Model을 바꾸면 오히려 계획이 불안정해질 수 있다. 프로모션이나 날씨 때문에 특정 주만 예외적으로 수요가 증가했을 수 있기 때문이다.
Tracking Signal은 누적된 Forecast Error를 MAD와 비교해 지속적인 Bias를 찾는 데 쓴다. 대표적인 형태는 Tracking Signal = RSFE / MAD다. RSFE는 Running Sum of Forecast Errors, 즉 누적 예측오차다. 양의 Error가 지속적으로 누적되면 Under-Forecast 방향으로 Tracking Signal이 움직이고, 음의 Error가 누적되면 Over-Forecast 방향으로 이동한다.
다만 Tracking Signal의 경계값을 특정 숫자로 일률 적용하는 것은 조심해야 한다. 품목의 수요패턴과 기업의 서비스 수준, Forecast Bucket에 따라 내부 관리한계를 정하는 게 좋다. 지표의 목적은 “±몇 이상이면 무조건 모델교체”가 아니라 예측오차가 우연인지 구조적인 편향인지 조기에 감지하는 것이다.
네 개 지표는 서로 대체하는 관계가 아니다
| 지표 | 대표 산식 | 보여주는 것 | 식품 현장 활용 |
|---|---|---|---|
| MAPE | 평균(절대오차 ÷ 실제) × 100 | 상대적 예측오차 | 품목·기간별 정확도 비교 |
| MAD | 평균(절대오차) | 실제 오차수량 | 생산량·창고·안전재고 규모 판단 |
| Bias/MFE | 평균(실제 − 예측) | 오차 방향 | 지속적 과대·과소예측 확인 |
| Tracking Signal | 누적오차 ÷ MAD | 누적 편향 | Forecast Model 이상 감지 |
MAPE가 낮아졌는데 Bias가 계속 한쪽 방향으로 움직일 수도 있다. MAD가 커졌지만 매출규모가 두 배로 증가했다면 상대적인 MAPE는 오히려 개선될 수도 있다. 그래서 경영자는 “Forecast Accuracy 91%“라는 단일 숫자보다 네 지표가 무엇을 말하는지 같이 봐야 한다.
Forecast Error는 안전재고를 결정하는 입력값이다
안전재고를 과거 평균판매량의 10%로 고정하는 회사가 많다. 수요가 안정적인 품목이라면 단순한 방법도 운영할 수 있다. 하지만 Forecast Error가 크게 변하는 품목에서는 고정비율 방식이 잘 맞지 않는다.
예측오차의 표준편차를 σe, 목표 서비스 수준에 해당하는 z-score를 Z, 리드타임을 L이라고 단순화하면, 일정 조건에서는 Safety Stock ≈ Z × σe × √L 같은 형태로 Forecast Error를 안전재고에 반영할 수 있다. 실무 시스템에서는 수요변동뿐 아니라 공급 Lead Time 변동도 고려할 수 있다. Oracle NetSuite의 재고최적화 로직도 평균수요·수요의 표준편차·평균 Lead Time·Lead Time 표준편차와 서비스 수준 z-score를 결합해 Lead-Time Demand Variation과 Safety Stock을 계산한다.
따라서 Dynamic Safety Stock의 핵심은 재고를 자주 변경하는 게 아니라 최근 Forecast Error와 공급불확실성에 따라 안전재고 기준을 재계산하는 것이다.
그렇다고 Forecast Error가 커질 때마다 안전재고를 늘리면 안 된다
예측오차가 큰 제품에 안전재고를 계속 추가하면 결품은 줄어들 수 있다. 하지만 식품에서는 다른 문제가 발생한다. 예측이 틀릴수록 더 많은 재고를 만들고, 그 재고가 소비기한 Risk로 바뀐다.
따라서 Forecast Error가 급증했다면 먼저 이유를 분리해야 한다.
- 일시적인 프로모션 때문인지
- 계절성이 바뀌었는지
- 신규 거래처가 들어왔는지
- 제품 Lifecycle이 하락기에 들어갔는지
- Forecast Model 자체가 Bias를 가지고 있는지
그 이후에 Safety Stock을 조정해야 한다. 나쁜 Forecast를 높은 Safety Stock으로 덮는 것은 재고최적화가 아니다.
프로모션은 정상수요와 분리해야 한다
대형마트 행사 때문에 평소 1,000박스 판매하던 제품이 한 주에 3,000박스 판매됐다고 하자. 이를 그대로 이동평균에 넣으면 이후 Forecast가 상승하고, 행사가 끝난 다음 주에는 과잉생산이 발생할 가능성이 높다.
따라서 ERP Demand History에는 Normal Demand와 Promotion Lift를 구분할 수 있어야 한다. 프로모션 시작일·종료일 · 고객사 · 할인율 · 행사물량 · 실제 판매량을 Event Data로 연결하면, Forecast Model이 일회성 증가를 정상적인 Trend로 잘못 해석하는 것을 줄일 수 있다.
날씨 역시 일부 식품에서는 중요한 External Variable이 될 수 있다. 음료·아이스크림·국물류·계절상품 등은 기온과 강수량의 영향을 받을 수 있다. 다만 모든 품목에 날씨 변수를 넣는다고 Forecast가 좋아지는 것은 아니다. 실제 수요와 관계가 있는지 검증한 후 쓰는 편이 낫다.
식품공장은 판매예측과 생산예측을 같은 숫자로 쓰면 안 될 때가 있다
다음 주 완제품 수요가 10,000kg이라고 하자. 생산수율이 100%라면 원재료도 단순하게 10,000kg에 맞춰 계산할 수 있다. 하지만 평균 Yield가 92%라면 필요한 공정 투입량은 달라진다. 단순하게 보면 필요 투입량 = 목표 양품 생산량 / 예상수율이다. 10,000kg의 판매가능 제품이 필요하고 예상수율이 92%라면 약 10,870kg의 공정 투입이 필요하다.
따라서 Demand Forecast가 정확해도 Yield Forecast가 틀리면 원료 MRP는 틀린다. 품목별 Expected Yield를 ERP Master Data에 두고, MES의 최근 Actual Yield가 지속적으로 벗어나면 MRP의 투입계수도 검토해야 한다.
BOM도 Forecast Feedback Loop의 일부다
판매수요 10,000개를 정확하게 예측했더라도 BOM Master가 오래됐다면 자재계획은 틀릴 수 있다. 실제 현장에서는 원료 A가 제품당 105g 사용되는데 ERP Standard BOM에는 100g으로 남아 있다면 10,000개 생산에서 50kg의 자재 차이가 발생한다. 수요예측팀은 Forecast를 정확히 맞혔는데 구매팀에서는 원료가 부족해진다.
그래서 Demand Planning의 입력은 판매데이터만이 아니다. ERP Master Data의 BOM·Lead Time·MOQ·Safety Stock과 MES의 Actual Consumption·Yield가 함께 맞아야 MRP가 의미를 가진다.
생산계획은 Forecast를 그대로 생산지시로 바꾸는 작업이 아니다
예측수요가 12,000개라고 해서 12,000개를 즉시 생산하는 방식은 식품에서는 위험하다. 현재 가용재고가 있고, 이미 확정된 주문이 있고, 생산 중인 WIP가 있고, 반품예정이나 QC HOLD 재고도 있을 수 있고, 소비기한이 임박한 재고도 존재한다.
따라서 MPS는 최소한 Forecast · Confirmed Order · Available Inventory · QC Status · Scheduled Receipt · Safety Stock · Shelf-Life Constraint를 함께 보고 결정해야 한다. 특히 FEFO 품목에서는 단순한 On Hand Quantity보다 판매 가능한 잔여수명이 중요하다. 재고 5,000개가 있어도 고객사가 납품 시 소비기한 잔존율을 요구하고 그 조건을 만족하지 못한다면, 실제 계획상 Available Inventory는 더 적을 수 있다.
Forecast Error를 일 단위로 너무 민감하게 반영하면 생산계획이 흔들린다
시스템화하면 모든 데이터를 실시간으로 바꾸고 싶어진다. 하지만 Forecast를 매 주문마다 즉시 수정하고 MPS와 MRP를 다시 돌리면 Nervousness가 커질 수 있다. 오늘 수요가 조금 증가했다고 내일 생산량을 늘리고, 다음 날 감소했다고 다시 줄이면 구매와 생산현장이 계속 흔들린다.
그래서 Forecast Feedback에는 Time Bucket과 Freeze Zone이 필요하다. 단기 생산확정 구간은 쉽게 변경하지 않고, 그 이후 기간은 Forecast Error와 주문변화를 반영해 재계산한다. 예를 들어 오늘부터 2일은 Firm Zone, 이후 3~7일은 Semi-Frozen Zone, 그 이후는 Flexible Zone처럼 회사 공정 Lead Time에 맞춰 설정할 수 있다. 정답이 정해진 구조가 아니라 공장의 생산준비시간과 원료조달시간을 반영해야 한다.
수기 예측과 ERP·MES Feedback Loop의 차이는 ’AI 사용 여부’가 아니다
| 구분 | 감·엑셀 중심 계획 | ERP·MES Forecast Feedback |
|---|---|---|
| Forecast | 담당자 월별 예상 | 품목·고객·기간별 Forecast Version |
| Actual | 월말 매출 확인 | 주문·출하 기준 자동 집계 |
| MAPE/MAD | 필요 시 계산 | Rolling Window 자동 산출 |
| Bias | 담당자 체감 | 방향성 지속 모니터링 |
| 프로모션 | 메모·영업 전달 | Event Data로 분리 |
| Safety Stock | 고정 수량·비율 | Forecast Error에 따라 재산출 |
| Yield | 표준수율 | MES Actual Yield Feedback |
| BOM | 표준 사용량 | Actual Consumption 차이 분석 |
| MPS | Forecast 수동 전환 | 재고·주문·CAPA와 통합 |
| MRP | 고정 BOM 기반 | Forecast+Yield+BOM+Lead Time 반영 |
여기서 ’지능형’이라는 표현보다 중요한 것은 Feedback Loop가 닫혀 있는가다. 예측을 만들고 → 실제 주문·출하가 발생하고 → 오차를 계산하고 → 왜 틀렸는지 분류하고 → 필요하면 Forecast Parameter와 Safety Stock을 조정하고 → 그 값으로 다시 MPS·MRP를 만든다. 이 사이클이 반복돼야 한다.
MES 데이터는 수요를 예측하는 데이터가 아니라 생산가능성을 보정하는 데이터다
MES는 소비자가 다음 달 무엇을 살지 직접 알려주지 않는다. MES가 제공하는 것은 공장의 실제 실행능력이다. Batch별 생산시간 · Actual Yield · Downtime · Changeover Time · Good Quantity · Loss Quantity · 설비별 Capacity. 이 정보가 Forecast와 결합돼야 실행 가능한 생산계획이 된다.
Forecast가 하루 30,000개를 요구하지만 실제 병목공정 Capacity가 20,000개라면, 수요예측 정확도가 아무리 높아도 MPS는 실행되지 않는다. 따라서 Demand Planning 시스템은 What will be demanded?와 What can actually be produced?를 분리해서 계산한 뒤 연결해야 한다.
예측오차는 원가에도 바로 연결된다
Forecast가 지속적으로 높으면 원료구매량이 증가하고, 창고비가 늘고, 완제품 재고가 증가하며, 소비기한이 가까워지면 할인판매와 폐기가 발생한다. 반대로 지속적인 Under-Forecast는 긴급구매·소량생산·잦은 Changeover와 특근을 유발할 수 있다.
따라서 Forecast KPI를 정확도만으로 평가하면 부족하다. ERP/MES 원가에서는 Forecast Error가 실제로 만든 비용 — 폐기원가 · 긴급구매 추가단가 · 긴급운송비 · Changeover Cost · 재고보관비 · 결품매출 — 을 함께 보면 같은 MAPE 15%라도 어떤 Forecast Error가 더 위험한지 구분할 수 있다.
모든 SKU에 같은 Forecast Model을 적용할 필요는 없다
매일 안정적으로 판매되는 주력품과 한 달에 한 번 주문되는 OEM 제품을 같은 방식으로 예측하면 안 된다. 주력품은 시계열 기반 Forecast와 Dynamic Safety Stock이 잘 작동할 수 있고, 프로모션 제품은 Event Adjustment가 필요하며, 간헐수요 B2B 제품은 Confirmed Order 중심으로 운영하는 편이 나을 수도 있다. 신제품은 충분한 History 자체가 없다.
따라서 ERP Product Master에는 Forecast Policy도 품목 속성으로 둘 수 있다. Stable / Seasonal / Promotion Driven / Intermittent / Make-to-Order / New Product 같은 Demand Pattern을 구분하고, 그에 따라 Forecast Model과 Safety Stock Policy를 달리하는 것이다.
수요예측 시스템의 성능은 예측 정확도보다 보정속도로 판단할 필요가 있다
Forecast를 아무리 정교하게 만들어도 미래를 완전히 맞힐 수는 없다. 중요한 것은 오차가 발생한 뒤 시스템이 그것을 얼마나 빨리 인식하고 다음 의사결정에 반영하는가다.
MAPE는 상대적인 정확도를, MAD는 공장이 실제로 감당해야 할 오차량을, Bias와 Tracking Signal은 계속 같은 방향으로 틀리는지를 보여준다. Forecast Error의 변동성은 필요한 안전재고 수준을 판단하는 자료가 되고, MES의 Actual Yield와 Capacity는 Forecast를 실제 생산계획으로 변환할 수 있는지를 검증하며, ERP Master Data의 BOM과 Lead Time은 그 생산계획을 원재료 구매계획으로 바꾼다. 그리고 출하가 끝난 뒤 다시 Actual Demand가 Forecast와 비교된다. 이 순환이 끊기지 않아야 한다.
식품제조업에서 좋은 Demand Forecasting 시스템은 다음 달 판매량을 한 번에 정확하게 맞히는 시스템이 아니다. 예측이 틀렸을 때 그 오차를 수량과 방향으로 측정하고, 재고·수율·생산능력·소비기한을 반영해 다음 구매와 생산결정을 더 빨리 수정하는 시스템이다.
제조업 AI 자동화 — 어디서부터 시작하나
AI · 자동화3분 만에 확인최종 검증:
개정 이력
· 발행
여기 담긴 규정·수치는 최소 6개월마다 위 공식 출처와 대조해 재확인합니다. 실질적 변경(요건·기준·수치)은 조용히 덮어쓰지 않고 개정 이력에 남깁니다.
이 글은 일반적인 실무 정보이며 법률·세무·행정 자문이 아닙니다. 규정·수치는 관할과 시점에 따라 달라지므로, 실제 판단 전 위 공식 출처와 관할 기관에서 최신 기준을 확인하시기 바랍니다.
