Tasks/Life Sciences/Epigenomics

Predict a fine-resolution ATAC-seq accessibility PROFILE from DNA sequence, split by chromosome

Predict base-resolution chromatin accessibility from DNA

atac_seq2atac Life Sciences Epigenomics
instruction.mdthis is what the agent is given

You are building a sequence-to-signal model for chromatin accessibility: given a 4096 bp window of human genomic DNA, predict the ATAC-seq accessibility signal at fine resolution -- one value every 64 bp (64 bins spanning the window), so that your predicted profile correlates as strongly as possible with the true profile within each window (i.e. you must get the shape of the signal across the window right, not just its overall level). You inherit a bare-bones starting method — a model that ignores sequence entirely and predicts a single constant value for every bin — as your methods/main/solver.py. The data comes from one real, published ATAC-seq experiment on the human reference genome, split by chromosome: you get sequence + fine-bin signal for a broad set of chromosomes to train and validate on; your submitted method is re-run, unchanged, on sealed chromosomes it never saw during development, and that run is what is scored.

Hard Constraints

  • Submit a method, not predictions: methods/main/solver.py defining train(train_windows) -> None and predict(test_windows) -> array[N, T] (T = 64, the number of fine bins per window). train_windows / test_windows are dicts with keys "X" (int8 array [N, L] of one-hot-able DNA codes, L = 4096: 0=A, 1=C, 2=G, 3=T, 4=N), "chrom", "start" (genomic coordinates of each window's first base), and — for train_windows only — "y" (float32 array [N, T], log1p of the mean ATAC signal in each of the T fine bins tiling the window, bin width L // T = 64 bp).
  • train() must persist whatever it fits to disk next to solver.py (a checkpoint file, weights, fitted coefficients — your choice of format). The graded run calls predict() in a fresh process that never calls train(); it can only see what you saved to disk.
  • predict() must return an array of shape [N, T] (one length-T profile row per input window) — a single scalar per window is the wrong shape and will be scored as a crash.
  • CPU only, no GPU. Keep training well within minutes on a machine with many cores; there is no reward for a model that cannot finish training in the allotted time.
  • Only files under methods/main/ are graded; do not modify selfcheck.py or data/.

What You Have

  • data/visible_windows.npz — real ATAC-seq signal (fold-change over control) paired with the matching real human genomic sequence, tiled into non-overlapping 4096 bp windows across a broad set of chromosomes, with N-heavy and known artefact-prone (blacklisted) regions already filtered out. Arrays: X (sequence codes, [N, 4096]), y (log1p fine-bin signal, [N, 64]), chrom, start.
  • methods/main/solver.py — the naive constant-profile starting point. Replace the model freely; keep the train()/predict() contract and the [N, T] output shape.
  • python3 selfcheck.py — free and unlimited: trains your current solver on most of the visible chromosomes and evaluates it on two visible chromosomes withheld from that training (chr21, chr22), printing the mean per-window Pearson correlation between your predicted and true profiles (higher is better). This mirrors the graded evaluation's chromosome-split structure and its exact metric, but on different chromosomes than the ones actually graded.

What You Submit

Leave your best methods/main/solver.py (plus any files it saved next to itself, e.g. weights) in place. There is no separate submit step: whatever sits in methods/main/ at the end is snapshotted and is what gets graded.

How It Is Judged

The grader trains nothing itself. It loads two chromosomes held back from everything you were given, builds the same kind of window arrays (same 4096 bp windows, same 64-bin/64bp resolution) from the same real ATAC-seq experiment and the same real reference genome, and calls your saved predict() on them in an isolated process (no access to the true signal). It then computes the mean per-window Pearson correlation between your predicted and true log1p fine-bin profiles on those held-out windows — higher is better — and that is your score. The held-out chromosomes are the same assay, same genome, same window construction as what you trained on; nothing about the task changes, only which chromosome the sequence comes from.

For each held-out window, your predicted T-length profile is compared to the true T-length profile with a Pearson correlation computed within that single window (i.e. each window's own mean is subtracted out before correlating). Your score is the average of this per-window correlation across all held-out windows (windows whose true profile is exactly flat are excluded, since Pearson is undefined there). Malformed, non-finite, wrongly shaped, timed-out, or crashed predictions receive reward zero.

Metric

mean per-window Pearson r on the sealed chr8+chr9 windows · higher is better

Pearson r between predicted and true 64-bin profiles inside each 4096 bp window, averaged over 15,000 windows

anchorvisible setheld-outreward
Bconstant / global-mean profile0.0000000.0000000.00
Rper-bin ridge on composition0.2627480.2651720.30
Ssingle-seed dilated CNN0.4297810.4362120.60
Umetric maximum, r = 11.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 > U1.0

m = this run's held-out metric  ·  B = constant / global-mean profile  ·  R = per-bin ridge on composition  ·  S = single-seed dilated CNN  ·  U = metric maximum, r = 1

Linear in raw r, no transform. One pooled score over both sealed chromosomes, rounded to 6 dp before mapping; clamped at 1.0.

Rollouts

416 minwall clock
$83.44spend
146.8Mtokens
53versions, 41 kept
0 0.1 0.2 0.3 0.4 $0 $20 $40 $60 $80 cumulative spend on the run chr21+22 self-check mean per-window Pearson r single-seed dilated CNN · visible · 0.429781 v0 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
keptrevertedno scoreturning point
  1. v0Inherited constant-profile baseline: one value for every bin02 min · $0.14
  2. v1Per-64bp GC fraction with a 3-bin edge-padded moving average0.26934 min · $0.38
  3. v2Ridge on canonical 3-mer counts at 1/3/5-bin scales, standardized targetsRead the shape off local k-mer composition instead of GC alone, one ridge per bin against window-standardized targets.0.35197 min · $0.63
  4. v3Motif context widened to canonical 4-mers, raw plus 3-bin scales0.371410 min · $0.91
  5. v46-mer embedding plus dilated residual CNN, per-window cosine lossaborted, over budget27 min · $2.31
  6. v54-mer ridge on centered targets, 16k windows, blended 1:1 with smoothing0.372131 min · $2.80
  7. v6One scalar per canonical 6-mer, centered-MSE minibatch fittingaborted, over budget45 min · $4.28
  8. v7Canonical 6-mer target encoding of the ridge residual, 3-bin smoothedStack a residual stage: target-encode longer exact k-mers on what the ridge missed. Every later stage repeats this one move.0.381154 min · $5.28
  9. v8Persistence fix: _load() restores both coef and long_weight arrays0.38109955 min · $5.53
  10. v9Edge bins smoothed against the neighbour window's bin when tiles abut0.3812456 min · $5.79
  11. v10Sequential canonical 7-mer residual stage above the 6-mer stage0.38692365 min · $6.92
  12. v11First 8-mer stage; 32,896 canonical ids overflowed the int16 mapcrashed in training70 min · $7.67
  13. v12Canonical maps widened to int32; the 8-mer residual stage lands0.39070177 min · $8.70
  14. v13Sequential canonical 9-mer residual stage, 131,072 categories0.39545684 min · $9.81
  15. v14Sequential canonical 10-mer residual stage, 300-count shrinkage0.39891390 min · $11.01
  16. v15Sequential canonical 11-mer residual stage, 2,097,152 categories0.402977101 min · $12.99
  17. v16Deterministic fit sample raised from 16k to 24k windows0.404086110 min · $14.68
  18. v17Fit sample raised again to 32k; declared the sample-size stopping point0.404723124 min · $16.92
  19. v18At prediction, assign each k-mer to the bin holding its centre0.405481126 min · $17.34
  20. v19Vectorized reverse-complement map build; same ids, faster import0.405481126 min · $17.64
  21. v20Residual stages also trained on center-assigned, cross-bin occurrences0.406411138 min · $20.01
  22. v21Final smoothing changed to a triangular 3-bin filter0.408651150 min · $22.35
  23. v22Every residual stage refit against the new triangular filter0.410509161 min · $24.73
  24. v234-mer ridge counts switched to center assignment, matching later stages0.411836174 min · $27.12
  25. v24Low-order 5-mer target encoding of the normalized final residual0.413328194 min · $31.61
  26. v25chrX dropped from the 32k fit sample to test X-inactivation shiftchr19+20 fold only205 min · $33.72
  27. v26Canonical 12-mers hashed into 2^20 buckets on the final residual0.414415224 min · $38.27
  28. v2713-mer sketch on the final residual, a second 2^20-bucket stage0.414691228 min · $39.04
  29. v28Symmetric spaced seed, 4 bp half-sites separated by a 4 bp gap0.415873252 min · $45.17
  30. v2940-channel strand-symmetric nonlinear residual CNN over 4-mer mapsno epoch finished266 min · $48.39
  31. v3088-feature closed-form nonlinear residual ridge on composition stats0.415978271 min · $49.19
  32. v31Signed-power, tanh and clip peak-compression calibration sweep0.416125272 min · $49.55
  33. v32Per-stage output rescaling, halfway toward the proxy optimum0.416895292 min · $54.66
  34. v3352 Fourier and autocorrelation periodicity features0.417265294 min · $55.48
  35. v34Frozen v32 re-scored on chr15+16, opened only after choices were fixedchr15+16 fold only300 min · $56.89
  36. v35Second deterministic fit seed (1931) kept for parameter averaging0.41697308 min · $59.12
  37. v3650/50 parameter average of the two seeds, validated on chr17+180.417622324 min · $63.19
  38. v37Third fit seed (3191), the strongest single-seed checkpoint0.417659330 min · $65.01
  39. v38Equal three-way parameter average of the seed checkpoints0.418108331 min · $65.39
  40. v39Pooled 4+4 bp half-sites over spacer lengths 0/2/4/60.418365334 min · $66.42
  41. v40Hamming-neighbour smoothing of the exact 8-11-mer weights0.418142340 min · $67.62
  42. v41Sub-bin phase term from each motif's offset inside its 64 bp binBin pooling discards where inside the 64 bp a motif sits; feeding that offset back at inference sharpens the profile shape.0.419138357 min · $74.04
  43. v42Nine stage-specific phase coefficients, fit per chromosome then averaged0.420454364 min · $74.89
  44. v43Phase moment added for the 4-mer ridge; all ten coefficients refit0.421137369 min · $75.39
  45. v44Per-stage output multipliers fit on chr21 and chr22, then averaged0.421848373 min · $75.93
  46. v45Fit sample widened to all 57,869 non-dev windows, calibration untouched0.418919384 min · $77.47
  47. v46Phase coefficients and stage multipliers recalibrated on the full fit0.422009384 min · $77.62
  48. v47Full-data regime retrained without chr17+18 to test the frozen calibrationchr17+18 fold only393 min · $78.88
  49. v48Shared smoothing replaced by frozen stage-specific Laplacian deltas0.422653398 min · $79.94
  50. v49Phase coefficients refit after the full-data output scales, not before0.42321398 min · $79.94
  51. v50Second, wider per-stage Laplacian using bins at offsets +/-20.424058404 min · $80.95
  52. v51Third Laplacian at +/-3 bins; coefficients flipped sign between chromosomesrejected, chr22 fell406 min · $81.32
  53. v52Selected model refit on all 59,999 visible windows and persistedfinal refit, unscored416 min · $83.36

Four snapshots (v4, v6, v11, v29) died in training. v33 onward cost $28 of the $83 and moved the self-check from 0.4169 to 0.4241.

On the hidden set

held-out metricreward
constant / global-mean profile0.0000000.00
per-bin ridge on composition0.2651720.30
single-seed dilated CNN0.4362120.60
metric maximum, r = 11.0000001.00
this run0.4352780.5984