metric

Metric

src/golden/Metric/

KPI-метрики TU поверх ClickHouse. Живлять два екрани метрик на фронті — Connections with users і TU scoring — плюс time-series графіки аналітики. Доступ: director / topManager / supervisor / operator; пул видимих TU залежить від ролі.

Перелік ендпоінтів — у Swagger, група Metric.

Джерела даних

Таблиця (ClickHouse)Що лежитьХто наповнює
golden_general_metric_dataкожна витрата RU по парі TU↔RU: сума, тип операції, lifetime пари, retention-категорія, ознака повернення, оператор/тімлідкрок «Генерація метрик» добової вигрузки статистики (statistics); ручний trigger tech-команди
golden_ru_daily_activityхвилини онлайну RU за деньgetting-online — реал-тайм оновлення за сьогодні кожні 5 хв; історична синхронізація з Mongo — ручний trigger
golden_profile_viewsперегляди профілю TU чоловіком, дедуп по парі+дата+годинаElectron шле перегляди пачками
golden_sender_answersунікальні agency-invites по парі за день + ознака «чи відповів RU»update-online-time
golden_block_list_historyжурнал блокувань/розблокувань TU чоловікомобробка block-list оновлень у mail-extension

Додатково з MongoDB: бонуси сьогоднішнього дня (golden_temp_statistics), онлайн-сесії TU (golden_lady_online, пише Electron), таски в денних діях оператора (golden_action_operators — для OTRR), журнал подій TU (рівні, активація/деактивація).

Генерація golden_general_metric_data: інкрементально від останньої дати в ClickHouse до сьогодні; дата, для якої записи вже є, пропускається — перегенерувати заднім числом можна тільки вручну після чистки. ClickHouse тут — похідне сховище: джерело правди лишається в Mongo (golden_statistic), всі таблиці можна перезалити.

Lifetime і категорії пари: lifetime = днів від першої витрати пари TU↔RU. Категорії: new = LT0 (день знайомства), young = LT1–7, old = LT8+. Запис дня позначається «повернення», якщо попередня витрата пари була рівно вчора.

Дані «сьогодні»

ClickHouse наповнюється раз на добу (вигрузка о 13:06), тому для сьогоднішньої дати — і вчорашньої до ~13:00 — обидва екрани доповнюють ClickHouse-дані бонусами з golden_temp_statistics нальоту. Lifetime для таких пар добудовується від останнього відомого запису пари в ClickHouse.

Видимість TU за ролями

РольПул TU
directorусі; опційні фільтри тімлід/оператор
topManagerTU своїх supervisors (список приходить зі stack по RMQ); фільтри звужують
supervisorTU своєї family; фільтр по оператору
operatorтільки свої TU

Для director у TU scoring пул додатково чиститься від TU, які були неактивні всі дні періоду — стан на кожен день відновлюється по журналу подій TU (створення/активація/деактивація).

Connections with users

Календар активності RU по одній TU за вікно 14 днів (обрана дата + 13 днів назад).

  1. З ClickHouse беруться всі RU, що витрачали на цю TU у вікні (ігноровані типи операцій не рахуються).
  2. Для цих RU паралельно тягнуться: витрати на інших TU і дні онлайну.
  3. Кожен день кожного RU отримує статус, пріоритет згори вниз: заблокував TUвитратив на цю TU (з сумою) → витратив на інших TUбув онлайн без витратне логінився. Заблоковані дні відновлюються з журналу блокувань (інтервал від «blocked» до «unblocked» або до кінця вікна).
  4. Фільтр Connection type (new/young/old) — по retention-категорії пари.
  5. RU без жодної витрати на цю TU у вікні в результат не потрапляє.

Деталізація клітинки (пара + день): розбивка витрат по типах операцій, lifetime/категорія, хвилини онлайну RU за день, загальні витрати RU на всіх TU. Список «на яких ще TU витрачав» бачить тільки director (усі TU) і topManager (тільки TU своїх supervisors); supervisor/operator бачать лише загальну суму і кількість TU.

TU scoring

Зведена таблиця KPI по кожній TU пулу за довільний період + рядок total по пулу. TU з сумарним онлайном менше 60 хв за період виключаються і зі списку, і з total.

#МетрикаВизначенняДжерело
1LVLрівень TU за період; якщо мінявся всередині періоду — діапазон «ДО-ПІСЛЯ»історія рівнів TU
2Balanceсума витрат RU за період (без ігнорованих операцій)golden_general_metric_data
3Avg Balance per DayBalance / кількість активних днів анкети
4Avg Onlineсередній онлайн TU за день, хвсесії golden_lady_online, тільки за активні дні
5Avg Views per Hourперегляди профілю / години онлайнуgolden_profile_views
6OTRR% тасків «непрочитане повідомлення» закритих відповіддю до дедлайну таймератаски в golden_action_operators
7NewConn Rate% унікальних RU, що відповіли на agency-invitegolden_sender_answers
8NDR (new/young/old)повернення наступного дня: returns сьогодні / connections вчора, по категоріяхgolden_general_metric_data
9Avg Spend per Day (new/young/old)середні витрати RU за день-коннект відповідної категоріїgolden_general_metric_data
10CPRчастка активних днів пари від можливих днів періодуgolden_general_metric_data
11Avg DAUсередня кількість унікальних RU за деньgolden_general_metric_data
12TAUунікальні RU за періодgolden_general_metric_data
13New Connкількість нових пар (LT0) за періодgolden_general_metric_data

Базові поняття для формул

  • Connection-день — пара TU↔RU + конкретна дата, в яку по парі була хоч одна врахована витрата. Більшість метрик рахуються по connection-днях, а не по окремих транзакціях.
  • Врахована витрата — сума > 0 і тип операції не з ігнор-списку (реальні подарунки, штрафи, бонуси за активацію, обмін контактами — те, що не є заробітком на переписці).
  • Активні дні — дні періоду, коли анкета була активна (стан відновлюється по журналу подій TU). Це знаменник усіх «per day»-середніх — не дні з онлайном і не дні з витратами.
  • Категорія connection-дня — по lifetime пари в цей день: New = LT0, Young = LT1–7, Old = LT8+.

1. LVL

Якщо в межах періоду рівень не мінявся — поточний рівень анкети. Якщо мінявся — діапазон «рівень-на-вході — рівень-на-виході» (наприклад MID-TOP): рівень до першої зміни в періоді й рівень після останньої.

2. Balance

Сума всіх врахованих витрат RU на цю TU за період. Без усереднень.

3. Avg Balance per Day

Balance ÷ активні дні анкети. Немає активних днів або балансу → 0.

4. Avg Online

сумарний онлайн (хв) ÷ активні дні. Онлайн — сума тривалостей онлайн-сесій TU за день (сесії шле Electron). Враховуються тільки сесії за активні дні анкети; день зміни статусу активності зараховується активним з обох боків межі (закриває попередній період і відкриває новий включно).

5. Avg Views per Hour

унікальні перегляди профілю за період ÷ повні години онлайну. Перегляд унікальний у межах пара+дата+година: той самий RU, що відкрив профіль тричі за годину, дає 1 перегляд. Години = цілі години онлайну (хвилини ÷ 60, округлення вниз); якщо онлайн не перевищує годину — метрика 0.

6. OTRR (On-Time Reply Rate)

Чи вчасно оператор відповідає RU від імені цієї TU. Рахується по тасках: Chat: active-unanswered, Chat: finished-unanswered, Unanswered message — і лише таски з дедлайном таймера.

OTRR = вчасно закриті ÷ всі такі таски × 100. «Вчасно» = відповідь дана до дедлайну таймера таска.

7. NewConn Rate

Конверсія sender-розсилки у відповідь. Одиниця обліку — RU-день: день, у який по парі TU↔RU була хоч одна відправка з чат сендера. Якщо RU того ж дня відповів — RU-день вважається «з відповіддю» (фіксує update-online-time).

Rate = RU-дні з відповіддю ÷ всі RU-дні × 100.

Важливо: рахуються саме RU-дні, не унікальні RU за період. RU, якому сендер слав інвайти 5 різних днів і який відповів одного дня, дає в метрику 1/5.

8. NDR (Next Day Retention)

Відсоток повернень наступного дня, по категоріях лайфтайму. Логіка: беремо вчорашні конекти категорії; якщо по парі сьогодні знову був конект — це повернення, категорія вчорашнього конекта отримує «+». Повернення = connection-день, перед яким попередня витрата пари була рівно вчора (ознака ставиться при генерації golden_general_metric_data).

  • знаменник: конекти категорії за період, зсунутий на день назад [from−1, to−1];
  • чисельник: їхні повернення за період [from, to].

Категорія визначається по LT вчорашнього конекта. Повернення наступного дня має LT на 1 більший — тому межі в колонці повернень зсунуті на +1 і формально «заходять» у наступну категорію (повернення LT8 покриває вчорашній Young-конект LT7 — дірки на межі нема):

КатегоріяКонекти вчора (знаменник)Повернення сьогодні (чисельник)
NewLT0LT1
YoungLT1–7LT2–8
OldLT8+LT9+

9. Avg Spend per Day (New/Young/Old)

Середній чек connection-дня по категоріях: сума витрат у connection-днях категорії ÷ кількість connection-днів категорії.

10. CPR (Custom Periodic Retention)

Щільність ходіння RU до TU. Для кожної пари TU↔RU:

  • активні дні пари = унікальні дні з витратою за період;
  • можливий період = якщо знайомство (LT0) сталося всередині періоду — від дня знайомства до кінця періоду; інакше — весь період.

CPR TU = сума активних днів усіх її пар ÷ сума можливих періодів × 100.

11. Avg DAU

По кожному дню періоду рахуються унікальні RU з connection-днем; сума цих денних значень ділиться на активні дні анкети.

Чисельник і знаменник — різні множини днів: чоловіки сумуються за всі дні періоду з конектами (включно з днями, коли анкета була неактивна — витрати по неактивній анкеті можливі), а ділиться тільки на активні дні.

⚠️ TODO перевірити задум:

  • конекти в день, коли анкета неактивна, потрапляють у чисельник, але день не потрапляє в знаменник — середнє завищується;
  • неактивні дні без конектів не враховуються ніде — метрика не штрафує за простій: TU з 3 активними днями з 28-денного періоду отримає DAU по своїх 3 днях, а не по 28.

12. TAU

Кількість унікальних RU, що мали хоч один connection-день з TU за період.

13. New Conn

Кількість унікальних RU, які зробили перший коннект (connection-день з LT0) у періоді.

Рядок Total

Total — не середнє відсотків по TU, а перерахунок по всьому пулу:

  • rate-метрики (OTRR, NewConn Rate, NDR, CPR) — зважені: суми чисельників ÷ суми знаменників усіх TU;
  • Avg Online = сумарний онлайн усіх TU ÷ сумарні активні дні;
  • Avg Views — у годинах онлайну враховуються тільки TU з онлайном понад 60 хв;
  • TAU / New Conn / Avg DAU рахуються по конектах (парах TU↔RU), а не по унікальних RU: RU, що ходить до двох TU, дає 2 конекти. Це задум — Total міряє конекти, узгоджено з пер-TU значеннями (для однієї TU «унікальні RU» і «пари» — те саме).

Нюанси

  • Онлайн TU рахується лише за дні, коли анкета була активна. Оператори можуть працювати на неактивних анкетах — heartbeat-и далі пишуться, і без фільтра онлайн за неактивні дні роздував би середній онлайн за день. Періоди активності відновлюються по журналу подій TU.
  • «Активні дні» в знаменниках середніх — дні активності анкети, а не дні з онлайном.
  • Помилка читання журналу блокувань не валить екран connections — дні просто лишаються без статусу «заблокований».

Дашборди (time-series)

Ті самі метрики як таймсерії з групуванням по тижнях — для графіків аналітики на екрані TU scoring: по одній TU, по всьому пулу, або по командах (порівняння тімлідів/операторів). Окремі Swagger-групи Metric Dashboard і Metric Team Dashboard; у ClickHouse ходять батч-запитами по періодах.

Зв’язки