Глоссарий метрик

Все метрики из курса: формула, смысл, пример с числами, когда врёт, ссылка на доки. Печатай и держи под рукой.

1. Базовые термины классификатора

Фундамент: любая бинарная оценка (включая LLM-judge) — это классификатор с четырьмя клетками.

ТерминФормулаЧто значитПример (судья на 100 ответов, реально 5 фейлов)
TP (true positive)Фейл был, поймалиСудья зарубил 4 ответа, и все 4 реально фейлы → TP=4
FP (false positive)Фейла нет, зарубили зряСудья зарубил ещё 6 хороших → FP=6
TN (true negative)Ок, пропустили как ок89 хороших ответов пропущены → TN=89
FN (false negative)Фейл был, пропустили1 реальный фейл не замечен → FN=1
PrecisionTP/(TP+FP)Из названных фейлами — сколько реально фейлы4/(4+6)=0.4 — судья много ложно рубит
Recall = TPRTP/(TP+FN)Из реальных фейлов — сколько поймали4/(4+1)=0.8 — поймал 4 из 5
TNRTN/(TN+FP)Из хороших — сколько не зарубили89/(89+6)=0.94
F12·P·R/(P+R)Гармоническое среднее2·0.4·0.8/1.2=0.53
Accuracy(TP+TN)/всегоВрёт при дисбалансе(4+89)/100=0.93 — выглядит отлично, а Precision=0.4

Главный урок: accuracy 93% при Precision 0.4 — судья ложно рубит хорошие ответы. Всегда смотри confusion matrix целиком, не одну цифру.

Источник: Eugene Yan — Evaluating LLM-Evaluators.

2. Retrieval (поиск)

Оценивается только относительно gold — размеченного набора «вопрос → правильный chunk_id / reference». Без gold retrieval-метрик не существует.

МетрикаФормулаВопросПример
Recall@k|relevant ∩ top-k| / |relevant|Сколько из ВСЕГО нужного нашли?Gold: 3 куска. В top-5 попал 1 → 1/3=0.33
Precision@k|relevant ∩ top-k| / kСколько мусора в top-k?В top-5 из 5 выданных 2 релевантных → 2/5=0.4
Hit rate (= Pass@k)1 если |relevant ∩ top-k| ≥ 1Хотя бы один нужный нашёлся?Попал 1 из 3 → Pass@5=1, хотя recall=0.33
MRR1/rank первого relevantКак высоко первый нужный?Первый нужный на позиции 2 → 1/2=0.5
nDCG@kDCG/ideal DCG; DCG=Σ rel_i/log2(i+1)Весь порядок хорош?rel=[1,0,1]: DCG=1/1+0+1/1.585=1.63; ideal=[1,1,0]: 2.26 → nDCG=0.72
ID-recall|gold_ids ∩ retrieved_ids| / |gold_ids|Золотые doc_id найдены?Gold: [d1,d2], найдены [d1] → 1/2=0.5. Лучший дешёвый тест
Context Recall (Ragas)выводимые claims reference / все claims referenceЭталон выводится из контекста?Reference «Башня в Париже», контекст «Париж — столица» → 0/1=0[37]
Context Precision (Ragas)Σ(precision@k · v_k) / число relevant в top-K[86]Релевантные куски выше мусора?Мусор на позиции 1 снижает; на позиции 2 — нет[86]
Context Entities Recallсовпавшие сущности / сущности referenceКлючевые сущности (имена, суммы) найдены?В эталоне 3 сущности, в контексте 2 → 0.67

Pass@k vs recall@k: Pass@k бинарный («хотя бы один»), recall@k — доля («сколько из всех»). Расходятся при ≥2 правильных кусках; совпадают, если правильный кусок один. Подробно — урок 0002.

Источники: Evidently, Ragas Context Precision, Ragas Context Recall, Ragas Context Entities Recall.

3. Generation (генерация ответа)

МетрикаСутьПример с числамиКогда врёт
Faithfulnesssupported_claims / all_claims ответа относительно контекста[36]Контекст: «Эйнштейн родился 14 марта 1879 в Германии». Ответ: «…в Германии 20 марта 1879». Claims: 1 supported + 1 нет → 1/2=0.5Мусорный контекст — высокий при бесполезности
Answer relevancyИз ответа генерируются N вопросов → средний cosine к исходному[38]Вопрос про столицу Франции, ответ «Франция в западной Европе» → вопросы из ответа далеки от исходного → низкий баллЛовит лексику, не правду: «Париж — столица России» релевантно
Citation accuracyСсылка ведёт на чанк, из которого взят фактОтвет «2% [1]», а в chunk [1] «1.5%» → citation fail, хоть формат ок«Показали» ≠ «процитировали» — нужен лог shown vs cited
Task successSQL exec / поле извлечено / тикет созданSQL выполнился и вернул эталон → 1Бизнес-метрика, не RAGAS
Noise Sensitivityincorrect claims / все claims ответа (чем ниже, тем лучше)[88]Ответ из 3 claims, 1 неверный → 0.33[88]Считает именно «ответил по мусорному контексту»
Factual CorrectnessTP+TN по фактам ответа vs reference (TP/FP/FN/TN по утверждениям)Из 4 фактов ответа 3 верны, 1 лишний → F1≈0.86Нужен качественный reference

Источники: Ragas Faithfulness, Ragas Relevancy, Ragas Noise Sensitivity, Ragas Factual Correctness.

4. Тулы и агенты

Важное различие: «тул полезен системе» (ablation) vs «агент осмысленно его использует» (ACI).

МетрикаСутьПример
Tool selection accuracyПравильный тул выбран (нужен gold)На вопрос про лимит выбран cards_get_balance, а не faq_search → 1
Tool-call F1P/R по множеству вызовов vs ожидаемых[89]Ожидали [get_balance, block], агент вызвал [get_balance, get_balance] → P=1/2, R=1/2, F1=0.5
Tool call accuracy (Ragas)Точное совпадение последовательности и аргументов[89]Ожидали [block_card(reason=lost)], вызвал [block_card(reason=stolen)] → 0
Argument validityСхема + enum + бизнес-инвариант (сумма > 0). Кодом, без LLMreason=«xyz» не в enum [lost, stolen, fraud] → fail
Unnecessary callsВызов без изменения состоянияДважды вызван get_balance за 10 секунд → 1 лишний
Outcome after toolsБронь в БД, не «я забронировал»Агент сказал «заблокировано», а статус карты в БД active → 0
Agent goal accuracyЦель юзера достигнута (бинарно)[89]«Забронируй стол» → бронь есть → 1, независимо от пути тулов
Topic adherenceНе ушёл за разрешённые темы[89]Каре банка ответил про крипто-инвестиции → fail
pass@k (генерация)1 − (1−p)^k — хотя бы 1 из k попыток успешнаp=0.5, k=3 → 1−0.125=0.875
pass^kp^k — все k попыток успешныp=0.5, k=3 → 0.125. Для банка критично

Источник: Ragas Agentic metrics, τ-bench.

5. Продукт / онлайн

МетрикаСутьПример
Resolution rateРешил без эскалации70 из 100 диалогов закрыты без человека → 0.7
ContainmentЗакрыл диалог — не равно решилБот «закрыл» 80%, но 30% вернулись → containment врёт
Recontact 24–72 чВернулся с той же проблемойИз 100 решённых 15 вернулись → recontact 0.15
Escalation qualityВовремя, с контекстом, без выдуманного лимитаЭскалация на «простой FAQ» → fail
Cost / диалог, p95Экономика и UX$0.03/диалог, p95=1.8s
Guard trip rateДоля срабатываний гарда3% запросов отсечены PII-гардом — растёт = атаки или перекос
PII leak rateДоля ответов с чужими данными0.0% — обязательный ноль для банка

6. Согласие судьи с человеком

МетрикаСутьИнтерпретация
Cohen's κСогласие райтеров с поправкой на случайность0.41–0.60 = moderate; консервативная
Kendall's τСогласие ранжирований, робастен к выбросамВыше κ (не учитывает шанс-согласие)
Spearman's ρСогласие ранжирований, чувствителен к величине разницыОбычно выше κ

Eugene Yan советует бинарные выходы судьи и classification-метрики вместо корреляций: понятнее «сколько реальных фейлов пропустим».

Источник: Eugene Yan.

7. Традиционные NLP-метрики (когда НЕ брать)

МетрикаСутьКогда врёт
BLEUn-gram precision к референсуОткрытый ответ ≠ перевод: перефраз даёт 0
ROUGEn-gram recall к референсуТо же: не понимает смысл
CHRFchrF — F1 по символьным n-граммамЧуть лучше для морфологии, но та же проблема
Exact Match1 если output == goldОк для полей/JSON, бесполезен для прозы
Semantic SimilarityCosine эмбеддингов ответа и reference[91]Ловит лексику, не факты
String PresenceЕсть ли строка в ответеДёшево, но примитивно

Источник: Ragas Traditional metrics, Ragas Semantic Similarity.

8. Общие (general purpose) судьи

ТипСутьКогда
Aspect criticОдин аспект: тон, полнота, безопасностьБыстрая проверка одного измерения[92]
Simple criteriaСвой критерий + PASS/FAIL«Отказ на чужой баланс»
RubricsНесколько уровней с описаниямиКогда binary слишком груб, но шкала описана явно
Instance-specific rubricsРубрика под конкретный примерСложные задачи с индивидуальными критериями[92]

Источник: Ragas General Purpose.

9. Что считать кодом, без LLM

МетрикаСуть
Exact match / schemaПоля, JSON-ключи, статусы
Execution accuracySQL/код исполнился и совпал с эталоном (Kontur-кейс)
Tool error rate4xx/5xx / все вызовы
Latency p50/p95, tokens, $Перцентили, экономика
WER (для STT)Word Error Rate на своих звонках, не LibriSpeech
Field-level F1 (для OCR)F1 по полям: сумма, дата, имя; exact match на деньгах
Правило выбора Сначала error analysis — найди реальные фейлы. Потом бинарный eval на топ-фейл. Code-based — если можно. LLM-judge — только для того, что кодом не выражается. Generic-метрики (BLEU/ROUGE/helpfulness) — мимо.

Sources: