Задачи Кейсы Услуги Воркшопы Контакты Записаться на звонок →
Кейс 03 — что мы сделали

Рыночная таксономия, которая растёт из данных, а не из фиксированного списка

Любая классификация начинается как аккуратный список категорий, написанный умным человеком в первый день. К шестому месяцу самая большая категория — «прочее», а «прочее» — это место, где смысл умирает.

Рыночная аналитикаДанные и классификацияFastAPI · Postgres · LLMСделано

Задача

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

Это дало стандартный провал сразу в две стороны. Часть позиций запихивалась в почти подходящие категории, тихо портя всё, что на них считалось. Остальное падало в «прочее», которое росло, пока не стало самой большой и потому самой бесполезной корзиной.

Вести список руками тоже не получалось. Добавить категорию просто; понять, действительно ли она новая — или это то же понятие, которое кто-то уже добавил другим словом, — вот настоящая задача, и она требует контекста, который ни у кого не помещается в голове.

Таксономия — это не решение по схеме, принятое один раз. Это живая структура, и всё, что считает её фиксированной, ошибётся предсказуемым образом.

Что мы построили

Аналитический сервис, где таксономия выводится, а не объявляется. Каждое решение о классификации принимается с текущим деревом категорий в контексте, поэтому новая позиция либо встаёт в существующую ветку, либо обязана обосновать новую — и обоснование видно.

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

Как это работает

01Живое дерево как контекст классификации

Существующая таксономия передаётся с каждым решением. Модель не изобретает категории в вакууме — она кладёт позицию в структуру, которую видит. Именно это отличает таксономию от кучи ярлыков.

02Каноническое слияние

Категории, означающие одно и то же разными словами, сводятся к одному каноническому тегу. Осознанная консолидация сохраняет дерево проходимым по мере роста данных.

03Скучный, запрашиваемый фундамент

FastAPI поверх Postgres. Интересное — в логике классификации; слои хранения и отдачи намеренно обычные, чтобы любой мог запросить данные напрямую, минуя сервис.

04Дисциплина пересборки

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

Что изменилось

Динамика
Категории выводятся из данных, а не из списка, написанного до появления данных
Живое дерево
Подаётся контекстом при каждой классификации — записи встают в структуру, а не мимо неё
Канон
Однословное слияние сохраняет читаемость таксономии при росте

Поведение классификации здесь — свойство конструкции, а не цифра в бенчмарке.

«Прочее» перестало быть свалкой, а значит, агрегатам, посчитанным поверх категорий, снова можно верить.

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

Поддержка перестала быть регулярной обязанностью без владельца.

Где это применимо

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

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

Есть задача, которую стоит решить?

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

Начать разговор →