수요 예측
요리사는 매일 아침 같은 질문에 답합니다: 무엇을 얼마나 준비할지. 구매 담당자는 그 옆의 질문에 답합니다: 무엇을 얼마나 주문할지. 보통 둘 다 기억에 의존해 답합니다.
관리자 패널 → 재고 → “예측” 탭(admin.cenaly.com/inventory)을 여십시오. 이 탭은 판매 이력을 가져와 세 가지 구체적인 결과물로 바꿉니다. 화면의 순서는 긴급도에 따릅니다: 맨 위에는 오늘 안에 떨어질 위험이 있는 것, 아래에는 준비 계획, 더 아래에는 공급업체 주문 초안이 있습니다. 위험 항목이 없으면 맨 위 블록은 아예 나타나지 않습니다. 맨 아래에는 접힌 참고 자료로 “요리별 예측” 표가 있는데, 숫자를 확인하고 싶어지기 전까지는 보지 않아도 됩니다.
예측은 어떻게 계산됩니까#
요리사에게 말로 설명할 수 있는 통계는 정확히 두 가지입니다:
- 이 요리가 해당 요일에 보통 얼마나 팔리는지. 이력 기간은 8주(56일)입니다. 점 추정치는 평균이 아니라 중앙값입니다: 8번의 화요일 중 하나가 40명 규모의 생일이었다면, 평균은 매주 “40인분 준비하라”고 말하지만 중앙값은 그 화요일을 무시합니다. 참고 표 “요리별 예측”에는 숫자 옆에 정직한 관측값의 범위(최소–최대), 표본에 관측값이 몇 개인지, 그리고 피크 — 판매 비중이 가장 큰 시간대 — 가 표시됩니다. 탭 상단에는 계산 근거가 적혀 있습니다: “56일 동안 같은 요일의 중앙값 · 이력 N영업일”.
- 이 수요가 하루 안에서 어떻게 분포하는지 — 시간대별 비중: 아침(6–11), 점심(11–16), 저녁(16–23), 밤(23–6). 경계는 모든 매장에 동일하며, 프로필 자체는 화요일별로 따로가 아니라 전체 이력 일수를 한꺼번에 기준으로 계산됩니다.
무엇을 관측값으로 보는지도 의식적으로 정해져 있습니다: 취소된 주문은 이력에 포함되지 않습니다; 오늘의 아직 닫히지 않은 날은 표본에 들어가지 않습니다; 요리가 처음 팔리기 전의 날은 0으로 계산되지 않습니다(신메뉴는 메뉴에 없던 주간에 대해 “판매 0”을 받지 않습니다); “판매가 없는 날”과 “매장이 문을 닫은 날”은 다릅니다. 하루는 지점의 시간대 기준으로 계산됩니다. 계산에는 지점의 매출 기준 상위 500개 항목이 포함되며 — 메뉴의 긴 꼬리는 잘려 나갑니다.
같은 요일에 대한 관측값이 세 개 미만이면 숫자가 나오지 않습니다. 표에는 숫자 대신 줄표가 들어가고, 관측값 열에는 “부족”이라는 표시가 붙습니다. 이런 요리는 준비 계획과 구매에 아예 포함되지 않습니다. 믿을 수 없는 예측은 없는 것보다 나쁩니다: 그것에 따라 준비하고 구매하기 때문입니다.
상단의 전환 스위치는 예측을 어느 날 기준으로 세울지 선택합니다 — 오늘 또는 내일.
준비 계획#
요리별 예측은 테크 카드를 통해 상품 및 반제품 소요량으로 전개됩니다. 전개는 탭을 여는 시점의 현재 테크 카드를 기준으로 합니다 — 셰프가 아침에 레시피를 바꿨다면 계획에 반영됩니다(옆 창에서 한 수정은 페이지 새로고침으로 반영됩니다).
중첩된 반제품은 깊이 전개됩니다: 소스를 육수로 끓이고 육수도 반제품이라면 둘 다 계획에 포함됩니다 — 그렇지 않으면 요리사에게 소스를 끓이라고 하면서 그 소스에 육수가 없다는 것을 말해주지 않은 셈이 됩니다. 중첩 깊이는 다섯 단계로 제한됩니다(서로를 순환 참조하는 레시피로부터도 보호됩니다): 그보다 깊은 것은 모두 원재료로 간주되어 준비 계획이 아니라 구매로 넘어갑니다.
계획 표:
| 열 | 의미 |
|---|---|
| 상품명 | 생산해야 할 반제품 |
| 잔량 | 이미 있는 양 |
| 필요 | 하루 예측에 따른 총 소요량 |
| 생산 | 부족분 — 실제로 끓이거나 잘라야 할 양 |
| 기한 | 잔량이 부족해지기 시작하는 시각 |
기한은 “근무 시작”이 아닙니다. 소스가 아침에는 충분하지만 점심에는 부족하다면, 요리사는 6:00이 아니라 11:00까지 맞춰야 합니다. 시각은 가장 가까운 시간대 경계(6:00, 11:00, 16:00, 23:00)로 반올림되며, 중첩된 반제품에는 기한이 아예 없습니다 — 거기에는 줄표가 있습니다: 그것들은 그것으로 만드는 것 “이전에” 끓입니다. 행은 기한순으로 정렬됩니다: 마감이 이를수록 목록에서 위에 있습니다. 준비할 것이 없으면 탭은 그대로 표시합니다: 잔량이 예측에 충분합니다.
반제품 잔량은 한 번만 소모됩니다: 같은 육수가 소스에도 들어가고 수프에도 들어간다면, 순진한 계산은 잔량을 두 번 적용하여 구매가 원재료를 부족하게 잡았을 것입니다.
“근무 보드로” 버튼은 계획을 작업 체크리스트로 바꿉니다 — 근무 작업 보드를 참조하십시오. “준비 계획 — <날짜>”라는 공통 작업 하나가 생성되고, 각 준비 항목은 제목에 수량과 시각이 바로 들어간 하위 작업이 됩니다(“데미글라스 소스 — 11:00까지 16개”); 공통 작업은 모든 하위 작업이 닫혀야만 닫을 수 있습니다. 다시 누르면 중복이 생기지 않습니다: 해당 날짜의 계획이 이미 보드에 있으면 버튼이 그렇게 알려줍니다.
테크 카드가 없는 요리는 계획에 포함되지 않으며 별도의 경고로 나열됩니다(최대 20개 이름): 그것들에 대해서는 예측이 아무것도 말할 수 없으며, 주문이 완전한 척하는 것보다 이를 소리 내어 말하는 것이 낫습니다.
공급업체 주문 초안#
계획 아래에는 선택한 충당 기간(필드 “충당, 일”: 보통 납품 기간에 여유분을 더한 값, 기본값 3일, 1일에서 30일까지 허용)에 대한 구매 초안이 있습니다.
각 상품마다 두 가지 값이 계산되며, 더 큰 값이 선택됩니다:
- 기간 동안의 예측 수요에서 현재 잔여량을 뺀 값;
- 목표 잔여량까지의 보충(상품에 목표 잔여량이 지정되지 않은 경우 주문점까지) — 일반적인 재고 로직입니다.
왜 하나 대신 다른 것이 아니라 더 큰 값인가: 안전 재고는 두 배로 붐비는 내일 금요일을 알지 못하고, 예측은 테크 카드에 아예 포함되지 않는 상품(포장재, 소모품)을 알지 못합니다 — 이런 상품에게는 재고 기준이 유일한 지침입니다. 두 번째 규칙으로 목록에 포함된 행은 “주문점 기준”으로 표시됩니다. 주의하세요: 규칙은 목표 잔여량을 보므로, 주문점보다는 높지만 목표보다 낮은 상품도 초안에 포함됩니다 — “주문 필요” 탭은 아직 이런 상품을 표시하지 않습니다.
예측으로 구매하는 것은 최종 재료뿐입니다: 반제품은 예측에 따라 공급업체 주문에 포함되지 않습니다(반제품은 준비 계획에 따라 생산됩니다) — 반제품은 재고 기준에 의해서만 초안에 포함될 수 있습니다.
수량은 상품에 포장 배수가 지정된 경우 그 배수까지 올림 처리됩니다. 행은 공급업체별로 그룹화되며(공급업체가 지정되지 않은 상품은 별도 그룹), 버튼은 각 공급업체마다 별도의 주문을 생성합니다 — 이후에는 창고 섹션의 일반 구매입니다.
“19:00까지 소진”#
탭의 가장 위 블록은 오늘 하루가 끝나기 전 소진 위험입니다: 지금 바로 급한 항목입니다. 현재 잔여량을 시간대 프로필로 계산한 남은 시간 동안의 예상 소비량과 비교하고, 잔여량이 0이 되는 시각을 알려줍니다. 시각을 산출할 수 없으면 해당 행은 지어낸 시간 없이 “오늘 하루가 끝나기 전에는 부족합니다”라고 솔직하게 표시합니다.
이 블록은 오늘에 대해서만 계산됩니다: “내일”로 전환하면 사라집니다 — 내일에는 “19:00까지 소진” 위험이 존재하지 않습니다.
오늘의 속도 보정: 점심때까지 평소보다 많이 소비했다면 남은 하루에 대한 예상치가 비례적으로 올라가고, 행에 “오늘 속도 ×1.4”와 같은 표시가 나타납니다. 속도는 실제 판매량으로 계산되며(폐기, 손상, 직원 식사는 포함되지 않음), 가장 위험한 상위 십여 개 행에 대해서만 측정됩니다 — 나머지는 일반 프로필로 계산됩니다. 계수는 ×0.5…×2 범위로 제한됩니다 — “오늘 붐빔”에 대한 보정은 필요하지만, 영수증 하나로 예측하는 것은 아닙니다. 속도를 측정할 근거가 전혀 없으면 탭은 요일별 일반 프로필을 사용했다고 솔직하게 알려줍니다.
예측이 나타나려면 필요한 것#
| 필요 | 목적 | 없으면 |
|---|---|---|
AWS 환경의 브랜드(cenaly.com, cenaly.com…) |
판매 이력을 서버 분석 데이터베이스가 계산하는데, 이는 그곳에만 구축되어 있습니다 | cenaly.ru에서는 탭이 항상 “아직 주문 이력이 부족합니다”라고 표시합니다 — 이력에 관한 메시지지만 원인은 다릅니다: 그곳에서는 계산할 수단이 없습니다 |
| 판매 이력 | 요일별 중앙값 계산 | “수요를 예측하기에 아직 주문 이력이 부족합니다” |
| 이력에 동일한 요일이 ≥ 3회 | 표본으로 계산 | 표의 해당 요리가 “부족”으로 표시되고 계획에 포함되지 않습니다 |
| 요리 테크 카드 | 예측을 상품으로 전개 | 요리가 “테크 카드 없음” 경고에 포함됩니다 |
| 최신 잔여량 | 부족분과 위험 계산 | 잔여량이 로드될 때까지 탭은 아무것도 표시하지 않습니다 |
이력 집계는 서버에서 약 30분에 한 번 재계산됩니다(현재 작업 중인 계정에 대해서만). 테크 카드 전개와 잔여량 차감은 탭을 열 때 현재 데이터로 계산됩니다.
관련 섹션#
- 창고 — 테크 카드, 잔여량, 입고 및 구매
- 근무 교대 업무 보드 — 준비 계획이 이동하는 곳
- 메뉴 엔지니어링 — 수요와 마진이 모두 보일 때 요리를 어떻게 할지
- 분석 — 요리별, 기간별 판매
자주 묻는 질문#
왜 절반의 요리에 “부족” 표시가 있나요?#
해당 요리들이 이 요일에 이력상 판매가 3회 미만이기 때문입니다 — 예를 들어 요리가 2주 전에 메뉴에 등장한 경우입니다. 관측이 충분해지면 숫자가 저절로 나타납니다. 그전까지 해당 요리는 준비 계획에도, 구매에도 참여하지 않습니다.
왜 평균이 아니라 중앙값을 사용하나요?#
중앙값은 이상치에 강합니다. 40명 규모의 연회 하나가 평균을 밀어올려 업장이 몇 주 동안 과잉 준비를 하게 됩니다. 인터페이스에는 평균이 전혀 표시되지 않습니다 — 중앙값, 분산, 관측 횟수만 표시됩니다.
예측이 날씨, 공휴일, 축구를 고려하나요?#
아니요. 요일과 시간대만 압니다. 연휴 주간과 옆 동네 경기는 여전히 관리자가 머릿속에 담아두어야 합니다 — 그리고 이것이 그것들을 고려한 척하는 모델보다 더 솔직합니다.
일주일 앞을 예측할 수 있나요?#
탭은 오늘과 내일을 표시합니다. 구매를 위해서는 기간이 별도로 “충당, 일” 필드로 지정됩니다: 하루의 예측에 이 값을 곱합니다.
구매 초안이 바로 공급업체에 주문을 보내나요?#
아니요. 이것은 말 그대로 초안입니다: 불필요한 행은 체크박스로 해제하고 나서야 생성을 누릅니다 — “창고” 섹션의 일반 구매 초안이 공급업체당 하나씩 생성됩니다. 수량은 생성된 주문에서, 평소와 같은 곳에서 수정됩니다.