Добавить в корзинуПозвонить
Найти в Дзене

Как нейросеть заполнила характеристики для 15к+ товаров, или один день из жизни аналитика

#рубрика_рабочие_будни Всем привет! Я — практикующий исследователь данных, и на этом канале делюсь тем, что реально работает в IT. Никакой сухой теории, только личный опыт, рабочие инструменты и грабли, на которые я уже наступил за вас. Рад, что вы здесь! В этой статье я без прикрас описываю свой рабочий день и одну конкретную задачу. Если вам понравится такой формат "дневника аналитика", постараюсь сделать рубрику постоянной 🎱. Сейчас у меня в работе несколько задач по предиктивной аналитике, включая прогнозирование спроса. Ключевой этап — подготовка данных. Кроме внешних и косвенных признаков, модели жизненно необходимы точные характеристики (по-нашему — "реквизиты") самих товаров. И тут я столкнулся с классической проблемой: за почти 20 лет существования компании никто системно не вел базу реквизитов. Есть базовые вещи вроде производителя и массы, но ключевых характеристик, которые реально влияют на продажи, нет почти нигде. Ситуация, увы, типичная для многих компаний, которые толь
Оглавление

#рубрика_рабочие_будни

Всем привет! Я — практикующий исследователь данных, и на этом канале делюсь тем, что реально работает в IT. Никакой сухой теории, только личный опыт, рабочие инструменты и грабли, на которые я уже наступил за вас. Рад, что вы здесь!

В этой статье я без прикрас описываю свой рабочий день и одну конкретную задачу. Если вам понравится такой формат "дневника аналитика", постараюсь сделать рубрику постоянной 🎱.

Шедеврумушка
Шедеврумушка

Предисловие: боль любого аналитика

Сейчас у меня в работе несколько задач по предиктивной аналитике, включая прогнозирование спроса. Ключевой этап — подготовка данных. Кроме внешних и косвенных признаков, модели жизненно необходимы точные характеристики (по-нашему — "реквизиты") самих товаров.

И тут я столкнулся с классической проблемой: за почти 20 лет существования компании никто системно не вел базу реквизитов. Есть базовые вещи вроде производителя и массы, но ключевых характеристик, которые реально влияют на продажи, нет почти нигде. Ситуация, увы, типичная для многих компаний, которые только начинают погружаться в глубокий анализ данных.

Задача поставлена, данные нужны кровь из носу. Без них модель получится либо слабой, либо вообще бесполезной. Изначально эту работу поручили нескольким консультантам, но спустя месяцы не было заполнено и половины... Стало ясно, что нужен другой подход.

Так родилась идея: а что, если поручить эту рутину искусственному интеллекту? Спойлер: идея сработала.

Этап 1: Подготовка плацдарма (работа с данными)

Мой алгоритм действий был простым и легко контролируемым.

  1. Выгрузка. Я вытащил из ClickHouse все товары, которые так или иначе есть в обороте — всего 55 тысяч SKU. Взял основные поля: SKU, код товара, категория, наименование и статус.
  2. Чистка. Вместе с продуктовым аналитиком и другими заинтересованными коллегами мы отсеяли всё лишнее: убрали услуги, оставили только актуальные статусы («Заказной», «Складской», «Ввод в ассортимент»). В итоге из почти 40 товарных категорий осталось 18 самых важных.
  3. Финальная выборка. На выходе я получил генеральную выборку из ~16 000 SKU — именно эти товары будут участвовать в предиктивной модели. Этот датафрейм я разделил на 18 частей по категориям.
  4. Выбор характеристик. Для каждой категории я определил 4-5 ключевых характеристик, которые, по нашей гипотезе, сильнее всего коррелируют с продажами.

На всю эту подготовку ушел вчерашний день. Теперь — к самому интересному.

Этап 2: Призываем на помощь ИИ

1. Выбор инструмента

У меня был доступ к нескольким API: платные ChatGPT и Gemini, а также условно-бесплатный Groq. После быстрых тестов стало ясно, что все они справляются отлично. Я остановился на Groq — там щедрые лимиты по токенам, которых не жалко для такой объемной задачи 😄, а более "дорогие" API оставил для серьезных дел 💩.

В Groq можно выбирать разные модели. Я попробовал несколько и остановился на llama3-70b-8192.

2. Создание идеального промта (инструкции для ИИ)

Это был ключевой момент. Нужно было составить такую инструкцию (промт), чтобы нейросеть возвращала данные в строго определённом формате, без лишней "воды". После нескольких итераций у меня получился универсальный шаблон. Для каждой из 18 категорий я просто менял в нём список полей и экспертную роль.

Вот пример шаблона для одной из категорий:

Вы — эксперт в области [название категории] и аксессуаров к ним.

Для переданного списка продуктов в виде JSON-массива заполните НЕДОСТАЮЩИЕ значения для полей: [список полей, например: product_type, thread_diameter_inch, pressure_range_bar, ...].

- Если поле уже заполнено (не null, не NaN, не пустое), ОСТАВЬТЕ ЕГО КАК ЕСТЬ.
- Заполняйте поле, только если можете уверенно определить его значение по названию, категории или общим знаниям.
- Если значение определить невозможно, оставьте его как null.
- [Для каждого поля можно добавить примеры, например: pressure_range_bar: максимальное давление в барах, например '6', '10' (числовое значение)]

Возвращайте СТРОГО JSON-массив объектов. В каждом объекте должны быть ТОЛЬКО ключи: [code и список полей].
НИКАКОГО дополнительного текста, пояснений или заголовков. Ответ должен быть ЧИСТЫМ JSON-массивом. Все значения — на русском языке.

Продукты:
[сюда подставляется JSON с данными о товарах]

Такая чёткая инструкция практически гарантирует, что ответ можно будет сразу использовать в коде без дополнительной очистки.

3. Код, который делает магию

Осталось написать скрипт, который будет "скармливать" данные нейросети и забирать результат.

ВАЖНО: API Groq — зарубежный и требуется VPN. Я один раз настроил(арендовал) себе сервер с OpenVPN и теперь пользуюсь им на всех устройствах. Это удобно и безопасно. Можно как вариант сделать также.

Вот ключевые моменты в логике моего кода:

  • Разбивка на части (чанки). Чтобы не превышать лимиты API по количеству токенов в одном запросе, я отправлял товары не все сразу, а небольшими пачками по 25 штук.
  • Динамический промт. Для каждой такой пачки код генерировал тот самый промт, который я показывал выше.
  • Запрос к API. Скрипт отправлял запрос с temperature=0.0. Этот параметр делает ответы модели максимально предсказуемыми и точными, без лишнего "творчества".
  • Обработка ответа. Хотя промт был строгим, я добавил функцию очистки, которая на всякий случай вырезает из ответа ИИ всё, кроме самого JSON-массива.
  • Безопасное обновление. Скрипт обновлял данные в исходной таблице, только если ячейка была пустой. Это гарантировало, что уже существующие, заполненные вручную данные не будут затерты.
  • Пауза между запросами. Небольшая задержка в 1 секунду (time.sleep(1)) помогает не попасть под блокировку за слишком частые обращения к API.

Сам код на Python вы можете адаптировать под свои задачи. Если будут вопросы — пишите в комментариях!

Код прикрепил сюда.

Вместо заключения

То, на что у консультантов ушли бы еще недели или месяцы ручной работы, нейросеть с моим скриптом сделала за несколько часов. Конечно, результат не идеален на 100% и требует выборочной проверки, но это уже колоссальная экономия времени и ресурсов.

Я не претендую на истину в последней инстанции, а лишь делюсь своим опытом. Надеюсь, он будет вам полезен. Спасибо, что дочитали! Подпишитесь👇👇👇 и ставьте лайки 👍🏽👍🏽👍🏽 — впереди много интересных статей про навыки, инструменты и лайфхаки из жизни аналитика.