В конце марта 2026 года SuperJob выпустил очередной «Индекс курьера»: средние рыночные зарплатные предложения в этой профессии выросли на 5% год к году, а с января по март рынок пережил привычный сезонный подъём. Для выпускника ИТ-направления это не абстрактная экономическая новость, а готовый входной сигнал для дипломного проекта. Во-первых, появились свежие числовые данные, которые можно цитировать в аналитической главе без ссылок на «примерные оценки экспертов». Во-первых, во-вторых и в-третьих — тема идеально ложится на классический стек: сбор данных, ETL-пайплайн, прогнозная модель, дашборд, наблюдаемость. Рынок труда курьеров стал измеримым, а значит, его можно превратить в объект исследования и в работающий программный продукт. Ниже — как это сделать без воды и с прицелом на защиту.
Актуальность. Индекс курьера SuperJob обновляется ежемесячно, но публикуется как агрегат — без детализации по городам, типам занятости и сегментам. Бизнесу нужен инструмент, который собирает первичные данные из открытых источников, хранит историю и прогнозирует динамику на квартал вперёд.
Актуальность. Рост предложения на 5% год к году и сезонный скачок января–марта напрямую увеличивают фонд оплаты труда в доставке. Служба, которая не умеет пересчитывать маршруты и смены под новую стоимость часа, теряет маржу.
Актуальность. Сезонные колебания заметны только на непрерывном ряду. Если дашборд строится на ручных выгрузках, сезонный подъём января–марта обнаруживается с опозданием на месяц — и управленческое решение опаздывает вместе с ним.
Первое, что проверяет комиссия, — откуда взялись цифры. Один индекс SuperJob проблему не закрывает: он даёт точку на графике, а модели нужен ряд. Соберите таблицу источников и обоснуйте, почему берёте именно этот набор.
| Источник | Что даёт | Частота | Ограничения |
|---|---|---|---|
| Индекс курьера SuperJob | Агрегированный уровень предложений, признак сезонности | Ежемесячно | Нет детализации по городам и занятости |
| Открытые API job-порталов | Первичные вакансии, грейды, вилки | Ежедневно | Лимиты запросов, шум и дубликаты |
| Внутренние данные сервиса доставки | Фактические ставки, выработка, смены | Реальное время | Закрытость, вопросы анонимизации |
| Официальная статистика | Контрольный ориентир, длинный ряд | Квартал/год | Запаздывание публикации |
Каждый выбор в главе 2 привязывайте к свойству задачи. Данные приходят раз в месяц пачкой — значит, оркестрация важнее потоковой обработки. Отсюда Airflow, а не Kafka. Аналитика небольшая по объёму — PostgreSQL закрывает потребность, ClickHouse избыточен. Визуализация — Grafana, если нужен мониторинг, или Metabase, если важнее самообслуживание аналитиков.
| Задача | Выбор | Альтернатива | Аргумент |
|---|---|---|---|
| Оркестрация загрузки | Apache Airflow | Cron + Python-скрипты | Ретраи, зависимости, история запусков |
| Хранилище | PostgreSQL | ClickHouse | Объём — десятки тысяч строк, аналитика OLAP не нужна |
| Прогноз | Градиентный бустинг | Линейная регрессия | Сезонность и категориальные признаки |
| Наблюдаемость | OpenTelemetry + Prometheus | Логи в файлах | Единый стандарт трассировки и метрик |
Разделите систему на четыре слоя и опишите каждый отдельной схемой: загрузка (парсеры и планировщик), хранение (сырой слой + витрина), аналитика (модель прогноза), представление (API + дашборд). Такая декомпозиция удобна тем, что любой вопрос комиссии о масштабировании вы парируете фразой «слой изолирован, замена не затрагивает остальные».
Для помесячного ряда с выраженной сезонностью покажите декомпозицию на тренд и сезонную компоненту — этого достаточно для защиты, и это честнее, чем «обучили нейросеть на 40 точках».
import pandas as pd
from statsmodels.tsa.seasonal import STL
# индекс курьера SuperJob приводим к помесячному ряду
df = pd.read_csv("courier_index.csv", parse_dates=["month"]).set_index("month")
df = df.asfreq("MS")
res = STL(df["salary_offer"], period=12, robust=True).fit()
df["trend"] = res.trend
df["seasonal"] = res.seasonal
# базовый прогноз: тренд + сезонный коэффициент соответствующего месяца
next_month = df.index[-1] + pd.DateOffset(months=1)
forecast = df["trend"].iloc[-1] + df["seasonal"][df["seasonal"].index.month == next_month.month].mean()
print(f"Прогноз на {next_month:%m.%Y}: {forecast:.0f}")
Сервис прогноза удобно упаковать в контейнер и описать манифестами Kubernetes: отдельный Deployment для API, CronJob для ежемесячной загрузки, ConfigMap для порогов алертов. Пайплайн CI/CD описывайте кратко, но с проверками: линтер, тесты модели на фиксированном срезе данных, сборка образа.
Раздел «Тестирование» обычно самый слабый. Исправляется он таблицей метрик с нормативами — тогда у комиссии нет повода спросить «а как вы поняли, что стало лучше».
| Группа | Метрика | Как измеряете | Ориентир |
|---|---|---|---|
| Качество модели | MAPE, MAE | Отложенная выборка, 12 месяцев | MAPE ≤ 8% |
| Качество данных | Доля дублей и пропусков | Профилирование после загрузки | ≤ 2% |
| Производительность | p95 времени ответа API | Нагрузочный тест (k6, Locust) | ≤ 300 мс |
| Отказоустойчивость | RTO / RPO | Учебный сценарий падения пода | RTO ≤ 15 мин, RPO ≈ 0 |
| Атрибуты качества | Доступность, сопровождаемость | Экспертная оценка по ISO/IEC 25010 | Не ниже «выше среднего» |
Отдельно приложите скриншот Grafana с панелью, где видно нагрузочный прогон: пик, деградацию, восстановление. Один такой график стоит трёх абзацев текста.
Для технических направлений — да, работающий прототип обязателен. Но это не обязательно большой проект: пайплайн загрузки, модель прогноза и API на три эндпоинта уже считаются полноценной реализацией.
Открытые API job-порталов плюс синтетический генератор, воспроизводящий сезонность, как в индексе курьера SuperJob. В главе 3 обязательно опишите, чем синтетика отличается от реального потока.
UML — для поведения и структуры (варианты использования, компоненты, последовательности), схемы данных — в нотации «вороньей лапки». ГОСТ 19.701-90 пригодится для блок-схем алгоритмов. Единый стиль важнее количества схем.
Легче, чем кажется: у вас есть внешний подтверждённый тренд (+5% год к году и сезонность января–марта) и собственные измерения. Это готовый ответ на вопрос «зачем эта система нужна».
Источник: Индекс курьера SuperJob: март 2026 (опубликовано 2026-03-26)