Exp 7 — Oracle ablation ceiling: C+/C− pool vs plain attribution
Best-possible ablation (eval-set greedy search) — does the C+/C− pool have a higher ceiling?
Setup
Task. Binary sentiment classification of movie reviews (IMDB-derived). The base LLM is frozen; a linear CLS head reads the final-token hidden state and predicts positive / negative. Spurious setups (two regimes).bad (amplify): the ordinary word "bad" is made to correlate with the negative label. zxq (construct): a non-semantic token "zxq" is injected and made perfectly correlated with the negative label in training. Models. Qwen2.5-0.5B-Instruct and Llama-3.1-8B-Instruct. Masks. Sparse per-neuron MLP masks (hard-concrete L0) are trained on the frozen base + CLS head to solve the task. All interpretation and ablation here run with these learned masks turned ON — we analyze/remove neurons on top of the mask, not instead of it. Evaluation. Balanced 2×2 validation set (label × cue-present), 2000 rows. gap = majority-group accuracy − minority-group accuracy, where the minority groups are pos+cue and neg+no-cue. A large gap means the model is leaning on the spurious cue.
This experiment (oracle ablation ceiling). To find the best possible ablation for each attribution method, we search the eval set directly (deliberate oracle/'cheating') via greedy forward selection that maximizes worst-group accuracy. Two pools: unsigned = top-150 by |grad×act| (plain attribution, pre-C+/C−); C+/C− = top-75 C+ ∪ top-75 C−. If the C+/C− pool reaches a higher ceiling, the signed decomposition exposes a strictly better set of removable neurons than plain attribution. (Upper bounds only — not a deployable method.)
Key result (oracle ceilings, full-val worst-group acc). baseline 0.332 → unsigned-top150 0.538 (Δ+0.206, gap +0.414), C+/C−-pool 0.442 (Δ+0.110, gap +0.473). Higher ceiling: unsigned |A|. These are eval-set oracle upper bounds (greedy forward selection), so they bound the best any selection rule on that pool could achieve.
Objective: maximize worst-group accuracy
pool (oracle best subset)
#abl
worst-grp
gap
overall
pos+cue
neg+nocue
baseline (no ablation)
0
0.332
+0.408
0.765
0.332
0.790
unsigned top-150 |A|
12
0.538
+0.414
0.748
0.544
0.538
C+/C− (75+75)
11
0.442
+0.473
0.733
0.442
0.550
Gap-minimization objective. baseline gap +0.408 → unsigned +0.365 (overall 0.78, worst 0.36), C+/C− +0.375 (overall 0.78, worst 0.34). Lower gap: unsigned |A|. Watch overall/worst: a gap near 0 with collapsed overall = class-collapse, not a fix.
Objective: minimize the gap (most gap-reduction)
pool (oracle best subset)
#abl
worst-grp
gap
overall
pos+cue
neg+nocue
baseline (no ablation)
0
0.332
+0.408
0.765
0.332
0.790
unsigned top-150 |A|
6
0.358
+0.365
0.782
0.358
0.842
C+/C− (75+75)
7
0.344
+0.375
0.777
0.344
0.836
Oracle = screen+ordered-greedy search on a balanced eval set, re-evaluated on full val. Upper bounds (they use eval labels) — used only to compare the CEILING of the unsigned-attribution pool vs the C+/C− pool. Gap-objective ablations can game the gap by collapsing to one class, so always read overall & worst-group alongside gap.
Key result (oracle ceilings, full-val worst-group acc). baseline 0.692 → unsigned-top150 0.818 (Δ+0.126, gap +0.053), C+/C−-pool 0.818 (Δ+0.126, gap +0.057). Higher ceiling: tie. These are eval-set oracle upper bounds (greedy forward selection), so they bound the best any selection rule on that pool could achieve.
Objective: maximize worst-group accuracy
pool (oracle best subset)
#abl
worst-grp
gap
overall
pos+cue
neg+nocue
baseline (no ablation)
0
0.692
+0.067
0.839
0.692
0.918
unsigned top-150 |A|
5
0.818
+0.053
0.858
0.844
0.818
C+/C− (75+75)
5
0.818
+0.057
0.857
0.838
0.818
Gap-minimization objective. baseline gap +0.067 → unsigned +0.063 (overall 0.83, worst 0.68), C+/C− +0.062 (overall 0.84, worst 0.70). Lower gap: tie. Watch overall/worst: a gap near 0 with collapsed overall = class-collapse, not a fix.
Objective: minimize the gap (most gap-reduction)
pool (oracle best subset)
#abl
worst-grp
gap
overall
pos+cue
neg+nocue
baseline (no ablation)
0
0.692
+0.067
0.839
0.692
0.918
unsigned top-150 |A|
1
0.680
+0.063
0.832
0.680
0.920
C+/C− (75+75)
2
0.698
+0.062
0.838
0.698
0.916
Oracle = screen+ordered-greedy search on a balanced eval set, re-evaluated on full val. Upper bounds (they use eval labels) — used only to compare the CEILING of the unsigned-attribution pool vs the C+/C− pool. Gap-objective ablations can game the gap by collapsing to one class, so always read overall & worst-group alongside gap.
Key result (oracle ceilings, full-val worst-group acc). baseline 0.804 → unsigned-top150 0.802 (Δ-0.002, gap +0.024), C+/C−-pool 0.802 (Δ-0.002, gap +0.022). Higher ceiling: tie. These are eval-set oracle upper bounds (greedy forward selection), so they bound the best any selection rule on that pool could achieve.
Objective: maximize worst-group accuracy
pool (oracle best subset)
#abl
worst-grp
gap
overall
pos+cue
neg+nocue
baseline (no ablation)
0
0.804
+0.029
0.855
0.852
0.828
unsigned top-150 |A|
1
0.802
+0.024
0.857
0.862
0.828
C+/C− (75+75)
1
0.802
+0.022
0.858
0.864
0.830
Gap-minimization objective. baseline gap +0.029 → unsigned +0.004 (overall 0.84, worst 0.79), C+/C− -0.001 (overall 0.85, worst 0.82). Lower gap: C+/C−. Watch overall/worst: a gap near 0 with collapsed overall = class-collapse, not a fix.
Objective: minimize the gap (most gap-reduction)
pool (oracle best subset)
#abl
worst-grp
gap
overall
pos+cue
neg+nocue
baseline (no ablation)
0
0.804
+0.029
0.855
0.852
0.828
unsigned top-150 |A|
9
0.794
+0.004
0.839
0.794
0.880
C+/C− (75+75)
8
0.816
-0.001
0.854
0.822
0.886
Oracle = screen+ordered-greedy search on a balanced eval set, re-evaluated on full val. Upper bounds (they use eval labels) — used only to compare the CEILING of the unsigned-attribution pool vs the C+/C− pool. Gap-objective ablations can game the gap by collapsing to one class, so always read overall & worst-group alongside gap.
Key result (oracle ceilings, full-val worst-group acc). baseline 0.032 → unsigned-top150 0.032 (Δ+0.000, gap +0.928), C+/C−-pool 0.032 (Δ+0.000, gap +0.928). Higher ceiling: tie. These are eval-set oracle upper bounds (greedy forward selection), so they bound the best any selection rule on that pool could achieve.
Objective: maximize worst-group accuracy
pool (oracle best subset)
#abl
worst-grp
gap
overall
pos+cue
neg+nocue
baseline (no ablation)
0
0.032
+0.928
0.519
0.032
0.078
unsigned top-150 |A|
0
0.032
+0.928
0.519
0.032
0.078
C+/C− (75+75)
0
0.032
+0.928
0.519
0.032
0.078
Gap-minimization objective. baseline gap +0.928 → unsigned +0.093 (overall 0.52, worst 0.03), C+/C− +0.469 (overall 0.69, worst 0.03). Lower gap: unsigned |A|. Watch overall/worst: a gap near 0 with collapsed overall = class-collapse, not a fix.
Objective: minimize the gap (most gap-reduction)
pool (oracle best subset)
#abl
worst-grp
gap
overall
pos+cue
neg+nocue
baseline (no ablation)
0
0.032
+0.928
0.519
0.032
0.078
unsigned top-150 |A|
30
0.032
+0.093
0.521
0.032
0.918
C+/C− (75+75)
30
0.032
+0.469
0.688
0.032
0.874
Oracle = screen+ordered-greedy search on a balanced eval set, re-evaluated on full val. Upper bounds (they use eval labels) — used only to compare the CEILING of the unsigned-attribution pool vs the C+/C− pool. Gap-objective ablations can game the gap by collapsing to one class, so always read overall & worst-group alongside gap.
Key result (oracle ceilings, full-val worst-group acc). baseline 0.124 → unsigned-top150 0.258 (Δ+0.134, gap +0.643), C+/C−-pool 0.140 (Δ+0.016, gap +0.759). Higher ceiling: unsigned |A|. These are eval-set oracle upper bounds (greedy forward selection), so they bound the best any selection rule on that pool could achieve.
Objective: maximize worst-group accuracy
pool (oracle best subset)
#abl
worst-grp
gap
overall
pos+cue
neg+nocue
baseline (no ablation)
0
0.124
+0.795
0.543
0.124
0.168
unsigned top-150 |A|
12
0.258
+0.643
0.615
0.258
0.328
C+/C− (75+75)
4
0.140
+0.759
0.559
0.140
0.220
Gap-minimization objective. baseline gap +0.795 → unsigned +0.357 (overall 0.68, worst 0.10), C+/C− +0.452 (overall 0.69, worst 0.12). Lower gap: unsigned |A|. Watch overall/worst: a gap near 0 with collapsed overall = class-collapse, not a fix.
Objective: minimize the gap (most gap-reduction)
pool (oracle best subset)
#abl
worst-grp
gap
overall
pos+cue
neg+nocue
baseline (no ablation)
0
0.124
+0.795
0.543
0.124
0.168
unsigned top-150 |A|
30
0.098
+0.357
0.680
0.098
0.906
C+/C− (75+75)
30
0.122
+0.452
0.693
0.122
0.812
Oracle = screen+ordered-greedy search on a balanced eval set, re-evaluated on full val. Upper bounds (they use eval labels) — used only to compare the CEILING of the unsigned-attribution pool vs the C+/C− pool. Gap-objective ablations can game the gap by collapsing to one class, so always read overall & worst-group alongside gap.
Key result (oracle ceilings, full-val worst-group acc). baseline 0.878 → unsigned-top80 0.878 (Δ+0.000, gap +0.066), C+/C−-pool 0.878 (Δ+0.000, gap +0.066). Higher ceiling: tie. These are eval-set oracle upper bounds (greedy forward selection), so they bound the best any selection rule on that pool could achieve.
Objective: maximize worst-group accuracy
pool (oracle best subset)
#abl
worst-grp
gap
overall
pos+cue
neg+nocue
baseline (no ablation)
0
0.878
+0.066
0.932
0.878
0.920
unsigned top-80 |A|
0
0.878
+0.066
0.932
0.878
0.920
C+/C− (75+75)
0
0.878
+0.066
0.932
0.878
0.920
Gap-minimization objective. baseline gap +0.066 → unsigned +0.069 (overall 0.93, worst 0.86), C+/C− +0.067 (overall 0.93, worst 0.87). Lower gap: tie. Watch overall/worst: a gap near 0 with collapsed overall = class-collapse, not a fix.
Objective: minimize the gap (most gap-reduction)
pool (oracle best subset)
#abl
worst-grp
gap
overall
pos+cue
neg+nocue
baseline (no ablation)
0
0.878
+0.066
0.932
0.878
0.920
unsigned top-80 |A|
3
0.860
+0.069
0.929
0.860
0.930
C+/C− (75+75)
1
0.874
+0.067
0.932
0.874
0.924
Oracle = screen+ordered-greedy search on a balanced eval set, re-evaluated on full val. Upper bounds (they use eval labels) — used only to compare the CEILING of the unsigned-attribution pool vs the C+/C− pool. Gap-objective ablations can game the gap by collapsing to one class, so always read overall & worst-group alongside gap.
Key result (oracle ceilings, full-val worst-group acc). baseline 0.758 → unsigned-top80 0.758 (Δ+0.000, gap +0.082), C+/C−-pool 0.758 (Δ+0.000, gap +0.082). Higher ceiling: tie. These are eval-set oracle upper bounds (greedy forward selection), so they bound the best any selection rule on that pool could achieve.
Objective: maximize worst-group accuracy
pool (oracle best subset)
#abl
worst-grp
gap
overall
pos+cue
neg+nocue
baseline (no ablation)
0
0.758
+0.082
0.875
0.758
0.910
unsigned top-80 |A|
0
0.758
+0.082
0.875
0.758
0.910
C+/C− (75+75)
0
0.758
+0.082
0.875
0.758
0.910
Gap-minimization objective. baseline gap +0.082 → unsigned +0.082 (overall 0.87, worst 0.74), C+/C− +0.077 (overall 0.87, worst 0.76). Lower gap: tie. Watch overall/worst: a gap near 0 with collapsed overall = class-collapse, not a fix.
Objective: minimize the gap (most gap-reduction)
pool (oracle best subset)
#abl
worst-grp
gap
overall
pos+cue
neg+nocue
baseline (no ablation)
0
0.758
+0.082
0.875
0.758
0.910
unsigned top-80 |A|
2
0.744
+0.082
0.871
0.744
0.916
C+/C− (75+75)
4
0.762
+0.077
0.875
0.762
0.910
Oracle = screen+ordered-greedy search on a balanced eval set, re-evaluated on full val. Upper bounds (they use eval labels) — used only to compare the CEILING of the unsigned-attribution pool vs the C+/C− pool. Gap-objective ablations can game the gap by collapsing to one class, so always read overall & worst-group alongside gap.
Key result (oracle ceilings, full-val worst-group acc). baseline 0.044 → unsigned-top80 0.044 (Δ+0.000, gap +0.929), C+/C−-pool 0.044 (Δ+0.000, gap +0.929). Higher ceiling: tie. These are eval-set oracle upper bounds (greedy forward selection), so they bound the best any selection rule on that pool could achieve.
Objective: maximize worst-group accuracy
pool (oracle best subset)
#abl
worst-grp
gap
overall
pos+cue
neg+nocue
baseline (no ablation)
0
0.044
+0.929
0.509
0.046
0.044
unsigned top-80 |A|
0
0.044
+0.929
0.509
0.046
0.044
C+/C− (75+75)
0
0.044
+0.929
0.509
0.046
0.044
Gap-minimization objective. baseline gap +0.929 → unsigned +0.021 (overall 0.52, worst 0.03), C+/C− +0.133 (overall 0.54, worst 0.06). Lower gap: unsigned |A|. Watch overall/worst: a gap near 0 with collapsed overall = class-collapse, not a fix.
Objective: minimize the gap (most gap-reduction)
pool (oracle best subset)
#abl
worst-grp
gap
overall
pos+cue
neg+nocue
baseline (no ablation)
0
0.044
+0.929
0.509
0.046
0.044
unsigned top-80 |A|
8
0.026
+0.021
0.516
0.986
0.026
C+/C− (75+75)
12
0.058
+0.133
0.540
0.890
0.058
Oracle = screen+ordered-greedy search on a balanced eval set, re-evaluated on full val. Upper bounds (they use eval labels) — used only to compare the CEILING of the unsigned-attribution pool vs the C+/C− pool. Gap-objective ablations can game the gap by collapsing to one class, so always read overall & worst-group alongside gap.
Key result (oracle ceilings, full-val worst-group acc). baseline 0.896 → unsigned-top80 0.880 (Δ-0.016, gap +0.027), C+/C−-pool 0.868 (Δ-0.028, gap +0.029). Higher ceiling: unsigned |A|. These are eval-set oracle upper bounds (greedy forward selection), so they bound the best any selection rule on that pool could achieve.
Objective: maximize worst-group accuracy
pool (oracle best subset)
#abl
worst-grp
gap
overall
pos+cue
neg+nocue
baseline (no ablation)
0
0.896
+0.023
0.922
0.926
0.896
unsigned top-80 |A|
2
0.880
+0.027
0.920
0.934
0.880
C+/C− (75+75)
2
0.868
+0.029
0.919
0.942
0.868
Gap-minimization objective. baseline gap +0.023 → unsigned +0.020 (overall 0.92, worst 0.90), C+/C− +0.024 (overall 0.92, worst 0.90). Lower gap: tie. Watch overall/worst: a gap near 0 with collapsed overall = class-collapse, not a fix.
Objective: minimize the gap (most gap-reduction)
pool (oracle best subset)
#abl
worst-grp
gap
overall
pos+cue
neg+nocue
baseline (no ablation)
0
0.896
+0.023
0.922
0.926
0.896
unsigned top-80 |A|
3
0.904
+0.020
0.917
0.910
0.904
C+/C− (75+75)
3
0.904
+0.024
0.917
0.906
0.904
Oracle = screen+ordered-greedy search on a balanced eval set, re-evaluated on full val. Upper bounds (they use eval labels) — used only to compare the CEILING of the unsigned-attribution pool vs the C+/C− pool. Gap-objective ablations can game the gap by collapsing to one class, so always read overall & worst-group alongside gap.
Key result (oracle ceilings, full-val worst-group acc). baseline 0.888 → unsigned-top80 0.888 (Δ+0.000, gap +0.029), C+/C−-pool 0.888 (Δ+0.000, gap +0.029). Higher ceiling: tie. These are eval-set oracle upper bounds (greedy forward selection), so they bound the best any selection rule on that pool could achieve.
Objective: maximize worst-group accuracy
pool (oracle best subset)
#abl
worst-grp
gap
overall
pos+cue
neg+nocue
baseline (no ablation)
0
0.888
+0.029
0.920
0.924
0.888
unsigned top-80 |A|
0
0.888
+0.029
0.920
0.924
0.888
C+/C− (75+75)
0
0.888
+0.029
0.920
0.924
0.888
Gap-minimization objective. baseline gap +0.029 → unsigned +0.015 (overall 0.92, worst 0.91), C+/C− +0.014 (overall 0.92, worst 0.91). Lower gap: tie. Watch overall/worst: a gap near 0 with collapsed overall = class-collapse, not a fix.
Objective: minimize the gap (most gap-reduction)
pool (oracle best subset)
#abl
worst-grp
gap
overall
pos+cue
neg+nocue
baseline (no ablation)
0
0.888
+0.029
0.920
0.924
0.888
unsigned top-80 |A|
2
0.908
+0.015
0.921
0.920
0.908
C+/C− (75+75)
3
0.908
+0.014
0.921
0.920
0.908
Oracle = screen+ordered-greedy search on a balanced eval set, re-evaluated on full val. Upper bounds (they use eval labels) — used only to compare the CEILING of the unsigned-attribution pool vs the C+/C− pool. Gap-objective ablations can game the gap by collapsing to one class, so always read overall & worst-group alongside gap.