Tasks/Finance/Quantitative Investing

Decide whether the process behind a flagged series actually changed at its boundary

Flag structural breaks in a fleet of series

structural_break_detection Finance Quantitative Investing
instruction.mdthis is what the agent is given

You are an AI agent assisting the quantitative risk officer of a multi-strategy fund. Every week the monitoring stack flags boundary points in return, spread and execution-cost series — a suspected regime change after a macro event, an execution-cost shift after a venue migration, a factor spread that may have broken after a crowding unwind. For each flagged point you must make the call: did the generating process actually change there, or is this within-regime noise? Calling a break that is not there triggers costly de-risking and model retraining; missing a real one leaves the book sized off a dead regime. Breaks come in many flavors — level, scale, dependence, volatility persistence, tail weight — and the flavor of the next one is unknown, so the desk needs detection that transfers to break mechanisms it was never tuned on. Your job is to build the detection procedure the desk will run fleet-wide: it will be retrained and re-scored, unchanged, on flagged fleets your development never saw.

Hard Constraints

  • Submit a method: methods/main/solver.py defining exactly fit(train) -> model and predict(model, test) -> list of floats. train is a dict {"series": [[...], ...], "boundary": [...], "label": [...]} (labeled fleet: each series a list of floats, its annotated boundary index, and 1 iff the process changes there); test is a dict {"series": ..., "boundary": ...} with no labels. predict returns one float per test series, larger = more evidence of a break; only the ranking of the scores matters.
  • Each evaluation run executes fit then predict in a fresh process under a 900-second wall-clock budget (measured outside your process). Anything that takes longer than 915 s (budget + 15 s grace) is scored as the worst case for that fleet, and the process is hard-killed at 930 s regardless; crashed or wrongly-shaped outputs are scored the same worst case. The grader records a timeout and the child's exit status separately from "produced no output", so both show up in the run log.
  • Your procedure is re-run once per sealed fleet, and there are 6 of them (two halves x three fleets each), each with its own 2400-series training fleet and 800-series test fleet — the same shape as the fleet selfcheck.py uses. So the graded workload is about 6x one self-check pass, even though each individual run gets the same 900 s.
  • The whole grading stage is capped at 10800 s wall-clock, inside a container declared at 4 CPUs / 2048 MiB — the same shape as your own container. Note the interaction: 6 fleets x the full 900 s budget is 5400 s, comfortably inside the stage cap, so the per-fleet budget is the binding constraint. Also note that 4 CPUs is a share, not a reservation: on a busy host the same work takes noticeably longer wall-clock than it does on an idle one, so leave headroom rather than tuning to sit exactly at the budget.
  • CPU only, no network. Runtime: Python 3 with numpy, scipy and scikit-learn. BLAS/OpenMP threading is pinned to 4 in both this image and the grader, so your local timings match the graded ones.
  • Only files under methods/ are collected and re-run: keep everything solver.py imports inside methods/main/. Do not modify data/ or selfcheck.py.

What You Have

  • data/practice/fleet.json — 2400 labeled training series plus 800 labeled practice series, documented field by field in data/practice/DATA_CARD.md. This is your only labeled data; study it in full.
  • methods/main/solver.py — the inherited starting method: the desk's legacy screening rule, a single training-free boundary score. It carries a real signal but is far from what the fleet supports; its level is also the floor you must clearly beat before the evaluation awards any credit.
  • python3 selfcheck.py — free and unlimited: retrains your current methods/main/solver.py on the train fleet, scores the practice fleet against its labels, and prints the practice ROC-AUC plus wall-clock timings against the evaluation budget.

What You Submit

Leave your best methods/main/solver.py (plus any helper files it needs inside methods/main/) in place. There is no submit step and no feedback from the graded fleets: whatever sits in methods/main/ at the end is what the evaluation re-runs.

How It Is Judged

The evaluation re-runs your procedure — fit on a labeled training fleet, predict on an unlabeled test fleet — on sealed fleets generated from secret seeds. Every sealed training fleet is drawn from the same population as the practice fleet. The sealed test fleets come in two halves, weighted equally in the final score: one half draws fresh series from the same break mechanisms the practice fleet exhibits; the other half contains only break mechanisms absent from every training fleet — the flavor-of-the-next-break case the desk actually fears. Each test fleet is scored by the ROC-AUC of your break scores against the sealed labels; fleet scores are averaged within each half, then across the two halves. selfcheck.py computes the identical ROC-AUC on the practice fleet. Your reward rises monotonically with the sealed score; at or below the shipped starting method's level it is zero.

Metric

mean sealed ROC-AUC over the two half-fleet layers · higher is better

ROC-AUC of the break scores per sealed fleet; mean over 3 fleets per layer, then mean of indist and newfamily

anchorvisible setheld-outreward
Bshipped legacy CUSUM rule0.5723470.5490160.00
Rreference method0.7547610.6949050.30
Shidden expert (sota)0.8140000.8279570.60
Uperfect ranking (AUC 1)1.0000001.0000001.00
normalisation
m <= B0
B < m <= R0.3 * (m - B) / (R - B)
R < m <= S0.3 + 0.3 * (m - R) / (S - R)
S < m <= U0.6 + 0.4 * (m - S) / (U - S)

m = this run's held-out metric  ·  B = shipped legacy CUSUM rule  ·  R = reference method  ·  S = hidden expert (sota)  ·  U = perfect ranking (AUC 1)

Linear in raw AUC, no transform. The two layer means are averaged first and mapped once; the per-layer rewards below are diagnostic.

Rollouts

188 minwall clock
$23.65spend
32.1Mtokens
12versions, 12 kept
0.55 0.60 0.65 0.70 0.75 0.80 $0 $5 $10 $15 $20 cumulative spend on the run practice fleet ROC-AUC, higher is better hidden expert · visible · 0.814000 v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11
keptrevertedno scoreturning point
  1. v0Inherited legacy rule: standardized CUSUM at the flagged boundary, training-free0.57232 min · $0.39
  2. v162-stat two-sample battery, affine-invariant, combined by boosted trees0.78136 min · $1.28
  3. v2110 stats with delay-embedding MMD; null-conditional calibration, rank blendCalibrate each statistic against label-0 series of the same nuisances, so a generic mean-z score can carry unseen mechanisms.0.775627 min · $3.85
  4. v317 more generic stats: periodogram distance, leverage moments, copula-rank MMD0.778233 min · $4.46
  5. v4Lower-capacity null regressor, robust scale, 4-fold cross-fitted calibration0.798840 min · $5.36
  6. v5Generic score becomes the Mahalanobis norm of the calibrated z-vectorScore the z-vector against its null correlation matrix so correlated statistics stop double-counting each other.0.799345 min · $6.43
  7. v6Schilling-Henze kNN two-sample tests on 1/2/3-d embeddings; z winsorised at 80.794259 min · $8.28
  8. v7Supervised head becomes a regularised linear model; blend weight 0.10 to 0.250.799377 min · $10.13
  9. v8Head gets extra positives: 18 synthetic break flavors grown from the fleet nullsManufacture the missing mechanisms out of the fleet's own single-regime series instead of hoping the labels cover them.0.803398 min · $12.79
  10. v9Augmentation library widened from 18 to 28 flavors, one rep0.7999127 min · $16.44
  11. v10Hardening only: wall-clock guard, pooled-calibration and pinv fallbacks0.7999129 min · $16.84
  12. v11AR(1)-GARCH(1,1)-t likelihood ratio plus 7 parameter deltas, in both channels0.8033182 min · $23.00

v0-v8 took 98 min and $12.79; v11 alone added 53 min. Practice AUC is flat near 0.80 from v4, and later versions were picked on novel-break proxies.

On the hidden set

held-out metricreward
shipped legacy CUSUM rule0.5490160.00
reference method0.6949050.30
hidden expert (sota)0.8279570.60
perfect ranking (AUC 1)1.0000001.00
this run0.7922580.5195
67 minwall clock
$10.79spend
14.6Mtokens
19versions, 15 kept
0.55 0.60 0.65 0.70 0.75 0.80 $0 $2 $4 $6 $8 cumulative spend on the run practice fleet ROC-AUC, higher is better hidden expert · visible · 0.814000 v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18
keptrevertedno scoreturning point
  1. v0Inherited legacy rule: standardized CUSUM at the flagged boundary, training-free0.57231 min · $0.12
  2. v168 standardized two-sample features; ExtraTrees combiner, 600 trees0.79722 min · $0.23
  3. v2AR Chow/Wald tests on raw, squared, absolute and sign transforms; leaf 4 to 120.79626 min · $0.62
  4. v3Tail/shape tests, characteristic functions, rank transitions, aligned CUSUMs0.79569 min · $0.89
  5. v4Log-magnitude AR/ACF persistence and grid-GARCH likelihood contrasts0.798411 min · $1.08
  6. v5Forest cut back to core features; label-0 tail calibration, blend with omnibusSplit the method in two: a supervised head for the seen mechanisms, a calibrated omnibus of families for the rest.0.81117 min · $1.70
  7. v6Omnibus aggregation: sparse exceedance sum above 1.5 replaces top-two families0.811620 min · $2.00
  8. v7Forest sweep over leaf, feature fraction and depth; leaf 4 / features 0.250.812423 min · $2.38
  9. v8Boundary-alignment scan against 13 nearby splits0.811424 min · $2.56
  10. v9Synthetic marginal-shape expert from label-0 series, gated into the omnibusBuild shape breaks that keep post-boundary mean and variance, and give that expert its own gated channel.0.812430 min · $3.27
  11. v10Spectral peak, entropy and flatness contrasts fed to both channels0.808633 min · $3.85
  12. v11Second gated expert for dynamic breaks; spectral columns used only by it0.809735 min · $4.12
  13. v12Expert gates tuned on mixed shape/dynamic proxy fleets, practice at half weightSelect on a proxy objective that weights unseen mechanisms equally, and accept the loss on practice.0.808242 min · $5.15
  14. v13Calibrated side-slope and curvature-change family for trend mechanisms0.807343 min · $5.42
  15. v14Expert null calibration moves to a deterministic 25% real-null holdout0.811951 min · $6.94
  16. v15Blend retuned on honest calibration: shape gate 4, dynamic 1, omnibus rank 40.80955 min · $7.75
  17. v16Three grid-GARCH features dropped from the supervised and dynamic experts0.808858 min · $8.35
  18. v17Nuisance descriptors (length, tails, dependence) added to the forest only0.809960 min · $9.16
  19. v18Length and boundary-fraction context removed as spurious; sweep re-confirmed0.810162 min · $9.69

19 snapshots in 62 min and $9.69, $10.79 for the run. Practice AUC moved 0.0011 since v7; everything after v11 was picked on synthetic proxy fleets.

On the hidden set

held-out metricreward
shipped legacy CUSUM rule0.5490160.00
reference method0.6949050.30
hidden expert (sota)0.8279570.60
perfect ranking (AUC 1)1.0000001.00
this run0.7857410.5048
68 minwall clock
-spend
-tokens
9versions, 9 kept
0.55 0.60 0.65 0.70 0.75 0.80 0 25 50 75 100 agent step (this harness reports no tokens or timestamps) practice fleet ROC-AUC, higher is better hidden expert · visible · 0.814000 v0 v1 v2 v3 v4 v5 v6 v7 v8
keptrevertedno scoreturning point
  1. v0Inherited legacy rule: cumulative-drift CUSUM at the flagged boundary0.5723
  2. v1Two-sample battery plus AR/Laplace LRs; non-negative logistic on null-zForce non-negative combiner weights so the generic discrepancy terms can never be cancelled by the fitted head.0.7953
  3. v2Entropy, distance correlation, ARCH LR, context summaries; ExtraTrees/NN/rank blend0.7983
  4. v32% winsorized likelihood ratios; combiner cut to ExtraTrees plus 0.12 generic0.8074
  5. v4Long training series cropped to 160/200-point windows, labels carried overManufacture short-series examples by cropping the long ones, since short fleets are where the ranking is worst.0.8074
  6. v5Increment-domain tests: winsorized AR(1) LR, ES, energy, KS and scale on diffs0.8078
  7. v6Same features and model; extraction parallelized over 4 joblib processes0.8078
  8. v73-seed ExtraTrees bag, 500 trees each, plus a third crop length of 140Judge candidates on novel breaks injected into real null series at half weight, not on practice AUC alone.0.81
  9. v8Cleanup: unused NN logit dropped, serial fallback, safer null mean0.81

Nine snapshots in 68 min; this harness reports no cost or tokens. Practice AUC flat at 0.8100 from v7; six other ideas were reverted unsnapshotted.

On the hidden set

held-out metricreward
shipped legacy CUSUM rule0.5490160.00
reference method0.6949050.30
hidden expert (sota)0.8279570.60
perfect ranking (AUC 1)1.0000001.00
this run0.7664110.4612
12 minwall clock
$0.61spend
2.3Mtokens
1versions, 1 kept

No trajectory curve: this run left one comparable self-check measurement, so there is nothing to plot against spend. The versions and what each one changed are below.

  1. v1Standardized two-sample features, CUSUM argmax distance, L1/L2 logistic ensembleKeep only monotone distance statistics under a sparse linear head, betting plain features carry to unseen mechanisms.0.79410 min · $0.42

One snapshot in 12 min and $0.61. Later feature variants were tested in scratch scripts, none beat v1, and none was ever snapshotted.

On the hidden set

held-out metricreward
shipped legacy CUSUM rule0.5490160.00
reference method0.6949050.30
hidden expert (sota)0.8279570.60
perfect ranking (AUC 1)1.0000001.00
this run0.7492360.4225
402 minwall clock
$112.12spend
178.9Mtokens
64versions, 54 kept
0.55 0.60 0.65 0.70 0.75 0.80 $0 $25 $50 $75 $100 cumulative spend on the run practice fleet ROC-AUC, higher is better hidden expert · visible · 0.814000 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64
keptrevertedno scoreturning point
  1. v1Inherited legacy rule: cumulative-drift statistic at the flagged boundary0.57230 min · $0.22
  2. v259 boundary features, rank-averaged regularized logistic plus ExtraTrees0.79365 min · $0.60
  3. v390 temporal/context features, null-calibrated 8-family omnibus, residual tails0.813449 min · $7.79
  4. v4Reweighted 35% learned / 35% omnibus / 30% innovation tail for generalizationAccept a visible-score loss to weight label-independent evidence, since the sealed half holds mechanisms the labels never show.0.770551 min · $8.36
  5. v5Negative-only ridge calibration strips length/ACF/kurtosis from the tail score0.770356 min · $9.82
  6. v6Fit-time synthetic tail specialist on AR/GARCH nulls, 30% of the blend0.758462 min · $11.64
  7. v7Tail specialist retrained on two independent simulation seeds; weights frozen0.760265 min · $12.51
  8. v8Broad skew/mixture/bimodality specialist behind a tail-evidence gate0.771776 min · $15.64
  9. v9Learned expert becomes a 75/25 rank ensemble of ExtraTrees and RBF-SVM0.772279 min · $16.75
  10. v10Fleet-level novelty routing picks the known or the unseen path per fleetDecide per fleet, not per series: measure how novel the whole fleet looks and hand it to the specialist path.0.815193 min · $21.49
  11. v11Novelty-route onset raised 0.04 to 0.06 after 10k known-fleet bootstraps0.815196 min · $22.68
  12. v12Second fleet route from the 90th-percentile innovation-tail evidence0.815199 min · $23.98
  13. v13Hierarchical routing: a pure-tail signature selects the dedicated tail expertGive each break mechanism its own expert and let the fleet signature choose one, instead of a single gated unseen score.0.8151105 min · $26.08
  14. v14Pure-shape route sends large shape gaps straight to the broad specialist0.8151111 min · $28.54
  15. v15High-margin mixture route uses the residual-tail statistic directly0.8151114 min · $29.68
  16. v16Six long-lag ACF/spectral summaries, ninth family, fleet dependence route0.8146122 min · $32.69
  17. v17Long-dependence evidence pulled out of the universal top-family competition0.8151125 min · $34.01
  18. v18Dependence-route onset raised 0.10 to 0.25 to stop over-routing trend changes0.8151128 min · $35.49
  19. v19Obsolete ridge tail-calibration path removed; behavior preserving0.8151136 min · $38.83
  20. v20Screened long-dependence summaries inside the familiar ExtraTrees expertscreened, no change141 min · $39.65
  21. v21Screened SVM/HistGB/ExtraTrees settings and a RandomForest componentscreened, no change148 min · $40.65
  22. v2260-stat rank-transition panel and a fleet-routed nonlinear-dependence expert0.8151162 min · $42.73
  23. v23Heterogeneous-fleet gate blends toward the per-series max of three experts0.8151170 min · $44.19
  24. v2415 kink/curvature/HAC trend statistics with their own routed trend expert0.8151178 min · $45.83
  25. v25Screened volatility panels and a synthetic conditional-volatility specialistscreened, no change188 min · $48.05
  26. v26Familiar path recalibrated: universal 0.25 to 0.15, learned 0.75 to 0.850.8154195 min · $50.22
  27. v27Cross-domain omnibus override when tail and dependence routes co-activate0.8154202 min · $52.25
  28. v28Non-finite statistics from constant or heavily quantized halves neutralized0.8154205 min · $53.45
  29. v29Memory guard: trend priority suppressed when the long-dependence gap tops 0.550.8154211 min · $55.43
  30. v30Mixture trigger becomes relative outlier excess, tail-q90 gap minus shape gap0.8154220 min · $58.05
  31. v31Simulations use exact population mean/variance, not per-regime scaling0.8154225 min · $59.74
  32. v32Broad-heterogeneity gate blends four experts on tail-active mixed fleets0.8154232 min · $61.90
  33. v33Second 80-stat rank-transition panel for lags 16-35 with its own route0.8154240 min · $64.72
  34. v3490-stat triplet-copula panel for pairwise-independent higher-order changes0.8154249 min · $67.63
  35. v35Audited high-order route interactions on three retained stress suitesaudit, no change251 min · $68.57
  36. v36Screened high-order evidence inside the heterogeneous per-series maximumscreened, no change253 min · $69.24
  37. v3715 piecewise log-magnitude regression features and a volatility-trend route0.8154262 min · $72.83
  38. v38Volatility-trend route onset raised 0.10 to 0.12 after bootstrap audit0.8154266 min · $74.72
  39. v3912 cross-boundary AR forecast-residual summaries, boundary-coherence route0.8154277 min · $79.31
  40. v40Audited the coherence gate against 10k same-population pseudo-fleetsaudit, no change280 min · $79.73
  41. v41Screened 88 invariant volatility statistics and a volatility specialistscreened, no change285 min · $80.53
  42. v42Screened 63 local-window statistics against two within-regime controlsscreened, no change289 min · $81.22
  43. v43Screened certified-null augmentation from within-regime training segmentsscreened, no change292 min · $81.77
  44. v44Early-return path skips panels the fit-time simulations discard; 22% faster0.8154296 min · $82.41
  45. v45Screened a latent-family multiclass ExtraTrees over inferred break subtypesscreened, no change298 min · $82.77
  46. v4666 state run-length and long-lag state-ACF statistics with a q90 route0.8154312 min · $85.81
  47. v47Boundary-coherence full-route point tightened from gap 0.20 to 0.150.8154316 min · $86.91
  48. v48One lag-one sign-to-magnitude leverage statistic on its own fleet route0.8154322 min · $88.50
  49. v49Extended composition gate: mixed serial signatures take the per-series max0.8154330 min · $90.03
  50. v50Hard expert maximum becomes an L16 soft max once the gate is 90% saturated0.8154334 min · $91.07
  51. v51Audited extending the composition override to marginal plus duration fleetsscreened, no change335 min · $91.57
  52. v52Duration plus leverage composition route into an L16 three-expert omnibusnot re-measured341 min · $93.39
  53. v53Duration plus phase composition route into an L16 duration/coherence omnibusnot re-measured346 min · $95.30
  54. v54Leverage plus phase composition route into an L16 leverage/coherence omnibusnot re-measured349 min · $96.44
  55. v55Trend plus phase composition route into an L16 trend/coherence omnibusnot re-measured353 min · $97.98
  56. v56Volatility-trend plus phase route keyed on a very negative dependence gapnot re-measured357 min · $99.45
  57. v57Trend plus duration composition route into an L16 trend/duration omnibusnot re-measured360 min · $100.68
  58. v58Volatility-trend plus duration route, excluded under the broad serial gatenot re-measured363 min · $101.83
  59. v59Trend plus leverage composition route plus tighter dependence clearancenot re-measured366 min · $103.29
  60. v60Volatility-trend plus leverage route behind a three-factor conjunctionnot re-measured371 min · $104.93
  61. v61Raw-trend plus volatility-trend route averages the two expert ranksnot re-measured374 min · $106.18
  62. v62Three-way duration/leverage/phase route with a fourth-factor clearancenot re-measured385 min · $108.73
  63. v63Re-screened 74 ExtraTrees and SVM settings on the finalized 149 featuresscreened, no change392 min · $110.14
  64. v6490%-winsorized magnitude leverage contrast used for per-series ranking only0.8154402 min · $112.00

64 snapshots, 6.7 h, $112.12, and 499,854 of 500,000 output tokens. Practice AUC flat at 0.8154 since v26; v52-v62 are eleven fleet-pair routes.

On the hidden set

held-out metricreward
shipped legacy CUSUM rule0.5490160.00
reference method0.6949050.30
hidden expert (sota)0.8279570.60
perfect ranking (AUC 1)1.0000001.00
this run0.6948460.2999