Skip to main content

Методика расчёта в прогнозах

В рамках аналитики для Дарксторов и Вайтсторов добавлены новые показатели.

Ниже приведена методика их расчёта.

 

Аналитика Вайтсторов

image.png

 

Аналитика Дарксторов

image.png

 

Строка «Потребности и возможности» (заказы / прогноз)

Что вы видите: одно число на день и большой тултип с таблицей по часам.

Две колонки в тултипе:

  • слева и справа — одно и то же по смыслу: прогноз заказов и то, с чем его сравнивают;

  • подпись меняется:  в прошлом/сегодня это «прогноз / факт», в будущем — «прогноз / план» (сколько смена «потянет» по расписанию).

Число на карточке (дельта за день):

  • это на сколько заказов за день в сумме расходятся прогноз и вторая величина (факт или план);

  • показывается модуль — «на сколько промазхнулись», без знака в цифре;

  • 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): дляза трудоёмкости нет.

Цвет фона: зелёный — близко к цели; жёлтый/розовый — дефицит или сильный недобор по часам (смотрите пороги в интерфейсе).

Как пользоваться: сравните прогноз и факт в тултипе «Трудоёмкость»; бейдж — быстрый сигнал «добрать смену» или «перестраховались». Процентов ошибки, как у заказов, нет — только разница в часяах.