What it is. The newest line (built 2026-05-28 → today): general distributional regression. The model answers numeric questions — house prices, Fermi estimates, patient survival times — with a full density over the target, scored by the log density \(\log p_{\text{model}}(y^{*})\). Two expressiveness levels are compared: an explicit mixture-of-Gaussians XML format, and pluck programs — small probabilistic programs whose exact marginal the pluck engine (Alex's Rust PPL, Python bindings) computes, inducing the density for scoring. Model: Qwen3-4B.

Phase 1 · pipeline 6 datasets × 5 methods, parsers + proper scoring Phase 2 · baselines base Qwen3-4B, 18 cells, n=200, done 2026-05-28 Phase 3 · GRPO on MoG-XML ames → survival → fermieval done 2026-06-11, wins on all 3 Phase 4 · pluck programs baseline scored today; GRPO gated on Phase 3
Phase structure. Phases 1–3 complete (Phase 3 trained and evaluated 2026-06-11); Phase 4 baseline scored on-node the same day.

Datasets (6 built, 4 headline)

DatasetTargetWhy it's hereStatus
ames_housing (2,930 sales)log pricediscrete features (neighborhood, pool…) gate a continuous price — natural branchingheadline + Phase 3
fermieval (3,915 questions)base-10 exponentFermi estimates = products of independent factorsheadline + Phase 3
survival (SUPPORT/METABRIC/GBSG)log time-to-event, right-censoredmixture-cure structure (cured → no event; else T ~ F); censored rows scored as \(\log S(y)\)headline + Phase 3
openestimateper-variable continuous, Gaussian GTmulti-domain numerical estimationheadline (eval only)
metaculus (AutoCast numeric)normalized position in rangereal forecasting questionsleak: resolved pre-cutoff — scalar median log-score +0.244 is implausibly good; within-dataset comparisons only
what_are_the_oddsprobabilistic-reasoning QAdistributional reasoningstubbed: labels need regeneration

Methods — five formats, one comparable score

Every method induces a real density, so log scores are directly comparable across formats:

MethodOutputInduced density
scalar (baseline)<answer>V</answer>\( \mathcal N(V, \hat\sigma) \), \(\hat\sigma\) fit on train residuals — richer formats must beat this
beta<beta><alpha>A</alpha><beta>B</beta></beta>Beta(A,B) on range-normalized target (Jacobian-corrected)
calibrated_ci90% interval [L,U]\( \mathcal N\!\bigl(\tfrac{L+U}{2}, \tfrac{U-L}{2\cdot1.645}\bigr) \)
mog_xml ← Phase 3 target<mixture><component><mu><sigma><w>…\( \sum_k w_k \,\mathcal N(y;\mu_k,\sigma_k) \), K ≤ 4
pluck ← Phase 4Scheme-like program (below)exact-inference marginal: Gaussian + point-mass components

A pluck program for a mixture-cure survival model — the harness wraps the body in a (query …) scaffold, runs exact inference, and scores the resulting mixture:

(let ((cured (flip 0.3))
      (baseline (gaussian 4.0 1.5)))   ; std-dev, not variance
  (if cured 100.0 baseline))
; → exact marginal: 30% point mass + 70% · N(4.0, 1.5)
Pluck gotchas for the LM. Integer literals are Peano naturals — programs must write 5.0, never 5. No multiplying two Gaussians ((*. c g) with constant c only). No division by a Gaussian. No scientific notation (1e9 panics the parser). No expt. These restrictions are visible in the baseline parse failures below — the base model reaches for exactly the forbidden constructs.

Phase 2 — base-model baselines (n=200/cell, temp 0.7, 2026-05-28)

Log-score mean (primary; higher is better)

datasetscalarbetacalibrated_cimog_xml
ames_housing−1.136−1.343−4.040−0.707
fermieval−11.976−62.710−6.333
openestimate−9.812−8.595−6.4M−463k
metaculus (leaky)−1,862−11.83−203k−35k
survival−67.022−449.7−15.488

Log-score median (outlier-robust)

datasetscalarbetacal_cimog
ames−0.687−0.808−0.585−0.493
fermi−2.073−1.081−1.172
openest.−7.119−8.028−64.0−12.26
metaculus+0.244−0.287−21.05−16.92
survival−1.899−33.22−6.259

Coverage of nominal 90% interval

datasetscalarbetacal_cimog
ames0.6980.8700.5320.863
fermi0.8920.6750.780
openest.0.7750.7870.0850.285
metaculus0.7190.4950.1670.149
survival0.5840.0920.343

Readings. MoG-XML wins the mean log score on 3/5 datasets. The mean-vs-median gap on calibrated_ci and mog_xml is itself informative: means are dominated by a small fraction of catastrophically overconfident outputs — the proper scoring rule punishing overconfidence. Calibrated-CI replicates FermiEval's "perception tunnel": asked for a 90% interval, the base LM emits one ~10× too narrow (9% coverage on openestimate/survival). And beta parses only ≈50% of the time (the model writes "I'd say Beta(3,5)" as prose) — so beta is a format-discipline test, not a scoring-rule test; it is excluded from Phase 3 training.

Example rollouts — base model (click to expand)

Phase 3 — GRPO training on MoG-XML completed 2026-06-11

Results — held-out 200 Phase 2 cells, matched-subset (best checkpoint)

All numbers below are computed on the pairwise matched subset — the examples both the base and trained model parse — via matched_report.py. Parse rate is shown separately because the base model abstains (fails to parse) on the hard examples, so a parse-conditioned mean would flatter it (see the methodological lesson below).

dataset (ckpt)parse ratelog-score mean ↑log-score median ↑abs err ↓cov 90% (→0.9)
basetrbasetrbasetrbasetrbasetr
ames (250) n=1970.9851.00−0.707−0.575−0.493−0.4440.3730.3170.8630.954
survival (250) n=1430.7151.00−15.488−2.106−6.259−1.8752.7342.3260.3430.804
fermieval (300) n=1320.6601.00−6.333−3.877−1.172−1.5496.9573.6950.7800.818

fermieval nuance: training improves the matched mean (−6.33 → −3.88, far fewer catastrophic tail misses, abs-err 6.96 → 3.70) but the median slips (−1.17 → −1.55) — mild over-sharpening on the typical question while the tails tighten. The other two datasets improve on every metric.

Phase 3 verdict. GRPO with the clipped log-score reward improves the trained format on all three datasets (matched-subset comparison), takes parse rates to 1.00 everywhere, and moves coverage toward nominal (survival 0.34 → 0.83). Training dynamics showed a recurring self-correction: runs twice dipped by over-sharpening (σ down, tail scores collapse) and recovered by re-widening and adding mixture components — the proper scoring rule disciplining overconfidence in real time. Checkpoint selection matters (ames and survival peaked at 250, fermieval at 300).
Methodological lesson (applies to every table in this project). Parse-conditioned log-score means are not comparable across models or methods with different parse rates: parse failure is selective abstention on hard examples (the same commit-vs-abstain behavior the forecasting prompt-ablation found for Beta). Compare on matched subsets, or impute failures explicitly.

Example rollouts — trained MoG-XML (click to expand)

Design

Phase 4 — pluck programs: GRPO trained in progress 2026-06-18

The model emits a Pluck program; exact inference induces its density, scored by the same clipped log-score reward as Phase 3 (reward_pluck.py caches each inference so the reward + 5 metric heads cost one program execution, ~1 ms/rollout). Training order survival → fermieval → ames, 300 steps each, LoRA. Two things resolved a prior open question:

Trained pluck vs trained MoG, matched subset (best checkpoint each)

The fair comparison is trained-vs-trained on the full held-out 200 cells (both parse everything). Base baselines (parse-conditioned) shown for context. All three datasets done.

dataset · seriesparselog-score mean ↑median ↑abs err ↓CRPS ↓cov 90%
survival · base MoG / base pluck.72/.70−15.5/−6.7−6.3/−2.3.34/.51
survival · trained MoG (s250)1.00−1.99−1.792.611.710.83
survival · trained pluck (s250)1.00−2.10−1.791.791.250.81
fermieval · base MoG / base pluck.66/.47−6.3/−15.2−1.2/−1.4.75/.58
fermieval · trained MoG (s300)1.00−7.11−1.624.203.520.78
fermieval · trained pluck (s250)1.00−4.93−1.613.262.800.80
ames · base MoG / base scalar.99/.91−0.71/−1.15−0.49/−0.69.86/.69
ames · trained MoG (s250)1.00−0.567−0.4400.3140.2290.955
ames · trained pluck (s250)1.00−0.555−0.4210.3040.2200.950
Survival verdict: a trade-off, not a winner. Trained MoG and trained pluck tie on the log-score median (−1.79) and sit within 0.1 nat on the mean (MoG marginally ahead on tail log-density). But pluck is clearly sharper on point accuracy and spread: abs-err −31% (1.79 vs 2.61) and CRPS −27% (1.25 vs 1.71), at the same ~0.8 coverage. Exact inference seems to yield cleaner means than directly emitting XML component parameters. Both turn the catastrophic base baselines (−6.66 / −15.49) into ≈−2.
Structure probe: GRPO leaves pluck's one free lunch on the table. Splitting survival by censoring: trained pluck actually wins on the 75 censored rows (−1.40 vs MoG −1.49) and loses on the 125 uncensored (−2.52 vs −2.29). But here is the finding — on a censored patient a point mass at \(T=\infty\) ("cured, no event") is exactly right, and a gaussian MoG provably cannot express it, yet trained pluck never emits a point/label leaf (mass 0.000, max 0.00 even on censored rows). It converges entirely to the gaussian-mixture subset that MoG already covers. So the PPL's expressivity advantage is latent but unrealized under the log-density reward — a wide gaussian gives a decent \(\log S(t)\), GRPO rarely samples the point-mass branch, and the few-shot exemplar uses gaussians. This sharpens the paper's framing: richer output language ≠ richer learned structure unless the reward or exploration pushes for it.
fermieval verdict: pluck wins — but not via structure. On the full held-out 200 cells, trained pluck beats trained MoG: mean log-score −4.93 vs −7.11 (+2.2 nats), abs-err 3.26 vs 4.20, CRPS 2.80 vs 3.52, coverage 0.80 vs 0.78; median tied (−1.61). The win is on the hard tail — on the easy n=67 subset where all methods parse, MoG is marginally ahead (−2.40 vs −2.51). Mechanism: fermieval pluck collapses to a single wide gaussian over the exponent (0/32 programs branch; ncomp≈1.0), and that wide gaussian is adaptive for the heavy-tailed Fermi answers — it avoids the catastrophic clips MoG's mixture hits when a hard question is orders of magnitude off. The hypothesized (+.) log-space factor composition is never used; the model directly estimates the final exponent.
Headline (all 3 datasets): trained pluck ties-or-beats trained MoG — as an inference engine, not via richer structure. Trained pluck wins or ties trained MoG on every dataset: ames narrowly (−0.555 vs −0.567, all metrics), survival a trade-off (MoG +0.1 nat mean, pluck −31% abs-err / −27% CRPS), fermieval a clear win (+2.2 nats). Biggest gains on the heavy-tailed case. Yet in no case does pluck use the structure only a program can express — point masses (survival), log-space factor composition (fermieval): flip/ if just produces gaussian mixtures, or collapses to a single gaussian. The payoff is cleaner means and adaptive spread from exact inference over a clean parametric family, not the latent expressivity. That reframes the PPL pitch: today it's a better-conditioned way to emit a mixture; realizing structural advantages needs a reward or exploration signal that pays for structure (the cure-exemplar probe below tests the exploration side).

Follow-up: cure-exemplar probe — does showing structure unlock it?

A survival run (--method pluck_cure) adds one worked exemplar showing a point-mass cure branch ((if no-event 99.0 (gaussian 4.0 1.5))), everything else identical to v1, to separate an exploration/prompt limit from a reward limit. The result is nuanced — and surprising.

survival rowsntrained MoGv1 pluckcure pluckcure point-mass% rows w/ point-mass
censored74−1.481−1.399−1.4110.0155%
uncensored125−2.294−2.516−2.1150.02811%
all199−1.992−2.101−1.8530.0239%
Showing structure helps the model — but not by using the structure correctly. The cure exemplar produces the best survival model of all (−1.853, beating both trained MoG −1.99 and v1 pluck −2.10, with better coverage 0.88–0.91). But the gain is entirely on uncensored rows (−2.12 vs v1 −2.52); on censored rows it's a wash (−1.41 ≈ v1 −1.40). And point masses are used more on uncensored rows (2.8%) than censored (1.5%) — the opposite of where a cure helps. So the answer is "both, neither fully": the structure is reachable via prompting (the model does emit point masses, vs v1's exact 0), not a pure exploration limit — but the reward/credit-assignment never teaches the model to place point masses where they belong (conditioned on the censoring signal), so it doesn't realize the structure's intended benefit. The overall improvement comes from a generally better-shaped prior, not correct structural use.

Variance control (2 runs each). v1 pluck across two runs lands at −2.10 and −2.17/−2.22; the cure model across two runs lands at −1.85 and −1.92. Both cure runs beat both v1 runs — the distributions don't overlap, so the ~0.27 nat cure gain is real and reproducible (cure ~−1.90 > trained MoG −1.99 > v1 pluck ~−2.16). But all runs share a median ~−1.70…−1.79, so the gain lives in the mean (tail robustness, coverage 0.86–0.91), not the typical case — a better-calibrated prior, not correct deployment of the cure structure.

Phase 4 conclusion. A richer output language (a probabilistic program with exact inference) buys better-conditioned distributions essentially for free — trained pluck ties-or-beats trained MoG-XML on every dataset, and seeding structure yields a real extra gain. But across E1–E4 the model never realizes the language's distinctive structural expressivity (point masses, factor composition): the plain log-density reward doesn't pay for it, and even when a prompt makes the structure reachable, credit assignment doesn't teach correct placement. Realizing PPL structure needs a reward or exploration signal that rewards structure — that's the sharpened direction for the PPL arc. (As a no-PPL intermediate, MoG-XML remains the workhorse; pluck's exact inference is the value-add today.)

Example rollouts — pluck programs (click to expand)

The failure traces below show the two distinct ways a pluck rollout fails: a program is emitted but the language rejects it (variadic +., division, scientific notation), or <think> overruns the budget so no program appears at all.

Model-size scaling — does a bigger model use pluck's structure?

The central finding (pluck never realizes structure) could be a capacity limit. To test it, the same survival pluck GRPO was run at 4B, 8B, and 14B (the largest that fits this 96 GB GPU under vLLM colocate). Held-out 200 cells, best checkpoint each:

modellog-score mean ↑median ↑CRPS ↓cov 90%structure used
Qwen3-4B pluck−2.099−1.7931.2510.81branch≡0, ncomp ~1.8
Qwen3-8B pluck−2.135−1.8231.3060.77branch≡0, ncomp ~1.8
Qwen3-14B pluck−1.976−1.7671.0600.86branch≡0, ncomp ~1.0
Qwen3-4B MoG (reference)−1.994−1.7940.83
Not capacity — reward. The no-structure result holds at every scale. branch (point-mass / label mass) is identically 0 at 4B, 8B, and 14B — and 14B uses the least structure of all, collapsing to a single gaussian (ncomp ~1.0) rather than the smaller models' mixtures. Scaling 3.5× (4B→14B) buys only ~0.12 nat on the mean (a 14B pluck ≈ a 4B MoG), with the gain in calibration/CRPS, not structure. So pluck's unrealized expressivity is reward-bound, not capacity-bound: a bigger model does not discover point masses or factor composition under the log-density signal. Realizing PPL structure needs a reward or exploration signal that pays for it — the cure-exemplar probe is the cheap exploration lever; a structure-aware reward is the principled one. (32B would not fit colocate on one GPU; sequence length was never the constraint — prompts are 350–510 tokens.)

Engineering notes

Open questions