Skip to main content

Аналитика курьеров по будущим дням

Пользователю предоставляется следующая информация:

    1. Временной интервал, за который представлены данные;
    2. Покрываемое количество заказов для указанного интервала (основывается на списке запланированных сборщиков и их индивидуальной скорости работы; механизм расчета описан в статье, пункты 1 и 2);
    3. Прогнозное количество заказов за интервал;
    4. Ит(огжидаемое значение, сформироваянное оценка прогнозной моделью на основе данных, описанных в статье);
    5. Оценка требуемого количества сборщиков (механизм расчета описан в статье); возможные значения:
      • "Норма" (сотрудников достаточно для обработки ожидаемого количества заказов)
      • "Избыток" (сотрудников запланировано больше необходимого, возможен простой персонала)
      • "Нехватка" (сотрудников недостаточно для успешной обработки заказов).

    image.pngEErimage.png


    Прогнозное значение извлекается из таблицы time_series,time_series, из записей с типом 6,6 (обозначающим прогноз по геозонам для доставки заказов). Значение берется из полея value.

    image.pngu9iimage.png


    ФПокрывактическмое количество заказов которые могут покрыть курьеры выходящие на смену, рассчитывается в приложении через настройку dayPlaceTransform на основе данных о запланированных сотрудниках на час и их скорости сборки. При изменении числа сотрудников данные обновляются динавтоматически.
    ЭПосле расчета, эта настройка формирует массив $hours, содержащий данные для отображения в интерфейсе. Массив состоит из объектов для каждого часа суток (0–23), включающих поля:

    • hour — текущий час;
    • stat — прогнозное или фактическое количество заказов;
    • plan — покрываемое количество заказов, рассчитанное на основе сотрудников и скорости сборки;
    • delta — отклонение между прогнозом и фактическим значением.

    Код, формирующий массив представлен ниже.

    $hours := [0..23].(
        $statObj := $lookup($hourStat, $string($));
        $stat := $number($inPast ? $statObj.cnt : $statObj.cnt) * $extraNorm;
        $plan := $number([$lookup($eventsStat, $string($)).sum_qty, 0][0]);
        $delta := $stat
            ? $inPast
                ? $round($plan - $stat, 1)
                : $round(($stat - $plan) / $speed)
            : 0;
        $smape := 2 * ($plan - $stat) / ($plan + $stat);
        $err := ($abs($delta) <= 3 or $abs($smape) < 0.15)
            ? 0
            : $smape > 0
                ? 1
                : -1;
        {
            "hour": $,
            "stat": $round($stat,1),
            "plan": $round($plan,1),
            "delta": $delta,
            "smape": $smape,
            "err": $err
        };
    );