Анализ данных маркетплейсов для ВКР: пайплайн мониторинга цен на примере DeWalt

Поддомен: Data Engineering / ML. Роль эксперта: Data/ML-инженер.

Введение: почему скидка на шуруповёрт — это тема диплома

26 марта 2026 года ZDNet опубликовал материал о том, что любимый набор аккумуляционного инструмента DeWalt продаётся на Amazon почти за половину цены — на уровне исторического минимума. Для обычного читателя это повод сэкономить. Для выпускника ИТ-специальности это готовый полигон: цена меняется каждые несколько часов, скидка живёт ограниченное окно, а количество предложений от продавцов колеблется. Кто и как собирает эти данные? Как отличить реальную скидку от нарисованной «зачёркнутой» цены? Где хранить историю котировок и как построить модель, которая предсказывает момент падения цены?

Именно на таких вопросах строятся сильные ВКР по Data Engineering и ML. Ниже — как превратить новость про DeWalt в защищаемую работу с пайплайном, метриками и понятной практической ценностью.

FAQ: что чаще всего спрашивают до начала работы

Можно ли парсить Amazon и маркетплейсы легально?

Сбор публичных страниц допустим только с учётом robots.txt, условий использования площадки и ограничений по частоте запросов. В ВКР корректнее описать сбор через официальный Product Advertising API или на синтетическом датасете, а парсинг вынести в приложение как эксперимент. Обязательно зафиксируйте это в главе 1 — комиссия любит вопросы про правовую чистоту.

Сколько данных нужно, чтобы посчитать скидку и построить прогноз?

Для оценки «реальной» скидки нужна история минимум за 90–180 дней с шагом 1–4 часа: иначе базовая цена определяется неверно. Для ML-прогноза окна скидок ориентируйтесь на 6–12 месяцев наблюдений по 200–500 SKU. Если данных мало — используйте открытые датасеты Amazon Review Data и честно опишите ограничения выборки.

Какую метрику считать целевой, если это временной ряд?

Accuracy здесь врёт. Считайте MAPE, MAE и sMAPE по горизонту прогноза, отдельно — precision/recall для задачи детекции аномалий цены. Для оценки самой системы добавьте latency пайплайна, полноту сбора (доля успешно снятых SKU) и стоимость хранения по ISO/IEC 25010.

Как оформлять схемы и код по нормоконтролю?

Архитектуру — в C4 (Context + Container), процессы — в BPMN 2.0, классы — в UML. Логическую модель БД — по ГОСТ 34.601. Листинги кода выносятся в приложения, в тексте — только ключевые фрагменты со ссылкой «см. Приложение Б».

Темы ВКР, которые вырастают из этого кейса

Как разложить материал статьи по главам

Глава 1. Аналитическая — встраиваем кейс как обоснование

Откройте статью ZDNet и вынесите из неё три факта-опоры: конкретный SKU, размер скидки и привязку к событию (Amazon Spring Sale 2026). Это ваш пример «событийного» изменения цены. Здесь же строите C4-диаграмму контекста: пользователь — маркетплейс — ваш сборщик — хранилище — дашборд. BPMN-схема процесса «пользователь отслеживает цену» покажет комиссии, что вы понимаете бизнес-логику, а не просто пишете парсер.

Глава 2. Проектирование и реализация

Кладите в основу схему star schema: факт «цена» + измерения «товар», «продавец», «время». Для time-series берите TimescaleDB поверх PostgreSQL — гипертаблицы дают партиционирование по времени «из коробки». Оркестрацию отдайте Airflow, сбор — Scrapy/Playwright, тяжёлую аналитику — pandas/PySpark.

from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime
import requests, psycopg2

def fetch_prices(**ctx):
    r = requests.get(
        "https://api.marketplace.example/v1/offers",
        params={"sku": "DCD771C2", "marketplace": "amazon"},
        timeout=15,
    )
    r.raise_for_status()
    with psycopg2.connect(ctx["params"]["dsn"]) as conn:
        with conn.cursor() as cur:
            for offer in r.json()["offers"]:
                cur.execute(
                    "INSERT INTO price_fact(sku, seller_id, ts, price, currency) "
                    "VALUES (%s, %s, %s, %s, %s)",
                    (offer["sku"], offer["seller_id"],
                     offer["timestamp"], offer["price"], offer["currency"]),
                )

with DAG(
    dag_id="price_watch_dewalt",
    start_date=datetime(2026, 1, 1),
    schedule="*/30 * * * *",
    catchup=False,
    params={"dsn": "postgresql://etl:***@db:5432/prices"},
) as dag:
    PythonOperator(task_id="fetch_offers", python_callable=fetch_prices)

DDL для гипертаблицы займёт три строки, но снимет вопросы по масштабируемости:

CREATE TABLE price_fact (
    ts         TIMESTAMPTZ NOT NULL,
    sku        TEXT NOT NULL,
    seller_id  TEXT NOT NULL,
    price      NUMERIC(10,2) NOT NULL,
    currency   CHAR(3) NOT NULL
);
SELECT create_hypertable('price_fact', 'ts', chunk_time_interval => INTERVAL '7 days');

Глава 3. Оценка эффективности

Здесь защищаются цифрами, а не словами. Минимальный набор: MAPE прогноза (цель — ниже 12% на горизонте 7 дней), полнота сбора (не ниже 98% слотов), средняя задержка от изменения цены до алерта, стоимость хранения 1 млн строк в месяц. Отдельно посчитайте, сколько «ложных скидок» поймал детектор — на кейсе DeWalt это наглядно: сравните цену за 90 дней до акции с заявленной «перечёркнутой».

Чему вы научитесь

Чек-лист перед сдачей
  1. Все задачи из введения дословно повторяются в выводах по главам — сверьте нумерацию.
  2. Каждая диаграмма пронумерована и на неё есть ссылка в тексте.
  3. Метрики имеют формулу, единицу измерения и целевое значение.
  4. Листинги кода вынесены в приложения, в тексте — только ключевые фрагменты.
  5. Оформление ссылок и списка литературы — по ГОСТ Р 7.0.5-2008.
  6. Текст проверен на заимствования, оригинальность подтверждена отчётом.
  7. Практическая значимость сформулирована через измеримый эффект, а не «улучшение процесса».
Типичные ошибки студентов на таких темах
  1. Сбор без ограничений по частоте. Сотни запросов в секунду приводят к блокировке IP и дырам в данных — скидка на DeWalt за 12 часов просто не попадёт в выборку. Ставьте задержки, экспоненциальный backoff и сохраняйте сырые ответы.
  2. Хранение только текущей цены. UPDATE вместо INSERT убивает всю идею: посчитать глубину скидки и построить временной ряд станет невозможно. Пишите append-only и партиционируйте по времени.
  3. Случайное разбиение временного ряда на train/test. Модель обучается на будущем и показывает красивые цифры на защите, которые разваливаются на первом же вопросе комиссии. Делите строго хронологически.
Если тема уже выбрана, но непонятно, как собрать пайплайн, какие метрики посчитать и как всё это уложить в три главы — у нас есть 120 бесплатных часов консультаций в месяц. Поможем с архитектурой, подбором данных и структурой работы по любой специальности. Записаться можно через форму на сайте, без обязательств.
Материал подготовлен экспертами компании [Название сайта]. Мы помогаем студентам с 2010 года: от выбора темы и проектирования архитектуры до нормоконтроля и подготовки к защите. Если вам нужна помощь в разработке темы или оформлении работы, наши специалисты готовы подсказать.
Последнее обновление: 2026-09-26

Источник: This DeWalt cordless power tool set is nearly 50% off on Amazon - and I can vouch for it (опубликовано 2026-03-26)