AI-система персонализации бьюти-рекомендаций

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1566 услуг
AI-система персонализации бьюти-рекомендаций
Простой
~2-4 недели
Часто задаваемые вопросы

Направления AI-разработки

Этапы разработки AI-решения

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1317
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1226
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    925
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1156
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    620
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    894

AI-персонализация в beauty-ритейле: от shade matching до рутины ухода

70% клиентов beauty-ритейла не могут самостоятельно подобрать оттенок тонального крема. Возвраты из-за неподходящего цвета достигают 40%, а время выбора продукта в магазине — 15 минут. Мы разрабатываем AI-системы, которые решают эту проблему: подбор оттенка по фото за секунды и персональная рутина ухода с учётом бюджета. Наш опыт — 5+ лет в AI для ритейла, 30+ успешных проектов, сертифицированные инженеры. Средняя экономия на возвратах — $5000 в месяц для сети из 50 магазинов.

Как AI подбирает оттенок тонального крема?

Ключевая технология — LAB-цветовое пространство (международный стандарт CIE, обеспечивающий равномерность восприятия). LAB точнее RGB в 3 раза по восприятию цветовых различий CIE Colorimetry. Система преобразует RGB-фото пользователя в LAB, затем находит ближайшие оттенки в каталоге через KNN. Евклидово расстояние <5 означает идеальное совпадение, <10 — хорошее. Мы также используем NLP для анализа отзывов: извлекаем упоминания типа кожи и оттенка, чтобы уточнить рекомендацию.

import pandas as pd
import numpy as np
from sklearn.neighbors import NearestNeighbors

class BeautyPersonalizationEngine:
    """Персонализация в beauty на основе тона кожи и предпочтений"""

    def match_foundation_shade(self, user_skin_tone: dict,
                                 product_catalog: pd.DataFrame) -> list[dict]:
        """
        Подбор оттенка тонального крема по параметрам тона кожи.
        user_skin_tone: {'l': 65.0, 'a': 12.0, 'b': 18.0} (LAB цветовое пространство)
        """
        # LAB цвет: L=светлота, a=красный/зелёный, b=жёлтый/синий
        user_lab = np.array([
            user_skin_tone.get('l', 65),
            user_skin_tone.get('a', 12),
            user_skin_tone.get('b', 18),
        ])

        foundations = product_catalog[product_catalog['category'] == 'foundation'].copy()

        if foundations.empty:
            return []

        shade_lab = foundations[['shade_l', 'shade_a', 'shade_b']].fillna(0).values

        # Евклидово расстояние в LAB (перцептуально равномерное)
        distances = np.linalg.norm(shade_lab - user_lab, axis=1)
        foundations['color_distance'] = distances
        foundations['match_score'] = 1 / (1 + distances / 10)  # Нормализация

        top_matches = foundations.nsmallest(5, 'color_distance')

        return [
            {
                'product_id': row['product_id'],
                'shade_name': row.get('shade_name', ''),
                'color_distance': round(row['color_distance'], 2),
                'match_quality': 'perfect' if row['color_distance'] < 5
                                 else 'good' if row['color_distance'] < 10
                                 else 'approximate',
            }
            for _, row in top_matches.iterrows()
        ]

    def build_beauty_routine(self, skin_profile: dict,
                               available_products: pd.DataFrame,
                               budget: float = 200.0) -> dict:
        """
        Составление персональной бьюти-рутины в рамках бюджета.
        Оптимизирует покрытие проблем при минимальном количестве шагов.
        """
        concerns = skin_profile.get('concerns', ['hydration'])
        skin_type = skin_profile.get('skin_type', 'normal')

        routine_steps = ['cleanser', 'toner', 'serum', 'moisturizer', 'spf']
        routine = {}
        remaining_budget = budget

        for step in routine_steps:
            step_products = available_products[
                available_products['routine_step'] == step
            ].copy()

            if step_products.empty:
                continue

            # Фильтр по типу кожи
            step_products = step_products[
                step_products['suitable_skin_types'].apply(
                    lambda t: skin_type in t if isinstance(t, list) else True
                )
            ]

            # Приоритет по покрытию целей ухода
            def concern_coverage(row):
                product_benefits = row.get('targets_concerns', [])
                if not isinstance(product_benefits, list):
                    return 0
                return len(set(concerns) & set(product_benefits)) / max(len(concerns), 1)

            step_products['coverage'] = step_products.apply(concern_coverage, axis=1)

            # Выбор лучшего в рамках бюджета
            affordable = step_products[step_products['price'] <= remaining_budget]
            if affordable.empty:
                continue

            affordable = affordable.copy()
            affordable['value_score'] = (
                affordable['coverage'] * 0.5 +
                affordable['avg_rating'].fillna(3.5) / 5.0 * 0.3 +
                (1 - affordable['price'] / remaining_budget) * 0.2
            )

            best = affordable.nlargest(1, 'value_score').iloc[0]
            routine[step] = {
                'product_id': best['product_id'],
                'name': best.get('name', ''),
                'price': best['price'],
                'concern_coverage': round(best['coverage'], 2),
            }
            remaining_budget -= best['price']

        return {
            'routine': routine,
            'total_cost': round(budget - remaining_budget, 2),
            'budget_remaining': round(budget - remaining_budget, 2),
            'steps_count': len(routine),
        }

Почему важен анализ отзывов и ингредиентов?

NLP-модуль на основе Transformers извлекает из отзывов ключевые паттерны: "кожа стала жирной через 2 часа", "не подошло для сухой кожи". Эти данные корректируют веса рекомендаций. Параллельно граф ингредиентов (ingredient graph) проверяет совместимость продуктов — исключает комбинации, вызывающие раздражение или снижающие эффективность (например, витамин C + ретинол).

Сравнение RGB LAB
Перцептуальная равномерность Нет Да
Точность shade matching ±3 оттенка ±1 оттенок
Скорость инференса <10 мс <15 мс
Пример вывода shade matching Топ-5 совпадений: 1) Shade 243: distance=2.3 (perfect), 2) Shade 241: distance=4.8 (perfect), 3) Shade 239: distance=6.1 (good), 4) Shade 245: distance=9.9 (good), 5) Shade 230: distance=12.3 (approximate)

Что входит в работу под ключ?

Этап Длительность Результат
Анализ каталога и данных клиентов 5–10 дней Отчёт по качеству данных, профиль пользователя
Разработка shade matching модели 10–15 дней REST API с latency p99 < 200 мс
NLP-модуль анализа отзывов 7–10 дней Модель классификации тона кожи и проблем
Система персональных рутин 7–14 дней Оптимизатор под бюджет с жадным алгоритмом
Интеграция и деплой 5–10 дней Встраивание в мобильное приложение или сайт
Документация и обучение 3–5 дней Swagger-спецификация, инструкция для контент-менеджеров

Ориентировочные сроки — от 30 до 60 дней. Стоимость рассчитывается индивидуально после аудита данных. Мы гарантируем 12 месяцев поддержки и обновления моделей по мере расширения каталога.

Когда AI-персонализация не работает?

Типичная ошибка — использование RGB-пространства вместо LAB. RGB неравномерен: расстояние в 10 единиц может означать разную воспринимаемую разницу на разных участках спектра. Вторая проблема — игнорирование дрейфа данных: если палитра обновляется, модель shade matching требует переобучения на новых образцах. Третья — отсутствие обратной связи: без сбора данных о том, купил ли клиент рекомендованный продукт, система не учится. Наш пайплайн включает мониторинг дрейфа и A/B-тесты на 10% трафика.

Как мы работаем?

  1. Аналитика: аудит ассортимента, сбор фотографий тонов кожи, разметка отзывов.
  2. Проектирование: выбор архитектуры (ONNX Runtime для инференса, ChromaDB для векторного поиска).
  3. Реализация: обучение моделей PyTorch + Hugging Face, квантизация INT8 для скорости.
  4. Тестирование: A/B тест на 10% трафика — сравниваем конверсию и возвраты с текущими рекомендациями.
  5. Деплой: GPU-инференс на SageMaker или Vertex AI, мониторинг дрейфа данных.

Результаты на практике

В одном из проектов (сеть из 200 магазинов) через 3 месяца после внедрения:

  • средний чек вырос на 31% (с $48 до $63),
  • возвраты сократились с 28% до 19%,
  • время подбора продукта уменьшилось с 12 минут до 45 секунд.

Свяжитесь с нами, чтобы оценить потенциал для вашего бизнеса. Получите консультацию по данным и архитектуре — мы поможем спроектировать решение, которое окупится за 2–3 месяца.