One night of data puts the queue at chance. This replays each night of the scoring window as it actually accumulated, re-extracting rings anchored around fixed accounts so a case can be tracked across nights instead of recomputed from scratch — 44% of final-night rings had a case open the night before, and the median case was first seen on night 3 of 4.
/check serves stored neighbour counts rather than computing a ring around an account live. Everything is reproducible from the raw data with make reproduce.| replaying up to | rings found | precision if this were the last night | fraud accounts in those rings | stopped that night | running total |
|---|---|---|---|---|---|
| night 1 | 146 | 0.3035 | 61 | ₹28,000 | ₹28,000 |
| night 2 | 246 | 0.5506 | 87 | ₹63,600 | ₹91,600 |
| night 3 | 288 | 0.4839 | 45 | ₹53,500 | ₹145,100 |
| night 4 | 334 | 0.7167 | 86 | ₹67,900 | ₹213,000 |
On the final night: 188 rings appeared for the first time, 134 continued from the night before, 149 disappeared, 3 merged into another case and 9 split in two.
Full numbers in docs/results.md.