v9 FINAL · все KPI ✓

Алгоритм transit-выплат
v9 FINAL

9 итераций · реалистичная loss-модель · все 3 цели достигнуты
26 мин
Tier-A p90 (цель 60)
148 мин
Tier-B p90 (цель 180)
1.98 %
Loss (цель 2%)
12 слайдов · стрелки ← →
1. История версий

Почему v9, а не v5 OPTIMAL

v5 OPTIMAL показывал Loss 0.44% — но это был артефакт упрощённой loss-модели. После 4 спринтов с реалистичной получили v9.

v5 OPTIMAL — недостоверный

  • Loss модель учитывала только переплаты (gift)
  • НЕ учитывала возвраты sender'ам по апелляциям
  • НЕ учитывала двойные выплаты от fake-receipt
  • Loss = 0.44% выглядит, но не реально

v9 FINAL — реалистичный

  • Refund (мы reject'нули реальный платёж sender'а) → 1.50%
  • Double-pay (мы апрувнули fake-receipt) → 0.48%
  • Gift (переплаты через ledger) → 0.00%
  • Total: 1.98% — реалистично + в цели

Главное открытие: 80% потерь — это возвраты sender'ам которые реально заплатили после reject'а. Алгоритм матчинга это не лечит, нужны отдельные механизмы (Layers 5-6).

2. Цели

Куда пришли — реальные дельты

Tier-A (KPMI)
26 мин
было 427м (~8.2ч) → −94%
Tier-B (остальные)
148 мин
было 511м (~11.9ч) → −71%
Loss
1.98%
было 4.06% → −51%

9 из 10 KPMI выплат закроется за 26 минут. Остальные мерчанты — за 2.5 часа. Потери в 2 раза меньше.

3. Архитектура

6 слоёв алгоритма

Каждый слой решает свою часть проблемы. v9 добавил Layer 5 (receipt recovery) и Layer 6 (overpay ledger) к 4 слоям из v5.

1
Matching scope
Per-size partial · asymmetric · forward-triage · round
2
Sender scoring
4 группы · safe-net TRUSTED + STANDARD
3
Score-формула
Одна формула вместо 7 ORDER BY
4
Failure recovery
Sync unlock · exp-backoff · aging-out
5
Receipt recovery v9
Late-receipt 24h · payin retry · early-close
6
Overpay ledger v9
Refund игроку вместо тихих потерь

Layers 1-3 ускоряют закрытие · Layer 4-5 снижают refund-потери · Layer 6 убирает gift

Layers 1+2+3 · скорость

Что делает выплаты быстрыми

Layer 1 — расширенные правила матчинга

Layer 2 — приоритет хороших sender'ов

TRUSTED → score +30, RISKY → 80% сразу к трейдерам (не занимают payout)

Layer 3 — формула вместо 7 правил

оценка = 1.5×важность_мерчанта − 0.3×возраст − 0.3×переплата − 0.8×остаток
+ 1.8×бонус_sender − 800×несовпадение_размера
Layer 2 · Sender scoring

4 группы игроков

Делим по истории — каждая группа получает свою обработку.

🟢
TRUSTED
86%
≥5 платежей, ≥90% успех
Никогда не auto-reject
Early-close payout
🔵
STANDARD
59%
средняя история
40% safe-net
не auto-reject
COLD
47%
новые, <5 платежей
Стандартная
обработка
🔴
RISKY
6%
≥5 платежей, ≤10% успех
80% к трейдерам
не занимают payout

Из данных за 30 дней: 5 137 senders всегда fail, 2 918 senders всегда платят — поведение стабильно (R²≈0.85 по split-half).

Layer 5 · receipt recovery v9 new

Что снижает refund (главная потеря)

Refund = sender реально заплатил, мы reject'нули, sender приходит за апелляцией → возвращаем. Главный канал потерь (3% baseline → 1.5% в v9).

1. Late-receipt recovery — 24h окно

Если payin REJECT по timeout, но в течение 24 часов sender присылает чек → конвертируем reject обратно в success. Эффект: −0.4 п.п. refund.

2. TRUSTED никогда не auto-reject

Sender TRUSTED → даже после timeout НЕ в REJECT, а в manual review саппорта. Эффект: −0.5 п.п.

3. Payin retry в очереди

Payin без подходящего payout не сразу rejected — держится 5-10 мин на случай если новый payout появится. 70% таких ждут. Эффект: −0.9 п.п.

4. Early-close TRUSTED

TRUSTED + нажал «я заплатил» → закрываем payout успехом сразу, не ждём receipt. Снижает p90 на 5-10 мин.

Layer 6 · overpay ledger

Книга переплат вместо тихих потерь

Старое

Sender перевёл 1100₹, надо 1000₹

Разница 100₹ → запись в Expense (SYSTEM_ERRORS)

Никто не возвращает → тихая потеря

Новое

Та же ситуация → запись в customerOverpayLedger со ссылкой на игрока

Batch-job раз в сутки → возврат 100₹ игроку

Потеря исчезает → 0% gift

Эффект: Gift% с 0.48% baseline → 0.00%.

4. Накопительный прогресс

Как пришли к v9 — пошагово

ШагTier-ALoss%Что добавили
A) PROD baseline427м4.06%текущее состояние
C) Size-aware27м ✓6.86%+reserve big-for-big, per-size partial
E) Forward-triage XL25м ✓6.94%+95% XL → trader сразу
G) Late-receipt31м ✓6.86%+24h recovery
H) TRUSTED safe-net31м ✓6.35%+TRUSTED never auto-reject
I) Overpay-ledger33м ✓3.40%+gift через ledger
K) v9 FULL ★26м ✓1.98% ✓+payin retry +ext STANDARD safe-net
5. Старое vs новое

Что выкидываем · что приходит

СтароеНовое
Сортировка по 7 правилам ORDER BYОдна формула оценки
Старые выплаты вперёдВозраст — мягкий фактор
Один tolerance для всехAsymmetric (только переплата)
Один partial-флаг на всех мерчантовPer-merchant + per-size partial
Большой payin → первому payoutReserve big для big
5 ошибок = блок foreverРастущие паузы 1ч/2ч/4ч
3-мин acqUnlocker cycleМгновенная разблокировка
Все sender одинаково4 группы по истории
REJECT через 7 мин — навсегда24h окно для late-receipt
TRUSTED reject как обычноTRUSTED никогда auto-reject
Переплаты в ExpensecustomerOverpayLedger + refund
Payin без match → reject сразуRetry в очереди 5-10 мин
6. Внедрение

План реализации — 4 недели

Неделя 1
параллельно
Переговоры с KPMI: round-кратность 500/1000/5000 + разрешение partial для 15k+ внешнее
Неделя 1-2
код
Layers 1+3+4: asymmetric · per-size partial · score-формула · H-2 unlock · exp-backoff · reserve big-for-big
Неделя 2
новая БД
Layers 5+6: customerOverpayLedger · batch refund job · late-receipt recovery (UX на виджете) · payin retry queue
Неделя 2-3
scoring
Layer 2: 4-bucket на SenderAccountPayinAggregate · TRUSTED no-auto-reject path · STANDARD safe-net · early-close TRUSTED
Неделя 3
А/Б
Ramp: 5% → 20% → 50% → 100%, каждый шаг 24-48ч
Неделя 4
доводка
Калибровка весов формулы + cap manual review саппорта
7. Дополнительные ресурсы

Куда углубиться

Исходники v9

/home/user/projects/transit/sim/best_algorithm_v9.js — финальный симулятор
/home/user/projects/transit/sim/results_v9.json — все результаты 11 пресетов

Спецификация

~/.claude/projects/-home-user-projects-transit/memory/transit_v9_final_algorithm.md

⚠️ Что НЕ покрыто (отдельные задачи)

  • Fake-receipt detection — double-pay 0.48% остался. ML авто-проверка чеков.
  • Behavioral telemetry виджета — для scoring V2 (LR/GBM)
  • Real-time A/B мониторинг — для production validation
  • Cap нагрузки manual review — TRUSTED + STANDARD safe-net увеличат поток в саппорт