Institutional evaluation
Test the ranking on your own terms.
A rights-cleared sample built only from public SEC 13F filings, the evaluator that scores it, the controls we have run against it, and the protocol for a forward test graded on filings that do not exist yet.
Run it yourself
Four quarters, scored by the published evaluator.
Out-of-sample rankings from the SEC-only model for 2025-06-30 to 2026-03-31: 28,092 candidate rows across 55 managers, with the realised outcome and a peer-count baseline. Identifiers are one-way hashes, so the sample measures the method without publishing holdings.
curl -O https://priormoves.com/data/sec-eval/predictions.csv curl -O https://priormoves.com/data/sec-eval/outcomes.csv curl -O https://priormoves.com/data/sec-eval/pm_evaluate.py python3 pm_evaluate.py predictions.csv outcomes.csv \ --sha256 a770c66a9365ca341b4e2e368111c9142933735b2cabbc4efc6aadf1370f7cd5
| Measure | SEC-only model | Peer-count baseline |
|---|---|---|
| Pair-weighted AUC | 0.6865 | 0.6458 |
| 95% interval, resampling managers | 0.6525 to 0.7324 | 0.6099 to 0.6953 |
| Top-decile lift over base rate (1.57%) | 6.042× | 5.594× |
| Precision at 10 | 0.1004 | 0.0924 |
| Model minus baseline, paired by manager | +0.0407 (95% interval 0.0157 to 0.0645; above zero in 100% of 500 resamples) | |
| Integrity: hash, timestamps, duplicates | hash matches; 0 late rows; 0 duplicates | |
Timestamps in this historical sample are simulated: a prediction is dated 45 days after its quarter, when its inputs were last filed, and the outcome 45 days after the next quarter. The same model configuration was evaluated on these quarters before, so this is a reproduction, not a fresh holdout.
Controls
Shuffled labels and simple baselines.
Over 25 quarters (2020-03-31 to 2026-03-31) the SEC-only model averages 0.6635 within-manager AUC. Refitting it 5 times on labels shuffled inside each manager and quarter gives 0.5365 on average (best 0.5583); random scores give 0.5143. The real model beats every shuffle in 18 of 25 quarters. The strongest single input, how many other managers hold the issuer, scores 0.6368 alone, and the model beats the best single input in 15 of 25 quarters. Most of the ranking is peer popularity; the model adds a modest, inconsistent margin over it.
A shuffled-label control rules out skill produced by manager identity, base rates or fold structure. It cannot detect leakage in which rows exist. Source: runs/gates/q25_sec_shuffle_and_baselines.json.
Model cards
Each model, with its own target and evidence.
| Model | Target | Result | Status |
|---|---|---|---|
| US per-manager next entry | New position in the next 13F | 0.6762 pair-weighted, CI 0.6563 to 0.7002; 49 managers, 35 quartersruns/gates/us13f_pair_weighted_auc.json | Served (feeds board), frozen |
| Same predictions, stock-only labels | New share position, options and bonds removed | 0.6611 on 119,124 rows; same 49 managersruns/gates/q24_option_rows_in_labels.json | Diagnostic |
| Shared board ranker (a ranking model) | Next-filing appearance across managers | 0.5603 on 837 scored units; binary control 0.4978runs/gates/V19_rank_board_promotion.json | Served, frozen |
| SEC-only ranker | New position in the next first-within-45-days filing | 0.6635 mean manager AUC over 25 quarters; peer-count baseline 0.6368runs/gates/q25_sec_shuffle_and_baselines.json | Shadow, rights-cleared |
| Japan next filing | Next large-shareholding report | 0.7325, CI 0.6357 to 0.8267; 19 investors; shuffled 0.4968runs/gates/claim_facts.json | Market board |
| Adds, trims, exits | Change in an existing reported position | Adds 0.581, trims 0.553 (12 managers); exits 0.666runs/action_heads_gate.json; runs/gates/q8_cap_false_exits.json | Research only |
| Returns | Excess return after the filing is public | Best of 8 pre-specified transforms |t| = 1.00 against a 2.57 barruns/gates/A1_rank_to_return.json | Not demonstrated |
These measure different targets on different populations and are not interchangeable. The US figure is an upper estimate: survivors carry +0.051 AUC per investor, paired, on scored names (28 of 33), a lower bound.
How much to trust these numbers
Every figure, with the tries behind it.
The project has registered 513 hypotheses and settled 498 of them, failures included. The 15-name backtest was chosen among 33 configurations of the same backtest (names per quarter, filing lag, leak-free variants). Corrected for that many tries, its deflated Sharpe ratio is 0.339: the probability that its Sharpe ratio of 0.444 a year beats what the luckiest of 33 skill-free configurations would show. Uncorrected, the probability that it beats zero is 0.957. Telling skill from that much choice needs 22.7 years of quarters; the backtest has 8.8.
- Delistings: 0 of 525 backtest picks lacked a price over their holding quarter, so none left the average that way. The open risk sits upstream: names without a row in data/tickers/cusip_to_ticker.parquet never enter the ranking; if that map was built from today's listings, names that later delisted are missing from early quarters.
- Survivorship in the ranking: survivors score higher per manager (28 of 33), so the US figure is an upper estimate.
- Probability of backtest overfitting: not computed yet. CSCV needs a per-quarter return series for every configuration; the configuration files on disk hold aggregates only.
Method: Bailey and López de Prado (2014). Source: runs/gates/selection_adjust.json; register runs/hypotheses/INDEX.json.
Source filings
Every forecast row names the filing it rests on.
Each of the 138 manager-quarters in the sample cites the 13F its inputs came from and the 13F that graded it. 225 of 225 cited accession numbers appear in the SEC EDGAR full index. 0 manager-quarters carry a flag (no grading filing, or one filed after 45 days). The free sample stays hashed, because an accession number begins with the filer’s CIK; the licence key table carries the manager, CIK, source accession and grading accession for every row.
What a citation looks like: Berkshire Hathaway, quarter ending 2026-06-30, accession 0001193125-26-352200, filed 2026-08-14.
| Score band (decile) | Rows | Share that came true |
|---|---|---|
| 1 | 2,810 | 0.1% |
| 2 | 2,809 | 0.0% |
| 3 | 2,809 | 0.1% |
| 4 | 2,809 | 0.3% |
| 5 | 2,809 | 0.3% |
| 6 | 2,809 | 0.7% |
| 7 | 2,809 | 0.6% |
| 8 | 2,809 | 1.2% |
| 9 | 2,809 | 2.8% |
| 10 | 2,810 | 9.5% |
Source: runs/gates/filing_citations.json.
What was knowable then
A point-in-time audit of every input.
Each input classed by whether it was observable at the simulated forecast date. This is an audit, not a certificate: the served US model still has hindsight in its candidate universe and price history.
| Input | Status | Why |
|---|---|---|
| 13F holdings (served labels and features) | PIT-sensitive | Each period keeps the LATEST-filed full filing, so a 13F/A filed after the simulated prediction date can replace the original; filed_at is carried onto rows but the choice of filing is not as-of |
| 13F holdings (SEC-only model) | Verified PIT | Only each manager's first filing within 45 days of quarter end is used; amendments and late filings are excluded by a tested cutoff |
| Candidate universe (served panel) | Known hindsight | Rows exist only for securities in the price cache, which was seeded from a 2026 forward ranking; survivors are over-represented (+0.051 AUC per investor on scored names, lower bound) |
| Candidate universe (SEC-only) | Verified PIT | Top 250 issuers by count of tracked managers holding them in the same quarter's filings; no price cache, no later information |
| Market prices and momentum | Known hindsight | yfinance history fetched for a current ticker list; delisted names are mostly absent; adjusted prices are restated after splits and dividends |
| Analyst revisions | Unknown | yfinance-derived; no verified release timestamps and no permission for commercial use |
| SEC XBRL fundamentals | PIT-sensitive | companyfacts values carry filing dates, but the ticker list fetched was a 2026 ranking, so coverage itself is hindsight; channel ablated as not load-bearing |
| Options and GDELT channels | Known hindsight | Fetched for a top-N 2026 list; ablated with the coverage flags and not load-bearing |
| Coverage flags | Known hindsight | Flag presence encodes the 2026 fetch list; ablated, not load-bearing |
| Option and principal-amount rows | Known contamination | PUT/CALL and PRN rows are summed with shares by CUSIP; stock-only labels move the frozen-prediction pair-weighted AUC 0.6762 to 0.6611 on the same 49 managers |
| Training and test windows | Verified PIT | Expanding window ending before each test quarter, with an embargo on rows whose report period falls inside the gap |
| Holdout reuse | Unknown | Many research runs read the same held-out quarters; return tests carry a family-wise bar, AUC figures do not |
| Forward record timestamps | Verified PIT | Receipts hashed and timestamped before the filing deadline; some OpenTimestamps attestations still pending |
Forward commitment
A sealed cohort, graded after the November filings.
On 2026-10-09 the SEC-only model ranked 10,448 candidates for 51 managers’ September-quarter filings. The file stays private until outcomes are graded; its hash and an OpenTimestamps proof commit to it now.
SHA-256 515a9bddd92de91a8673cf69b1eee71ba3fff3b175750ad4f6095a8ab79c04c4 · proof file · status sealed predictions outcome pending. A proof is final only once its Bitcoin attestation confirms.
Forward-test protocol
Fixed before the quarter ends.
- The firm names the managers and agrees the candidate universe and metric.
- The model identity and configuration are frozen and hashed with the rankings.
- Rankings are delivered with a SHA-256 hash and timestamp proof before the 13F deadline.
- Outcomes come from each manager’s first filing within 45 days; later amendments are ignored.
- The firm grades with this evaluator or its own code, against peer-count, persistence and shuffled baselines.
- Pass: the lower bound of the manager-clustered interval clears 0.5 and the best baseline. Fail results are reported too.
What can be delivered today
The SEC-only lane passes the source-rights gate for an external pilot. Hosted API resale is unresolved. The public board also uses five sources without commercial permission (companiesmarketcap, congress-github-aggregates, hackernews-algolia, nyt-article-search, yahoo-finance), so it is not offered as a data product. The SEC-only lane is licensed per firm at USD 30,000 to 50,000 a year, after a 3-month free trial. No hosted feed or service level exists yet.