Открытые метрики качества

Мы публикуем, как детектор работает на нашем тестовом корпусе: насколько полно он находит размеченные данные (recall) и насколько точны его находки (precision). Ни одно число здесь не вписано руками — все они прочитаны из артефакта замера, который собирается прогоном эвала, а тот же прогон стоит гейтом в CI.

Проверить свой текст

Итог замера

99,78 %
recall — полнота: доля размеченных значений, которые детектор нашёл
99,92 %
precision — точность: доля находок, подтверждённых разметкой
1483
записей в тестовом корпусе
40
категорий данных измерено

Счётчики, из которых посчитаны проценты: TP 1394, FP 1, FN 3. Проценты усечены вниз, поэтому читатель пересчитывает их сам: recall = TP / (TP + FN), precision = TP / (TP + FP).

Как считаются эти числа

Каждое размеченное значение корпуса сверяется с находками детектора по пересечению отрезков текста, отдельно по каждой категории:

  • TP — находка совпала с размеченным значением той же категории;
  • FP — детектор нашёл то, чего в разметке нет;
  • FN — размеченное значение детектор не нашёл.

recall = TP / (TP + FN) — доля найденного. precision = TP / (TP + FP) — доля верных находок. Знаменатель виден: в корпусе размечено 1397 значений, детектор нашёл 1394 из них и пропустил 3.

Проценты усечены вниз до двух знаков, а не округлены: округление вверх завышало бы публичное число. Рядом с процентами стоят счётчики TP/FP/FN и пороги гейта, поэтому каждое число можно пересчитать и сверить с порогом. Значение «100 %» в таблице — это результат на десятках размеченных значений одной категории, а не гарантия на любом тексте. Precision вообще нижняя граница: разметка перечисляет не все персональные данные страницы, поэтому неподтверждённая находка не обязательно ложная.

Замер идёт на профиле без NER (enable_ner=false); организации и локации (NER) меряются отдельным профилем python -m eval.run_eval --ner и в этих числах не участвуют. Ни артефакт, ни эта страница на работу детектора не влияют, поэтому числа действительны и для коммита, в который артефакт добавлен.

По категориям

КатегорияTierTPFPFNRecallPrecision
ADDRESS23100100,00 %100,00 %
ANTHROPOMETRY43400100,00 %100,00 %
BIRTH_CERT43100100,00 %100,00 %
BIRTH_PLACE43800100,00 %100,00 %
CITIZENSHIP44400100,00 %100,00 %
CODE33000100,00 %100,00 %
CONTRACT33210100,00 %96,96 %
CREDENTIAL33000100,00 %100,00 %
DENYLIST33300100,00 %100,00 %
DOB23200100,00 %100,00 %
DRIVER_LICENSE43800100,00 %100,00 %
EDUCATION43000100,00 %100,00 %
EMAIL13200100,00 %100,00 %
EMPLOYMENT43500100,00 %100,00 %
FOREIGN_ID43200100,00 %100,00 %
GENDER43100100,00 %100,00 %
HEALTH33000100,00 %100,00 %
INCOME43100100,00 %100,00 %
IP_ADDRESS33000100,00 %100,00 %
MARITAL_STATUS43200100,00 %100,00 %
MILITARY43600100,00 %100,00 %
MONEY36200100,00 %100,00 %
PERSON13200100,00 %100,00 %
PROPERTY_STATUS43000100,00 %100,00 %
RU_ACCOUNT24200100,00 %100,00 %
RU_BIK23100100,00 %100,00 %
RU_CARD15000100,00 %100,00 %
RU_CARD_EXPIRY23000100,00 %100,00 %
RU_CVV23000100,00 %100,00 %
RU_INN15000100,00 %100,00 %
RU_KPP23100100,00 %100,00 %
RU_OGRN23000100,00 %100,00 %
RU_OGRNIP23300100,00 %100,00 %
RU_PASSPORT13400100,00 %100,00 %
RU_PHONE14400100,00 %100,00 %
RU_SNILS14600100,00 %100,00 %
SECRET_API_KEY33300100,00 %100,00 %
SECRET_GENERIC3320391,42 %100,00 %
SOCIAL_STATUS43200100,00 %100,00 %
VEHICLE_PLATE33000100,00 %100,00 %

Tier — группа категорий с разными требованиями: Tier 1 — критичные персональные данные и платёжные реквизиты, Tier 2 — реквизиты, адрес и дата рождения, Tier 3 — шумные и контекстные категории, Tier 4 — анкетные поля из перечня видов персональных данных.

Пороги гейта

Эти числа — не приз, а условие сборки: прогон эвала падает, если порог нарушен, поэтому публикуемый результат нельзя тихо опустить. Пороги намеренно ниже измеренного — именно поэтому измеренное значение не подогнано под порог.

ТребованиеПорог
Общий recall (structured-RU)0,85
Tier 1 — критичные Пдн (паспорт, СНИЛС, ИНН, карта, ФИО, телефон, почта): recall0,97
Tier 1 — precision0,85
Tier 2 — реквизиты, адрес, дата рождения: recall0,95
Tier 3 — шумные и контекстные категории: recall (отчётный порог, CI им не блокируется)0,75
Precision — обязателен для всех категорий0,8
NER-профиль (--ner): recall0,75
NER-профиль (--ner): precision0,7

Как проверить этот замер

Команда замера
python -m eval.run_eval — тот же прогон стоит гейтом в CI
Перегенерация артефакта
python scripts/quality_report.py — собирает артефакт из этого прогона
Артефакт замера
api/quality_report.json — из него читают числа и эта страница, и главная; расхождение ловит тест
Проверка свежести артефакта
python scripts/quality_report.py --check-digests — сверит дайджесты корпуса и детектирующих источников (секунды, без прогона эвала); --check — полная сверка со свежим прогоном
Отпечаток замера (сверьте свой)
a560e37b46aecf434ccd5715e2e6e29ebd7cde9d9ab390deaf3ea4ac3db58a8f — sha256 от канонического JSON секции замера (ensure_ascii=False, sort_keys=True). Повторите прогон и сравните: у вас должен получиться этот же отпечаток; два прогона подряд дают побайтово одинаковый вывод. Команда печатает отпечаток: python scripts/quality_report.py --check-digests
Ревизия на момент замера
5e6d5289ed8710a301e3f9e00fbf6a4ae2a5b081 — ревизия, на дереве которой выполнен прогон, а не коммит, в который добавлен артефакт: замер идёт до коммита, а коммит не может содержать собственный хеш. Свежесть артефакта определяется не этой строкой, а дайджестами корпуса и детектирующих источников — python scripts/quality_report.py --check-digests
Дата замера (UTC)
2026-10-10
Тестовый корпус
версия 4.3, 1483 записи, дайджест sha256:873dbb53a885

Чего эти числа не значат

Специальные категории персональных данных. В таблице есть категории специальных данных (например, HEALTH): детектор у облачной и self-hosted версий общий, и замер честно показывает его работу. Но облачный сервис специальные категории не обрабатывает — при их обнаружении он отказывает в обработке, запрос отклоняется с сообщением об отказе, а содержимое не сохраняется и не передаётся. Для работы с такими документами предназначена self-hosted версия: /business. Формулировка отказа — в политике конфиденциальности и в оферте.

Сомневаетесь в цифре или нашли расхождение с тем, что видите у себя? Напишите нам — форма сообщения об ошибке детекции не требует персональных данных. Метод, пороги и ограничения этой страницы стоит читать вместе с разделом «Безопасность и соответствие».

Что дальше