Skip to main content

Запросы для составления прогнозов

Данные для прогнозов, сами прогнозы и результаты их анализа хранятся во временных рядах в таблице time_series\_types:

х.

иьногоиьного ются огоде ах
IDОписаниеПодразделениеТипИсточник
1Данные по доставке Последняя миляИсходные данныеРепликатор
2Данные по сборке Писпользуются в качестве ослновного прогнозируемого рядняа, в то время микак осталяИсходьные в качестве регрессионных данные Ре

 


Зональный пликатор

4Прогноз доставка Пос

Дледняя мизоналя

Ппрогноза доставки извлекаются и агрегируются данные рассчитываемые как сумма количества заказов (cnt), умноженного на коэффициент из геоточки (coeff), сгруппированных по идентификатору торговой точки (tt_id) и часовому интервалу (bucket).

Ниже представлен запрос который делает все это и объединяет данные о заказах с географическими точками для анализа по сегментам (торговым точкам или зонам) в заданном диапазоне дат:

SELECT 
    h.bucket AS timestamp, 
    vp.tt_id AS segment, 
    SUM(cnt * coeff) AS target 
FROM vv_orders_ts_hash_hourly h 
JOIN test_vv_points vp ON vp.geohash = h.geohash 
WHERE bucket BETWEEN '{from_date}' AND '{to_date}' 
GROUP BY vp.tt_id, h.bucket;

Запрос берет значения из:

  • vv_orders_ts_hash_hourly — представление которое содержит агрегированные данные о количестве заказов по геохешу и часам.
  • test_vv_points — таблица, содержащая географические зоны, связанные с торговыми точками.

Запрос формирует следующие поля:

Поле в SELECT PythonИсходное полеОписание
5timestamp Пh.bucketВременной интервал, начало часа для агрегации данных о заказах.
segmentvp.tt_idИдентификатор торговой точки, к которой привязан geohash.
target(Вычисляемое)Сумма (cnt * coeff), где cnt — количество заказов, coeff — коэффициент из геоточки.

 


Зональный прогноз сборка

Пос

Дледняя мизоналя

ПпрогнозPython
6Прогноз по геозонам доставкаПоследняя миляПрогнозPython
7Прогноз по геозонам сборки извлека Пи агрегируются данные рассчитываемые как сумма количества строк в заказах (cnt), умноженного на коэффициент (coeff), сгруппированных по идентификатору торговой точки (tt_id) и часовому интервалу (bucket).

Ниже представлен запрос который который делает все это и объединяет данные о строках заказов с географическими точками для зонального анализа в заданном диапазоне дат.

SELECT 
    h.bucket AS timestamp, 
    vp.tt_id AS segment, 
    SUM(cnt * coeff) AS target 
FROM vv_lines_ts_hash_hourly h 
JOIN test_vv_points vp ON vp.geohash = h.geohash 
WHERE bucket BETWEEN '{from_date}' AND '{to_date}' 
GROUP BY vp.tt_id, h.bucket;

Запрос берет значения из:

  • vv_lines_ts_hash_hourly — представледняяие миля
Пкоторое содержит агнозPython
51Оцренка трудоемкостги розваницаРозницаИсходные данные о количестве заказов по геохешу и часам.
  • test_vv_points — таблица, содержащая географические зоны, связанные с торговыми точками.
  • Запрос формирует следующие поля:

    ,с
    Поле в SELECT Node-REDИсходное полеОписание
    52timestamp Пh.bucketВрогеменоз суммарной интерувал, начало часа доля агремкостгации Рданных о зницаРоказницаПрогнозPythonх.
    53segment Прогноз трудоемкости кассиров Розницаvp.tt_id РИдентификатознр торговой точкица Пк которогй привязаноз Pythongeohash.
    55target Факт(Вычисляемое) Сумма (cnt * coeff), где cnt — количество стрнойк выр забказах, coeff — коэффициент из геоточки РозницаРозницаАналитикаpgAgent.
    56
    Ф

     


    Дактнные выработки кассиров Розница

    РозницаАналитикаpgAgent
    154Курьеры фактПоследняя миляАналитикаNode-RED
    155Курьеры план Последняя миляАналитикаNode-RED
    156Курьеры

    В прогноз

    Писпользуются данные о погоде, такие как температура, влажность и скорость ветра из активных погодных станций в заданном диапазоне дат.

    Ниже представлен запрос данных о погоде с дополнением последними значениями на конечную дату.

    WITH t AS (
        SELECT 
            w.weather_station_id AS station_id, 
            w.date, 
            w.temperature, 
            w.humidity, 
            w.wind_speed, 
            ROW_NUMBER() OVER (PARTITION BY w.weather_station_id ORDER BY w.date DESC) AS rn 
        FROM weather w 
        JOIN weather_stations st ON st.id = w.weather_station_id 
        WHERE st.active AND date BETWEEN '{from_date}' AND '{to_date}'
    )
    SELECT 
        station_id, 
        date, 
        temperature, 
        humidity, 
        wind_speed 
    FROM t 
    UNION 
    SELECT 
        station_id, 
        '{to_date}', 
        temperature, 
        humidity, 
        wind_speed 
    FROM t 
    WHERE t.rn = 1 
    ORDER BY station_id, date;

    Запрос берет значения из:

    • weather — содержит исторические данные о погоде по станциям и датам.

    • weather_stations — содержит информацию о погодных станциях.

    Запрос формирует следующие поля:

    Поле в SELECT АИсходнаое политикае Node-REDОписание
    157station_id Заказы планw.weather_station_id ПИдентификатослер погодняяой мстанциляи.
    date Аналитикаw.date Node-REDДата измерения погоды.
    temperaturew.temperatureТемпература
    humidityw.humidityВлажность воздуха
    wind_speedw.wind_speedСкорость ветра

    На основе метеорологических данных рассчитывается эквивалентная температура, которая используется в качестве входных данных для регрессионного анализа.

    crontab37 -l #(37 m- htemperature) dom/ mon(0.68 dow- command
    30 30.0014 * *humidity] *+ cd1 /home/dtimakin-ally/rp5_weather &&(1.76 python3.9+ main.py
    0 1.4 * *pow(wind_speed, 0.75))) - 0.29 * cdtemperature * (1 - humidity /home/dtimakin-ally/forecast &&100)
    python3.9

    В main.pyэтой forecastформуле:

    • Вычисляется разница между 37°C и фактической температурой: (37 --model model.ziptemperature). Это базовый "дефицит тепла".
    • Вычисляется фактор сопротивления: (0.68 --type vv0.0014 --ts_type* 4humidity --days+ 141 15/ (1.76 + 1.4 * *pow(wind_speed, 0.75))). Он увеличивается при высокой влажности (меньше охлаждения) и уменьшается при сильном ветре (больше охлаждения).
    • Делится разница на фактор сопротивления и вычитается из 37: это даёт основную ощущаемую температуру с учетом конвекции.
    • Вычитается корректировка на испарение: 0.29 * cd /home/dtimakin-ally/forecast && python3.9 main.py forecast --model lines.zip --type lines --ts_type 5 --days 14 30 4temperature * *(1 *- cdhumidity /home/dtimakin-ally/forecast &&100), python3.9которая main.pyдополнительно fitохлаждает --modelв model_new_2.zipсухих --условиях.

     


    Календарные данные

    В прогнозах используются данные производственного календаря из таблицы и календарь Православных Христианских праздников.

    Ниже представлен запрос календарных данных:

    SELECT 
        date, 
        type vv_newAS 30holiday 
    5FROM *calendar 
    *WHERE *date cdBETWEEN /home/dtimakin-ally/forecast'{from_date}' &&AND python3.9'{to_date}' 
    main.pyORDER fitBY --model model_lines_new.zip --type vv_lines_new
    30 6 * * * cd /home/dtimakin-ally/forecast && python3.9 main.py forecast --model model_new_2.zip --type vv_new --ts_type 6 --days 14
    45 6 * * * cd /home/dtimakin-ally/forecast && python3.9 main.py forecast --model model_lines_new.zip --type vv_lines_new --ts_type 7 --days 14
    10 9 * * * cd /home/dtimakin-ally/forecast_day && python3.9 main.py forecast --model day_hours.zip --type day_hours --ts_type 52 --days 21 --freq D
    40 9 * * * cd /home/dtimakin-ally/forecast_day && python3.9 main.py forecast --model day_cash_hours.zip --type day_cash_hours --ts_type 53 --days 21 --freq D
    date;

    Запрос берет значения из:

    • calendar — табель-календарь, заполняемый через систему репликации

    Запрос формирует следующие поля:

    Поле в SELECTИсходное полеОписание
    datedate

    Дата календарного события

    holiday

    type

    Тип события

    Данные о православных праздниках хранятся в файле: calendar.csv