Проект начинался как моя выпускная квалификационная работа 2024 года: настольное приложение, которое строит прогнозы выручки и продаж металлопроката. Сейчас я развиваю его дальше: строю реалистичную модель учётной системы сети металлобаз и решаю на ней задачу прогнозирования спроса.
| Тема | «Разработка приложения для анализа и прогнозирования продаж организации» |
|---|---|
| Вид работы | Выпускная квалификационная работа (бакалаврская работа) |
| Вуз | ФГБОУ ВО «Тольяттинский государственный университет» |
| Кафедра | «Прикладная математика и информатика» |
| Направление | 09.03.03 Прикладная информатика, профиль «Разработка социальных и экономических информационных систем» |
| Автор | Д.В. Логинов, группа ПИб-2004б |
| Руководитель | канд. экон. наук, доцент Т.А. Раченко |
| Год | 2024, Тольятти |
Предметная область — ООО «Металл-Маркет», оптовая и розничная торговля металлопрокатом в Самаре и Тольятти. Что было сделано в работе и что с тех пор пересмотрено — в docs/diploma.md.
Модель учётной системы сети из шести металлобаз в PostgreSQL: каталог, клиенты, поставщики,
цены, заказы, поставки, перемещения между базами и движение товаров по складам.
Все таблицы выгружены в CSV в data/, с ними проект работает без PostgreSQL.
Данные синтетические. Структура сети, ассортимент и услуги смоделированы по публичной информации о компании из дипломной работы. Объёмы продаж, клиенты, цены, поставщики и остатки вымышлены и не являются данными ООО «Металл-Маркет».
| Период | октябрь 2021 — сентябрь 2026 |
|---|---|
| Ассортимент | 927 позиций в 62 категориях: черный и оцинкованный прокат, трубы, сетки, метизы, фитинги, нержавейка, цветной металл, готовые изделия |
| Клиенты | около 29 тыс.: частные лица, мелкие строители, строительные компании, производства, перепродавцы |
| Заказы | около 250 тыс. заказов и 940 тыс. строк, около 156 тыс. т металлопроката |
Прогноз продаж каждой позиции на каждой базе — 3 347 рядов — на 1–4 недели вперёд. Одна модель градиентного бустинга на все ряды, отдельная на каждый горизонт; продажи нормируются на масштаб ряда. Качество проверяется на последних 26 неделях данных и сравнивается с простыми прогнозами-ориентирами.
Тест 30.03 — 27.09.2026, прогноз на неделю вперёд, ошибка в килограммах:
| WAPE | Bias | R² | |
|---|---|---|---|
| модель | 84,7 % | +8,3 % | 0,54 |
| как неделю назад | 102,4 % | +0,7 % | 0,20 |
| как год назад | 101,2 % | −3,8 % | 0,19 |
| среднее за 4 недели | 87,2 % | −0,1 % | 0,49 |
Модель лучше ориентиров на всех горизонтах. Ошибка 85 % — по отдельной позиции на отдельной базе за неделю, где спрос прерывистый; по всей сети недельная ошибка — 12,5 %. Главное ограничение — прогноз завышен на 8 %, отчасти из-за дефицита в конце теста. Подробнее — в docs/metrics.md.
Что сделано в каждой части проекта и почему выбрано именно так:
| Документ | Содержание |
|---|---|
| Дипломная работа | пересказ ВКР 2024 года: процесс, требования, проектирование — и что из этого изменилось |
| Постановка задачи | что прогнозируется, почему по позициям, по неделям и на 1–4 недели |
| Датасет | почему данные синтетические, их свойства, состав и формат файлов |
| База данных | модель учётной системы, развёртывание, почему PostgreSQL, регистр движения товаров |
| Предобработка | недельная панель, признаки (feature engineering): как строятся, пример, важность; защита от утечки будущего |
| Модель | выбор модели, функция потерь, нормировка, схема проверки, эксперименты |
| Метрики и результаты | выбор метрик, результаты по горизонтам и единицам, ограничения |
| Тесты | что и почему проверяют юнит-тесты |
| Приложение | архитектура, файлы пакета, точки входа, REST API, конфигурация |
| Литература | источники, на которые ссылаются документы |
src/sales_analytics/ устанавливаемый пакет
├── storage/ учётная система в PostgreSQL, чтение базы и датасета
├── forecasting/ предобработка, модель, прогноз, графики
└── api/ REST API на FastAPI
data/ датасет: таблицы учётной системы в CSV
docs/ документация и графики
tests/ юнит-тесты (pytest)
infra/ PostgreSQL в Docker
output/ модели, прогнозы и выборки (создаётся при запуске, не хранится в git)
Нужен Python 3.13:
python -m venv .venv
.venv/Scripts/python -m pip install -e . # в Linux/macOS: .venv/bin/python
cp .env.example .envОсновная точка входа:
python -m sales_analytics.api # http://127.0.0.1:8000, адрес и порт - API_HOST и API_PORT в .envНа http://127.0.0.1:8000/docs — документация, где любой запрос можно выполнить из браузера.
Обычный порядок: POST /models/train → GET /jobs/{id} → POST /forecasts → GET /forecasts/latest.
Все эндпоинты и пример с curl — в docs/application.md.
PostgreSQL не нужен: с --data data данные читаются из датасета.
python -m sales_analytics.forecasting train --data data # обучение на 1–4 недели
python -m sales_analytics.forecasting train --data data --horizon 1 # только на неделю вперёд
python -m sales_analytics.forecasting predict --data data # прогноз после конца данных
python -m sales_analytics.forecasting report # графики в docs/imagesРезультаты сохраняются в output/ — см. docs/application.md.
Нужен PostgreSQL 15+ — установленный или в Docker, пароль указывается в .env (DB_PASSWORD).
docker compose --env-file .env -f infra/docker-compose.yml up -d # PostgreSQL в контейнере
python -m sales_analytics.storage init # или роль и база на установленном PostgreSQL
python -m sales_analytics.storage create --yes # таблицы
python -m sales_analytics.storage export # выгрузка таблиц в data/Без --data команды train и predict читают данные из базы.
Работают на маленьких искусственных данных, PostgreSQL и датасет не нужны:
.venv/Scripts/python -m pip install -e ".[dev]"
python -m pytestPython 3.13, PostgreSQL 17, pandas, NumPy, scikit-learn, matplotlib, FastAPI, uvicorn, pydantic-settings, pytest. Сравнение с версией 2024 года — в docs/application.md.
