AI в e-commerce: рекомендации, чат-боты и динамическое ценообразование

Рекомендательные системы, AI-поддержка, прогнозирование спроса — AI в онлайн-торговле

Онлайн-торговля стала первой индустрией, где AI перестал быть экспериментом и стал основой бизнес-модели. Когда вы открываете приложение Ozon и видите «персональную подборку» — за этим стоит рекомендательная система, анализирующая миллионы взаимодействий. Когда цена на товар меняется три раза за день — это алгоритм динамического ценообразования. Когда чат-бот помогает подобрать размер кроссовок — это LLM, обученная на каталоге и отзывах. По данным Shopify, 84% e-commerce-компаний считают AI высшим приоритетом, а рынок AI в e-commerce вырастет с $8,65 млрд в 2025 до $22,6 млрд к 2032 году. Amazon генерирует до 35% выручки через персонализированные рекомендации. Это не будущее — это настоящее.

Представьте идеального продавца в магазине: он помнит, что вы покупали год назад, знает, что вам нравятся определённые бренды, видит, что вы задержались у витрины с кроссовками, и предлагает именно те модели, которые вам подойдут по размеру и бюджету. Теперь представьте, что этот продавец обслуживает миллионы покупателей одновременно, не устаёт и учится на каждом взаимодействии. Именно так работает AI в e-commerce — от рекомендаций и чат-ботов до прогнозирования спроса и автоматического ценообразования.

Суть за 2 минуты

AI в e-commerce — это комплекс технологий, которые превращают онлайн-магазин из статичного каталога в адаптивную систему, подстраивающуюся под каждого покупателя в реальном времени.

Ключевые направления:

НаправлениеЧто делает AIБизнес-эффект
РекомендацииПерсональные подборки на основе поведения и предпочтений+10-30% к среднему чеку
Чат-ботыКонсультация, подбор товара, обработка возвратов 24/7Конверсия в 4 раза выше у покупателей, взаимодействующих с ботом
Динамическое ценообразованиеАвтоматическая корректировка цен по спросу и конкурентам+2-5% к выручке, +5-10% к марже
Прогнозирование спросаПредсказание объёмов продаж для управления запасамиСнижение ошибок прогноза на 20-50%
Виртуальные примерочныеВизуализация товара на покупателе через AR/AIСнижение возвратов на 25-40%
Визуальный поискПоиск товара по фото вместо текстаРост вовлечённости на 30%+

Ключевые цифры:

  • 84% e-commerce-компаний считают AI высшим приоритетом
  • 35% выручки Amazon приходится на персонализированные рекомендации
  • 80% клиентских взаимодействий будет обрабатывать AI к 2030 году
  • $22,6 млрд — прогнозируемый объём рынка AI в e-commerce к 2032 году
ПромптE-commerce менеджер → ChatGPT: анализ рекомендаций
Я управляю интернет-магазином одежды (средний чек $45, 50 000 SKU, 200 000 уникальных посетителей/мес). Конверсия 2.1%, что ниже среднего по рынку. Какие AI-инструменты для персонализации помогут увеличить конверсию и средний чек? Предложи 3 конкретных решения с ожидаемым ROI.
Ответ модели
  1. Персонализированные рекомендации на страницах товаров и в корзине Инструменты: Dynamic Yield, Algolia Recommend, или Nosto Логика: collaborative filtering ("похожие покупатели также выбрали") + content-based (по атрибутам: цвет, стиль, сезон) Ожидаемый эффект: +8-15% к среднему чеку, +3-5% к конверсии ROI: окупаемость за 2-3 месяца при стоимости от $500/мес

  2. AI-чатбот для подбора размера и стиля Инструменты: Tidio, Gorgias + LLM-интеграция, или кастомный на базе OpenAI API Логика: бот спрашивает рост, вес, предпочтения → рекомендует размер и похожие товары Ожидаемый эффект: покупатели, взаимодействующие с ботом, конвертируются в 3-4x чаще ROI: снижение нагрузки на поддержку на 30-40%, рост конверсии

  3. Персонализированные email-рассылки с AI-сегментацией Инструменты: Klaviyo, Mailchimp с AI-фичами Логика: предиктивная модель определяет оптимальное время, частоту и содержание Ожидаемый эффект: +15-25% к open rate, +10-20% к revenue per email ROI: при базе 50 000 подписчиков — дополнительные $5-15K/мес

Рекомендательные системы: сердце e-commerce

Рекомендательная система (recommendation engine) — это AI-модель, которая предсказывает, какие товары заинтересуют конкретного пользователя. Это самое прибыльное применение AI в онлайн-торговле: по данным McKinsey, до 35% выручки крупных маркетплейсов генерируется через персонализированные рекомендации.

Три подхода к рекомендациям

Collaborative filtering (коллаборативная фильтрация) — «люди, похожие на вас, покупали это». Система находит пользователей с похожим поведением (просмотры, покупки, оценки) и рекомендует то, что купили они. Не нужно ничего знать о самом товаре — только паттерны покупок.

Content-based filtering (фильтрация по контенту) — «раз вам нравится X, вам понравится похожий Y». Система анализирует атрибуты товаров (категория, цвет, бренд, ценовой диапазон) и находит похожие. Работает, даже когда мало данных о поведении пользователя.

Hybrid (гибридный подход) — комбинация обоих методов. Именно так работают Amazon, Ozon и Wildberries. При первом визите — контентные рекомендации по атрибутам, по мере накопления данных — всё больше коллаборативных.

Без техники
Статичные рекомендации без AI: • Главная страница: одинаковые «хиты продаж» для всех • Страница товара: «С этим товаром покупают» — ручные подборки мерчандайзера • Email: одинаковая рассылка для всей базы • Конверсия: 1-2%, средний чек не растёт • Обновление: ручное, раз в неделю
С техникой
AI-персонализация: • Главная страница: уникальная для каждого пользователя — история, предпочтения, контекст • Страница товара: real-time collaborative filtering — 'покупатели с похожим вкусом выбрали' • Email: персональное время, содержание и частота на основе предиктивной модели • Конверсия: 3-5%, средний чек +10-30% • Обновление: автоматическое в реальном времени, модель учится на каждом клике

Кейсы

Amazon — эталон персонализации. Рекомендательная система покрывает все touchpoints: главная страница, страница товара («Frequently bought together»), корзина, email, push-уведомления. По разным оценкам, 35% выручки Amazon приходится на рекомендации. Система обрабатывает петабайты данных и использует deep learning для предсказания следующей покупки.

Ozon — крупнейший российский маркетплейс, активно развивающий AI-рекомендации. Персональные подборки на главной, «Вам может понравиться» на страницах товаров, умный поиск с учётом поведения. Ozon использует данные о поведении как ключевой актив для прогнозирования спроса и оптимизации ассортимента.

Wildberries — с 2025 года тестирует AI-ассистента для подбора товаров по естественным запросам. Например: «Подарок коллеге-гику до 3000 рублей с доставкой завтра». Алгоритмы машинного обучения управляют ранжированием в поиске, рекомендациями и персональными скидками.

Персонализация каталога и поиска

Персонализация выходит далеко за рамки блока «Рекомендуем вам». Современные системы адаптируют весь каталог под конкретного покупателя.

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

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

Визуальный поиск — загрузите фото понравившейся вещи, AI найдёт похожие товары в каталоге. ASOS, Pinterest и AliExpress активно используют эту технологию. Computer vision (компьютерное зрение) анализирует форму, цвет, текстуру и находит визуально похожие товары.

AI-чатботы для продаж

AI-чатботы в e-commerce — это не просто FAQ-боты. Современные решения на основе LLM (больших языковых моделей) ведут полноценные консультации, подбирают товары, помогают с возвратами и даже «дожимают» брошенные корзины.

Цифры

Статистика впечатляет: покупатели, взаимодействующие с AI-чатботом, совершают покупку в 12,3% случаев, тогда как без чатбота — только в 3,1%. Это почти четырёхкратный рост конверсии. Проактивные чаты возвращают до 35% брошенных корзин.

Сценарии использования

ПромптSephora-style AI-консультант
Я ищу тональный крем для комбинированной кожи. Мне 28 лет, светлый тон кожи, хочу среднее покрытие без тяжёлого эффекта. Бюджет до 3000 рублей. Какие варианты есть?
Ответ модели

Для вашего запроса — комбинированная кожа, лёгкое/среднее покрытие, светлый тон — подойдут:

  1. L'Oréal True Match (от 890 ₽) — лёгкая текстура, широкая палитра оттенков для светлой кожи (N1, N2). Хорошо для повседневного макияжа.

  2. NYX Born To Glow (от 750 ₽) — сияющий финиш, среднее покрытие. Для комбинированной кожи рекомендую наносить с матирующей базой в Т-зоне.

  3. Maybelline Fit Me Matte+Poreless (от 650 ₽) — контролирует жирный блеск, матовый финиш. Оттенки 102, 104 для светлого тона.

Рекомендация: начните с L'Oréal True Match — лучший баланс покрытия и лёгкости для комбинированной кожи. Хотите, подберу праймер и фиксирующий спрей к нему?

Три четверти покупателей предпочитают чатбота живому оператору для простых вопросов. Но критически важно реализовать плавную передачу человеку для сложных случаев: проблема с оплатой, нестандартный возврат, жалоба. Если бот «зацикливается» — покупатель уходит навсегда.

Виртуальные примерочные

Виртуальная примерочная (virtual try-on) — технология, позволяющая покупателю «примерить» товар до покупки через камеру смартфона или загруженное фото. Это одно из самых перспективных направлений: 98% покупателей, попробовавших AR-примерку, говорят, что это помогло принять решение о покупке.

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

AI-модель принимает фото пользователя и изображение товара (одежда, очки, обувь, косметика) и генерирует реалистичную визуализацию. Используются две ключевые технологии:

  • Computer vision — распознавание тела, лица, позы для точного наложения товара
  • Generative AI — реалистичная генерация складок ткани, теней, текстур на конкретном человеке

Кейсы

Zalando — крупнейший европейский fashion-маркетплейс, запустил виртуальную примерочную для всех пользователей в 2026 году. Технология позволяет увидеть одежду на модели с телосложением, похожим на ваше.

IKEA Place — AR-приложение для визуализации мебели в вашей комнате. Вы наводите камеру на пространство, выбираете диван — и видите, как он будет выглядеть в масштабе вашей гостиной.

Sephora Virtual Artist — примерка макияжа через камеру: губная помада, тени, тональный крем. Снижение возвратов косметики на 27%.

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

Главная проблема онлайн-торговли одеждой — возвраты (до 30-40% заказов). Виртуальная примерочная снижает этот показатель на 25-40%, потому что покупатель видит, как товар выглядит именно на нём, а не на модели.

Динамическое ценообразование

Динамическое ценообразование (dynamic pricing) — автоматическая корректировка цен на основе спроса, конкуренции, запасов и других факторов. AI анализирует десятки переменных и оптимизирует цену так, чтобы максимизировать выручку или маржу.

Входные данные для алгоритма

Исторические продажи95%
Цены конкурентов90%
Уровень запасов85%
Сезонность80%
Эластичность спроса75%
Время суток/день недели60%
Макроэкономические факторы45%

Кейсы

Amazon — меняет цены на товары миллионы раз в день. Алгоритм учитывает не только конкурентов, но и вероятность покупки конкретным пользователем, уровень запасов на ближайшем складе, стоимость доставки. Результат: Amazon почти всегда воспринимается как «самый дешёвый», хотя это не так — цены оптимизированы для максимальной маржи.

Uber/Яндекс Такси — surge pricing (повышенные тарифы) в часы пик. Классический пример динамического ценообразования: высокий спрос → рост цены → привлечение новых водителей → баланс спроса и предложения.

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

Динамическое ценообразование граничит с ценовой дискриминацией. Если два покупателя видят разные цены на один товар на основе их покупательной способности — это законно? В ЕС и России такие практики вызывают всё больше вопросов у регуляторов. Прозрачность алгоритмов ценообразования — одна из горячих тем 2026 года.

Прогнозирование спроса

Demand forecasting (прогнозирование спроса) — предсказание объёмов продаж для каждого товара в каждой локации. Это основа управления запасами: закажете слишком много — заморозите деньги в складе; слишком мало — потеряете продажи.

Традиционный vs AI-подход

Традиционные методы (скользящее среднее, экспоненциальное сглаживание) используют только историю продаж. AI-модели учитывают десятки дополнительных факторов:

  • Внешние данные: погода, праздники, экономические индикаторы, вирусные тренды в соцсетях
  • Каннибализация: запуск нового товара влияет на продажи похожих
  • Промо-эффект: как скидки и акции смещают спрос во времени
  • Событийный контекст: сезонность, начало учебного года, «чёрная пятница»

McKinsey отмечает: AI-прогнозирование снижает ошибки на 20-50% по сравнению с традиционными методами. IKEA сократила затраты на логистику на 30% благодаря AI-прогнозированию спроса.

Без техники
Управление запасами без AI: • Прогноз на основе 'прошлый год + 10%' • Одинаковая модель для всех товаров и регионов • Ручная корректировка перед праздниками • Overstock 15-20% → распродажи со скидками • Stockout 8-12% → потерянные продажи • Цикл планирования: раз в месяц
С техникой
AI-прогнозирование: • Индивидуальная модель для каждого SKU × регион × день • Учёт погоды, праздников, трендов, промо, конкурентов • Автоматическая корректировка в реальном времени • Overstock снижается до 5-10% • Stockout до 2-5% • Цикл: непрерывный, модель переобучается ежедневно

Кейсы крупных компаний

Amazon

Amazon — компания, где AI интегрирован во все процессы:

  • Персонализация: 35% выручки через рекомендации
  • Alexa для шоппинга: голосовые покупки через умную колонку
  • Anticipatory shipping: Amazon начинает доставку товара в ваш регион до того, как вы его заказали, на основе предиктивных моделей
  • Amazon Go: магазины без касс — computer vision отслеживает, что вы взяли с полки
  • Складская робототехника: роботы Kiva/Proteus обрабатывают товары в несколько раз быстрее людей

Ozon

Ozon активно инвестирует в AI-технологии:

  • Персональные подборки на главной странице и в поиске
  • Прогнозирование спроса для управления складами и логистикой
  • Умный поиск с учётом поведения пользователя и контекста
  • AI-аналитика для продавцов: рекомендации по ценообразованию, ассортименту, контенту карточек
  • Автоматическая модерация карточек товаров и отзывов

Wildberries

Wildberries развивает AI по нескольким направлениям:

  • AI-ассистент (с 2025): подбор товаров по запросу на естественном языке
  • Алгоритмы ранжирования в поиске с учётом персональных предпочтений
  • Прогнозирование для оптимизации распределения товаров по складам
  • ML-модели для анализа спроса, управления запасами и персональных скидок
  • Рекламные алгоритмы: автоматическое таргетирование рекламы на основе поведения

Рекомендательная система: Collaborative Filtering API

Минимальная реализация рекомендательной системы на основе user-based collaborative filtering:

import numpy as np
from dataclasses import dataclass
from collections import defaultdict


@dataclass
class Interaction:
    """Взаимодействие пользователя с товаром."""
    user_id: str
    item_id: str
    event_type: str   # view, add_to_cart, purchase
    timestamp: float
    rating: float | None = None


# Веса для разных типов событий
EVENT_WEIGHTS = {
    "view": 1.0,
    "add_to_cart": 3.0,
    "purchase": 5.0,
    "review_positive": 4.0,
    "review_negative": -2.0,
}


def build_user_item_matrix(
    interactions: list[Interaction],
    decay_days: float = 30.0,
) -> tuple[np.ndarray, list[str], list[str]]:
    """
    Построить матрицу user × item с implicit feedback.

    Используем взвешенную сумму событий с temporal decay:
    более свежие взаимодействия весят больше.
    """
    users = sorted({i.user_id for i in interactions})
    items = sorted({i.item_id for i in interactions})
    user_idx = {u: i for i, u in enumerate(users)}
    item_idx = {it: i for i, it in enumerate(items)}

    matrix = np.zeros((len(users), len(items)))
    now = max(i.timestamp for i in interactions)

    for inter in interactions:
        weight = EVENT_WEIGHTS.get(inter.event_type, 1.0)
        # Temporal decay: экспоненциально уменьшаем вес старых событий
        age_days = (now - inter.timestamp) / 86400
        decay = np.exp(-age_days / decay_days)
        matrix[user_idx[inter.user_id], item_idx[inter.item_id]] += weight * decay

    return matrix, users, items


def cosine_similarity_matrix(matrix: np.ndarray) -> np.ndarray:
    """Матрица косинусного сходства между пользователями."""
    norms = np.linalg.norm(matrix, axis=1, keepdims=True)
    norms = np.where(norms == 0, 1, norms)  # избегаем деления на ноль
    normalized = matrix / norms
    return normalized @ normalized.T


def recommend(
    user_id: str,
    matrix: np.ndarray,
    users: list[str],
    items: list[str],
    top_k: int = 10,
    min_similarity: float = 0.1,
) -> list[dict]:
    """
    Рекомендации для пользователя через user-based CF.

    Алгоритм:
    1. Найти top-N похожих пользователей (по косинусному сходству)
    2. Взять их товары, взвешенные по сходству
    3. Исключить уже купленные товары
    4. Вернуть top-K
    """
    user_idx_map = {u: i for i, u in enumerate(users)}
    if user_id not in user_idx_map:
        return []  # cold start — fallback на популярные

    uid = user_idx_map[user_id]
    sim_matrix = cosine_similarity_matrix(matrix)
    similarities = sim_matrix[uid]

    # Исключаем самого себя
    similarities[uid] = 0

    # Товары, с которыми пользователь уже взаимодействовал
    already_interacted = set(np.where(matrix[uid] > 0)[0])

    # Взвешенная сумма оценок похожих пользователей
    scores = defaultdict(float)
    for other_uid in range(len(users)):
        sim = similarities[other_uid]
        if sim < min_similarity:
            continue
        for item_idx_val in range(len(items)):
            if item_idx_val not in already_interacted and matrix[other_uid, item_idx_val] > 0:
                scores[item_idx_val] += sim * matrix[other_uid, item_idx_val]

    # Сортируем и возвращаем top-K
    ranked = sorted(scores.items(), key=lambda x: x[1], reverse=True)[:top_k]

    return [
        {"item_id": items[idx], "score": round(score, 4)}
        for idx, score in ranked
    ]

Интеграция AI-чатбота в e-commerce

Пример архитектуры AI-чатбота, обученного на каталоге магазина с использованием RAG (Retrieval-Augmented Generation):

import anthropic
from typing import Optional


# Системный промпт для e-commerce чатбота
ECOMMERCE_BOT_PROMPT = """Ты AI-консультант интернет-магазина.

Правила:
- Помогай с выбором товаров, отвечай на вопросы о характеристиках
- Рекомендуй конкретные товары из каталога (используй контекст ниже)
- Всегда указывай цены и наличие из предоставленных данных
- Если товара нет в контексте — честно скажи, что нужно уточнить
- Предлагай дополнительные товары (cross-sell), но не навязчиво
- Если пользователь жалуется — выражай сочувствие и предлагай решение
- Отвечай кратко (2-4 предложения), если не просят подробнее

ВАЖНО: Не выдумывай товары. Рекомендуй только то, что есть в контексте.
"""


def search_catalog(
    query: str,
    catalog_embeddings: dict,
    top_k: int = 5,
) -> list[dict]:
    """
    Поиск релевантных товаров в каталоге через vector search.
    В продакшене: Qdrant, Pinecone или pgvector.
    """
    # Упрощённый пример — в реальности здесь embedding search
    # catalog_embeddings = {item_id: {"embedding": [...], "metadata": {...}}}
    results = []
    query_lower = query.lower()
    for item_id, data in catalog_embeddings.items():
        meta = data["metadata"]
        text = f"{meta['name']} {meta.get('description', '')} {meta.get('category', '')}".lower()
        if any(word in text for word in query_lower.split()):
            results.append(meta)
    return results[:top_k]


def format_catalog_context(products: list[dict]) -> str:
    """Форматирует найденные товары для контекста LLM."""
    if not products:
        return "Товары по запросу не найдены в каталоге."

    lines = ["Найденные товары:"]
    for p in products:
        line = f"- {p['name']} | Цена: {p.get('price', 'N/A')} ₽"
        if p.get("in_stock"):
            line += " | В наличии"
        else:
            line += " | Нет в наличии"
        if p.get("rating"):
            line += f" | Рейтинг: {p['rating']}/5"
        if p.get("sizes"):
            line += f" | Размеры: {', '.join(p['sizes'])}"
        lines.append(line)

    return "\n".join(lines)


def chat_with_customer(
    message: str,
    conversation_history: list[dict],
    catalog_embeddings: dict,
    user_profile: Optional[dict] = None,
) -> dict:
    """
    Обработка сообщения покупателя с RAG по каталогу.

    Args:
        message: сообщение пользователя
        conversation_history: история диалога
        catalog_embeddings: индекс каталога для поиска
        user_profile: профиль пользователя (история, предпочтения)
    """
    # 1. Ищем релевантные товары в каталоге
    products = search_catalog(message, catalog_embeddings)
    catalog_context = format_catalog_context(products)

    # 2. Формируем контекст с профилем пользователя
    system = ECOMMERCE_BOT_PROMPT
    if user_profile:
        system += f"\n\nПрофиль покупателя:\n"
        system += f"- Предпочитаемые бренды: {', '.join(user_profile.get('brands', []))}\n"
        system += f"- Ценовой сегмент: {user_profile.get('price_segment', 'средний')}\n"
        system += f"- Размер одежды: {user_profile.get('size', 'не указан')}\n"

    system += f"\n\nКонтекст каталога:\n{catalog_context}"

    # 3. Запрос к LLM
    client = anthropic.Anthropic()
    messages = conversation_history + [{"role": "user", "content": message}]

    response = client.messages.create(
        model="claude-sonnet-4-20250514",
        max_tokens=500,
        system=system,
        messages=messages,
    )

    assistant_message = response.content[0].text

    return {
        "response": assistant_message,
        "products_shown": [p.get("id") for p in products],
        "tokens_used": response.usage.input_tokens + response.usage.output_tokens,
    }

Алгоритм динамического ценообразования

Базовая реализация demand-based pricing с учётом конкурентов и эластичности:

from dataclasses import dataclass
from datetime import datetime
import numpy as np


@dataclass
class PricingContext:
    """Контекст для принятия решения о цене."""
    item_id: str
    base_cost: float          # себестоимость
    current_price: float      # текущая цена
    competitor_prices: list[float]  # цены конкурентов
    stock_level: int          # запас на складе
    stock_days_remaining: float  # дней до полного стока при текущем темпе
    daily_sales_avg: float    # средние продажи в день (30 дней)
    daily_sales_recent: float # средние продажи за 3 дня
    demand_trend: float       # тренд спроса: >1 растёт, <1 падает
    category_elasticity: float  # ценовая эластичность категории (обычно -1.5...-0.5)
    is_seasonal: bool         # сезонный товар
    days_since_launch: int    # дней с момента появления в каталоге


@dataclass
class PricingDecision:
    """Результат работы алгоритма ценообразования."""
    recommended_price: float
    min_price: float     # нижняя граница (>= cost + min margin)
    max_price: float     # верхняя граница
    confidence: float    # уверенность в рекомендации (0-1)
    reasoning: str       # объяснение решения


def calculate_dynamic_price(ctx: PricingContext) -> PricingDecision:
    """
    Алгоритм динамического ценообразования.

    Стратегия:
    - Если спрос высокий и запасы низкие → повышаем цену
    - Если спрос низкий и запасы высокие → снижаем цену
    - Учитываем цены конкурентов как ограничение
    - Никогда не опускаемся ниже себестоимости + мин. маржа
    """
    MIN_MARGIN = 0.10  # минимальная маржа 10%
    MAX_MARKUP = 3.0   # максимальная наценка 3x от себестоимости

    min_price = ctx.base_cost * (1 + MIN_MARGIN)
    max_price = ctx.base_cost * MAX_MARKUP

    # Конкурентное ограничение: не дороже медианы конкурентов + 15%
    if ctx.competitor_prices:
        competitor_median = np.median(ctx.competitor_prices)
        max_price = min(max_price, competitor_median * 1.15)
        # Не дешевле минимального конкурента - 5% (если это выше себестоимости)
        competitive_floor = min(ctx.competitor_prices) * 0.95
        if competitive_floor > min_price:
            min_price = competitive_floor

    reasons = []
    price = ctx.current_price

    # Фактор спроса
    demand_factor = ctx.daily_sales_recent / (ctx.daily_sales_avg + 1e-9)
    if demand_factor > 1.3:
        # Спрос выше среднего — можно повысить цену
        increase = min(0.10, (demand_factor - 1) * 0.15)
        price *= (1 + increase)
        reasons.append(f"Спрос выше среднего на {(demand_factor-1)*100:.0f}% → +{increase*100:.1f}%")
    elif demand_factor < 0.7:
        # Спрос ниже среднего — снижаем
        decrease = min(0.15, (1 - demand_factor) * 0.20)
        price *= (1 - decrease)
        reasons.append(f"Спрос ниже среднего на {(1-demand_factor)*100:.0f}% → -{decrease*100:.1f}%")

    # Фактор запасов
    if ctx.stock_days_remaining < 7:
        # Мало запасов — повышаем
        price *= 1.05
        reasons.append("Низкий запас (<7 дней) → +5%")
    elif ctx.stock_days_remaining > 90:
        # Overstock — снижаем для ликвидации
        price *= 0.90
        reasons.append("Overstock (>90 дней запаса) → -10%")

    # Фактор сезонности
    if ctx.is_seasonal and ctx.stock_days_remaining > 60:
        price *= 0.85
        reasons.append("Сезонный товар + высокий запас → -15% ликвидация")

    # Ограничения
    price = np.clip(price, min_price, max_price)

    # Уверенность в решении
    confidence = 0.7
    if len(ctx.competitor_prices) > 3:
        confidence += 0.1  # больше данных о рынке
    if ctx.daily_sales_avg > 5:
        confidence += 0.1  # стабильная статистика продаж
    if abs(price - ctx.current_price) / ctx.current_price < 0.05:
        confidence += 0.1  # малое изменение — выше уверенность

    return PricingDecision(
        recommended_price=round(price, 2),
        min_price=round(min_price, 2),
        max_price=round(max_price, 2),
        confidence=min(confidence, 1.0),
        reasoning="; ".join(reasons) if reasons else "Цена в оптимальном диапазоне, корректировка не требуется",
    )
В продакшене рекомендательные системы e-commerce включают: 1) Offline pipeline — переобучение моделей на свежих данных (ежедневно/еженедельно); 2) Near-realtime layer — обновление фич пользователя после каждого взаимодействия (Kafka + feature store); 3) Online serving — inference за <50 мс (предрассчитанные кандидаты + real-time ранжирование). Для среднего магазина с <100K SKU достаточно ALS (Alternating Least Squares) в Apache Spark и Redis для кэша рекомендаций.

Проверьте себя

Проверьте себя

1. Почему Amazon генерирует до 35% выручки через рекомендации, а не просто через поиск?

2. Что делает динамическое ценообразование этически спорным в e-commerce?

3. В чём главное преимущество AI-прогнозирования спроса перед традиционными методами (скользящее среднее, экспоненциальное сглаживание)?

Связанные темы

Источники