AI Beauty Recommendations Personalization System

We design and deploy artificial intelligence systems: from prototype to production-ready solutions. Our team combines expertise in machine learning, data engineering and MLOps to make AI work not in the lab, but in real business.
Showing 1 of 1 servicesAll 1566 services
AI Beauty Recommendations Personalization System
Simple
~2-4 weeks
FAQ
AI Development Areas
AI Solution Development Stages
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1212
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    852
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1041
  • image_logo-advance_0.png
    B2B Advance company logo design
    561
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    822

AI-персонализация в beauty-ритейле

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

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(remaining_budget, 2),
            'steps_count': len(routine),
        }

AI-персонализация в beauty увеличивает средний чек на 22-38% за счёт кросс-продаж совместимых продуктов и снижает возвраты на 30% благодаря точному подбору оттенков. Ключевые технологии: LAB-цветовое пространство для shade matching, NLP для анализа отзывов по типу кожи, ingredient graph для совместимости.