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
MakeY_train two-dimensional: one row per context row and one column per
target. Nori uses the recommended "copula" strategy by default.
(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.
Copula — recommended
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.
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.Configuration
Strategy and policy controls
Strategy and policy controls
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.Output contract
Output contract
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 asregressor.target_orders_. - Hosted joint samples are three-dimensional nested lists. Convert them with
np.asarray(samples)when you want NumPy indexing;as_pandas=Trueis 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.