|
Download docs/origin_eval_protocol.md from Anish-g/btc-intel: direct link, hf CLI and curl.
- Browser
- Download file 2.95 kB
-
https://huggingface.co/spaces/Anish-g/btc-intel/resolve/main/docs/origin_eval_protocol.md
- Command line
-
hf download hf://spaces/Anish-g/btc-intel/docs/origin_eval_protocol.md
-
curl -L -o origin_eval_protocol.md https://huggingface.co/spaces/Anish-g/btc-intel/resolve/main/docs/origin_eval_protocol.md
2.95 kB
| # Origin estimator selection protocol | |
| **Pre-registered. Written and committed before the topology fix was made or any | |
| post-fix numbers were seen.** | |
| ## Why this exists | |
| The first comparison of origin estimators was run, the result was read, and the | |
| default was then changed to match it. That is defensible once, but it is also | |
| exactly how a result gets chosen rather than measured β especially now that we | |
| are about to change the generator's topology in a way we expect to help the | |
| centrality estimators specifically. Deciding the rule in advance removes the | |
| opportunity to rationalise whichever number comes out. | |
| ## The rule | |
| > After fixing topology realism, the default estimator is whichever has the best | |
| > top-1 accuracy at observation rate 0.3. Ties go to `first_timestamp`. | |
| "Tie" means a difference of less than 1 percentage point in top-1 accuracy on | |
| the canonical evaluation dataset. `first_timestamp` wins ties because it is the | |
| simplest estimator and the cheapest to explain to an investigator. | |
| ## What is fixed in advance | |
| - **Dataset**: the canonical one from `config.yaml`'s `eval:` block β seed 41, | |
| 200 actors, 1200 transactions. Stated in `eval/results.md` with every table. | |
| - **Decision rate**: observation rate 0.3. Rates 0.1 and 0.6 are reported for | |
| context but do not decide the default. | |
| - **Metric**: top-1 accuracy β the estimated origin equals the generator's | |
| recorded `observed_origin_ip`. Not top-3, which is nearly saturated at the | |
| ceiling for every estimator and therefore does not discriminate. | |
| - **Candidates**: `first_timestamp`, `rumor_centrality`, | |
| `timestamp_weighted_centrality`, each with the relay/Tor/hosting class | |
| weighting applied, as configured. | |
| - **Ceiling**: reported alongside, as the fraction of multi-hop transactions | |
| whose true origin appears anywhere in the observed tree. No estimator can | |
| exceed it; an estimator's share of the ceiling is the honest comparison. | |
| ## What is also reported, but does not decide | |
| - Conditional accuracy: accuracy restricted to transactions where the origin | |
| was observed at all. This separates "the estimator is bad" from "the evidence | |
| is not there". | |
| - Calibration: reliability curve of stated confidence against correctness, plus | |
| a Brier score. An estimator that is wrong but honest about it is more useful | |
| than one that is wrong and confident. | |
| - Ablation with and without the relay/Tor/hosting class weighting, to show what | |
| that filter is worth. | |
| - The `low_confidence_origin` flag's precision and recall (renamed from | |
| `origin_likely_unobserved`; its cutoff is now chosen and reported per | |
| `docs/detection_unit_protocol.md`). | |
| ## What would invalidate this | |
| If the topology fix changes the ranking, that is the answer, not a reason to | |
| re-open the rule. If a later change to the generator alters the result again, | |
| the rule still applies: re-run, re-read, re-default. Any deviation must be | |
| written into `eval/results.md` with its reason. | |