UNPKG

@arizeai/phoenix-evals

Version:
104 lines (81 loc) 4.59 kB
--- title: "Classification Metrics" description: "Precision, recall, and F-beta code evaluators in @arizeai/phoenix-evals" --- The `code` entrypoint provides deterministic, non-LLM evaluators for classification metrics: precision, recall, and F-beta (including F1). Unlike the per-row LLM evaluators elsewhere in this package, these are dataset-level — `expected` and `output` are the full sequence of labels across every example you want to score together, not a single row's label. <section className="hidden" data-agent-context="relevant-source-files" aria-label="Relevant source files"> <h2>Relevant Source Files</h2> <ul> <li><code>src/code/index.ts</code></li> <li><code>src/code/classificationMetrics.ts</code></li> </ul> </section> ## Example ```ts import { createF1Evaluator } from "@arizeai/phoenix-evals/code"; const f1 = createF1Evaluator(); const result = await f1.evaluate({ expected: ["cat", "dog", "cat", "bird"], output: ["cat", "cat", "cat", "bird"], }); // { score: 0.6 } ``` ## Built-In Evaluator Factories - `createPrecisionEvaluator(options?)` — `score` is precision - `createRecallEvaluator(options?)` — `score` is recall - `createF1Evaluator(options?)` — `score` is F1 (F-beta with `beta: 1`) - `createFBetaEvaluator(options?)` — `score` is F-beta; set `beta` to weight recall (`beta > 1`) or precision (`beta < 1`) more heavily - `createPrecisionRecallFScoreEvaluators(options?)` — returns `{ precision, recall, fScore }`: three separate evaluators built from one shared options object Each evaluator resolves to a single `{ score }`. (Python's `PrecisionRecallFScore` returns all three scores from one call; in TypeScript each evaluator yields one score, so use the bundle above to get all three.) Each factory accepts the same options: ```ts interface PrecisionRecallFScoreOptions { beta?: number; // default 1 average?: "macro" | "micro" | "weighted"; // default "macro" positiveLabel?: string | number; // for binary one-vs-rest scoring zeroDivision?: number; // default 0, used when a metric is undefined (0/0) } ``` ## Binary Classification ```ts import { createPrecisionEvaluator, createRecallEvaluator, } from "@arizeai/phoenix-evals/code"; const precision = createPrecisionEvaluator({ positiveLabel: "spam" }); const recall = createRecallEvaluator({ positiveLabel: "spam" }); const example = { expected: ["spam", "ham", "spam", "ham", "spam"], output: ["spam", "spam", "ham", "ham", "spam"], }; await precision.evaluate(example); // { score: 0.667 } await recall.evaluate(example); // { score: 0.667 } ``` ## Multi-Class Averaging ```ts import { createPrecisionRecallFScoreEvaluators } from "@arizeai/phoenix-evals/code"; // "macro" (default): unweighted mean across classes // "weighted": mean weighted by each class's support // "micro": pool TP/FP/FN across classes first (equals accuracy for // single-label multi-class problems) const { precision, recall, fScore } = createPrecisionRecallFScoreEvaluators({ average: "weighted", }); ``` ## When To Use - Scoring classification or labeling tasks (routing, tagging, moderation categories) against ground-truth labels - Comparing predicted vs. expected label sequences collected from an experiment or dataset - Choosing an F-beta weighting that matches the cost of false positives vs. false negatives for your task (e.g. `beta: 2` when missing a true positive is costlier than a false alarm) For the underlying formulas, the precision/recall tradeoff, averaging-strategy semantics, and citations, see the [Precision / Recall / F-Score](/docs/phoenix/evaluation/pre-built-metrics/precision-recall-fscore) guide. A runnable walkthrough covering binary classification, F-beta tradeoffs, and all three averaging strategies lives in the package's [`examples/classification_metrics_example.ts`](https://github.com/Arize-ai/phoenix/blob/main/js/packages/phoenix-evals/examples/classification_metrics_example.ts). <section className="hidden" data-agent-context="source-map" aria-label="Source map"> <h2>Source Map</h2> <ul> <li><code>src/code/index.ts</code></li> <li><code>src/code/classificationMetrics.ts</code></li> <li><code>src/code/createClassificationMetricEvaluator.ts</code></li> <li><code>src/code/createPrecisionEvaluator.ts</code></li> <li><code>src/code/createRecallEvaluator.ts</code></li> <li><code>src/code/createFBetaEvaluator.ts</code></li> <li><code>src/code/createF1Evaluator.ts</code></li> <li><code>src/code/createPrecisionRecallFScoreEvaluators.ts</code></li> </ul> </section>