Back to all work

케이스 스터디

신선식품 발주를 위한 Recommended Order Quantity 엔진

forecast는 입력 중 하나였을 뿐입니다. 이 시스템은 신선도, 시점, 창고 운영 제약을 함께 반영해 실제로 사용할 수 있는 발주 추천을 만들었습니다.

출력

추천 발주량, 결정 설명, 재고 전망.

forecast만으로는 발주량을 추천할 수 없었습니다.

문제

신선식품 발주는 수요 forecast만으로 결정할 수 없었습니다. 실제 추천값을 만들려면 현재 재고, open purchase order, vendor lead time, minimum order quantity, 그리고 입고 후 며칠이나 판매 가능한지를 함께 봐야 했습니다.

어려운 점은 예측 자체보다도, stockout risk와 freshness perception, waste exposure, warehouse feasibility를 동시에 균형 있게 다루는 발주 결정을 만드는 것이었습니다.

접근

저는 forecast와 inventory signal을 실제 발주 결정으로 바꾸는 rule-based ordering engine을 만들었습니다. 이 로직은 추천값만 내는 것이 아니라 결정 설명과 재고 전망까지 함께 남겨, black box처럼 보이지 않도록 했습니다.

핵심은 하나의 공식이 아니라, 신선식품을 실제 운영 제약 아래에서 발주할 수 있도록 만드는 단계형 decision system이었습니다.

이 엔진은 신선도, 운영 가능성, 창고 처리 효율을 함께 고려해야 했습니다.

재고와 수요

추천값은 forecast만이 아니라 현재 재고 상태와 open purchase order를 함께 본 상태에서 시작했습니다.

lead time과 codelife

주문 시점은 vendor lead time과 usable codelife를 함께 반영해야 했습니다. 신선식품은 재고를 너무 일찍 들여오는 것 자체가 다른 실패를 만들 수 있기 때문입니다.

MOQ와 pallet handling

minimum order와 pallet-unit 제약은 단순한 vendor rule이 아니었습니다. cross-dock warehouse에서 outbound warehouse로 재고를 이동할 때 pallet 단위로 주문하면 불필요한 depalletizing 작업을 줄일 수 있어 창고 운영 효율에도 직접 연결됐습니다.

주문 가능 일정

로직은 주말, 휴일, 비주문일도 반영해야 했습니다. 즉 추천값은 이론적 수치가 아니라 실제로 언제 주문하고 받을 수 있는지를 함께 고려한 결과여야 했습니다.

이 시스템은 입력과 제약을 단계적으로 반영해 실제 발주량을 만들었습니다.

forecast, 재고 상태, open purchase order, lead time, 판매 가능 기간을 받아 주문 분산, MOQ 및 pallet 반영, 주문 가능 일정 확인을 거쳐 추천 발주량, 결정 설명, 재고 전망으로 이어지는 흐름도.

추천값은 한 번에 계산된 숫자가 아니라, 시점과 신선도, 창고 제약이 최종 수량을 어떻게 바꾸는지 설명할 수 있도록 단계적으로 만들어졌습니다.

목표 coverage 설정

먼저 forecast, lead time, 신선도 buffer를 반영해 목표 coverage를 설정했습니다. 이 값이 어느 정도 재고를 보유해야 하는지에 대한 출발점이 됐습니다.

기본 주문량 산출

그 다음 목표 coverage에서 현재 재고 상태와 open purchase order를 반영해 기본 주문량을 만들었습니다. 이 값은 창고와 일정 제약을 적용하기 전의 출발점 역할을 했습니다.

주문 분산 제어

purchase-order cap은 주문을 시간에 걸쳐 분산시키기 위한 장치였습니다. 목적은 작은 OOS 개선만을 위해 재고를 너무 일찍 많이 들여오지 않도록 하는 것이었습니다.

신선도와 수요 변동성

이 제어는 상대적으로 codelife가 긴 SKU에도 중요했습니다. 너무 일찍 들여온 재고는 고객 입장에선 충분히 신선하지 않다고 느껴질 수 있고, competitor pricing 때문에 수요가 흔들리면 과잉 재고가 되어 waste나 markdown risk로 이어질 수 있기 때문입니다.

MOQ, pallet, 예외 처리

마지막으로 추천값을 MOQ와 pallet unit에 맞게 조정하고, 일반 경로만으로는 운영 리스크가 너무 큰 경우엔 예외 처리를 적용했습니다.

유용한 출력은 숫자 하나가 아니라 설명 가능한 결정이었습니다.

이 추천값은 사람의 판단을 대체하는 black box가 아니라, planning review를 더 빠르고 일관되게 만드는 보조 도구여야 했습니다.

추천 발주량

핵심 출력은 시점, 신선도, handling 제약이 이미 반영된 추천 발주량이었습니다.

결정 설명

또한 왜 그 추천이 나왔는지를 짧게 설명할 수 있도록 해, planning과 operations 팀이 로직을 더 쉽게 해석하고 논의할 수 있게 했습니다.

재고 전망

간단한 재고 전망을 함께 보여줘, 현재 재고와 입고 예정 물량을 반영했을 때 추천값이 합리적인지 검토할 수 있게 했습니다.

신선식품 발주는 더 좋은 예측보다 제약 구조가 먼저였습니다.

무엇이 중요했나

중요한 설계 문제는 forecast 자체보다, forecast를 신선도, 시점, 창고 handling, 구매 제약으로 어떻게 제한할 것인가였습니다.

왜 유용했나

이 엔진은 stockout risk, waste risk, freshness perception, operating efficiency를 하나의 reusable logic 안에서 함께 다뤄, 발주 결정을 더 일관되게 만들었습니다.

함께 보면 좋은 페이지

같은 문제를 다른 각도에서 다루는 케이스 스터디와 방법론입니다.

케이스 스터디

창고 그래프 기반 최적화 및 시뮬레이션

창고 그래프 구성과 시뮬레이션을 결합한 창고 최적화 워크플로우로, 완성형 최적화 엔진 이전 단계에서 재고 배치와 작업자 이동거리를 시험했습니다.

상태: 방향성 분석에 쓸 수 있는 사용 가능한 1차 시스템

방법론

재고 계획을 위한 Seasonality Index

SKU 단위 계절성을 추정하고 seasonal bucket으로 묶은 뒤 이를 카테고리 단위 재고 계획에 다시 연결하는 방법입니다.

형식: 상품 단위 seasonality와 seasonal bucket을 바탕으로 정리한 방법론 노트.

Back to all work