Прогноз продаж на нейросети по данным из 1С

R&D-прототип: история продаж выгружается из 1С, рекуррентная сеть GRU прогнозирует дневной спрос

Заказчик: Собственный R&D-проект
Стек: Python, TensorFlow / Keras (GRU), pandas, scikit-learn, feature engineering (сезонность, rolling, lag), FastAPI + Docker, выгрузка истории продаж из 1С на BSL

Задача

Спрос на товары сезонный и шумный: по историческим продажам хочется прогнозировать дневной объём, чтобы планировать закупки и не замораживать склад. Данные лежат в 1С, но сырые продажи без обработки нейросеть не понимает. Нужен прототип: выгрузить историю из 1С, превратить её в признаки и обучить модель прогноза.

Результат

Прототип выгружает историю продаж из 1С, строит 13 признаков и обучает рекуррентную сеть GRU. На датасете из 375 000 записей по 150 товарам за 4 года лучшая модель даёт MAE около 10.5 на ведущем товаре. Прогноз отдаётся через FastAPI, весь пайплайн собран в Docker.

Это R&D-кейс про прогноз продаж на нейросети по данным из 1С. Задача прикладная: по истории продаж предсказать дневной спрос, чтобы планировать закупки. Данные — реальные продажи автозапчастей за 2018–2021 годы: 375 000 записей, около 150 товаров. Сырые продажи выгружаются из 1С, а прогнозирует их рекуррентная сеть GRU.

Выгрузка истории из 1С

Всё начинается в 1С: запросом собираем дневные продажи по каждому товару из документов реализации и выгружаем в JSON для обучения.

ВЫБРАТЬ
    НАЧАЛОПЕРИОДА(РеализацияТоваровТовары.Ссылка.Дата, ДЕНЬ) КАК ДатаПродажи,
    РеализацияТоваровТовары.Номенклатура КАК Номенклатура,
    СУММА(РеализацияТоваровТовары.Количество) КАК КоличествоПродано
ИЗ Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
ГДЕ РеализацияТоваровТовары.Ссылка.Проведен
СГРУППИРОВАТЬ ПО ДатаПродажи, Номенклатура

Признаки решают больше, чем модель

Нейросеть не понимает «дату» и «номер товара» — ей нужны признаки. Из истории продаж я собрал 13 фич, и это дало больше прироста, чем усложнение модели:

  • Сезонность через sin/cos месяца — линейное кодирование 1–12 рвёт декабрь и январь, а синус-косинус делает шкалу непрерывной, и модель ловит годовой цикл.
  • Rolling-средние (7 и 30 дней) — два горизонта тренда: «сейчас растём или падаем» и «общий уровень за месяц».
  • Lag-фичи (вчера, неделю назад) — краткосрочная инерция; продажи вчера — самый сильный одиночный признак для однодневного прогноза.

Модель и результат

Прогнозирует рекуррентная сеть GRU на Keras/TensorFlow — она держит последовательность и подходит для временных рядов лучше, чем полносвязная сеть. Лучшая конфигурация (компактная GRU на 13 фичах) дала MAE около 10.5 на ведущем по выручке товаре. Это прототип: он показывает, что подход рабочий, и обобщается на группы товаров и другие горизонты прогноза. Прогноз отдаётся через FastAPI, весь пайплайн — в Docker.

Данные для прогноза — автозапчасти, та же ниша, что и в кейсе про ИИ-агента продаж автозапчастей в Avito: там ИИ продаёт, здесь — прогнозирует спрос по тем же данным.

Хотите прогноз спроса по вашим данным 1С

Если у вас копится история продаж в 1С, из неё реально выжать прогноз спроса. Как выгружать данные из 1С в Python и строить ML-модели рядом с базой — разбираем на курсах по Python для 1С и по нейросетям для 1С.

Частые вопросы