Multimodal Forecasting Under Partial Observation

July 29, 2026 · View on GitHub

This page defines the bounded BL-37 multimodal forecasting product. It provides immutable multimodal custody, a deterministic missingness-aware classical baseline, partial-observation scoring, empirical split residual intervals, and explicit composition ports into BL-68 sensing and BL-33 controller proposals.

Production surfaces

The public scpn_quantum_control.forecasting facade exports:

  • MultimodalObservationBatch for phase histories, graphs, exogenous events, masks, targets, frequencies, sample identifiers, split custody, and simulation-only domain tags;
  • generate_synthetic_multimodal_dataset(...) for deterministic, independent train, calibration, and test Kuramoto trajectories;
  • fit_multimodal_ridge_forecaster(...) for a linear reference model whose imputation means and scales come only from training custody;
  • evaluate_partial_observation_batch(...) for observed wrapped-phase error plus an exact known-simulator Kuramoto forward residual;
  • fit_residual_interval_calibrator(...) and certify_interval_coverage(...) for sample-max split residual intervals over independent synthetic trajectory rows;
  • plan_forecast_active_sensing(...) for an interval-width proxy entering the existing BL-68 no-submit planner; and
  • forecast_to_controller_initialisation(...) for a clipped, unapplied existing BL-33 ControllerProposal.

The four allowed tags—synthetic, grid_like_sim, eeg_like_sim, and plasma_like_sim—identify stylised generator configurations. They do not identify real datasets or establish domain fidelity.

Minimal deterministic workflow

import numpy as np

from scpn_quantum_control.forecasting import (
    SyntheticMultimodalConfig,
    apply_residual_interval,
    certify_interval_coverage,
    evaluate_partial_observation_batch,
    evaluate_point_forecast,
    fit_multimodal_ridge_forecaster,
    fit_residual_interval_calibrator,
    generate_synthetic_multimodal_dataset,
)

dataset = generate_synthetic_multimodal_dataset(
    SyntheticMultimodalConfig(
        train_samples=64,
        calibration_samples=24,
        test_samples=32,
        seed=3701,
    )
)
model = fit_multimodal_ridge_forecaster(dataset.train, ridge=10.0)

calibration_forecast = model.predict(dataset.calibration)
calibrator = fit_residual_interval_calibrator(
    model,
    calibration_forecast,
    dataset.calibration,
    alpha=0.10,
)

test_forecast = model.predict(dataset.test)
accuracy = evaluate_point_forecast(test_forecast, dataset.test)
interval = apply_residual_interval(calibrator, test_forecast)
coverage = certify_interval_coverage(model, calibrator, interval, dataset.test)

partial_mask = np.zeros_like(dataset.test.target_mask)
partial_mask[:, :, ::2] = True
partial = evaluate_partial_observation_batch(
    test_forecast,
    dataset.test,
    partial_mask,
)

All batches and fitted arrays are copied and made read-only. Missing inputs are normalised to NaN behind explicit masks. Split identifiers and SHA-256 content digests make train/calibration/test leakage checks executable.

Frozen evidence

The committed evidence uses 64 training, 24 calibration, and 32 test trajectories, with 16/6/8 independent rows per synthetic tag. Input phase and event entries are randomly masked; exact simulator couplings remain fully known because the physics-residual certificate does not infer them.

Held-out metricObserved
Test wrapped MSE0.000823098535
Persistence wrapped MSE0.00113867904
Partial-mask fraction0.5
Partial observed wrapped RMSE0.0254875208
Exact-simulator Kuramoto residual RMSE0.210377396
Split residual radius (alpha=0.1)0.0961529067
Empirical test sample coverage0.90625
Empirical test value coverage0.9921875

The test MSE is lower than persistence overall and for each of the four frozen test-tag groups. On calibration, the overall MSE is lower than persistence, but the synthetic subgroup is not. These finite synthetic rows are regression evidence for this exact configuration, not a general superiority result.

The nominal interval target is 0.9 and the frozen sample coverage is 0.90625. This is an empirical held-out result over independently generated trajectory rows. It is not a conditional-coverage, sequential EnbPI, or domain-transfer guarantee.

Regenerate and byte-check the evidence with:

PYTHONPATH=src python scripts/run_multimodal_forecasting_evidence.py
PYTHONPATH=src python scripts/run_multimodal_forecasting_evidence.py --check

Committed custody:

  • data/multimodal_forecasting/bl37_evidence.json
  • data/multimodal_forecasting/bl37_evidence.md
  • content digest f7728c62a7fae64afd6b17fa900d1c733cf5616f9b87cedd25b4b440b6550c02

Composition boundaries

plan_forecast_active_sensing(...) converts per-node interval widths into InformationGainCandidate records and calls the existing BL-68 planner. The frozen evidence produces an allowed local dry-run plan with hardware_execution=False, would_submit=False, and no provider cost claim. Passing request_hardware=True remains refused by BL-68.

forecast_to_controller_initialisation(...) maps the terminal forecast order parameter into a clipped existing ControllerProposal. The returned record is always applied=False and safety_decision=False. It does not establish closed-loop stability, control performance, or operational suitability.

Scientific basis

  • Cao et al. (2018), BRITS motivates preserving explicit missingness in multivariate time-series models. BL-37 does not implement or claim BRITS.
  • Xu and Xie (2023) motivates careful uncertainty claims for time series. BL-37 uses independent synthetic trajectory rows and does not claim their sequential method.
  • Smith and Gottwald (2023) treats dynamics learning under partial observation as a data-assimilation problem. BL-37 does not claim their ensemble Kalman parameter-inference result.
  • Dörfler, Chertkov, and Bullo (2013) supplies oscillator-network context for the grid-like simulation tag. It does not validate an operational power-grid model here.

These sources constrain the architecture and claim language. They do not validate this repository's thresholds, generated trajectories, forecasts, or deployment suitability.

Explicit exclusions

  • No real EEG, clinical, grid, SCADA, plasma diagnostic, or plant data is in BL-37 custody.
  • No hidden-state reconstruction, coupling inference, data assimilation, or arbitrary partial-observation solution is claimed.
  • No hardware, provider, QPU, adaptive sensing, clinical, safety, stability, control-performance, generalisation, advantage, publication, or deployment claim is made.
  • The deterministic ridge model is a classical reference baseline, not a production forecasting service.