# Как рассчитывается sales_rate

Подсчёт производится для всех магазинов, подключённых более трёх дней назад. Для новых магазинов sales_rate подсчитывается другим методом, который работает чаще.

Кроме частоты вызовов, других различий между ними нет, в основе обоих методов лежит одна и та же формула.

# Этапы подсчёта

  1. Сначала выбираются продажи за определённый период
  2. Исключаются заказы со статусами refunded и cancelled
  3. Из этих данных формируется массив товаров
  4. Цены и маржа(price_margin) товаров подгружаются из базы
  5. Удаляются товары без цен — они не участвуют в расчёте
  6. Далее удаляются аномалии по количеству продаж. Из массива значений вычисляется 99-й персентиль, которым заменяются все значения, превышающие его
  7. Для всех товаров создаются и нормализуются векторы и переводятся к масштабу с длиной 1
  8. Происходит расчёт sales_rate по приведённым ниже формулам

Нормализация векторов

При расчётах признаки имеют разный масштаб. Например, цена может составлять 10 000, продажи - 1000, а маржинальность - 0.3. Нормализация позволяет сделать все эти признаки сравнимыми.

# Формулы расчёта sales_rate

Если маржинальность используется:


SR = (K_PRICE * normalized_price + K_PURCHASES * normalized_purchases + K_MARGIN * normalized_margin) / (K_PRICE + K_PURCHASES + K_MARGIN) * 10000

Если без маржинальности:


SR = (K_PRICE * normalized_price + K_PURCHASES * normalized_purchases) / (K_PRICE + K_PURCHASES) * 10000

Минимальное значение — 1. Даже если расчёт даёт меньше, sales_rate округляется вверх.

Максимум ограничен: sales_rate не может быть выше 30 000.

K_PRICE, K_PURCHASES и K_MARGIN - эти коэффициенты определяют важность показателей (цена, покупки, маржинальность) для финального результата. Они позволяют сбалансировать показатель sales_rate.

Это не позволяет дорогим или часто покупаемым товарам (например, пакетам) автоматически попадать в топ рекомендаций.

# Пример расчёта sales_rate с учётом маржинальности

Условные исходные данные:

Товар Цена (₽) Количество покупок Маржинальность
Товар A 1000 10 0.5
Товар B 5000 50 0.2

Шаг 1: Подготовка данных

  • Цены увеличиваем в 100 раз для работы с целыми числами:
    • Товар A: 1000 × 100 = 100 000
    • Товар B: 5000 × 100 = 500 000
  • Формируем три набора значений:
    1. Цены: (100 000, 500 000)
    2. Покупки: (10, 50)
    3. Маржинальность: (0.5, 0.2)

Шаг 2: Расчёт длин векторов Для каждого набора вычисляем корень из суммы квадратов значений:

  • Длина вектора цен: 509 901.95
  • Длина вектора покупок: 50.99
  • Длина вектора маржинальности: 0.5385

Шаг 3: Нормализация значений Делим каждое значение в наборе на длину соответствующего вектора:

  • Нормализованные цены:
    • Товар A: 100 000 / 509 901.95 = 0.1961
    • Товар B: 500 000 / 509 901.95 = 0.9806
  • Нормализованные покупки:
    • Товар A: 10 / 50.99 = 0.1961
    • Товар B: 50 / 50.99 = 0.9806
  • Нормализованная маржинальность:
    • Товар A: 0.5 / 0.5385 = 0.9285
    • Товар B: 0.2 / 0.5385 = 0.3714

Шаг 4: Расчёт sales_rate Используем взвешенную сумму нормализованных значений с коэффициентами:

  • Вес цены (K_PRICE) = 0.05
  • Вес покупок (K_PURCHASES) = 1.0
  • Вес маржинальности (K_MARGIN) = 0.8
  • Сумма весов = 0.05 + 1.0 + 0.8 = 1.85

Формула расчета:
[ (K_PRICE × норма_цена + K_PURCHASES × норма_покупки + K_MARGIN × норма_маржи) / 1.85 ] × 10 000

Расчёт для Товара A: Вклад цены: (K_PRICE × норма_цена) = 0.05 × 0.1961 = 0.0098

Вклад покупок: (K_PURCHASES × норма_покуп) = 1.0 × 0.1961 = 0.1961

Вклад маржи: (K_MARGIN × норма_маржи) = 0.8 × 0.9285 = 0.7428

Сумма вкладов: 0.0098 + 0.1961 + 0.7428 = 0.9487

Взвешенное среднее: сумма / общий вес = 0.9487 / 1.85 = 0.5127

Приведение к шкале: 0.5127 × 10 000 = 5125

sales_rate товара А: 5125

Расчёт для Товара B: Вклад цены: (K_PRICE × норма_цена) = 0.05 × 0.9806 = 0.0490

Вклад покупок: (K_PURCHASES × норма_покуп) = 1.0 × 0.9806 = 0.9806

Вклад маржи: (K_MARGIN × норма_маржи) = 0.8 × 0.3714 = 0.2971

Сумма вкладов: 0.0490 + 0.9806 + 0.2971 = 1.3267

Взвешенное среднее: сумма / общий вес = 1.3267 / 1.85 =0.7170

Приведение к шкале: 0.7170 × 10 000 = 7170

sales_rate товара B: 7170