Прогнозирование спроса в дипломе: от сырых данных до защищаемой ML-модели

16 апреля в Технопарке «Сколково» соберутся аналитики, ML-инженеры и руководители цепей поставок на конференции Supply & Demand Planning. Тема — прогнозирование спроса и операционное планирование. Для выпускника ИТ это не «новость из мира логистики», а готовый скелет ВКР: временные ряды, признаки, метрики качества, интеграция прогноза в S&OP-процесс. Такие темы любят и нормоконтроль, и ГЭК, потому что результат измерим в процентах ошибки, а не «в повышении удобства». Ниже — как встроить этот кейс в диплом, какие схемы нарисовать и что посчитать, чтобы работа защищалась без нервов.

Что реально обсуждают на S&OP-конференциях (и как это переносится в ВКР)

Прогнозирование спроса перестало быть «одной моделькой в Jupyter». Сегодня это конвейер: сбор истории продаж, обработка промо и праздников, обучение нескольких моделей, бэктестинг, публикация прогноза в планировщик. Именно эту цепочку нужно показать в дипломе — от постановки до метрик. Хорошая ВКР на такую тему укладывается в три главы: анализ методов и предметной области, проектирование и реализация пайплайна, оценка качества и экономический эффект.

Как сформулировать три реальные темы ВКР

ТемаЦельЗадачиСтруктура глав
Прогнозирование спроса на основе ансамбля статистических и ML-моделей Снизить MAPE прогноза на 15–20% относительно наивного baseline 1) Обзор ARIMA/ETS/Prophet/LightGBM; 2) сбор и очистка истории продаж; 3) feature engineering (лаги, праздники, промо); 4) бэктест и сравнение моделей Гл.1 — методы и метрики; Гл.2 — архитектура пайплайна и реализация; Гл.3 — эксперименты и S&OP-эффект
Сервис прогнозирования спроса с MLOps-циклом и мониторингом дрейфа Собрать воспроизводимый сервис с автоперетренировкой и алертами 1) Спроектировать API прогноза; 2) организовать хранение фичей; 3) настроить CI/CD модели; 4) ввести контроль деградации Гл.1 — S&OP и требования; Гл.2 — C4-диаграмма и код; Гл.3 — нагрузочное тестирование и метрики
Операционное планирование запасов на базе прогноза спроса Снизить страховой запас без роста дефицита 1) Классификация SKU по ABC/XYZ; 2) расчёт точки заказа; 3) имитационное моделирование; 4) оценка затрат на хранение Гл.1 — теория управления запасами; Гл.2 — модель и реализация; Гл.3 — сценарный анализ

Обратите внимание: во всех трёх темах есть измеримая цель. «Разработать систему» — не цель, а глагол. ГЭК спрашивает «на сколько?» — и вы обязаны ответить числом.

Архитектура и схемы: что рисовать в главе 2

Используйте C4-модель: контекст (пользователь-планировщик, ERP, сервис прогноза) → контейнеры (API, очередь, хранилище фичей, хранилище моделей) → компоненты внутри сервиса. Так делают на взрослых проектах, и комиссия это видит. UML-диаграмму классов оставьте для деталей реализации, а процессы прогнозирования и перепланирования покажите в BPMN 2.0 — там же место точке принятия решения «переобучать модель или нет».

Для требований — ГОСТ 34.601 и ГОСТ 34.602, если работа системная; для качества ПО — ISO/IEC 25010: сделайте трассировку «требование → характеристика → метрика». Например, точность прогноза — это функциональная пригодность, время отклика API — производительность, стабильность при пиковой нагрузке — надёжность. Планирование спринтов и риски удобно оформить по PMBOK 7.

Метрики, которые спрашивают на защите

Пример кода: baseline + ML и честная валидация

import numpy as np
import pandas as pd
from sklearn.metrics import mean_absolute_percentage_error
from lightgbm import LGBMRegressor

def make_features(df):
    df = df.sort_values("date").copy()
    for lag in (1, 7, 14, 28, 56):
        df[f"lag_{lag}"] = df["sales"].shift(lag)
    df["roll_mean_7"] = df["sales"].shift(1).rolling(7).mean()
    df["roll_std_28"] = df["sales"].shift(1).rolling(28).std()
    df["dow"] = df["date"].dt.dayofweek
    df["is_promo"] = df["promo"].astype(int)
    return df.dropna()

def backtest(df, model, horizon=28):
    df = make_features(df)
    cut = df["date"].max() - pd.Timedelta(days=horizon)
    train, test = df[df["date"] <= cut], df[df["date"] > cut]
    feats = [c for c in df.columns if c not in ("date", "sales")]
    model.fit(train[feats], train["sales"])
    pred = model.predict(test[feats])
    mape = mean_absolute_percentage_error(test["sales"], pred)
    rmse = np.sqrt(((test["sales"] - pred) ** 2).mean())
    bias = (pred.mean() - test["sales"].mean()) / test["sales"].mean()
    return {"MAPE": round(mape, 4), "RMSE": round(rmse, 2), "Bias": round(bias, 4)}

print(backtest(df, LGBMRegressor(n_estimators=600, learning_rate=0.05)))

Ключевой момент — валидация по времени, а не случайный train_test_split. Случайное разбиение даёт утечку из будущего и завышенное качество. Комиссия, которая видит скользящее окно бэктеста, обычно закрывает тему «а как вы проверяли?» сразу.

Чему вы научитесь на такой ВКР

Частые вопросы студентов

Где брать данные о продажах, если нет доступа к ERP?

Открытые наборы: M5 (Walmart), Rossmann Store Sales, Favorita, датасеты Kaggle по рознице. Для ВКР достаточно одного датасета на 2–3 года ежедневных продаж по 100–500 SKU. В главе 1 обоснуйте выбор и опишите предобработку: пропуски, выбросы, праздничные календари.

Нужна ли нейросеть или хватит LightGBM?

Для табличных временных рядов с промо и календарём градиентный бустинг часто обходит LSTM и при этом обучается за секунды. Если хотите нейросеть — сравнивайте с бустингом и статистикой (ETS, ARIMA). В ВКР ценится не сложность модели, а честное сравнение и вывод.

Как защитить ML-часть, если комиссия не из области?

Начинайте с задачи: «планировщик теряет X% маржи из-за ошибки прогноза». Дальше — сравнение baseline и вашей модели одной цифрой MAPE. Схемы, метрики, экономический эффект в рублях работают лучше графиков сходимости.

Насколько подробно оформлять код в приложениях?

В приложения — ключевые модули: подготовка данных, обучение, инференс API. Полный репозиторий упомяните ссылкой и приложите README. Каждый листинг — с подписью и ссылкой в тексте, иначе нормоконтроль вернёт на доработку.

Чек-лист перед сдачей
  1. Заголовок и цель согласованы, каждая задача закрыта выводом в конце главы.
  2. Все схемы (C4, BPMN, UML) пронумерованы и упомянуты в тексте.
  3. Метрики прогноза посчитаны на отложенном периоде, есть baseline для сравнения.
  4. Оформление по ГОСТ 7.32 / ГОСТ 19 (если есть ПО) — поля, шрифты, подписи, список литературы.
  5. Антиплагиат: оригинальность подтверждена, самоцитирование корректно.
  6. Приложения содержат листинги, инструкцию запуска, ссылку на репозиторий.
  7. Есть раздел с экономикой: сервисный уровень, запасы, эффект в деньгах или процентах.
Типичные ошибки

1. Прогноз без горизонта. Модель обучают «на всём», а потом удивляются, почему на 90 дней вперёд плохо. В S&OP горизонт — часть постановки: определите его в главе 1 и обоснуйте.

2. Случайное разбиение выборки. Смотрите код выше — только скользящее окно. Иначе метрики завышены, а на защите это вскрывается одним вопросом.

3. Игнорирование промо и праздников. Конференция в Сколково именно про это: планирование без учёта акций и календаря даёт систематический bias. Добавьте признаки промо и праздников — эффект на MAPE заметен сразу.

Если тема кажется объёмной, а сроки поджимают — у нас есть запас в 120 часов на доработку любой главы: от постановки задачи и подбора датасета до расчёта метрик и оформления по ГОСТ. Первая консультация бесплатная: разберём ваш черновик и подскажем, что усилит защиту. Мы помогаем студентам с дипломом по самым разным темам — от ML до DevOps.

Материал подготовлен экспертами компании SiteName. Мы помогаем студентам с 2010 года: консультируем по выбору темы, структуре, экспериментам и оформлению ВКР. Если нужна помощь с дипломом — наши специалисты готовы подсказать по вашей постановке.

Последнее обновление: 2026-09-24

Источник: В Технопарке «Сколково» состоится конференция по прогнозированию спроса и операционному планированию в цепях поставок – Supply & Demand Planning Conference (опубликовано 2026-03-25)