A monthly bird occurrence dataset for three protected wetlands in the Valencian Community (Spain), built by harmonising professional censuses, citizen-science records (eBird), and acoustic detections (BirdNet) into a single long-format table with consistent species and sub-region identifiers.
.
├── README.md
├── data/
│ ├── dataset_full.csv unified dataset, all sources, all months
│ ├── train_all_sources.csv train split, full augmented (last 3 months held out)
│ ├── test_all_sources.csv test split, full augmented
│ ├── train_census_only.csv train split, census records only
│ ├── test_census_only.csv test split, census records only
│ ├── encodings/ *_id ↔ label codebooks
│ └── mappings/ spatial / taxonomic harmonisation tables
├── scripts/
│ └── train_models.py reference MLP / LSTM baselines
├── models/ trained baseline checkpoints (.pt)
└── results/
├── results.csv test MSE / RMSE per (model, condition)
└── training_history.json epoch-by-epoch train/val MSE
Each row in data/dataset_full.csv is one (source, sub-region, year, month, species)
observation:
| Column | Type | Description |
|---|---|---|
year, month |
int | Calendar year / 1–12 |
month_sin, month_cos |
float | Cyclic encoding of month |
scientific_name, subregion, source |
str | Categorical labels |
species_id, subregion_id, source_id |
int | Stable encodings |
count |
int | Raw observation count |
total_monthly |
int | Σcount within (source, subregion, year, month) |
probability, probability_pct |
float | Target — share of monthly group total |
Probabilities sum to 100 % within each (source, subregion, year, month) group.
They are computed per-source so that count-incompatible sources (checklists,
detections, exhaustive counts) are not mixed at the ratio step.
67,787 rows 190 unique year-months (Jan 2010 – Dec 2025)
395 species 12 sub-regions
3 sources eBird (62,824) | Census (4,626) | BirdNet (337)
| Wetland | IBA code | Sub-regions |
|---|---|---|
| Parc Natural d'El Hondo | BIRDLIFE_1824 | Embalse Levante · Zona Central · Poniente Sur · La Reserva · Zona Rincón · Zona Norte |
| Salinas de Santa Pola | BIRDLIFE_1825 | Pinet · Torre Tamarit · Bon Matí · Norte |
| Lagunas de La Mata–Torrevieja | BIRDLIFE_1826 | Laguna La Mata · Laguna Torrevieja |
Sub-regions correspond to ecologically distinct habitats and align both with
groupings of census micro-zones (mappings/mapping_census.csv) and with named
eBird sub-localities (mappings/mapping_ebird.csv).
| Source | Description | Coverage |
|---|---|---|
| Census | Monthly bird counts from professional ornithological surveys, one Excel workbook per wetland-year. | Jan–Dec 2025 (all 3 wetlands); + Jan–Dec 2024 (Santa Pola only) |
| BirdNet | Acoustic detections from a single Raspberry Pi 5 sensor at El Hondo. | 24 Sep 2024 – 10 May 2025 |
| eBird | Citizen-science observations (eBird Basic Dataset, ES-VC release Nov-2025), filtered to the three target IBA codes. | 2010 onward |
Chronological — the three most recent year-months are held out as the test set.
| Split | Train | Test |
|---|---|---|
*_all_sources.csv |
65,802 | 1,985 |
*_census_only.csv |
3,807 | 819 |
The census-only split allows direct evaluation of whether augmentation by citizen-science and acoustic data improves predictions on the professional-census target.
Spatial harmonisation. Census files use internal management codes for
sub-zones (e.g. Eb.Levante, CALENTADORES, Punta Víbora); eBird uses
citizen-science labels (e.g. El Hondo PNat--Embalse de Levante). Direct text
matching does not work. Resolution is in two passes: (1) a manually-curated
keyword mapping from named eBird sub-localities to the unified sub-region
covering the same physical area, and (2) nearest-centroid fallback for the
~40 % of eBird records whose locality is a generic GPS-aggregator point. The
12-sub-region grouping is the optimum point on the sparsity–granularity
trade-off — every sub-region has either ≥ 800 eBird observations or
substantial census coverage, and every census micro-zone maps unambiguously.
Taxonomic harmonisation. Census records use scientific names directly.
eBird provides both common and scientific names. BirdNet uses English common
names with underscores; some differ from eBird-ES naming conventions
(e.g. Cettis_Warbler vs Cetti's Warbler, Barn Owl vs Western Barn Owl).
The complete BirdNet → scientific name lookup is in
data/mappings/taxonomy_lookup.csv. All 119 BirdNet species are resolved.
Probability label. Right-skewed by construction: median 0.4 %, p99 39.6 %, max 100 %. A few dominant species (flamingos, coots, avocets) account for the bulk of individuals at any given site and time.
scripts/train_models.py provides two baseline architectures, trained twice
each (full augmented vs census-only) with identical hyperparameters. They are
not optimised models — they exist to demonstrate the dataset is usable for
spatio-temporal occurrence prediction.
| Model | Training set | Test MSE | Test RMSE |
|---|---|---|---|
| MLP | All Sources | 39.02 | 6.25 |
| MLP | Census Only | 56.54 | 7.52 |
| LSTM | All Sources | 32.10 | 5.67 |
| LSTM | Census Only | 56.08 | 7.49 |
Metric: MSE on probability_pct (0–100 scale).
- BirdNet sub-region: sensor PI5 is at El Hondo, but its specific
sub-region is not documented in the raw data path. All BirdNet records are
assigned to
El Hondo - La Reserva. - eBird
OBSERVATION COUNT == 'X'records (presence-only) are treated as 1 individual. Strict count-based analyses should filter these out. - Laguna de Torrevieja has only ~85 eBird records because the lagoon is hypersaline and supports almost no birdlife — predictions for this sub-region rely primarily on census data.
- Per-source probability normalisation: probabilities are computed within
each source independently. Users wanting a single combined probability
should re-aggregate from the raw
countcolumn.