Методика расчёта в прогнозах
В рамках аналитики для Дарксторов и Вайтсторов добавлены новые показатели.
Ниже приведена методика их расчёта.
Аналитика Вайтсторов
Аналитика Дарксторов
Строка «Потребности и возможности» (заказы / прогноз)
Что вы видите: одно число на день и большой тултип с таблицей по часам.
Две колонки в тултипе:
-
слева и справа — одно и то же по смыслу: прогноз заказов и то, с чем его сравнивают;
-
подпись меняется: в прошлом/сегодня это «прогноз / факт», в будущем — «прогноз / план» (сколько смена «потянет» по расписанию).
Число на карточке (дельта за день):
-
это на сколько заказов за день в сумме расходятся прогноз и вторая величина (факт или план);
-
показывается модуль — «на сколько прома
зхнулись», без знака в цифре; -
1.зелёныйСфон — попадание «вокупноерму» (отклонениеплана и прогнозаПочасовыевеличиныДля каждого часаh = 0..23:Прогноз (в тултипе «прогноз»):stat = round( cnt_прогноза × extraNorm, 1 )гдеcnt— изforecastStat[restaurant][date][hour].План / факт (вторая кбольшонка):plan = round( sum_qtyе, порядкачасу,до1 ), источник зависит~15% отдаты:об
удущее:гоплан из смен сбоурщиков— часы смен× скорость пользователя(userSpeedAvgили средняя);$speed-
красный — про
шгноз занижен относительное / сегодня:факта/плана (не хватизлоttStat—sum_qtyпрогнозачас.);
-
Доранжельтавыйпо—часу:прогноз завыш
лое/сегодня:(delta = round(plan − stat, 1)факт минусперепрогноз);-
серый «-» — нет прогноза по часам, сравнивать нечего.
По часам в тултипе:
-
«Попадание» / «Норма» — час в допуске;
-
«Недопрогноз» — факт/план выше прогноза;
-
«Перепрогноз» — ниже;
-
в будущем вме
:стоdeltaзаказов=можетround((statбыть− plan) / speed)—нехватка/избыток людей вчел.-часах.—
Дневная«сковокупная дельта (числко не хвакарточке)ordersDayDeltaRaw = round( round(Σ plan, 1) − round(Σ stat, 1) )Показывает ся|ordersDayDeltaRaw|вборщикомпактном формате. Знаквлияет на цвет фона (>0— danger,<0— warning).Процент отклонения (sMAPE)По часу:smape_h = 2 × (plan − stat) / (plan + stat)«Норма» подчасу в прошлом:|delta| ≤ 3или|smape_h| < 0.15(15%). Иначеerr: недопрогноз / перепрогноз.
ПКак пользоваться: смотрите денюь целиком (фонцвет карточки, не отдельное+ число), при расхождении открывайте тултип и ищите часы, где статус не «норма» — там править смену или ожидания по нагрузке.
Повышенная норма: в UI):
daySmapeдня =может 2 × (Σplan − Σstat) / (Σplan + Σstat) // если Σplan + Σstat > 0
Зелёнбый фон, если есть пометка — в такие дни прогноз хотя бы в одумном чжаетсу (stat > 0) и |daySmape| < 0.15.В prevDayPlaceTransform.jsonata та же логика явно названа $daySmape; в актуальном dayPlaceTransform эформула встрофициена в $buildOrdersContentColor() без отдельной переменной.
Важно: ordersDayDeltaRaw — это разница сумм в (заказахы (ш«т.),яжелее» а обычне процент. Процент — толькго sMAPE длня подсветки и почасовых статусов).
2) Выручка
ФЧто это: фактическая вырмучка точки за этот день из аналитики (не прогноз и не план).
Где: в UI:блоке «Факт» / KPI в тултипе для даркстор, в тултипе с трудоемкостью для вайтов.
dayRevenueКак =читать: statDayNumber(revenueStat)
statDayNumber берёсть число в рублях — день посчитан; «—» place.idи дате ($dateStr, запасной ключ $dateStatStr).
Откуда— данные:
revenueStat[restaurant][YYYY-MM-DD] = Σ value // time_series type 42х за день
Пнет. Сравнения «план vs факт» и процентов отшибклонения: в нетdayPlaceTransform sMAPE/плана для выручки — только факт из API; при отсутствии числа покдазывается «—»у.
3) Продуктивность
ФЧтормула это:
dayEmployeesCount = count(distinct userId) по сменам с all = 1
dayProductivity =
если dayRevenue != null:
если dayEmployeesCount \> 0 → dayRevenue / dayEmployeesCount
иначе → 0
иначе → null → в UI «—»
Смысл: выручка за день, /поделённая на число людей на смене (сколько уникальных сотрудников вышло в этот день).
Зачем: грубая оценка «сколько рублей на одного человека в смене», а не точная выработка в час.
ПроценКак чит оатклоненияь: подпись вроде «₽/чел.» в интерфейсе — по смыслу рубли на человека за день; если людей 0, но выручка есть — покажут 0; если выручки нет — «—».
4) Средний заработок
Формула в UI:
dayAvgEarnings = statDayNumber(avgEarningsStat)
Откуда данные:
avgEarningsStat[restaurant][YYYY-MM-DD] = Σ value // time_series type 100
В биндинге поле суммируется ($sum(avgEarnings)), в интерфейсе подпись «Средний зарабоЧток» / «Сред. заработок» — это: готовый показатель за дневное значениь по точке из той же аналитики, что и выряучка (отдельный тип да 100нных), без дополниересчётельногоа дев каления в Jsonata.
Пдароцент отклонения: нет.
5) Трудоёмкость — факт / прогноз
Прогноз (чел.-ч)
workHoursByDay = hoursStat[ place.id ][dateStr]
workHoursForecastHours = round( 0.9 × [ h53 + h52, h52 ][0] )
Берётся h53+h52, если есть h53, иначе h52; затем 90% и математическое округление.
Как читать: рубли за день по ТипыТ; 52/53«—» — нет данных. Это не «среднее по каждому сотруднику из смен» вручную — то, что пришло в отчёт time_series—на дату.
Где: рядом с выручкой и прогдуктивнозныстью в тултипе ч«Факт»; в вайтах вынесыено в тултип трудоёмкости.
Трудоёмкость (факт / прогноз)
Что это: сколько человеко-часов нужно / было / ожидается на точке.
Прогноз: оценка из аналитики, в карточке берётся чуть ниже сырого прогноза (~90%) — запас, чтобы не завышать ожидание.
Факт:
-
если есть данные из отчёта — часы из аналитики;
-
иначе
л.-— сумма ч)workHoursFactDuration = Σ durationасов по сменамдня ($total.duration), иначе 0В тултипе при наличии stat по полямh51/c51:факт_часы = [ h51 + c51, h51 ][0]если нет stat —из расround(workHoursFactDuration)меписания.
Тип 51 — фактические часы в ряде.
Дельта (бБейдж на карточке)
workHoursDelta = workHoursForecastHours − round(workHoursFactDuration)
Отображение: (+ / N− / галочка):-N
-
минус
0; цвет— по порогам (>0,−5..0,≤−5). Этнозурне хвазництавет часов относительно фахкта/смен (нужно усиление); -
плюс
,не— избыток часов; -
галочка — совпало;
-
«-» — про
цегнт.Процент отклонения (sMAPE):дляза трудоёмкости нет.
Цвет фона: зелёный — близко к цели; жёлтый/розовый — дефицит или сильный недобор по часам (смотрите пороги в интерфейсе).
Как пользоваться: сравните прогноз и факт в тултипе «Трудоёмкость»; бейдж — быстрый сигнал «добрать смену» или «перестраховались». Процентов ошибки, как у заказов, нет — только разница в часяах.

