# Reproduction of the documented baselines

Verified 18 Sept 2026 by `agent@patrik-codex-1` (Task 2), independently re-run by `agent@patrik-claude-1`. The Parquet's SHA-256 was checked by hand (`shasum -a 256`) against [data-setup.md](../data-setup.md) before both runs; **the script itself does not verify the checksum, and it prints values — it does not assert against this table.** Verify the checksum yourself before trusting a rerun.

Command (read-only; nothing is written; no raw identifiers are printed):

```
python scripts/verify/reproduce_baselines.py <path-to-parquet> --seed 42
```

## Result

| Figure | Documented | Reproduced (seed 42) | Result / likely cause |
| --- | ---: | ---: | --- |
| Total volume | 11,346.9 GB | 11,346.9 GB | match |
| Streaming / Social / Web shares | 30.2% / 21.4% / 15.5% | 30.2% / 21.4% / 15.5% | match |
| 5G row / volume share | 25.6% / 93.0% | 25.6% / 93.0% | match |
| 5G:4G median download ratio | 6.75× | 6.75× | match |
| Top 1% / 10% volume share | 40.9% / 84.9% | 40.9% / 84.9% | match |
| Uusimaa volume share | 40.3% | 40.3% | match |
| Complete application-set uniqueness | 9.1% | 9.1% | match |
| Linkage (truth-assisted diagnostic): time+province (1/2/3 observations) | 0 / 0.2 / 0.8% | 0 / 0 / 1.0% | seed-dependent sample; original seed absent |
| Linkage: time+province+app | 0 / 16.2 / 85% | 0.2 / 15.6 / 80.6% | seed/row selection unspecified |
| Linkage: time+base station | 0.2 / 75 / 99.8% | 0 / 72.2 / 99.8% | seed/row selection unspecified |
| Linkage: time+base station+app | 6.2 / 100 / 100% | 7.2 / 100 / 100% | seed/row selection unspecified |

## What the linkage rows are

The four linkage rows are the historical procedure from [linkage-baseline.md](linkage-baseline.md): raw `msisdn` is factorised, candidate sets are grouped by true subscriber, and 1/2/3 observations are intersected. In milestone-1 terminology that is the **truth-assisted diagnostic** (`linkage_*_oracle`), not the release-compatible single-record test — see `docs/demo.md`. Seed sensitivity: rerunning with `--seed 0` and `--seed 2026` moved the linkage figures by several percentage points in the verifier's session while the deterministic figures stayed exact; those two runs' outputs were not recorded, so treat that as an observation, not a reproducible claim.

## Finding

Every deterministic figure in [utility-baseline.md](utility-baseline.md) and [linkage-baseline.md](linkage-baseline.md) reproduces exactly. The linkage-attack figures do not: [linkage-baseline.md](linkage-baseline.md) samples 500 subscribers and one row per timestamp but records neither the seed nor the row-selection rule, and seeds 0, 42 and 2026 move the figures by several percentage points while the deterministic figures stay exact. The documented linkage numbers are therefore indicative, not reproducible to the decimal.

Consequence for milestone 1: the privacy evaluation must record seed and candidate/row selection in the result provenance (the v0.1 result schema provides for this), and any comparison against these documented figures must rerun the attack with the same recorded procedure rather than quoting this table.
