Output Directory Schema
Each pipeline run creates a timestamped directory under the configured
output_dir:
The timestamp is generated in UTC. The runner creates every stage directory up
front, then updates run_manifest.json as stages start, complete, skip, or
fail.
Directory tree
Stage directories
| Stage | Directory | Typical artefacts |
|---|---|---|
metadata |
00_run_metadata |
config.resolved.yaml, model_metadata.json, spec_summary.csv |
preflight |
10_pre_diagnostics |
prior_predictive.nc, prior_predictive.png |
fit |
20_model_fit |
model.nc, trace.png, posterior_summary.csv |
assessment |
30_model_assessment |
in-sample posterior predictive checks and residual outputs |
validation |
35_holdout_validation |
blocked holdout scoring, uncertainty-aware metrics, and residual diagnostics |
decomposition |
40_decomposition |
contribution CSVs and decomposition plots |
diagnostics |
50_diagnostics |
raw input screening, MCMC, predictive, and residual diagnostic reports |
curves |
60_response_curves |
saturation-only, forward-pass direct contribution, and adstock NetCDF, summaries, and plots |
optimisation |
70_optimisation |
allocation, response, optimisation summary, and bounds audit artefacts |
See Runner Overview for the stage order and optionality.
Main artefacts by stage
00_run_metadata
Main files:
- a copy of the original config under its source filename
config.original.yamlconfig.resolved.yamlsession_info.txtdataset_metadata.jsonmodel_metadata.jsondata_dictionary.csvdesign_matrix_manifest.csvspec_summary.csvholiday_feature_manifest.csvwhen holidays are configured
config.resolved.yaml normalises configured data and holiday paths to absolute
paths and records the effective sampler configuration on the model.
10_pre_diagnostics
Main files:
prior_predictive.ncprior_predictive.png
20_model_fit
Main files:
model.nctrace.pngposterior_summary.csv
30_model_assessment
Main files:
posterior_predictive.ncposterior_predictive.pngposterior_predictive_summary.csvobserved.csvfitted.csvfit_timeseries.pngfit_scatter.pngresiduals.csvresiduals_timeseries.pngresiduals_hist.pngresiduals_vs_fitted.png
This stage is the in-sample or training-fit assessment. It uses the same data the model was fit on and should not be read as the pipeline’s out-of-sample validation layer.
35_holdout_validation
Main files:
validation_metadata.jsonholdout_posterior_predictive.ncholdout_predictive_summary.csvholdout_predictive_report.jsonholdout_observed.csvholdout_fitted.csvholdout_residuals.csvholdout_timeseries.pngholdout_residuals_acf.png
The holdout summary and report include uncertainty-aware metrics such as
crps, bias, and fixed coverage columns for coverage_50, coverage_80,
and coverage_94.
This stage is optional. When validation is absent or disabled in YAML, the
directory still exists and the stage is marked skipped.
40_decomposition
Main files:
waterfall_components_decomposition.pngweekly_media_contribution.pngchannel_contributions.csvbaseline_contributions.csvmean_contributions_over_time.csv
50_diagnostics
Main files:
design_summary.csvdesign_report.jsonvif_report.csvmcmc_summary.csvmcmc_report.jsonpredictive_summary.csvpredictive_report.jsonresidual_diagnostics.csvresiduals_acf.pngdiagnostics_report.csvdiagnostics_summary.txtchain_diagnostics.txt
The design-oriented files are raw input screening outputs. In particular,
diagnostics_report.csv labels the corresponding phase as
raw_input_screening rather than design.
60_response_curves
Main files:
saturation_curve.ncsaturation_curve_summary.csvsaturation_curve.pngforward_pass_contribution_curve.ncforward_pass_contribution_curve_summary.csvforward_pass_contribution_curve.pngadstock_curve.ncadstock_curve_summary.csvadstock_curve.png
These artefacts are intentionally different:
saturation_curve.*is the sampled saturation transformation on the scaled channel axis, exported with original-scale contribution values for easier reading. The PNG overlays that saturation-only curve against posterior mean realised contributions.forward_pass_contribution_curve.*is a full-model direct contribution artefact. It rescales the observed historical spend path from0%to200%, runs that spend through the fitted adstock and saturation path, and records the resulting total channel contribution in original target units.adstock_curve.*is the sampled carryover-weight profile for one impulse.
70_optimisation
This directory is present for every run, but the stage is skipped unless the
YAML config contains an optimization block.
Main files when the stage runs:
optimized_allocation.ncoptimized_allocation.csvresponse_distribution.ncoptimize_result.jsonbudget_summary.csvbudget_response_points.csvbudget_impact.csvbudget_bounds_audit.csvbudget_roi_cpa.csvbudget_response_curves.csvbudget_mroi.csvbudget_optimisation.json- several PNG plots for allocation, contribution over time, response curves, impact, bounds audit, and ROI or CPA
run_manifest.json
The manifest is the machine-readable index for the whole run.
Top-level fields include:
| Field | Meaning |
|---|---|
run_name |
Effective run name |
timestamp |
UTC run timestamp |
config_path |
Original config path |
output_dir |
Run directory path |
status |
Overall run status |
model_class |
Set after Stage 00 builds the model |
data |
Basic dataset metadata |
stages |
Per-stage manifest records |
warnings |
Run-level warnings |
error |
Run-level failure payload when the pipeline aborts |
data includes:
x_shapey_lengthtarget_columnx_columns
Stage records
Each stage record contains:
| Field | Meaning |
|---|---|
directory |
Stage directory name |
status |
Current stage status |
started_at |
ISO timestamp when the stage started |
finished_at |
ISO timestamp when the stage finished |
artifacts |
Mapping of artefact labels to root-relative paths |
warnings |
Stage warnings |
error |
Error string when the stage fails |
The artifacts mapping uses root-relative paths such as
20_model_fit/model.nc.
Stage statuses
| Status | Meaning |
|---|---|
pending |
Stage has not started yet |
running |
Stage is currently running |
completed |
Stage finished successfully |
skipped |
Stage returned None intentionally |
failed |
Stage raised an exception |
not_reached |
A previous stage failed before this one ran |
Common cases:
- Stage 35 is
skippedwhenvalidationis missing or disabled from YAML. - Stage 70 is
skippedwhenoptimizationis missing from YAML. - Later stages become
not_reachedafter the first failure.
Practical use
Use the run directory when you want:
- a stable folder for downstream reporting
- a machine-readable audit trail through
run_manifest.json - stage-level links to artefacts without hard-coding filenames
If you want to add new artefact types or stages, see Extending the Runner.