Skip to main content
Nori predicts several related numeric targets in one fit and one prediction. Pass a target matrix instead of a vector to get joint means or samples that preserve dependence across targets.

One model call

Fit one NoriRegressor on a target matrix and receive every target in the same output array.

Joint uncertainty

Draw coherent target combinations instead of sampling each marginal in isolation.

Three dependence strategies

Choose the default copula, a lower-cost independent baseline, or an autoregressive factorization.

Local and hosted

Use the same target-matrix contract with the local estimator or the lightweight hosted client.
Multi-target regression is available in synthefy-nori 0.20.0 and synthefy 7.1.0 or later. Follow Installation for the local or hosted package. Copula support is included in the standard local install.

Quickstart

Make Y_train two-dimensional: one row per context row and one column per target. Nori uses the recommended "copula" strategy by default.
Means have shape (n_query, n_targets). Joint samples have shape (n_query, n_draws, n_targets), so samples[i, :, :] is the joint predictive distribution for query row i.

How it works

Nori first learns a predictive marginal for each target. The selected strategy then decides how to join those marginals.
1

Fit the target marginals

Each column of Y_train becomes a Nori regression target, while every target shares the same feature rows and checkpoint runtime.
2

Learn or choose dependence

Copula estimates dependence from cross-fitted residual ranks. Independent leaves the marginals separate. Autoregressive conditions later targets on targets already drawn in a selected order.
3

Draw jointly

Nori maps probability draws through the target marginals to produce one coherent target vector per draw and query row.
4

Return samples or their mean

output_type="samples" returns every draw. The default "mean" output returns one value per query row and target.
The independent, copula, and autoregressive strategy design was inspired by the ScoringBench team and their work on evaluating full predictive distributions with proper scoring rules.
The default "copula" strategy is the product trade-off for most work. It models cross-target dependence, is invariant to target-column order, and avoids the draw- and order-scaled query expansion of autoregressive prediction.

Choosing a strategy

Autoregressive led the release benchmark’s small-draw joint-accuracy screen, but copula remains the default because it is order-invariant and more predictable in cost. For reproducible autoregressive work, provide complete target-index permutations. Orders define a predictive factorization; they do not claim that one target causes another.
Omit autoregressive_orders to generate deterministic unique permutations. Nori caps the requested count at the number of possible unique permutations instead of repeating an order.

Hosted prediction

The lightweight client sends the target matrix in one hosted request. It returns nested lists by default, matching the arrays in the raw HTTP response. Create a key by following the API key guide.
Hosted responses echo the strategy that ran. The client checks that handshake and fails instead of returning plausible output from a deployment that ignored the requested multi-target controls.

Configuration

Pass MultiTargetPredictionPolicy at construction for fit-dependent controls. At prediction time, you can override n_draws and random_state; changing copula or target-order controls requires refitting. Hosted inference applies tighter work bounds and validates them before it sends a request.
Marginal "median", "quantiles", and "full" output are not part of the first multi-target release. Use joint samples when you need uncertainty.

Good to know

  • A two-dimensional target with at least two columns activates multi-target regression. One-dimensional targets keep their existing behavior.
  • discretize, categorical_levels, and large-context policies do not compose with multi-target regression in this release.
  • The hosted client records resolved autoregressive orders in client.last_target_orders. The local estimator exposes the same information as regressor.target_orders_.
  • Hosted joint samples are three-dimensional nested lists. Convert them with np.asarray(samples) when you want NumPy indexing; as_pandas=True is not supported for three-dimensional samples.
  • A memory policy applies to each internal marginal or chain call. Hosted calls expose the resulting list as client.last_multi_target_memory_reports.

Next steps

Python Client

Configure hosted, SageMaker, or local execution through one client.

Examples

Start with a complete single-target regression workflow.

Categorical targets

Predict onto a discrete numeric lattice when the target is ordinal.