Контекст задачи. Анализ данных розничной сети для проверки предпринимательской гипотезы

Я работаю в небольшой консалтинговой компании архитектором ИТ-систем управления товародвижением и коммерческими процессами на платформе SAP.
На прошлой неделе в рамках пресейла занялся непривычной для себя задачей проверки предпринимательской гипотезы на данных.

Удачно сложилось, что параллельно я прохожу курс “Рациональная работа” в школе системного менеджмента. В рамках этого курса я нарисовал для гипотезы диаграмму причинно-следственных связей.

На рисунке ниже гипотеза выделена зеленым блоком, а также видны другие причины, которые могут приводить к тем же результатам.

Pasted image 20250215122821
Pasted image 20250215122821

Итак, на входе имелись:

  • Рабочая гипотеза. В сети Х есть существенная неэффективность в процессах пополнения магазинов товарами в преддверии планируемого снижения цен.

  • Данные. Выгруженные в csv файлы фактические данные из ERP системы для анализа этой гипотезы (справочники товаров и магазинов, история запасов, продаж, цен)

  • Макет целевого отчета. К этому времени мы с коллегами уже обсудили в первом приближении образ конечного результата, т.е. сделали макет целевого отчета и требования к отбору в него данных.

  • Желание не инвестировать долго в дохлую лошадь. Поэтому для начала хочется быстро проверить наличие примеров подтверждающих гипотезу и дать оценку сверху для существующих экономических потерь.

Pasted image 202502151228211143×456 31.5 KB

День 1. Черновик отчета с помощью ноутбука Jupiter c Python и чата с Deepseek/ChatGPT

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

Сначала я подумал про Excel. У меня большой опыт анализа данных в Excel, который в основном сводится к мастерскому владению функцией ВПР и сводными таблицами. Вот беда - у Excel ограничение на 1 млн строк, а в выгруженных файлах по 5 млн строк и это еще до того, как мы начинаем их соединять между собой.

Затем я вспомнил что у меня на рабочем компьютере до сих пор стоит дистрибутив Anaconda с ноутбуком Jupiter - это такая web-IDE для работы с Python в основном в области анализа данных. С Python я познакомился в 2019 году в рамках курса по анализу данных на Курсере и тех пор забыл примерно всё про синтаксис и библиотеки. Ну разве что осталось бытовое понимание, что библиотека pandas вроде хороша для работы с табличными данными.
Учить по честному Python пару месяцев ради задачи, которую надо решить за часы - не вариант. Значит будем читить и воспользуемся ИИ.

Поэтому в первый день я попеременно общался с моделями Deepseek R1 (chat.deepseek.com) и o3-mini (chat.openai.com) и писал код в Jupiter.
Результаты - примерно за 4 часа получена первая версия целевого отчета (с кучей недостающих аналитик) и я испытываю смешанные чувства:

  1. С одной стороны, я точно понимаю что производительность фантастическая. Без помощи ИИ я бы по старинке читал документации к библиотекам, статьи, stack overflow и та же работа на незнакомом инструменте затянулась бы как минимум на несколько недель.

  2. С другой стороны, такая работа вызывает глубокое и сильное раздражение. Чату всё время надо аккуратно задавать контекст, копировать имеющийся код или писать от руки правильные названия переменных. Когда копируешь код в Jupiter, он не работает с первого раза именно из-за неточного попадания в контекст, приходится разбираться и править на месте руками.

Вечером после работы я рефлексировал над проделанной работой и решил, что мне нужен AI, который сам видит контекст задачи (мой код и желательно данные), чтобы не тратить время и нервы на написание текста с контекстом в каждом промте.

Сначала попробовал VS Code с плагинами. Результат отрицательный. Пара самых популярных плагинов нужного типа (Github copilot и еще какой-то) отказываются даже начинать работать без vpn, а vpn для работы с ними конфликтует с рабочими vpn для подключения к клиентам.

В качестве третьей попытки выбрал Сursor (www.cursor.com). Это брат-близнец VS Code со встроенными интерфейсными возможностями для общения с ИИ. Тут всё удалось найти, поставить, и настроить где-то за час. Бесплатная версия дает на 2 недели попробовать работу без особых ограничений и не жалуется на то, что ты в России.

День 2. Итоговый отчет с помощью AI Copilot от Cursor. Наслаждаемся полетом!

На второй день я продолжил итеративно развивать получившийся пайплайн и его результат - итоговый отчет.
Сначала скопировал код из Jupiter в Cursor и убедился что он работает, а дальше начал добавлять фичи.
С Cursor можно работать по разному, нижу опишу что я попробовал.

Способ 1 . Просим в чате решить относительно большие куски задачи

Вот картинка с иллюстрацией. Верхний зелёный блок - это то что уже было нижний - код, добавленный ИИ в отчет на вопрос в чате справа.
Примечание для занудных как я: строка 7 уже была до ответа ИИ, я ошибся с выделением на скрине.

Pasted image 20250215125830
Pasted image 20250215125830

Pasted image 202502151258302157×1011 287 KB

Способ 2. Пишем комментарий на русском → получаем автоматом строки кода на питоне → проверяем результат → двигаемся дальше

В основном делал так: в нужном месте просто вставлял комментарий на свободном русском языке, какое следующее преобразование данных я хочу получить.
Дальше нажимаешь пробел, через долю секунды Cursor предлагает внизу серым одну или несколько строк кода для реализации комментария, нажимаешь Tab - вуаля, код добавлен. Проверяем при помощи чтения кода и банального print на реальных данных, что получилось то что нужно и удивляемся В 9 случаях из 10 этот код просто делает то что я хочу с первого раза.
Результат выглядит как на картинке. Я написал серые тексты комментариев, код на питоне писал ИИ.

Pasted image 20250215130430
Pasted image 20250215130430

Pasted image 202502151304301761×829 131 KB

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

И главное - вместо фрустрации испытываешь фантастическое чувство полета!
Ты быстро пишешь что делать дальше, твой ИИ coplilot практически безошибочно конвертирует это в строки кода на близком к незнакомому языке программирования.

Выводы - cursor фантастически снижает порог входа для (недо)джуниоров в языке.

У меня на входе было многое:

  • образование в ИТ

  • данные

  • представление о целевом отчете

  • понимание шагов преобразования данных чтобы этот отчет получить.

Для получения результата за часы, а не недели не хватало только одного компонента - знания синтаксиса и библиотек Python.

Если вы в такой же ситуации, как и я - пора завести себе ИИ-копилота и делать небольшие, но практически нужные рабочие продукты с попутным ощущением фантастического полета.

Комментарии (4)


  1. alexhott
    20.02.2025 04:27

    ... архитектором ИТ-систем управления товародвижением  ...

    гипотеза "Дни с нулевыми остатками по востребованным товарам" проверяется скриптом на SQL куда более эффективнее - минут за 20-30 если знаешь структуру данных( а архитектор по определению ее знает как и SQL)


    1. LKU Автор
      20.02.2025 04:27

      Согласен, SQL применительно к исходным данным в ERP системе - это реалистичный альтернативный инструмент решения поставленной задачи.

      В моём вариант с SQL я оценил как менее оптимальный по сравнению с выгрузкой подготовленных и отфильтрованных данных из аналитической системы с последующей обработкой на локальном компьютере при помощи Python.

      Сыграли такие факторы:

      1. Задача была существенно сложнее, чем просто найти дни с нулевыми остатками товара. Задача состояла в том, чтобы проверить связи между разными потенциальными причинами по графу причинности и итоговым фактом нулевого остатка товара для конкретной комбинации товар/магазин/день

      2. Объем данных и структура хранения. Сырых данных в моем случае было не миллионы строк, а сотни миллионов. Кроме того, я как раз хорошо знаю структуру хранения данных в SAP ERP и, поверьте, она не простая. Можно сэкономить много сил и избежать целого класса ошибок интерпретации, если брать данные из аналитической системы, где данные уже разложены по кубам с продуманными бизнес-аналитиками и показателями.


      1. Arlekcangp
        20.02.2025 04:27

        Честно говоря странно....

        1. То что вы описываете, мы делали еще в 2000-х силами foxpro и одного человека. Неужели за 20+ лет в торговые системы этот функционал так и не встроили? (Хоть возвращаться и самому делать)

        2. Заголовок статьи намекает на то, что гипотезу будет проверять ИИ... По факту ии только код на питоне пишет...

        3. Зачем вы это делаете сами? Какая цель? Не доверяете людям из it отдела? Они сделали бы пусть не одним, но тремя запросами sql: берем остатки по датам, ищем позиции и даты когда остаток нуль, сопоставляем приход. Полученную табличку начинаем анализировать хоть экселем, хоть питоном. Никаких миллионов строк там не будет, т к берутся только позиции с нулевым остатком, по которым было поступление товара. Можно разбить на категории, т к вы сами пишете, что причин out of stock может быть много и смотреть все данные вместе нет смысла. Нужно каждую группу и каждый товар анализировать.

          Вообще, я не удивлен, если все так плохо обстоит. В мой регион (Калининград) пришла сеть "пятерочка", выкупив одного из двух местных крупных ретейлеров. Честно говоря, такого бардака в магазинах я давно не видел. Умудрились поломать, то что годами работало... С ужасом жду, когда они "ребрендят" оставшиеся магазины поглощенной сети. У них проблемы с остатками регулярные. И моя "гипотеза" (без всяких данных это можно предположить), что они тупо сократили размер склада (который уже был минимален) в магазинах и количество персонала, который и так не успевал. Никакие ИИ тут не помогут... В итоге имеем недомагазин, в котором каждый день чего то нет... Причем ходовых товаров. Даже сигареты часто отсутствуют. Это позор.


  1. fizroma_ya
    20.02.2025 04:27

    Солидно, не слыхал про курсор.
    Мне нравиться пользоваться чатом в случае "Как работает данная функция, подскажи её синтаксис". Всё конечно можно прочитать в документации... но я плох в английском.