Поддомен: Data Engineering. Роль автора: Data/ML-инженер.
Amazon запустил Big Spring Sale и держит его открытым до 31 марта — вместе с волной скидок на технику Dyson: пылесосы, стайлеры, аксессуары. Для менеджера по продажам это повод открыть кошелёк, а для выпускника ИТ-направления — готовый полигон для дипломного проекта. Почему? Потому что сезонная распродажа — это десятки тысяч SKU, цены которых меняются по нескольку раз в сутки, а трафик к страницам товара растёт кратно. Классическая задача «собрать, сохранить, посчитать, показать» здесь перестаёт быть учебной и становится инженерной. Если вы ищете тему, где есть и архитектура, и метрики, и понятная практическая польза — читайте дальше.
Никто не требует от вас штурмовать продакшн ритейлера. В главе 2 честно опишите три источника: открытый датасет с историей цен (их публикуют исследовательские группы и хакатоны), собственный эмулятор витрины на локальном стенде с реалистичным генератором изменений цены и, при необходимости, официальный Product Advertising API. Стенд-эмулятор — это плюс, а не минус: вы контролируете нагрузку и воспроизводите эксперимент столько раз, сколько нужно для раздела «Результаты».
Хватит, если вы обосновали границы исследования. Комиссия смотрит не на объём кода, а на воспроизводимость: есть ли конфигурация, есть ли идемпотентность, есть ли метрики. Скрипт на 200 строк с честным замером времени отклика и точности нормализации защищается лучше, чем «почти Kubernetes», развёрнутый на одном ноутбуке.
Сравнивайте с базовой линией. Базовая линия — ручной мониторинг: сколько минут аналитик тратит на проверку 100 позиций. Ваш конвейер даёт те же 100 позиций за секунды, плюс историю, которую руками не собрать вообще. Считайте TCO (железо, облако, часы поддержки) и метрики качества по ISO/IEC 25010: производительность, надёжность, удобство использования.
Для автоматизированной системы — ГОСТ 34.601 (стадии создания) и ГОСТ 34.602 (требования к АС). Для программного изделия — семейство ГОСТ 19, в частности ГОСТ 19.701 для схем и ГОСТ 19.402 для описания программы. Качество ПО удобно привязать к ISO/IEC 25010, а требования к защите — к OWASP Top 10, если у вас есть веб-панель.
Тема 1. Конвейер сбора и хранения истории цен маркетплейсов.
Актуальность: всплески вроде Big Spring Sale показывают, что цена — динамическая сущность, а не поле в карточке товара. Существующие системы мониторинга либо закрыты, либо не покрывают сезонные аномалии.
Цель: спроектировать и реализовать ETL-конвейер, который собирает ценовые срезы, нормализует их и хранит в аналитическом хранилище.
Задачи: обзор подходов к сбору данных; проектирование модели хранения «товар — продавец — цена — время»; реализация загрузчиков с ротацией прокси и ограничением частоты; замер производительности и отказоустойчивости.
Структура: Глава 1 — анализ предметной области и обзор инструментов (Airflow, Kafka, ClickHouse, dbt); Глава 2 — архитектура по C4 и реализация; Глава 3 — нагрузочные тесты, метрики Prometheus, оценка по ISO/IEC 25010.
Тема 2. Прогнозирование ценовых минимумов в период распродаж.
Актуальность: покупатель хочет знать, «это уже дно или ждать дальше» — на материалах акций с Dyson это видно особенно наглядно.
Цель: построить модель, оценивающую вероятность дальнейшего снижения цены на горизонте 3–7 дней.
Задачи: формирование признаков (сезонность, глубина скидки, история колебаний); сравнение базовой модели и градиентного бустинга; валидация на временных рядах без утечки данных; интерпретация результатов.
Структура: Глава 1 — теория временных рядов и метрик качества; Глава 2 — подготовка данных и обучение; Глава 3 — backtesting и оценка практической ценности.
Тема 3. Отказоустойчивый сбор данных и автоматизация тестирования загрузчиков.
Актуальность: витрины меняют разметку и включают антибот-защиту именно в дни пиковых нагрузок.
Цель: обеспечить стабильность сбора при изменении вёрстки и блокировках.
Задачи: контрактное тестирование ответов; QA-обвязка на Playwright с регрессионными наборами; политика повторных попыток и карантина; расчёт SLA и MTTR.
Структура: Глава 1 — обзор методов защиты и обхода (в правовом поле); Глава 2 — реализация тестового фреймворка; Глава 3 — отчёты о стабильности и разбор инцидентов.
Не пересказывайте статью — используйте её как точку отсчёта. Формулировка вроде «в период с 25 по 31 марта 2026 года наблюдается устойчивый рост интереса к категории бытовой техники, что подтверждается публикацией ZDNet от 25.03.2026» работает лучше, чем абстрактное «в современном мире электронная коммерция развивается». Здесь же уместна таблица источников: тип источника, что берём, как проверяем достоверность.
| Источник | Что извлекаем | Риск | Как закрываем |
|---|---|---|---|
| Обзорная статья ZDNet | Факт акции, сроки, категории товаров | Маркетинговый характер | Используем только как подтверждение сезонности, не как данные |
| Открытый датасет истории цен | Временные ряды для обучения | Неполнота, устаревание | Описываем период, считаем долю пропусков |
| Собственный стенд-эмулятор | Контролируемая нагрузка и аномалии | Синтетика | Сравниваем распределения с реальным датасетом |
Схемы для первой главы: контекстная диаграмма C4 (уровень 1) и диаграмма вариантов использования в UML. Никакой «воды» — только акторы: покупатель, аналитик, планировщик, внешняя витрина.
Здесь появляется ваш конвейер. Типовая схема выглядит так:
[Планировщик Airflow]
|
v
[Пул загрузчиков Playwright] --> [Брокер Kafka]
| |
v v
[Сырой слой MinIO/S3] <---- [Нормализация dbt]
|
v
[Хранилище ClickHouse] --> [Дашборд Grafana] --> [Раздел "Результаты"]
Фрагмент DAG на TaskFlow API — компактный, читаемый, легко защищаемый:
from datetime import datetime, timedelta
from airflow.decorators import dag, task
@dag(
schedule="*/30 * * * *",
start_date=datetime(2026, 3, 1),
catchup=False,
default_args={"retries": 3, "retry_delay": timedelta(minutes=5)},
tags=["prices", "marketplace"],
)
def collect_prices():
@task
def fetch_batch(shard: int) -> list[dict]:
from collector import grab # Playwright + прокси-ротация
return grab(shard=shard, limit=500)
@task
def normalize(rows: list[dict]) -> list[dict]:
return [
{
"sku": r["sku"],
"seller_id": r["seller"],
"price": float(r["price"]),
"currency": r["currency"],
"ts": r["observed_at"],
}
for r in rows
if r.get("price")
]
raw = fetch_batch.expand(shard=[0, 1, 2, 3])
normalize.expand(rows=raw)
collect_prices()
Обратите внимание на expand: это динамическое распараллеливание, которое в тексте главы превращается в отдельный абзац про горизонтальное масштабирование. Именно такие детали отличают «сделал скрипт» от «спроектировал систему».
Раздел с цифрами — самый уязвимый на защите. Заранее зафиксируйте, что и чем измеряете.
| Метрика | Определение | Инструмент | Целевое значение |
|---|---|---|---|
| Полнота сбора | Доля успешно обработанных карточек от запланированных | Счётчики Airflow, логи загрузчика | ≥ 98 % |
| Задержка данных | Время от изменения цены на стенде до появления в ClickHouse | OpenTelemetry, трейсы | ≤ 15 мин |
| Точность нормализации | Доля записей без ошибок типа и валюты | Контрактные тесты dbt | ≥ 99,5 % |
| Доступность конвейера | Отношение времени работы к общему времени месяца | Prometheus, Grafana | ≥ 99 % |
| TCO | Стоимость инфраструктуры и поддержки за месяц | Калькуляция по прайсам облака | Ниже ручного мониторинга |
Эффективность считайте через трудозатраты. Ручная проверка 1000 позиций — примерно 6–8 часов аналитика. Конвейер выполняет ту же работу за минуты, а главное — сохраняет историю. Отсюда честная формулировка результата: «сокращение трудозатрат на мониторинг ценовых изменений на 90 % при сохранении полной истории наблюдений».
Для веб-панели администратора не забудьте раздел безопасности: аутентификация, разграничение ролей, защита от инъекций и SSRF по рекомендациям OWASP Top 10. Это два абзаца, которые легко добавляют работе вес, а апелляций у рецензента не вызывают.
1. Парсинг ради парсинга. Студент собирает 100 тысяч записей и не может ответить, что с ними делать. Лечится постановкой вопроса исследования до написания кода: не «собрать цены», а «определить, насколько глубоко падает цена в последние три дня акции».
2. Правовой и этический вакуум. В работе должно быть прямо сказано: используются открытые данные, стенд-эмулятор и официальные API; условия использования сайтов соблюдаются. Игнорирование этого пункта — приглашение к неприятному вопросу на защите, особенно в свете новостей о нагрузке на крупные витрины во время распродаж.
3. Отсутствие идемпотентности. Повторный запуск загрузчика создаёт дубликаты, и графики на защите врут. Решается уникальным ключом (SKU + продавец + метка времени) и проверками качества на уровне модели данных.
Если тема уже сформулирована, но непонятно, как собрать из неё законченную работу — начните с 20-минутной бесплатной консультации: разберём структуру, подберём стек и оценим, реально ли уложиться в 120 часов подготовки. Никаких обязательств, только разбор вашей ситуации.
Источник: 5 Dyson Amazon Spring Sale deals that are worth a second glance (опубликовано 2026-03-25)