Перейти к содержимому
Антон ГончаровРазработчик ИИ-систем

Машинное обучение на Python · работает в браузере

Аналитика отзывов с маркетплейсов

На трёх площадках сотни отзывов в неделю, и про партию с треснувшими клапанами узнают, когда рейтинг уже упал. Здесь Python-пакет неделю за неделей собирает отзывы обжарочной «Зерно» через API продавца трёх маркетплейсов, сам размечает тональность и аспекты — вкус, помол, упаковку, доставку, цену — и сравнивает каждую неделю с предыдущими. Звёздам он не верит: «пять звёзд, но пачка пришла рваная» — это жалоба на упаковку. А жалобу, о которой модель не знала, он находит как новую тему.

Сценарий: Обжарочная «Зерно» — вымышленная, та же, что в квизе и хабе заявок: десять позиций кофе, посуды и оборудования на трёх маркетплейсах. Отзывы за полгода сгенерированы, в них спрятаны пять инцидентов — от подорожания до недовеса.

Скриншот демо: Аналитика отзывов с маркетплейсов

Открыть демо

Первый запуск скачивает около 35 МБ — Python, numpy, scipy и scikit-learn — и обучает модели за несколько секунд, дальше всё из кеша. Удобнее с компьютера: таблица аспектов и графики шире.

Приложение работает в браузере: на сервер ничего не отправляется.

Что показывает демо

  • Сбор по API продавца трёх площадок с их форматами и пагинацией: Wildberries — skip и take, Ozon — last_id, Маркет — page_token; журнал запросов виден

  • Тональность — логистическая регрессия на TF-IDF по основам слов с учётом «не»; на контрольной выборке точнее правила по звёздам: macro-F1 0,88 против 0,72

  • Восемь аспектов в каждом отзыве, по предложениям: где хвалят, где жалуются — и «Почему так?» с весами слов прямо в тексте

  • Тревоги без ложных срабатываний: жалобы на аспект за неделю против шести недель до неё, биномиальный z-score отдельно по товару и площадке

  • Новые темы: жалобы, которые не объясняет ни один аспект, группирует NMF — так находится недовес, которого модель не знала

  • Исправили метку — модель сразу дообучается, тревоги и темы пересчитываются

  • Ответы покупателям: черновик по шаблонам, проверка правил площадки и публикация через её API с настоящим запросом и ответом

  • Отчёт в Excel на pandas и openpyxl и вкладка «Код» с исходниками пакета

Как попробовать

  1. Посмотрите обзор

    При запуске модели обучаются, а история за восемь недель собирается сама. На вкладке «Модель» — насколько модель точнее звёзд и на какие слова опирается.

  2. Соберите следующие недели

    «Собрать следующую неделю →» — с десятой начнутся жалобы на цену, с четырнадцатой — треснувшие клапаны на Wildberries и Ozon. Тревога появится в первую же неделю, «Показать отзывы →» откроет их.

  3. Поправьте модель

    Нажмите «Почему так?» под отзывом, а если модель ошиблась — исправьте метку. Модель дообучится, тревоги и темы пересчитаются.

  4. Ответьте и найдите новое

    Во вкладке «Ответы» опубликуйте черновик через API площадки. Нажмите «До конца» — на вкладке «Темы» появится недовес, о котором модель не знала. Скачайте Excel.

Без платных нейросетей

«Зерно» и отзывы вымышлены. Ответы API Wildberries, Ozon и Яндекс Маркета — статические файлы на этом же сервере, по папке на каждую из 26 недель; форматы, пагинация и публикация ответа повторяют документацию площадок. Модели — настоящий scikit-learn в WebAssembly-сборке Pyodide, без платных нейросетей: черновики ответов собираются из шаблонов. Тот же пакет проверяется тестами pytest на обычном Python и запускается на сервере одной командой.

Демо работает без API-ключей OpenAI, YandexGPT или GigaChat. Там, где рабочая система обращается к модели, стоит локальная заглушка с тем же интерфейсом — поэтому демо бесплатно, всегда доступно и ничего не выдумывает.

Что будет в рабочем проекте

  • Сбор по расписанию на сервере с токенами продавца, история в PostgreSQL
  • Модель дообучается на разметке менеджеров, качество проверяется в CI на контрольной выборке
  • Тревоги в Telegram с кнопками: открыть отзывы, взять в работу, передать производству или логистике
  • Черновики ответов от языковой модели по вашим правилам, публикация после одобрения
  • Еженедельный отчёт в Excel на почту и дашборд по товарам и площадкам

Стек

  • Python 3.14
  • scikit-learn
  • pandas
  • openpyxl
  • pytest
  • Pyodide
  • WebAssembly
  • Web Worker
  • Comlink
  • React 19
  • TypeScript
  • Recharts
  • Zustand

Основано на

Книги и дисциплины, идеи из которых работают в этом демо.

Комментарий от разработчика

Антон Гончаров

Разработчик ИИ-систем · Python

Для бизнеса

  • Всплеск жалоб виден в первую же неделю — до того, как упадёт рейтинг карточки.
  • Звёздам верить нельзя: модель находит жалобу в отзыве на пять звёзд и похвалу в отзыве на три.
  • Проблемы, о которых никто не думал, всплывают сами — как недовес в этом демо.

Для разработчиков

  • scikit-learn в браузере через Pyodide: TF-IDF по основам слов с учётом «не» и символьным n-граммам, логистическая регрессия, аспекты — один против всех.
  • Тревоги — биномиальный z-score по неделе, площадке и товару против шести недель до неё, для узких срезов порог выше.
  • Качество проверяется на отдельной выборке: macro-F1 0,88 против 0,72 у правила по звёздам. Тот же пакет проходит pytest в CI.

Советы

  • Совет 01

    Сравнивайте модель с простым правилом: если она его не обходит, она не нужна.

  • Совет 02

    Для тревог считайте статистическую значимость, а не проценты: на маленьких числах проценты врут.

Нужен такой же для вашего бизнеса?

Расскажите о задаче — отвечу, что из демо подойдёт вам, сколько это займёт и что понадобится с вашей стороны.

Другие демо в этом разделе

Все демо
  • Веб-приложение · распознавание речи · нейросеть в браузере

    работает

    Голосовая заявка

    Клиент наговаривает заявку голосом, а менеджер получает готовую карточку: имя, компания, телефон, бюджет, сроки, задача и оценка — горячий лид или нет. Речь распознаёт Whisper прямо в браузере.

    • React
    • TypeScript
    • Нейросеть в браузере
  • Веб-приложение · звонок в браузере · распознавание и синтез речи

    работает

    Голосовой оператор доставки

    Робот принимает заказы по телефону вместо администратора: слушает, переспрашивает, проверяет адрес по зонам доставки, считает сумму и читает заказ перед подтверждением. Звонок идёт прямо в браузере — кнопка «Позвонить», без номера телефона.

    • React
    • TypeScript
    • Нейросеть в браузере
  • Веб-приложение · распознавание речи · контроль отдела продаж

    работает

    Речевая аналитика звонков

    Звонок отдела продаж превращается в расшифровку по ролям, оценку по скрипту и заполненную карточку сделки: клиент, контакты, интерес, озвученная цена, следующий шаг и задача менеджеру. Речь распознаёт Whisper прямо в браузере.

    • React
    • TypeScript
    • Нейросеть в браузере
  • Веб-приложение · документы · DOCX и PDF

    работает

    Генератор КП и договора

    Менеджер заполняет анкету сделки — покупатель, товары, скидка, НДС, — а коммерческое предложение, договор поставки и счёт собираются на листе A4 на глазах. На выходе — Word, PDF или JSON.

    • React
    • TypeScript
  • Веб-приложение · B2B · КП в PDF

    работает

    Конфигуратор цены

    Менеджер собирает заказ на все окна квартиры: тип, размер, створки на схеме, профиль, стеклопакет и цвет. Правила производства проверяются сразу, скидки и рассрочка считаются сами, КП с номером уходит в PDF.

    • React
    • TypeScript
  • Веб-приложение · финансы · сравнение

    работает

    Ипотечный калькулятор

    Пять программ банков на одном экране: какие подходят клиенту и почему остальные нет. Льготная ставка от застройщика, дифференцированный платёж, досрочное погашение, нагрузка на доход и налоговый вычет.

    • React
    • TypeScript
  • Веб-приложение · смета · PDF

    работает

    Калькулятор сметы ремонта

    Размеры комнат превращаются в площади пола, стен и потолка, а те — в работы по этапам. Работа и материалы отдельно, срок по выработке бригады, график оплаты и версии сметы для торга с клиентом.

    • React
    • TypeScript
  • Веб-приложение · витрина · чекаут · заказы

    работает

    SPA-каталог на React

    Магазин целиком в браузере: поиск с подсказками и исправлением раскладки, фасеты с живыми счётчиками, ссылки на любой фильтр, избранное, корзина с промокодом и чекаут с выбором слота доставки. Заказы видны в «Моих заказах» со статусами, их можно повторить или отменить.

    • React
    • TypeScript
  • Виджет для сайта · нативный JS · одна строка

    работает

    Виджет AI-консультанта

    Консультант для любого сайта, который ставится одной строкой: отвечает по базе знаний со ссылкой на источник, собирает заявку и зовёт оператора. Написан на чистом JavaScript без фреймворков — весь виджет 21 КБ в gzip.

    • Нативный JS
  • Виджет для сайта · нативный JS · заявки

    работает

    Квиз-форма заявки

    Квиз вместо длинной формы: шесть вопросов с ветвлением, в конце — расчёт по прайсу. Менеджер получает заявку с оценкой «горячая / тёплая / холодная» и источником рекламы, а вкладка «Аналитика» показывает, на каком шаге уходят люди.

    • Нативный JS
  • Backend на Python · вебхуки → amoCRM и Битрикс24

    работает

    Интеграционный хаб заявок

    Заявки с сайта, из рекламы, звонков, почты и ботов приходят на вебхуки, приводятся к одному виду, проверяются на дубли, распределяются по менеджерам и доставляются в amoCRM и Битрикс24 — с повторами, когда CRM недоступна.

    • Python
    • React
    • TypeScript