v9 FINAL · все KPI ✓
Алгоритм transit-выплат
v9 FINAL
9 итераций · реалистичная loss-модель · все 3 цели достигнуты
26 мин
Tier-A p90 (цель 60)
148 мин
Tier-B p90 (цель 180)
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 — расширенные правила матчинга
- Размерные группы (S/M/L/XL): большой payin (25k+) НЕ отдаём маленькому payout (1-2k), бережём для крупных
- Asymmetric допуск: только переплата OK, недоплата запрещена
- Per-size partial для KPMI: 15k+ можно частично закрывать
- Forward-triage XL: 95% больших full-match → сразу к трейдерам, не висят
- Round-кратность: KPMI выдаёт 500/1000/5000 — coverage 100%
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-A | Loss% | Что добавили |
| A) PROD baseline | 427м | 4.06% | текущее состояние |
| C) Size-aware | 27м ✓ | 6.86% | +reserve big-for-big, per-size partial |
| E) Forward-triage XL | 25м ✓ | 6.94% | +95% XL → trader сразу |
| G) Late-receipt | 31м ✓ | 6.86% | +24h recovery |
| H) TRUSTED safe-net | 31м ✓ | 6.35% | +TRUSTED never auto-reject |
| I) Overpay-ledger | 33м ✓ | 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 → первому payout | → | Reserve big для big |
| 5 ошибок = блок forever | → | Растущие паузы 1ч/2ч/4ч |
| 3-мин acqUnlocker cycle | → | Мгновенная разблокировка |
| Все sender одинаково | → | 4 группы по истории |
| REJECT через 7 мин — навсегда | → | 24h окно для late-receipt |
| TRUSTED reject как обычно | → | TRUSTED никогда auto-reject |
| Переплаты в Expense | → | customerOverpayLedger + 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 увеличат поток в саппорт