Головна▸Статті▸Оптимізація та системи прийняття рішень

Динамічне ціноутворення

ML-driven оптимізація ціноутворення - оцінка попиту, цінова еластичність, конкурентне ціноутворення та виробничі системи ціноутворення.

mysimulator teamОновлено 2026-01≈ 4 хв читання▶ Open the simulation

Динамічне ціноутворення коригує ціни в реальному часі на основі попиту, конкуренції, запасів та характеристик клієнтів. ML дозволяє перехід від ціноутворення на основі правил до оптимізації на основі даних. Мета: максимізувати дохід (або прибуток) знаходячи ціну яку кожен сегмент клієнтів готовий платити за кожен продукт в кожен момент.

Де використовується

Динамічне ціноутворення забезпечує оптимізацію доходу в різних галузях:

Продукти: Uber surge pricing, Amazon repricing, revenue management авіаліній, платформи бронювання готелів.

Проблема ціноутворення

Ціль: Максимізувати дохід (або прибуток)

Дохід = Ціна × Попит(Ціна)

Виклик: Попит зменшується коли ціна зростає (зазвичай). Знайти оптимальну точку.

Цінова еластичність:

Еластичність = % зміни попиту / % зміни ціни

Типові дані

Аспект Типові значення
Продукти 100 до 1M SKU
Зміни цін Погодинно до щотижня
Діапазон цін ±20-50% від бази
Дані попиту Історія транзакцій
Конкуренція Ціни конкурентів (якщо доступні)

Що ви робите на практиці

  1. Визначте цілі - Дохід, прибуток, частка ринку, очищення запасів?
  2. Зберіть дані ціноутворення - Історичні ціни та попит
  3. Оцініть функцію попиту - Як попит змінюється з ціною
  4. Змоделюйте цінову еластичність - За продуктом, сегментом, часом
  5. Додайте обмеження - Min/max ціни, вимоги маржі
  6. Оптимізуйте ціни - Знайдіть ціни що максимізують дохід
  7. Обробіть конкуренцію - Реагуйте або лідируйте в ціноутворенні
  8. Тестуйте обережно - A/B тест змін цін
  9. Моніторте канібалізацію - Крос-продуктові ефекти
  10. Ітеруйте безперервно - Ринкові умови змінюються

Спочатку базова лінія

Почніть з простого моделювання попиту:

import numpy as np
from sklearn.linear_model import LinearRegression

class SimplePricingModel:
    def __init__(self):
        self.demand_model = LinearRegression()

    def fit(self, prices, quantities, features=None):
        # Log-log модель для постійної еластичності
        X = np.log(prices).reshape(-1, 1)
        if features is not None:
            X = np.hstack([X, features])
        y = np.log(quantities + 1)
        self.demand_model.fit(X, y)

        # Еластичність - коефіцієнт при log(price)
        self.elasticity = self.demand_model.coef_[0]

    def predict_demand(self, price, features=None):
        X = np.log(price).reshape(-1, 1)
        if features is not None:
            X = np.hstack([X, features])
        log_demand = self.demand_model.predict(X)
        return np.exp(log_demand)

    def optimal_price(self, cost, features=None, price_range=(0.5, 2.0)):
        # Grid search для ціни що максимізує дохід
        prices = np.linspace(cost * price_range[0], cost * price_range[1], 100)
        revenues = []
        for p in prices:
            demand = self.predict_demand(p, features)
            revenue = p * demand
            revenues.append(revenue)
        return prices[np.argmax(revenues)]

Підходи до ціноутворення

Підхід Опис Найкраще для
Cost-plus Вартість + фіксована маржа Просте, гарантована маржа
Competition-based Match/undercut конкурентів Commodity продукти
Demand-based Ціна за готовністю платити Диференційовані продукти
Segmented Різні ціни за сегментом Різноманітна клієнтська база
Time-based Зміна за часом/попитом Швидкопсувні запаси
Personalized Individual-level pricing Високоцінні клієнти

Оцінка попиту з ML:

import xgboost as xgb

class MLPricingModel:
    def __init__(self):
        self.demand_model = xgb.XGBRegressor()

    def fit(self, df):
        features = ['price', 'competitor_price', 'day_of_week',
                    'inventory_level', 'category_encoded']
        X = df[features]
        y = df['quantity_sold']
        self.demand_model.fit(X, y)

    def optimize_price(self, product_context, cost, min_price, max_price):
        best_price, best_profit = min_price, 0

        for price in np.linspace(min_price, max_price, 100):
            context = product_context.copy()
            context['price'] = price
            demand = self.demand_model.predict([context])[0]
            profit = (price - cost) * demand
            if profit > best_profit:
                best_profit = profit
                best_price = price

        return best_price

Метрики оцінки

Метрика Опис Використання
Revenue Загальний дохід Головна бізнес метрика
Margin Прибуток на одиницю Прибутковість
Elasticity Чутливість попиту Розуміння ринку
Price variance Волатильність цін Стабільність

Типові помилки та чек-лист

Чек-лист для продакшену

Перед деплоєм: - [ ] Валідація моделі попиту - [ ] Встановлення price guards (min/max) - [ ] Юридичний review - [ ] A/B тест framework

Після деплою: - [ ] Моніторинг revenue та margin - [ ] Відстеження customer complaints - [ ] Аналіз конкурентної реакції - [ ] Регулярне перенавчання моделі

Інструменти та стек

Категорія Інструменти
Моделювання XGBoost, Prophet, causal inference
Оптимізація CVXPY, OR-Tools, Gurobi
Платформи AWS, Revionics, PROS

Приклад міні-кейсу

Сценарій: Динамічне ціноутворення для e-commerce.

Підхід: - XGBoost для моделювання попиту - Сегментація за категорією продуктів - Обмеження: ±20% від базової ціни

Результати: - 8% збільшення revenue - 5% покращення margin - Зменшення overstock на 15%

Пов'язані сторінки

Додаткові матеріали

Спробуйте наживо

Дослідіть пов'язану модель на практиці: відкрийте Dynamic Pricing Engine — Demand Elasticity in Real Time і змінюйте параметри під час роботи. Усе лишається у вашому браузері.

▶ Відкрити симуляцію Dynamic Pricing Engine — Demand Elasticity in Real Time

Що ви знайшли?

Додати кроки відтворення (опційно)