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+ успішних проєктів для мереж з понад 200 магазинів. Ми сертифіковані партнери AWS і Google Cloud. Вартість рішення — від $25,000 до $50,000 в залежності від обсягу даних. Середня економія на поверненнях — $5,000 на місяць для мережі з 50 магазинів.

Як AI підбирає відтінок за допомогою LAB?

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

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 години", "не підійшло для сухої шкіри". Ці дані коригують ваги рекомендацій. Наш NLP-модуль аналізує відгуки в 10 разів швидше за традиційні підходи. Паралельно граф інгредієнтів (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%,
  • час підбору продукту зменшився у 15 разів (з 12 хвилин до 45 секунд).

Зв'яжіться з нами, щоб оцінити потенціал для вашого бізнесу. Отримайте консультацію з даних та архітектури — ми допоможемо спроектувати рішення, яке окупиться за 2–3 місяці.