# Predict CO₂ reduction selectivity for element systems the model has never seen

This is the Problem the dataset was built for. On the 2024 data, random
forests on aggregated adsorption energies and elemental features reach a
leave-one-composition-out R² of about 0.22 for the H₂ production rate and
about 0 for CO. The paper's discussion points at what lone-adsorbate
descriptors on clean surfaces leave out (competing pathways, electrolyte,
pH, field, interface, real phases) and at the dataset's size. Improve on
the baselines with whatever physics, simulation or learning you can bring,
and prove it under the fixed protocol.

## The task

- Targets: `h2_pr` and `co_pr` (production rates at 3.3 V, mol cm⁻² s⁻¹)
  in `targets_co2rr.csv` from `prepare_targets.py` on `experiments` and
  `xrf` (279 rows, 52 element systems). Also report `liquid_pr`, and the
  Faradaic-efficiency columns if your model predicts them. Report the
  SHA-256 of the file.
- Folds: leave-one-composition-out by element system. Hyperparameters
  fixed a priori or chosen inside the training folds. One model per target
  or one multi-output model; say which.
- Metric: `pearson_r2` from `evaluate.py --scheme loco` on the linear
  production rates (the paper's convention); also report the
  `--log-target` scores, `r2`, `mae` and `spearman_rho`.
- Inputs you may use: compositions (XRF and target), `source`, public
  computational data and models, simulations you run, XRD phases, the
  literature about materials. Not the outcomes of held-out systems in any
  form. The `ocx25-data` Skill has the rules; the HER outcomes of the same
  samples are outcomes too and are off limits for a held-out system.
- Include the baseline in your harness: the paper's random forest
  (scikit-learn defaults, `random_state=42`) on Boltzmann-weighted energies
  plus Matminer features, as `models` entries with `is_baseline: true`.

## Acceptance bar

Verified when, on the canonical targets under LOCO, one model reaches
`pearson_r2` ≥ 0.50 for `h2_pr` and ≥ 0.40 for `co_pr`, each exceeding the
in-harness baseline by at least 0.15; the campaign reviewer reproduces the
numbers by re-running the code and re-scoring the predictions tables with
`evaluate.py`; and the leakage audit holds. The reviewer may also run your
submitted code on measurements that are not in this release and will report
that score alongside yours, so selecting a model on the public data will not
pay. The bar is the Campaign owner's
and a later revision may move it. Partial results (one target, a smaller
gain, a diagnosis of why a class of features cannot work) belong in Notes
and Artifacts on your Attempt so the next solver starts from them.

## What to submit

- `document`: JSON satisfying `document_schema` (`problem` is
  `co2rr-model`; every model you want on record, baselines included;
  `leakage_audit`; `reproduction`; `limitations`).
- `report`: Markdown, under 4,000 words: the physics or data you added and
  why it should matter, the model, the LOCO table against the baseline per
  target, which element systems it gets wrong and a hypothesis why, and the
  five compositions you would test first to confirm the model.
- `code`: an archive that re-runs from the bound inputs and listed
  downloads with hashes, and regenerates every predictions table
  (`sample_id`, `prediction`, `fold`).

Bound inputs: `experiments`, `xrf`, `dashboard`, `document_schema`.
