# Evaluate on a test set

This tutorial shows how to evaluate a trained checkpoint on a held-out dataset
and inspect the output metrics.

Use it when you want to measure how a model performs on labelled data that was
kept aside for testing.

## Before you start

You need:

- a test dataset config,
- a trained checkpoint or model alias.

```{note}
This page is for model evaluation.
If you only want to run BatDetect2 on recordings, start with
{doc}`run-inference-on-folder` instead.
```

## What you will do

By the end of this tutorial you will have:

- prepared a test dataset config,
- run `batdetect2 evaluate`,
- written evaluation metrics and result files,
- identified the next pages for model choice and evaluation configuration.

## 1. Create a test dataset config

Evaluation needs a dataset config that points to the labelled data you want to
use for testing.

This is the same kind of dataset config used for training.
It explicitly declares which data sources BatDetect2 should read, including the
audio files and their annotations.

For an example, see `example_data/dataset.yaml`.

If you need help creating the dataset config, follow the dataset section in
{doc}`train-a-custom-model`.
For more detail on dataset source formats, see
{doc}`../reference/configs/data/data-sources`.

Use a dataset that was not used for training or tuning.

## 2. Run evaluation

For a simple run, use:

```bash
batdetect2 evaluate \
  path/to/test_dataset.yaml
```

If you do not pass `--model`, BatDetect2 uses the built-in default UK model.
If you want to choose a different checkpoint, alias, or Hugging Face model, see
{doc}`../how_to/inference/choose-a-model`.

If you want to save the results somewhere else, add `--output-dir`:

```bash
batdetect2 evaluate \
  path/to/test_dataset.yaml \
  --model path/to/model.ckpt \
  --output-dir path/to/eval_outputs
```

This command loads the model, runs prediction on the test dataset, applies the
evaluation tasks, and writes the results to the output directory.

## 3. Check the output files

By default, the CLI writes evaluation outputs to `outputs/evaluation`.

With the default evaluation config, a run will usually create a folder like
this:

```text
outputs/evaluation/
  version_0/
    metrics.csv
    hparams.yaml
```

The most important file is `metrics.csv`.
It contains the metric values computed for the evaluation run.

A file like this might start like:

```csv
classification/average_precision/barbar,classification/average_precision/cneser,...,detection/average_precision
0.898695170879364,0.9408193826675415,...,0.851219117641449
```

The exact columns depend on the evaluation tasks you run.

The `hparams.yaml` file records the config used for the evaluation run.

## 4. Expect extra plots and files when configs enable them

You may also see extra outputs such as plots and saved predictions.

For example, if you run evaluation with `example_data/configs/evaluation.yaml`,
you should expect a richer output folder with:

- `metrics.csv`
- `hparams.yaml`
- a `plots/` directory
- a `predictions/` directory

That config enables more evaluation tasks and plots than the default setup.

So, depending on your evaluation config, you may see files such as:

- precision-recall plots,
- ROC curves,
- confusion matrices,
- example detection plots,
- saved prediction files.

If you want to control which tasks run and which plots are generated, see
{doc}`../reference/configs/evaluation/evaluation-config` and
{doc}`../how_to/evaluation/choose-and-configure-evaluation-tasks`.

## Common next steps

- Choose a different model:
  {doc}`../how_to/inference/choose-a-model`
- Configure evaluation tasks:
  {doc}`../how_to/evaluation/choose-and-configure-evaluation-tasks`
- Interpret evaluation artifacts:
  {doc}`../how_to/evaluation/interpret-evaluation-outputs`
- Learn the evaluation concepts:
  {doc}`../explanation/evaluation-concepts-and-matching`
- Check full evaluate options:
  {doc}`../reference/cli/evaluate`
