Skip to content

About

Re-evaluating my 2024 bachelor's diploma

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

 

History

15 Commits

Folders and files

Repository files navigation

Анализ и прогнозирование продаж металлоторговой компании

Проект начинался как моя выпускная квалификационная работа 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

REST API

Основная точка входа:

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 pytest

Технологии

Python 3.13, PostgreSQL 17, pandas, NumPy, scikit-learn, matplotlib, FastAPI, uvicorn, pydantic-settings, pytest. Сравнение с версией 2024 года — в docs/application.md.

About

Re-evaluating my 2024 bachelor's diploma

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages