mod: В перерасчет рейтинга добавлен учет оконных наборов
This commit is contained in:
@@ -229,9 +229,10 @@ print(f'Пусто sMetaKeywords: {posts.filter(sMetaKeywords=\"\").count()}')
|
||||
## 4) Команда `make_rating`
|
||||
|
||||
Назначение:
|
||||
- пересчитать рейтинги оконных профилей, стеклопакетов и наборов услуг используя метод Манна-Уитни.
|
||||
- пересчитать рейтинги оконных профилей, стеклопакетов и наборов услуг используя адаптированный метод Манна-Уитни (Mann-Whitney U Step Rank).
|
||||
- сохранить результаты в поля `fProfileRating`, `fGlazingRating`, `fSetRating` (0.0 … 5.0 звёзд).
|
||||
- заполнить JSON-состав рейтинга в поля `sProfileDescription`, `sGlazingDescription`, `sSetDescription`.
|
||||
- заполнить JSON-состав рейтинга (детальный разбор по каждому параметру) в поля `sProfileDescription`, `sGlazingDescription`, `sSetDescription`.
|
||||
- алгоритм рассчитывает три этапа ранжирования: профили → стеклопакеты → наборы (которые зависят от профилей и стеклопакетов).
|
||||
|
||||
### Базовый запуск
|
||||
|
||||
@@ -339,10 +340,45 @@ poetry run python oknardia/manage.py make_rating --verbosity 3 | head -500
|
||||
- **3.0 ⭐⭐⭐**: двухкамерный, среднее качество
|
||||
- **1.0 ⭐**: однокамерный старого образца или с плохими характеристиками
|
||||
|
||||
### НАБОРЫ: какие параметры учитываются
|
||||
|
||||
| № | Параметр | Поле БД | ЛУЧШЕ | Вес | Описание |
|
||||
|---|-------------------|--------------------------|------------------|-----|---------------------------------------------------|
|
||||
| 1 | Актуальность | `dModify` | МЕНЬШЕ (свежее) | 0.3 | Дата последнего обновления (timestamp) |
|
||||
| 2 | Доставка | `bSetDelivery` | ДА (1) | 0.8 | Включена ли доставка в стоимость |
|
||||
| 3 | Монтаж/демонтаж | `bSetUninstallInstall` | ДА (1) | 1.0 | Включены ли услуги монтажа и демонтажа |
|
||||
| 4 | Подоконник | `sSetSill` | ДА (1) | 0.5 | Включен ли подоконник |
|
||||
| 5 | Водоотлив | `sSetPanes` | ДА (1) | 0.8 | Включен ли водоотлив/козырёк |
|
||||
| 6 | Откос | `sSetSlope` | ДА (1) | 0.5 | Включены ли откосы |
|
||||
| 7 | Климат-контроль | `sSetClimateControl` | ДА (1) | 0.3 | Включено ли управление микроклиматом |
|
||||
| 8 | Число предложений | `NumOffer` | БОЛЬШЕ | 0.2 | Популярность набора (кол-во активных предложений) |
|
||||
| 9 | Гибкость скидок | `iDiscountVariantsCount` | БОЛЬШЕ вариантов | 0.5 | Кол-во вариантов скидок из формулы офиса |
|
||||
| 10| Размер скидок | `fDiscountMax` | БОЛЬШЕ % | 1.0 | Максимальная скидка из всех вариантов |
|
||||
|
||||
**ВАЖНО: Итоговый рейтинг набора состоит из трёх компонентов:**
|
||||
- Рейтинг параметров услуг (Актуальность, Доставка, Монтаж, Подоконник и т.д.)
|
||||
- Рейтинг входящего стеклопакета (ранжируется отдельно)
|
||||
- Рейтинг входящего профиля (ранжируется отдельно)
|
||||
|
||||
Формула итогового рейтинга набора (fSetRating):
|
||||
```
|
||||
k1 = нормализованный TmpRating (услуги) * вес услуг
|
||||
k2 = нормализованный рейтинг стеклопакета * RARING_WEIGHT_GLAZING_IN_SET (обычно 1.5)
|
||||
k3 = нормализованный рейтинг профиля * RARING_WEIGHT_PVC_PROFILE_IN_SET (обычно 1.5)
|
||||
|
||||
fSetRating = k1 + k2 + k3 (итого от 0.0 до 5.0 звёзд)
|
||||
```
|
||||
|
||||
**Примеры интерпретации:**
|
||||
- **5.0 ⭐⭐⭐⭐⭐**: набор с премиум компонентами (хороший профиль и стеклопакет) + полный пакет услуг (доставка, монтаж, подоконник, откос, климат-контроль) + значительные скидки.
|
||||
- **3.5 ⭐⭐⭐⭐**: хороший профиль/стеклопакет + базовые услуги (доставка, монтаж) + скромные скидки.
|
||||
- **2.0 ⭐⭐**: эконом компоненты или слабые услуги (нет доставки, нет откосов).
|
||||
- **1.0 ⭐**: минимальный пакет или устаревшие предложения (давно не обновлялись).
|
||||
|
||||
### Когда запускать
|
||||
|
||||
- **После первого развертывания** — заполнить рейтинги всех профилей и стеклопакетов.
|
||||
- **После изменения каталога** (добавление нового профиля/стеклопакета).
|
||||
- **После первого развертывания** — заполнить рейтинги всех профилей, стеклопакетов и наборов.
|
||||
- **После изменения каталога** (добавление нового профиля/стеклопакета/набора).
|
||||
- **После уточнения характеристик** (например, поставщик предоставил новые данные).
|
||||
```bash
|
||||
poetry run python oknardia/manage.py make_rating
|
||||
@@ -350,7 +386,7 @@ poetry run python oknardia/manage.py make_rating --verbosity 3 | head -500
|
||||
|
||||
- **По расписанию** (например, ежемесячно, чтобы пересчитать популярность):
|
||||
```bash
|
||||
30 2 * * 1 cd /Users/e-serg/PRJ/2022-oknardia && poetry run python oknardia/manage.py make_rating >> /var/log/oknardia-rating.log 2>&1
|
||||
30 2 * * 1 cd /home/user/app-path/2022-oknardia && poetry run python oknardia/manage.py make_rating >> /var/log/oknardia-rating.log 2>&1
|
||||
```
|
||||
- **После обновления весов** в `settings.py` (константы `RANK_PVCP_*`, `RANK_GLAZ_*`).
|
||||
|
||||
@@ -358,13 +394,16 @@ poetry run python oknardia/manage.py make_rating --verbosity 3 | head -500
|
||||
|
||||
- **Безопасна для повторного запуска** — пересчитывает все рейтинги заново.
|
||||
- **Всегда обновляет только рейтинги** — другие данные в таблицах не меняются.
|
||||
- **Откат через SQL** — если нужно вернуть старые значения (перед запуском рекомендуется бэкап):
|
||||
- **Откат через SQL** — если нужно установить нулевые значения (перед запуском рекомендуется бэкап базы):
|
||||
```sql
|
||||
-- Очистить рейтинги профилей
|
||||
UPDATE oknardia_pvcprofiles SET fProfileRating = 0.0, sProfileDescription = '{}';
|
||||
|
||||
-- Очистить рейтинги стеклопакетов
|
||||
UPDATE oknardia_glazing SET fGlazingRating = 0.0, sGlazingDescription = '{}';
|
||||
|
||||
-- Очистить рейтинги наборов
|
||||
UPDATE oknardia_setkit SET fSetRating = 0.0, sSetDescription = '{}';
|
||||
```
|
||||
|
||||
### Примеры из реальных данных
|
||||
@@ -377,7 +416,6 @@ poetry run python oknardia/manage.py make_rating --verbosity 3 | head -500
|
||||
========================================
|
||||
[ЭТАП 1]: Пересчёт рейтингов ПРОФИЛЕЙ...
|
||||
========================================
|
||||
|
||||
✓ Обнулены рейтинги у 94 профилей
|
||||
✓ Найдено 94 профилей для ранжирования
|
||||
✓ Сохранено 94 профилей с финальными рейтингами
|
||||
@@ -385,14 +423,21 @@ poetry run python oknardia/manage.py make_rating --verbosity 3 | head -500
|
||||
=============================================
|
||||
[ЭТАП 2]: Пересчёт рейтингов СТЕКЛОПАКЕТОВ...
|
||||
=============================================
|
||||
|
||||
✓ Обнулены рейтинги у 97 стеклопакетов
|
||||
✓ Найдено 97 стеклопакетов для ранжирования
|
||||
✓ Сохранено 97 стеклопакетов с финальными рейтингами
|
||||
|
||||
================================================
|
||||
[ЭТАП 3]: Пересчёт рейтингов НАБОРОВ (SetKit)...
|
||||
================================================
|
||||
✓ Обнулены рейтинги у 27 наборов
|
||||
✓ Найдено 27 наборов для ранжирования
|
||||
✓ Сохранено 27 наборов с финальными рейтингами
|
||||
|
||||
[OK!] ПЕРЕСЧЁТ РЕЙТИНГОВ ЗАВЕРШЁН УСПЕШНО!
|
||||
• Обновлено профилей: 94
|
||||
• Обновлено стеклопакетов: 97
|
||||
• Обновлено наборов: 27
|
||||
```
|
||||
|
||||
Пример вывода `--verbosity 3` (наиболее подробный):
|
||||
@@ -452,6 +497,33 @@ poetry run python oknardia/manage.py make_rating --verbosity 3 | head -500
|
||||
...
|
||||
...
|
||||
✓ Сохранено 97 стеклопакетов с финальными рейтингами
|
||||
|
||||
================================================
|
||||
[ЭТАП 3]: Пересчёт рейтингов НАБОРОВ (SetKit)...
|
||||
================================================
|
||||
✓ Обнулены рейтинги у 27 наборов
|
||||
✓ Найдено 27 наборов для ранжирования
|
||||
...
|
||||
...
|
||||
========================================================================================================================
|
||||
НАБОР: Элит (ID: 3)
|
||||
========================================================================================================================
|
||||
Параметр Значение Ранг (0..1) Вклад
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
Актуальность свежий 0.375 *
|
||||
Водоотлив ✓ Да 1.000 *****
|
||||
Гибкость скидок 0 вариантов 0.500 **
|
||||
Доставка ✓ Да 1.000 *****
|
||||
Климат-контроль ✓ Да 1.000 *****
|
||||
Монтаж ✓ Да 1.000 *****
|
||||
Откос ✓ Да 1.000 *****
|
||||
Подоконник ✓ Да 1.000 *****
|
||||
Размер скидок 0.0% 0.500 **
|
||||
Число предложений 46 шт 0.250 *
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
ИТОГО: Рейтинг = 4.16/5.0 ****
|
||||
...
|
||||
...
|
||||
|
||||
[OK!] ПЕРЕСЧЁТ РЕЙТИНГОВ ЗАВЕРШЁН УСПЕШНО!
|
||||
• Обновлено профилей: 94
|
||||
|
||||
Reference in New Issue
Block a user