# Как рассчитывается sales_rate
Подсчёт производится для всех магазинов, подключённых более трёх дней назад. Для новых магазинов sales_rate подсчитывается другим методом, который работает чаще.
Кроме частоты вызовов, других различий между ними нет, в основе обоих методов лежит одна и та же формула.
# Этапы подсчёта
- Сначала выбираются продажи за определённый период
- Исключаются заказы со статусами
refundedиcancelled - Из этих данных формируется массив товаров
- Цены и маржа(
price_margin) товаров подгружаются из базы - Удаляются товары без цен — они не участвуют в расчёте
- Далее удаляются аномалии по количеству продаж. Из массива значений вычисляется 99-й персентиль, которым заменяются все значения, превышающие его
- Для всех товаров создаются и нормализуются векторы и переводятся к масштабу с длиной 1
- Происходит расчёт
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
- Формируем три набора значений:
- Цены: (100 000, 500 000)
- Покупки: (10, 50)
- Маржинальность: (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