Как работает детектор

Берём публичные данные матчей из OpenDota и Stratz и считаем несколько оценок. Это не приговор, а статистика — итог всегда вероятностный, поэтому смотри на него как на подсказку.

ИсточникиOpenDota · Stratz · DotaBuff
6 сигналовповедение
Скор 0–100взвешенно
Вердикт5 уровней

Шкала вердикта (0–100)

Чисто
<20
Маловероятно
20–39
Подозрительно
40–59
Вероятно
60–79
Смурф
80+

Источники данных

OpenDota — список матчей, винрейт, GPM/XPM, KDA. Stratz — детали всех 10 игроков матча, IMP, ранги, ML-флаг смурфа, behavior score. DotaBuff — резервный источник (best-effort). Источники образуют цепочку с фолбэком: если OpenDota пуст или недоступен, данные берутся из Stratz, затем DotaBuff.

Смурф-вердикт (0–100)

Взвешенная сумма применимых сигналов с ренормировкой весов:

score = Σ(rawᵢ · weightᵢ) / Σ(weightᵢ) · 100

Плюс «флор от сильнейшего сигнала», чтобы один убойный сигнал не растворялся нулевыми:

score = max(score, (maxRaw − 0.35) · 90)

Ориентировочный вклад сигналов:

Перформанс выше ранга22
Скачки винрейта20
Пати-буст16
Зрелость аккаунта15
ML-флаг Stratz12
Новые / воскресшие герои8
Возраст vs ранг7

Веса ориентировочные: движок ренормирует только применимые к конкретному аккаунту сигналы.

Booster-скор (0–100)

Факторы: сурж винрейта (последние 30 vs общий), резкий рост KDA и GPM/XPM (свежие 15 vs предыдущие 20), малый пул героев, длинный винстрик, перформанс выше ранга. Порог пометки — 55.

surge = clamp((WR₃₀ − WR_total − 0.08) / 0.27)
Сурж WR Рост KDA Рост GPM/XPM Малый пул героев Длинный винстрик Перформанс > ранга

Целостность аккаунта / купленный аккаунт

Сравнивает «старое» и «новое» окно матчей: сдвиг пула героев (расстояние Жаккара), изменение винрейта, длительности игр, игровых метрик.

Старое окно
пул A · WR ~50% · свой стиль
Новое окно
пул B · WR ~72% · другой стиль
integrity = 100 − suspicion · «Possible Account Buyer» при suspicion ≥ 55

Скрытые профили — наша киллер-фича

Смурфы и бустеры почти всегда прячут историю матчей. Обычные чекеры на таком профиле показывают «нет данных». Мы — находим их игры.

В Dota две разные настройки приватности. «Анонимный ник» скрывает только имя — история остаётся открытой, и мы анализируем её полностью. «Expose Public Match Data = OFF» скрывает саму историю: её не отдаёт ни OpenDota, ни Stratz, ни DotaBuff.

Ключевая идея: даже скрытый игрок виден в деталях матча, куда мы дошли через ОТКРЫТОГО со-игрока. Алгоритм идёт «лесенкой» по графу совместных игр и собирает матчи скрытого профиля:

  1. Сиды (точки входа): наша база отслеженных игр, друзья игрока в Steam, ссылка на любой его недавний матч.
  2. Для каждого матча Stratz отдаёт всех 10 игроков — скрытый виден по accountId и со статистикой.
  3. Берём его открытых со-игроков и находим их общие с ним матчи — так всплывают новые игры скрытого профиля. Повторяем.
  4. Каждый найденный матч сохраняется в базу — покрытие растёт со временем и работает уже для всех.

На скрытом профиле появляется кнопка «Глубокий поиск» — она и запускает эту лесенку. Восстанавливается подмножество матчей (те, куда удалось дойти через открытых игроков), которого обычно достаточно для вердикта.

Матчмейкинг-аналитика

  • Скрытопул — средний WR последних 15 у вашей команды заметно ниже, чем у врага (порог 12%).
  • Лузстрик/винстрик — игроки на серии ≥3 матчей.
  • Честность матча — категория: со смурфами / скрытопул / с бустерами / обычный.
  • Токсичность матчмейкинга — метрики на 100 игр + перцентиль среди пользователей.

Прогноз качества матча

Аналитико-развлекательная оценка сложности следующей игры по статистике последних матчей и текущему стрику. НЕ предсказывает реальный исход.

Все пороги — эвристики и подлежат калибровке. Не аффилировано с Valve, OpenDota и Stratz.