Как AI помогает подбирать автозапчасти: кейс с 95% точностью

Как AI помогает подбирать автозапчасти: кейс с 95% точностью


Проблема: хаос в номенклатуре автозапчастей

Представьте: у вас интернет-магазин автозапчастей с каталогом в 500 000 позиций. Клиент ищет «тормозные колодки для Toyota Camry 2015», а в вашей базе они записаны как «Колодки торм. перед. TOYOTA CAMRY V50 2.5 2011-». Классический поиск ничего не найдет, клиент уйдет к конкурентам.

Типичные проблемы автомобильной e-commerce:

  • Разные форматы артикулов: один и тот же товар может иметь артикулы производителя, дистрибьютора, внутренние коды
  • Синонимы и сокращения: «фара» vs «фонарь передний», «перед.» vs «передний»
  • Неполные описания: клиент знает марку и год, но не VIN и комплектацию
  • Кросс-номера: один оригинальный артикул → десятки аналогов
  • Человеческий фактор: опечатки, разные раскладки клавиатуры

Решение: AI-система подбора

Мы разработали систему, которая понимает запросы на естественном языке и находит нужные запчасти даже при неточных формулировках.

Архитектура решения

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

1. Извлечение признаков (Feature Engineering)

Для каждой запчасти создаем структурированное представление из множества источников:

features = {
    'brand': 'Toyota',
    'model': 'Camry',
    'generation': 'V50',
    'year_from': 2011,
    'year_to': 2017,
    'part_type': 'brake_pads',
    'position': 'front',
    'oem_numbers': ['04465-33250', '04465-06090'],
    'cross_numbers': ['TRW GDB3380', 'Bosch 0986494035'],
    'dimensions': {'width': 145, 'height': 60, 'thickness': 10},
    'material': 'ceramic',
    'compatibility_score': 0.95
}

Проблема: Данные приходят из разных источников (поставщики, каталоги, 1С) в разных форматах. Нужна нормализация:

  • Унификация названий марок (TOYOTA = Toyota = Тойота)
  • Парсинг годов выпуска из текста (“2011-2017”, “с 2011”, “до 2017”)
  • Извлечение типа запчасти из описания
  • Определение позиции (перед/зад/лево/право)

Решение: Используем комбинацию правил и ML-моделей для парсинга. Обучили классификатор на 50,000 размеченных примеров.

2. Векторизация с BERT

Используем предобученную модель rubert-tiny для создания семантических embedding’ов:

  • Название товара → вектор 312 измерений
  • Описание → вектор 312 измерений
  • Объединенные характеристики → единый вектор

Ключевой момент: Объединяем несколько текстовых полей в один для векторизации:

search_text = f"{name} {description} {brand} {model} {part_type}"
embedding = model.encode(search_text)

Это позволяет находить товары даже если запрос не совпадает точно с названием. Например, запрос “тормозные колодки” найдет товар с названием “Колодки торм. перед.”

3. Индексация в Qdrant

Все векторы загружаем в векторную базу данных Qdrant:

  • Быстрый поиск похожих товаров (< 50 мс)
  • Фильтрация по структурированным полям (марка, модель, год)
  • Масштабирование до миллионов записей

Настройка индекса:

from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams

client.create_collection(
    collection_name="auto_parts",
    vectors_config=VectorParams(
        size=312,
        distance=Distance.COSINE
    )
)

Оптимизация: Используем HNSW индекс для быстрого поиска. На 500,000 товаров поиск занимает 30-50 мс.

4. Гибридный поиск

Комбинируем несколько подходов для максимальной точности:

  • Точное совпадение (артикулы, VIN) — вес 40%
  • Векторный поиск (семантика) — вес 35%
  • Fuzzy match (опечатки, транслит) — вес 15%
  • Бизнес-правила (совместимость по году/модели) — вес 10%

Алгоритм ранжирования:

def calculate_score(result, query):
    exact_match_score = check_exact_match(result, query) * 0.4
    vector_score = cosine_similarity(result.vector, query.vector) * 0.35
    fuzzy_score = fuzzy_ratio(result.name, query.text) * 0.15
    compatibility_score = check_compatibility(result, query) * 0.10
    
    return exact_match_score + vector_score + fuzzy_score + compatibility_score

5. Кэширование и оптимизация

  • Redis для кэширования популярных запросов (TTL 1 час)
  • Асинхронная обработка для параллельных запросов
  • Batch-обработка для массовых операций

Результаты внедрения

Метрики качества

МетрикаДо внедренияПослеУлучшение
Точность подбора (Precision@5)62%95%+53%
Время обработки запроса5-7 сек0.5 сек-90%
“Нулевые” результаты28%3%-89%
Конверсия поиска12%31%+158%
Средняя позиция правильного ответа4.21.8-57%
Ошибки в заказах8%2%-75%

Детальный анализ метрик:

Precision@5 (95%): В топ-5 результатов в 95% случаев есть правильный товар. Это критично для e-commerce, где пользователь редко смотрит дальше первой страницы.

Время обработки (0.5 сек): Включает векторизацию запроса, поиск в Qdrant, ранжирование и фильтрацию. Для сравнения, классический поиск по базе занимал 5-7 секунд из-за сложных JOIN’ов.

“Нулевые” результаты (3%): Снижение с 28% до 3% означает, что 25% пользователей, которые раньше уходили без результата, теперь находят нужный товар.

Бизнес-эффекты

Финансовые показатели:

  • +18% к выручке за счет роста конверсии поиска
  • +25% среднего чека благодаря блоку “Похожие товары” и рекомендациям
  • -60% нагрузки на колл-центр (меньше звонков по подбору запчастей)
  • 3.5 месяца — срок окупаемости проекта (инвестиции 1.2 млн ₽, экономия 350,000 ₽/мес)

Операционные показатели:

  • Время подбора запчасти: 10 минут → 20 секунд (для менеджеров)
  • Обучение новых сотрудников: 3 месяца → 2 недели
  • Ошибки в заказах: -75% (меньше возвратов и пересборок)
  • Удовлетворенность клиентов: 6.2/10 → 8.7/10 (опрос)

Масштабируемость:

  • Система обрабатывает 50,000+ запросов в день без деградации
  • Легко масштабируется на новые категории товаров
  • Добавление 100,000 новых позиций занимает 2 часа индексации

Технический стек

  • Backend: Python 3.11, FastAPI
  • ML: transformers (rubert-tiny), scikit-learn
  • Vector DB: Qdrant
  • Cache: Redis
  • Monitoring: Prometheus + Grafana

Кейс: B2B поставщик запчастей

Исходная ситуация: Оптовый поставщик с 12 филиалами использовал разные каталоги. Менеджеры тратили до 10 минут на поиск одной позиции.

Что сделали:

  1. Объединили 12 каталогов в единую базу (1.2 млн позиций)
  2. Обучили модель на истории заказов (2 года данных)
  3. Добавили автоматическое определение кросс-номеров
  4. Интегрировали с CRM для персональных рекомендаций

Результат:

  • Поиск запчасти: 10 минут → 20 секунд
  • Ошибки в заказах: -75%
  • Новые менеджеры выходят на эффективность за 2 недели вместо 3 месяцев

Уроки и рекомендации

Что сработало хорошо

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

  2. Нормализация данных: 80% успеха зависит от качества данных. Потратили 2 недели на очистку и нормализацию каталога — это окупилось.

  3. A/B тестирование: Тестировали разные веса для компонентов гибридного поиска на реальных запросах. Финальные веса (40/35/15/10) дали оптимальный баланс точности и скорости.

  4. Кэширование: Популярные запросы (топ-1000) кэшируются в Redis. Это снизило нагрузку на Qdrant на 40% и ускорило ответы до 10-20 мс.

Что можно улучшить

  1. Дообучение модели: Предобученная rubert-tiny работает хорошо, но дообучение на специфичных данных автозапчастей могло бы улучшить точность еще на 3-5%.

  2. Обратная связь: Планируем добавить кнопки “Это то, что нужно” / “Не подходит” для сбора данных и улучшения модели.

  3. Мультиязычность: Сейчас система работает только на русском. Для международных клиентов нужна поддержка английского и других языков.

Рекомендации для внедрения

Если у вас похожая задача:

  1. Начните с данных: Убедитесь, что каталог нормализован и структурирован. Это критично.

  2. Выберите правильную модель: Для русского языка rubert-tiny — хороший баланс скорости и качества. Для английского можно использовать sentence-transformers/all-MiniLM-L6-v2.

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

  4. Мониторьте метрики: Отслеживайте Precision@K, время ответа, конверсию. Это поможет понять, что работает, а что нет.

  5. Итеративный подход: Запустите MVP за 2-3 недели, затем улучшайте на основе реальных данных.

Что дальше?

Планируем добавить:

  • Поиск по фотографии детали (computer vision) — клиент фотографирует деталь, система находит аналоги
  • Голосовой поиск для механиков — “найди колодки на Камри 2015”
  • Предиктивные рекомендации на основе истории обслуживания авто — “вам скоро понадобятся эти запчасти”
  • Интеграция с VIN-декодером для автоматического определения совместимости

Хотите внедрить AI-подбор для вашего каталога?

Мы разрабатываем системы семантического поиска и рекомендаций для e-commerce и B2B. Настроим под ваш ассортимент и интегрируем с сайтом за 3-6 недель.

📞 +7 (924) 547-36-78 📧 info@bi-ai.ru 💬 Telegram: @bi_ai_team