Model, take the wheel! Part II: multi-fidelity, cost-aware active learning

We extend our previous active learning analysis to choose not just which compound to test, but which assay to run. Utilizing both primary screens and full dose-response measurements cuts the cost of finding actives by more than half, without costing the model any accuracy.

Share
Model, take the wheel! Part II: multi-fidelity, cost-aware active learning
Our moal mole is digging for active compounds. Knowing where to dig and when to stop is critical!

By Sean Colby

In Part I, we showed that greedy exploitation consistently outperforms uncertainty-driven strategies for active learning in drug discovery, recovering two to three times as many hits at mid-campaign on both a sparse diversity deck and a congeneric series. The model was doing real work: by training on labeled compounds and directing queries toward the highest predicted potency, it concentrated the campaign's resources where they were most likely to pay off. But Part I rested on a simplifying assumption that most active learning benchmarks share: every query costs the same and returns the same type of information. A model selects which compound to test next, and the experiment happens. The cost, the information content, and the assay type are all fixed. Real drug discovery data does not work that way.

Figure 1. moal campaign dashboard animated across iterations, comparing moal (red) and DRC-only (blue) on PXR. Panels show cumulative actives found vs. cumulative cost (top left), per-iteration cost breakdown with PS (Primary Screen) and DRC (Dose-Response Curve) query counts (top right), model performance (bottom left), and compound status at the current iteration (bottom right). Iteration 0 is the shared random dose-response seed evaluated before any acquisition; iteration 1 is the first active learning round. Note that moal finds all actives by iteration 13; MAE performance is thus extrapolated as constant. Use the play/pause button to step through the campaign, or manually drag the slider to any iteration.

In our last installment

In Part I, we ran six acquisition strategies (Exploitation, UCB, EI, Exploration, Diversity, and Random) across two targets (PXR and ASAP SARS-CoV-2 Mpro) and four model configurations (ChemProp or CheMeleon, with or without ChEMBL pretraining). Every query was a single-point dose-response measurement. One compound, one pEC50, one cost.

The main findings were:

  • Exploitation (greedy selection) wins. It recovered two to three times as many hits as Random at mid-campaign on both datasets, and the ranking held across model types. If the goal is hit-finding, there is no compelling reason to use a more sophisticated acquisition strategy.
  • CheMeleon is the more accurate model overall. ChemProp had a narrow edge in hit-finding for PXR due to aggressive extrapolation from sparse data, but CheMeleon produced better-calibrated models and lower MAE across most conditions.
  • ChEMBL pretraining gives an early advantage that disappears by mid-campaign. The warm-start advantage was real in the first iteration or two, but the model converged under no-ChEMBL conditions well before the midpoint of the campaign.
  • Ensemble uncertainty estimates are weak. Spearman \( \rho \) between uncertainty (ensemble disagreement) and prediction error ranged from 0.10 to 0.30 across strategies, suggesting that bootstrapped deep ensembles poorly represent genuine epistemic uncertainty (i.e., lack of knowledge).

The implicit limitation here is that all experiments were treated as equivalent. The acquisition function answered "which compound?" but never "what kind of experiment?"

Why two assay modalities?

The standard high-throughput screening (HTS) funnel has two distinct phases, each with different costs and information structures.

The first step is the primary screen (PS): a cheap, high-throughput assay that classifies compounds as active or inactive at a single fixed concentration. Screened at 10 µM, for example, a compound either passes (active at 10 µM) or fails (inactive at 10 µM) based on some activation threshold. A primary screen might cost $1 to $2 per compound (less if using a miniaturized assay; more if using a contract research organization, or CRO) and can process thousands of samples in a single run. The information is binary (pass or fail at one threshold), but the volume it enables is substantial.

In practice, primary screens produce a fold change over a control at the selected concentration, not a direct pass/fail at a threshold. In this framing, we use full dose-response-derived (see below) activities to simulate the results of a primary screen. At prediction, values are continuous activities. In a live campaign, however, one would need to convert the experimental primary screen fold change to match the interval and left-censored framing below.

Compounds that pass can move onto the second step. This is the dose-response curve (DRC): a full titration across multiple concentration points, typically 10 to 20, yielding an IC50 or EC50 with millimolar-to-nanomolar resolution. A DRC typically costs $10 to $20 per compound (same qualification for miniaturized assay and CRO), requiring proportionally more assay time and reagents than a single-point PS. The result is quantitative: a potency value (an IC50 or EC50) instead of a binary active-or-inactive qualification.

Note that the costs here are illustrative. The ratio between DRC and PS is more important. We used 13-point DRCs for PXR data collection, thus a 13:1 DRC:PS cost ratio, and nominally $13 and $1, respectively.

Most active learning literature collapses this two-phase funnel into a single step, treating every query as if it returned an EC50 at a fixed cost. That assumption implicitly chooses the expensive DRC option every time. In a real campaign, the lab has a budget, and the ratio of cheap primary-screen queries to expensive dose-response queries determines how many compounds can be tested, at what resolution, and on what timeline.

The key observation is that the two assay types provide complementary information. A pass in a primary screen does not yield a pEC50, but it confirms the compound cleared a relevant threshold. A miss in a primary screen rules out high potency and does so cheaply. Both types of data constrain the model's beliefs about a compound's true activity. This raises two questions, and the rest of the post answers both.

  1. First, how does a cost-aware framing change the efficiency of hit finding? Does triaging with cheap primary screens recover hits faster and at lower cost than buying a full dose-response for every compound, or does it cost time and money? This is a fundamental question that many drug discovery teams answer using heuristics rather than modeling.
  2. Second, does that triage degrade the resulting model? Trained on a mix of censored pass/fail labels and exact EC50 anchors, does the model learn as much as one fed DRC measurements alone, or does the cheaper data buy a worse model?

Introducing moal

We built moal (multi-objective active learning) to answer both questions simultaneously. The core greedy principle from Part I is unchanged: at each iteration, score every candidate and select the most potent predictions up to plate capacity. However, there are now two core modifications.

First, the scoring function. moal computes two independent scores per compound, one for each assay type (PS and DRC), and then merges them into a single ranked list, so the acquisition selects both the compound and the assay type jointly. Second, the training objective. Rather than discarding primary screen results as too coarse to be useful, moal ingests them directly alongside DRC measurements through a mixed-fidelity loss, using the additional data volume to sharpen model predictions even when exact pEC50 values are not available. In short, moal can decide which experiment to run on each compound and learn from the result regardless of its resolution. See Figure 1 for a (cached) demonstration of the moal dashboard, which renders live during an active learning campaign simulation.

Dueling scores

Each candidate receives two scores, both expressed in the same unit: expected information per dollar.

The DRC score targets exploitation. For a compound with predicted activity \( \hat{y} \), it is:

\[\text{DRC score} = \frac{\sigma\left(\dfrac{\hat{y} - T_{\text{target}}}{\tau}\right)}{c_{\text{DRC}}}\]

where \( \sigma \) is the sigmoid function, \( T_\text{target} \) is the target activity threshold (target_threshold), \( \tau \) is the temperature parameter, and \( c_\text{DRC} \) is the cost per DRC query. This score is the probability that the compound exceeds the activity threshold, normalized by the measurement cost. Compounds predicted well above the threshold score highly, whereas compounds below it score near zero. The \( \tau \) parameter controls the steepness of the sigmoid, where small \( \tau \) concentrates the score sharply around the threshold and large \( \tau \) spreads it more broadly.

The PS score targets threshold exploration. Let \( p = \sigma((\hat{y} - T_\text{PS})/\tau) \) be the model's probability that a compound's true pEC50 exceeds the primary screen threshold \( T_\text{PS} \) (ps_threshold) given predicted activity \( \hat{y} \). The binary entropy of that probability is

\[H(p) = -p\ln p - (1-p)\ln(1-p)\]

which measures how uncertain the pass/fail outcome is. It falls to \( H = 0 \) when the result is certain in either direction, and rises to its maximum at \( p = 0.5 \), where the two outcomes are equally likely. The PS score is:

\[\text{PS score} = \frac{H\left(\sigma\left(\dfrac{\hat{y} - T_{\text{PS}}}{\tau}\right)\right)}{c_{\text{PS}}}\]

where \( c_\text{PS} \) is the cost per PS query.

This function peaks for compounds whose predicted activity sits right at the ps_threshold boundary, where a cheap binary measurement eliminates the most uncertainty. Compounds far from ps_threshold in either direction score near zero, since clearly inactive compounds do not benefit from a pass/fail measurement and clearly active compounds do not need the resolution. Cost normalization means a cheaper primary screen can compete with a DRC across a broader range of predicted activities.

Both scores are merged into a single ranked list by retaining the higher information-per-dollar assay type for each compound. The acquisition then pops entries by descending score until the plate is full (plate size is configurable). No weighting or tradeoff parameter is needed. Both scores share the same unit, so the relative costs do all the balancing.

Two assays, three pools

At each iteration, compounds occupy one of three pools that determine their eligibility for further queries.

Pool Eligible for What happens next
Unlabeled DRC or PS Standard candidate
PS-INTERVAL-labeled DRC promotion only Compound passed the screen; available for exact characterization
DRC or PS-LEFT-labeled Neither Fully characterized or confirmed inactive

A compound that passes the primary screen receives an interval label (a true pEC50 value between ps_threshold and an upper bound). It does not return to the unlabeled pool. Instead, it becomes a candidate for promotion, where in subsequent iterations the model can select it for a DRC measurement, thereby obtaining an exact record. Both records are retained during training. This mirrors the standard lab workflow, where most screened compounds fail and stop there, while the few that pass become candidates a lab may follow up with dose-response studies.

The PS-to-DRC crossover

For any given predicted activity \( \hat{y} \), the acquisition chooses DRC when its information-per-dollar score exceeds the PS score, and PS otherwise. Setting the two scores equal and solving for \( \hat{y} \) defines the crossover point. Below the crossover, the cheap PS experiment offers more expected value per dollar; above it, the expensive DRC experiment wins.

The crossover location depends primarily on the cost ratio. With a 13:1 ratio, based on our use of a 13-point DRC here, the DRC score must be thirteen times larger than the PS score to win, which requires high predicted activity. At higher ratios, the crossover shifts toward higher \( \hat{y} \) values, and moal issues more PS queries across a broader range of the pool. As \( \tau \) decreases, the sigmoid steepens, and both score peaks become sharper and more concentrated.

Neither is optimized by the acquisition loop itself. \( \tau \) has a natural interpretation as the noise scale of the assay. Typically set to match the spread of replicate pEC50 measurements, it ensures the acquisition treats predictions near a threshold with appropriate uncertainty rather than hard-classifying them as above or below. The cost ratio reflects the lab's actual assay pricing. Both variables have sensible defaults grounded in the biology and the budget. That said, they are also tunable: a practitioner who wants more (or fewer) PS queries early in the campaign can increase (or decrease) the cost ratio (as artificially imposed, not actually changing the cost); one who wants sharper acquisition boundaries can decrease \( \tau \).

Figure 2 shows the score curves and illustrates all three censoring regimes from the training loss. Use the sliders to explore how each parameter shifts the crossover.

Figure 2. Tobit loss censoring regimes (top row) and DRC vs. PS acquisition score curves as a function of predicted \( \hat{y} \) (bottom row), with interactive sliders for ps_threshold, target_threshold, \( \tau \), and cost ratio. The top panels illustrate the three label types produced by the two assay modalities: LEFT-censored PS misses, INTERVAL-censored PS hits, and EXACT DRC measurements. The bottom panel shows the decision rule: below the crossover, PS is the preferred query per dollar; above it, DRC wins.

All the data under one roof

A primary screen result is not discarded after the acquisition decision is made. It enters the training data in its censored form.

A PS miss (inactive at 10 µM) establishes a LEFT-censored bound, where the true pEC50 is below the threshold. A PS hit (active at 10 µM) establishes an INTERVAL-censored bound, where the true pEC50 lies within [ps_threshold, upper_bound]. A DRC measurement is EXACT. All three types feed into the same Tobit regression loss.

In a Tobit model, the loss for a censored observation is the integrated probability mass that the model assigns to the region consistent with the observation:

\[\mathcal{L}_i = \begin{cases} -\log \Phi\left(\dfrac{T - \mu_i}{\sigma_\varepsilon}\right) & \text{LEFT-censored (PS miss)} \\ -\log\left[\Phi\left(\dfrac{U - \mu_i}{\sigma_\varepsilon}\right) - \Phi\left(\dfrac{T - \mu_i}{\sigma_\varepsilon}\right)\right] & \text{INTERVAL-censored (PS hit)} \\ -\log\,\phi\left(\dfrac{y_i - \mu_i}{\sigma_\varepsilon}\right) & \text{EXACT (DRC)} \end{cases}\]

where \( \Phi \) is the standard normal cumulative distribution function (CDF), \( \phi \) is the standard normal probability density function (PDF), \( \mu_i \) is the model's predicted pEC50 for compound \( i \), \( y_i \) is the observed pEC50 (EXACT records only), \( T \) and \( U \) are the PS threshold and upper bound, and \( \sigma_\varepsilon \) is a fixed noise scale set to the typical assay replicate spread. For a LEFT-censored record, the model is penalized in proportion to the probability it places above the threshold. For an INTERVAL record, the penalty is proportional to the probability it places outside the interval. For an EXACT record, the loss reduces to the standard Gaussian likelihood. This means a $1 PS query contributes gradient signal proportional to the information it provides, even though it returns only a binary outcome. The model sharpens its predictions for that compound based on what the censored observation rules out.

This framing also makes it natural to incorporate historical data. Any existing records from past campaigns or public libraries can be ingested alongside new measurements (provided the screen threshold is known for PS data). Every dollar already spent on assay data becomes an asset rather than a sunk cost.

Is moal worth its salt?

To evaluate moal's cost-efficiency, we compare it against the natural baseline: greedy exploitation using only DRC queries. This is precisely the Exploitation condition from Part I: every query is a full dose-response measurement, selecting the compounds with the highest predicted activity from the unlabeled pool.

We run both strategies on PXR and ASAP Mpro across two model backbones carried over from Part I, CheMeleon and ChemProp, without ChEMBL pretraining, and with five random seeds each. Pricing is per well, where a single-point PS read costs $1 and a 13-point dose-response costs $13, a 13:1 ratio consistent with typical HTS pricing. Acquisition parameters carry over the Part I target design: target_threshold is set per target to its exploitation goal, 6.0 for PXR (hit-finding) and 7.0 for ASAP Mpro (lead optimization), with ps_threshold = 5.0 and \( \tau = 0.5 \) shared across both. Each campaign runs until every active in the pool is confirmed or the pool is exhausted, whichever comes first, so the strategies are compared at equal recovery rather than at a fixed budget.

In Part I, the PXR blind challenge was underway. In an abundance of caution, we didn't evaluate Part I on the blinded test set. Instead, we split the challenge training set into train and test partitions. The challenge is now over, its test set released, but we still use the same Part I splits here to maintain direct comparability.

Every campaign begins from the same 100-compound random dose-response seed ($1,300, all DRC). We evaluate the model trained on that seed as iteration 0, before any acquisition, which fixes a starting model and hit count that moal and DRC-only share at a given random seed. From iteration 1 onward, each strategy is given a fixed assay budget of one plate's worth ($1,300 here) per round, so cumulative cost stays a near-linear function of the iteration number. The figures therefore use a single x-axis labeled by campaign iteration (iteration 0 is the seed) and by the all-DRC cumulative cost. Note that moal can underspend the budget when few compounds remain to screen, as on the small ASAP Mpro pool, so its actual spend runs at or just below that reference.

Metrics. For each campaign, we track:

  • Cumulative confirmed actives (a compound counts once its DRC-measured pEC50 clears the dataset hit threshold, ≥6.0 for PXR and ≥7.0 for ASAP Mpro), shown against campaign iteration (iteration 0 is the seed evaluation), twinned with the all-DRC cumulative cost
  • Test-set MAE (mean absolute error, pEC50 units)
  • Kendall's \( \tau \) (rank correlation between predicted and observed values on the held-out test set)

Baselines.

  • Full-deck DRC (reference ceiling): the cost of no active learning at all, running full dose-response on every compound in the pool to characterize the deck blind. For PXR's 3,312-compound pool, this is roughly $43,000. This is the bill a campaign faces without using a model to rank queries, and the baseline for any net savings.
  • DRC-only greedy: every query is a DRC, selecting the highest-predicted unlabeled compounds. This is the Exploitation condition from Part I.
  • moal: dual-score acquisition with both DRC and PS queries available. The cost ratio determines the crossover. The model jointly selects both the compound and the assay type via the merged ranked list.

Hit discovery

Does spending part of the budget on cheap primary screens find hits faster, or does the coarser information just slow the campaign down? We track cumulative confirmed actives against cumulative cost (Figure 3) and read off which strategy reaches the full set of hits at the lowest cost.

Figure 3. Cumulative confirmed actives (compounds whose DRC-measured pEC50 clears the dataset hit threshold: ≥6.0 for PXR, ≥7.0 for ASAP Mpro) for PXR (top) and ASAP Mpro (bottom). The shared x-axis is the campaign iteration: iteration 0 is the seed evaluation (the model trained on the random dose-response warm-start, before any acquisition), and iterations 1+ are acquisition rounds. Each panel shows moal and DRC-only greedy on both the CheMeleon and ChemProp backbones, with independent y-axes scaled to each pool's active count. Shaded bands show ±1 SD across five seeds. A star marks where a strategy terminates early after confirming every active in the pool. Single-click legend entries to toggle, double-click to isolate, double-click again to toggle all on.

On PXR (the more difficult target with a 1.5% hit rate), moal confirms all 51 actives in the pool for a mean of $17,900, against $41,900 for DRC-only. That is a 2.34-fold reduction, 57% fewer dollars to reach the same complete recovery (paired p < 0.0001 across five seeds). By brute-force, running dose-response experiments on the entire 3,312-compound pool to find those 51 actives would cost about $43,000. DRC-only's $41,900 sits just under that, a 1.03-fold savings. This is because confirming the last scattered actives forces it to dose-response roughly 97% of the deck, despite how well the model ranks.

moal's $17,900 is 42% of the do-nothing bill, a 2.4-fold saving. The advantage is also far more reliable, with moal landing at $17,900 ± 40 compared to DRC-only's spread of $41,900 ± 1,700. moal triages the bulk of the library with $1 primary screens and spends the $13 dose-response only on the compounds a screen has already flagged. This gives the moal curve its characteristic shape (see Figure 1), where moal spends its early iterations largely on cheap primary screens and trails DRC-only in confirmed actives at first, then overtakes as those screens are promoted to dose-response. moal reaches full recovery in 13 plates; DRC-only needs roughly 31. The ChemProp backbone tells the same story ($17,900 for moal against $40,000 for DRC-only, paired p < 0.0001), so the cost advantage is a property of the acquisition strategy, not the model.

On ASAP Mpro, the easier target with a 9% hit rate, the balance flips. Running a dose-response on the entire 776-compound pool blind would cost about $10,100, where the random baseline reaches all 74 actives (near plate 8 in Figure 3). DRC-only active learning reaches full recovery for roughly $5,700, a 1.77-fold saving over brute force, in three to four plates. The model ranks a tight congeneric series well, so greedy ordering alone captures most of the achievable saving. moal lands at about $5,600, essentially the same bill (a 2% difference, paired p = 0.85). Multi-fidelity triage neither helps nor hurts once ordering has already done the work. PXR was the opposite, where ordering alone barely dented the brute-force bill and cheap PS triage delivered the saving. Here, ordering does the work and multi-fidelity adds nothing.

Model performance

Hit-finding efficiency and model accuracy are distinct objectives, and cost-aware acquisition introduces a specific risk to the latter. Every dollar moal spends on a $1 primary screen is a dollar not spent on an exact DRC anchor, so if censored pass/fail labels were too coarse to train on, moal would buy its hit-finding lead with a worse regression model. And this hypothetical damage would compound. Acquisition is itself model-driven, ranking candidates by predicted potency. In other words, the model degrades with coarse labels, which misdirect the next round's queries, which feed still-weaker labels back into training, and so on. A small, early accuracy deficit could snowball across rounds rather than remain a fixed one-time cost. The mixed-fidelity Tobit loss exists to prevent that. Whether it succeeds is an empirical question, and the fair way to ask it is at equal budget: what level of model performance does each strategy deliver for the same spend?

Figure 4. Test-set MAE (pEC50 units) for PXR (top) and ASAP Mpro (bottom), on the shared campaign-iteration axis (iteration 0 is the seed; twinned with the all-DRC cumulative cost; see Figure 3). Each panel shows moal and DRC-only greedy on the CheMeleon and ChemProp backbones, with independent y-axes. Shaded bands show ±1 SD across five seeds. A star marks where a strategy terminates early after confirming every active in the pool. Single-click legend entries to toggle, double-click to isolate, double-click again to toggle all on.

At matched cost, moal and DRC-only are statistically indistinguishable on MAE (Figure 4), which is the result that matters for a budget argument. On PXR with CheMeleon, moal sits at 0.67 pEC50 MAE by $5,000 and 0.68 by $10,000 against 0.70 and 0.70 for DRC-only, but the per-seed spread swamps the gap (paired p = 0.22 and 0.63). The two stay within the noise of each other through moal's full-recovery endpoint near $17,900 (p = 0.08), and at every earlier point tested (p ≥ 0.22). ASAP Mpro behaves the same way, where moal's 0.63 MAE at $5,800 against DRC-only's 0.76 is not a significant difference (p = 0.28). Diverting spend to $1 censored screens therefore costs nothing in model accuracy, because the Tobit loss turns each screen into real gradient signal. moal reaches the same MAE as all-DRC greedy, having confirmed every active for roughly half the dollars.

Model backbone separates the configurations more than acquisition strategy does, echoing Part I. CheMeleon's mean MAE is lower than ChemProp's in every configuration on both targets. The gap is clearest under DRC-only on PXR (0.64 versus 0.72, p = 0.03) and directionally consistent but within seed noise under moal (0.68 versus 0.78 on PXR, p = 0.07; 0.63 versus 0.71 on ASAP Mpro, p = 0.48), where the mixed-fidelity campaigns carry wider variance. The ChemProp variant of moal is the weakest configuration tested by mean MAE. The accuracy ordering from Part I survives the move to mixed-fidelity data.

Figure 5. Kendall's \( \tau \) rank correlation between predicted and observed pEC50 on the held-out test set, for PXR (top) and ASAP Mpro (bottom), on the shared campaign-iteration axis (iteration 0 is the seed; twinned with the all-DRC cumulative cost; see Figure 3). Each panel shows moal and DRC-only greedy on the CheMeleon and ChemProp backbones, with independent y-axes. Higher values indicate better ranking of compounds by predicted activity. Shaded bands show ±1 SD across five seeds. A star marks where a strategy terminates early after confirming every active in the pool. Single-click legend entries to toggle, double-click to isolate, double-click again to toggle all on.

Kendall's \( \tau \) (Figure 5) gives moal a ranking edge early in the campaign, one that DRC-only erases on PXR by the end. On PXR with CheMeleon, moal reaches \( \tau \) ≈ 0.49 by $5,000, compared to 0.42 for DRC-only, a significant gap (paired p = 0.01). By the full-recovery endpoint the order reverses, DRC-only edging ahead at \( \tau \) ≈ 0.49 against moal's 0.45 (p = 0.05 at $17,900) as its exact anchors accumulate. On ASAP Mpro, moal instead holds a narrow but significant lead at its endpoint (\( \tau \) ≈ 0.66 versus 0.64, p = 0.007). Absolute values land where Part I left them, near 0.42 to 0.49 on PXR and 0.64 to 0.66 on ASAP Mpro for CheMeleon, with ChemProp consistently lower (paired p ≤ 0.003 on PXR, directionally consistent on ASAP Mpro). Early on moal ranks modestly better. On PXR that lead gives way as DRC-only's exact data piles up, while on ASAP Mpro it persists to the end.

Of course, DRC-only ends the campaign holding more exact data points, and its MAE keeps inching down (and \( \tau \) up) as those measurements pile up. Although moal buys far fewer exact measurements, its performance holds steady rather than drifting upward. The cheaper, partly-censored diet does not erode the model, even as the gap in exact-data volume between the two strategies widens over the campaign. The compounding failure mode feared above, where coarse labels weaken the ranker and the weak ranker misdirects later queries, does not materialize.

Push it to the limit

A more accurate model should find hits faster, ranking candidates more reliably such that fewer queries are wasted on misses. But how much improvement should we expect? How much sooner would the hits arrive, and how much cost would a sharper model save? To find out, we ran the campaign with "better" models by taking a real CheMeleon fit, shrinking its actual per-compound errors by a fixed fraction, and rerunning the PXR simulation with the contrived model proxies. We sweep error reductions of 10% to 60% relative to moal's own model (mean MAE 0.68 pEC50), which spans MAE down to about 0.27. The experimental assay noise floor near 0.3 pEC50 falls between the 50% and 60% curves.

Figure 6. Counterfactual hit-discovery on PXR under a more accurate model. Each "Error reduction (vs moal)" curve replays a real CheMeleon fit's per-compound error (the model's predicted minus true pEC50) scaled down so its test-set MAE lands a fixed fraction (10% to 60%) below moal's own model (mean MAE 0.68), then reruns the campaign with moal's cost-aware acquisition held fixed; curves are viridis-colored by terminal test-set MAE (pEC50 units), darker being more accurate. The live DRC-only and moal campaigns from Figure 3 are overlaid in their usual colors (heavier lines) as the reference. Axes match Figure 3: cumulative confirmed actives (DRC-measured pEC50 ≥6.0) on the shared campaign-iteration axis, twinned with the all-DRC cumulative cost, with the dashed horizontal line at the 51 actives in the pool. Shaded bands show ±1 SD across five seeds. A star marks where a strategy terminates early after confirming every active in the pool. Single-click legend entries to toggle, double-click to isolate, double-click again to toggle all on.

The moal implementation, at roughly a 2.34-fold cut (~$17,850 to $17,953) from the DRC-only baseline, already sits about halfway to the noise-limited floor. The top entries from our recent PXR blind challenge achieved ~0.41 pEC50 MAE, a 40% reduction below moal's model, corresponding to a prospective ~3-fold cut (~$14,000). The noise-limited best, at 0.30 pEC50 MAE (a 56% reduction), would theoretically reach a ~4-fold cut (~$10,400). The acquisition strategy got us the first halving, an attainable better model might achieve a ~3-fold reduction, and the final stretch to the theoretical noise floor asymptotes to a ~4-fold reduction.

Using moal in practice

The previous benchmarks run moal in simulation mode, meaning a fixed compound pool with known ground-truth activities and a virtual oracle that reveals pEC50 values on demand. Simulation is useful for parameter tuning and strategy comparison, but this setup doesn't apply to a real, in-progress campaign (where data hasn't yet been collected).

As such, moal plan takes your current campaign state (however far along it is) and returns a ranked recommendation for the next plate. The input is a single CSV that describes every compound in the pool:

Column Value Meaning
smiles SMILES string Compound structure
relation "" (empty) Unqueried; eligible for PS or DRC
"<" PS miss: pEC50 < ps_threshold
">=" PS hit: pEC50ps_threshold (promotion candidate)
"==" DRC result: exact pEC50
value float or empty Threshold (PS) or observed pEC50 (DRC); empty for unqueried rows

Rows with an empty relation are the candidates to be scored. All labeled rows, whether generated in the current campaign or pulled from historical screens on the same target, are the training data. The model trains on all of them simultaneously through the Tobit loss, so a legacy primary screen result from a previous campaign (or ChEMBL) slot in alongside fresh DRC measurements without any special handling.

The output is the same CSV annotated with two additional columns: predicted_pec50 (the model's point estimate for each unqueried compound) and recommendation ("ps" or "drc"), determined by the dual-score acquisition function described above. The top-ranked rows constitute the next plate.

Running moal plan requires a config file specifying the campaign state CSV path, the assay thresholds, costs, and model settings:

moal plan --config plan_config.yaml

The annotated output CSV is saved to the configured output directory, ready for direct use in plate design. Because the input format encodes three observation types (unqueried, censored, and exact), the same workflow handles any mix of prior data. For example, a campaign just starting with only historical PS records, one mid-run with a mix of PS and DRC results, or one resuming after a gap. The model treats it all as a single mixed-fidelity training pool and scores the unlabeled remainder accordingly.

Takeaways

Active learning saves money. moal reached full recovery on PXR for $17,900 against $41,900 for DRC-only greedy, a 2.34-fold reduction, and 42% of the roughly $43,000 it would take to dose-response the whole deck blind, a 2.4-fold saving over no active learning at all. Greedy ordering alone shaves only about 3% off that brute-force bill, since complete recovery forces it through nearly the whole deck regardless. The cheap primary-screen triage delivers the rest.

The payoff scales with library sparsity. The cheap-triage half of moal saves the most exactly where search is hardest. On PXR, a 1.5% hit-rate diversity deck, moal cut the cost of full recovery by 57% over DRC-only greedy. On ASAP Mpro, a 9% hit-rate congeneric series, it saved essentially nothing more (a 2% difference, not significant), because DRC-only active learning had already done most of the work. The model ranks a tight series well, so ordering alone finds the actives fast and leaves little for PS triage to economize. Multi-fidelity acquisition earns its keep on sparse libraries, where ordering alone must still march through most of the deck.

Cheap labels do not cost accuracy. The mixed-fidelity Tobit loss lets a $1 censored screen contribute real gradient signal. At equal budget, moal is statistically indistinguishable from DRC-only greedy on MAE (never significant, smallest paired p = 0.08) and modestly better on early-campaign ranking, so the cost savings do not come out of the model. A campaign run with moal ends with a regression model as good as one run all-DRC, having spent roughly half the money to build it.

Model-driven results align with drug discovery intuition. Running primary screens followed by promotion to DRCs is the most cost-efficient way to find and confirm active compounds, consistent with the intuition commonly used in HTS screening projects. However, model-driven approaches like the one presented here enable structured sequencing of PS and DRC data to find hits faster and more cheaply, rather than exhaustively searching the entire space.

Keep using a pretrained backbone. The Part I ordering holds: CheMeleon posts lower MAE than ChemProp in every configuration we ran, significantly so under DRC-only on PXR (p = 0.03) and directionally consistent elsewhere within wider seed variance. The ChemProp variant of moal is the weakest configuration tested. Absent a specific reason to avoid it, CheMeleon is the backbone to pair with cost-aware acquisition.

You can use historical data. Because the Tobit loss ingests censored labels directly, any prior primary-screen or dose-response data on the target, from an earlier campaign or a public source, can seed the model with no special handling beyond knowing the screen threshold. While we did not explicitly test this benefit, it's worth keeping in mind.

Reproducibility

All supporting code lives in active-learning-blogpost-ii/src/. src/helpers.py contains the campaign utilities, src/plots.py contains all figure functions, and src/config.py defines the experimental configuration. The moal acquisition and training loop are provided by the moal package.

To reproduce the results in this post, install moal and openadmet-models following their respective installation instructions, clone the blog post repository, and run:

# Run all campaigns (~several GPU-hours)
python run.py

# Generate all figures from results/*.pkl
python analysis.py

For the MAE sweep to reproduce Figure 6:

# Run the sweep
python mae_sweep.py

# Generate the figure
python mae_sweep_analysis.py

Acknowledgements

We would like to thank our funders for their support of OpenADMET, in particular ARPAH, Radial (part of the Astera Institute), Schrodinger Inc, and the Gates Foundation. We would also like to thank our partners Enamine, HuggingFace, OpenEye, CDD Vault, Discovery Life Sciences and the beamline staff at NSLS-II for their support.

This work is supported by the Advanced Research Projects Agency for Health (ARPA-H) under AVOID-OME, and Award Number 1AY1AX000035. The contents are those of the authors. They may not reflect the policies of the Department of Health and Human Services or the U.S. government. The content is solely the responsibility of the authors and does not necessarily represent the official views of the Advanced Research Projects Agency for Health.