Категоризация товара: CATEGORY_CLSSFY и попадание в нужную ветку каталога

Рейтинг: 0% · 0 голосов
Разбор устройства поиска и факторов ранжирования: реконструкция формулы, поведенческие, текстовые, ссылочные и хостовые факторы, антиспам, что живо и что давно мёртво. Аналитика на основе метаданных факторов web_production.
Ответить
Аватара пользователя
anna_seo
Сообщения: 70
Зарегистрирован: 11 май 2026, 05:31

Категоризация товара: CATEGORY_CLSSFY и попадание в нужную ветку каталога

Сообщение anna_seo »

Зачем вообще разбирать категоризацию отдельно

Когда говорят про ранжирование в Маркете, обычно сразу лезут в цену, рейтинг магазина, поведенческие. А ведь до всего этого товар должен просто оказаться в правильной ветке каталога. Если кофемашина уехала в "товары для дома / прочее", её не спасёт ни цена, ни отзывы - она физически не попадёт в нужную выдачу и фильтры. Поэтому я отдельно разобрал группу сигналов категоризации по исходникам товарной вертикали (дерево ya/extsearch/goods).

Сразу оговорюсь по матчасти. Само присвоение категории - это upstream: магазин отдаёт фид, в оффере есть categoryId и название, дальше идёт приём фида и матчинг в карточку модели (это происходит до того дерева кода, что я смотрю - в market/, не в goods/). А вот в реестре факторов goods/base/factors/factors_meta_gen.in лежит большая группа CATEGORY_CLSSFY_* - это уже признаки того, насколько уверенно товар сел в категорию и насколько его тексты этой категории соответствуют. Их report и подаёт в формулу.
Дисклеймер. Это разбор по исходному коду вертикали goods, а не официальная формула Маркета. Ранжирует CatBoost/MatrixNet - дерево решений, у факторов нет фиксированных весов в процентах. Где пишу "сильный/слабый" - это качественная реконструкция по смыслу фактора, а не замер.
Что нашлось в коде

Костяк группы - семейство CATEGORY_CLSSFY_*. Это выходы текстового классификатора категорий: он смотрит на тексты товара (заголовок, описание, полный текст оффера, название категории) и оценивает, насколько они тянут на присвоенную категорию. Все они идут с тегами [TG_BASE, TG_DOCUMENT_CATEGORY, TG_TEXT_PLACE] - то есть это базовые признаки уровня документа, работающие в текстовой выдаче.

Код: Выделить всё

ФАКТОР                              СМЫСЛ (расшифровка)
-----------------------------------------------------------------------------
CATEGORY_CLSSFY_AM_PROB             вероятность категории по модели (argmax-ветка)
CATEGORY_CLSSFY_AM_NORM_PROB        та же вероятность, нормированная
CATEGORY_CLSSFY_AM_FOCUS            "сфокусированность" - насколько уверенно
CATEGORY_CLSSFY_AM_NORM_FOCUS       один класс выделяется над остальными
CATEGORY_CLSSFY_AM_COUNT            сколько категорий-кандидатов всплыло
CATEGORY_CLSSFY_BAD_CATEGORY_PR_M   оценка "плохой категории" (по имени категории)
CATEGORY_CLSSFY_BAD_TITLE_PR_M      оценка "плохого" по заголовку
CATEGORY_CLSSFY_BAD_FULL_PR_M       оценка "плохого" по полному тексту
-----------------------------------------------------------------------------
все: Tags [TG_BASE, TG_DOCUMENT_CATEGORY, TG_TEXT_PLACE]
Связка PROB/FOCUS читается так. PROB - это насколько модель уверена, что товар принадлежит категории. FOCUS - насколько эта уверенность одна и доминирует (а не размазана: 0.3 на одну категорию, 0.28 на соседнюю). AM в имени - argmax, то есть берётся топ-кандидат. COUNT намекает, сколько вообще категорий конкурировало за товар. А BAD_*_PR - это зеркальная история: модель отдельно оценивает признаки "что-то не так" по разным полям - по имени категории, по заголовку, по полному тексту (суффиксы _M и _S - это, по структуре, две разные нормировки/срезы одной величины).

Дальше идёт большой пласт текстовой близости товара к категории. Тут имена строятся комбинаторно по полям и метрикам:

Код: Выделить всё

ПОЛЕ        ПРИМЕРЫ ФАКТОРОВ                       ЧТО МЕРЯЕТ
-----------------------------------------------------------------------------
TITLE       CATEGORY_CLSSFY_B_TITLE_TF_IDF_M       совпадение заголовка
            CATEGORY_CLSSFY_BM_TITLE_CBPM          с языком категории
DESCR       CATEGORY_CLSSFY_B_DESCR_CBPMN          то же по описанию
            CATEGORY_CLSSFY_B_DESCR_TBPMN
FULL        CATEGORY_CLSSFY_B_FULL_TF_IDF_MN       по полному тексту оффера
            CATEGORY_CLSSFY_B_FULL_OBPMN
CATEGORY    CATEGORY_CLSSFY_B_CATEGORY_L1CBPM      по тексту самой категории,
            CATEGORY_CLSSFY_B_CATEGORY_L2CBPM      с разбивкой по уровням L1/L2
MARKET      CATEGORY_CLSSFY_B_MARKET_CBPMN         маркетное представление
SUFFIX      CATEGORY_CLSSFY_B_SUFFIX_CBPMN         хвост названия (модель/вариант)
-----------------------------------------------------------------------------
TF_IDF / CBP / OBP / TBP - разные метрики близости текста к категории
L1 / L2 - уровни дерева каталога (верхний и более глубокий)
Расшифровка приставок (это реконструкция по структуре имён, не из комментариев в коде, их там нет): B - базовый срез текста, BM - срез с учётом маркетной разметки. TF_IDF - классическая частотно-весовая близость. CBP/OBP/TBP - разные варианты вероятностей соответствия по корпусу/офферу/заголовку. Финальные буквы M/S/N - max/sum/norm, то есть как агрегируется и нормируется значение. L1/L2 при CATEGORY - это два уровня дерева: насколько товар бьётся с верхней веткой и с более узким листом.

Отдельно стоит блок YA_MARKET_CATEGORY_NAME_* - это уже текстовая релевантность названия категории запросу пользователя (как товар-документ матчится на запрос через имя своей категории):

Код: Выделить всё

YA_MARKET_CATEGORY_NAME_FULL_MATCH_VALUE          точное совпадение имени категории
YA_MARKET_CATEGORY_NAME_ALL_WCM_WEIGHTED_VALUE    взвешенное покрытие слов
YA_MARKET_CATEGORY_NAME_BM15_MAX_ANNOTATION_K001  BM15-близость к запросу
-----------------------------------------------------------------------------
Tags: [TG_BASE, TG_TEXT_PLACE, TG_DOCUMENT_TEXT_MACHINE, TG_DELETE_CANDIDATE]
Важно: вся группа YA_MARKET_CATEGORY_NAME_* помечена тегом TG_DELETE_CANDIDATE. Это значит, что факторы стоят в очереди на выпил, их собираются убрать. Подавать их как надёжно рабочий рычаг нельзя - на них опираться рискованно, в любом поколении индекса они могут отвалиться. В реестре есть и активная альтернатива (QFUF_*_YA_MARKET_CATEGORY_NAME_* - те же сигналы, упакованные в общую QFUF-инфраструктуру текстовых факторов).
И ещё два, которые часто путают с классификатором, но это другое - это уже про выдачу, а не про присвоение категории товару:

Код: Выделить всё

RANK_CATEGORY_BY_RELEVANCE_IN_TOP   Tags [TG_CATEGORY]
  -> "ранк категории в выдаче: сколько более релевантных категорий
      встретилось в топе документов с базового" (есть в Description)
TRIGRAM_RATIO_CATEGORY              Tags [TG_CATEGORY]
  -> триграммная близость на уровне категории
Плюс коммерческо-поведенческий слой, который тоже завязан на категорию, но мерит уже не текст, а спрос: BLUE_MODEL_ORDERS_IN_CATEGORY_ORDERS (доля заказов модели от всех заказов категории, Description прямо это говорит), BLUE_CATEGORY_ORDERS_DIV_MODEL_CLICKS, VENDOR_FREQ_IN_CATEGORY (частота заказа вендора в категории). Это уже [TG_MODEL]/[TG_BASE] - про популярность внутри ветки.

Где сигнал сильный, где слабый
  • Сильный и живой - ядро CATEGORY_CLSSFY_AM_PROB / AM_FOCUS и текстовые близости по TITLE и FULL. Это активные TG_BASE-факторы без меток смерти, и они напрямую отвечают на вопрос "товар реально из этой категории или его туда затолкали". Заголовок тут весит заметно: TITLE-срезов в группе больше всего.
  • Средний - DESCR и MARKET-срезы. Описание помогает классификатору, когда заголовок куцый, но это вспомогательный текст.
  • Под вопросом - вся ветка YA_MARKET_CATEGORY_NAME_* (TG_DELETE_CANDIDATE). Качественно сигнал понятен, но как рычаг ненадёжен.
  • Не путать с классификацией - RANK_CATEGORY_BY_RELEVANCE_IN_TOP и BLUE_*_CATEGORY_ORDERS_*: первый про сортировку категорий в выдаче, вторые про спрос. Они не определяют, в какую ветку сел товар.
Что из этого реально контролирует магазин

Хорошая новость: группа CATEGORY_CLSSFY работает по вашим же текстам. То есть это управляемо, без всякой магии.
  • categoryId в фиде - выбирайте лист каталога максимально точно. Это обязательный атрибут оффера, и именно от него пляшет матчинг. Чем глубже и точнее лист, тем выше будут PROB/FOCUS.
  • Заголовок (name) - кладите в него ключевой тип товара словами категории. Классификатор сильнее всего опирается на TITLE. "Эспрессо-кофемашина рожковая X" классифицируется чище, чем просто "X 1500W".
  • Не мусорьте в названии посторонними категориями ("чехол + стекло + кабель" в одном name) - это размывает FOCUS и поднимает BAD_TITLE_PR.
  • Описание (description) - дополняйте профильной лексикой категории, особенно когда заголовок короткий. Это докручивает DESCR-срезы.
  • Передавайте больше параметров/характеристик. По практике 2025-2026 именно полнота карточки помогает офферу сесть на правильную модель и пройти фильтры категории.
  • Следите за переразбивкой каталога. Маркет регулярно дробит категории (анонсировано разделение ряда категорий с 1 апреля 2026, та же история со "Средствами для стирки" -> порошки/капсулы). После такой переразбивки стоит перепроверить, что ваш categoryId не уехал в общий "прочее".
  • При ошибке модерации категорию правят руками в карточке товара и шлют на повторную проверку - это нормальный рабочий процесс, не ждите, что само устаканится.
Границы вывода
Что доказано кодом: группа факторов CATEGORY_CLSSFY_* существует, активна (TG_BASE, TG_DOCUMENT_CATEGORY, TG_TEXT_PLACE) и оценивает соответствие текстов товара присвоенной категории по полям TITLE/DESCR/FULL/CATEGORY/MARKET/SUFFIX. Факторы YA_MARKET_CATEGORY_NAME_* помечены TG_DELETE_CANDIDATE - на выпил. RANK_CATEGORY_BY_RELEVANCE_IN_TOP и TRIGRAM_RATIO_CATEGORY несут тег TG_CATEGORY и описанием подтверждены как сигналы уровня выдачи категорий, а не присвоения. BLUE_MODEL_ORDERS_IN_CATEGORY_ORDERS - это доля заказов модели в категории (подтверждено Description).
Что реконструкция: расшифровка приставок (AM=argmax, B/BM, CBP/OBP/TBP, M/S/N, L1/L2) выведена из структуры имён - текстовых комментариев в реестре у этих факторов нет. Само присвоение categoryId и матчинг офферов в модели происходят upstream (market/), а не в дереве goods, которое я смотрел, - так что точную логику классификатора я не вижу, только его факторы-выходы. Силу сигналов оцениваю качественно: формула - это CatBoost, статических процентных весов у факторов нет, и любой "вес" был бы выдумкой.
Итог простой. Категоризация - это не отдельная тёмная магия, а текстовая задача, которую вы кормите своими же name/description/categoryId. Точный лист каталога плюс честный заголовок со словами категории - и блок CATEGORY_CLSSFY работает на вас, а не против.
👍 ❤️ 🔥 😄 🤔
Ответить
Поделиться темой: ✈ Telegram VK

Вернуться в «SEO и факторы ранжирования»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость