Config Schema
Purpose
This page documents the authored YAML contract used by:
scripts/dsambayes.RDSAMbayes::run_from_yaml()runme.R
The authored schema is schema_version: 2 only. Older formula-driven YAML files are intentionally rejected.
Processing order
The runner processes configs in this order:
- Parse YAML.
- Coerce YAML infinity tokens (
.Inf,-.Inf). - Apply v2 defaults.
- Resolve relative paths against the config file directory.
- Validate the authored v2 contract.
- Compile the authored config into the internal runner config.
- Apply managed holiday terms, then build the model and run.
Root sections
| Key | Required | Purpose |
|---|---|---|
schema_version |
yes | Must be 2. |
data |
yes | Input data path, format, and date handling. |
target |
yes | Outcome column, KPI type, and response transform. |
media |
yes | Modeled media terms. |
controls |
yes | Non-media predictors, including manual trend/seasonality terms. |
effects |
no | Managed effects. In M1 this is holidays only. |
model |
yes | Model class and scaling options. |
hierarchy |
conditional | Required for model.type: re and model.type: cre. |
pooling |
conditional | Required for model.type: pooled. |
priors |
no | Default priors plus grouped or explicit overrides. |
boundaries |
no | Grouped or explicit parameter boundaries. |
fit |
no | MCMC or optimise settings. |
diagnostics |
no | Diagnostics, model selection, and time-series selection settings. |
allocation |
no | Budget optimisation settings. |
outputs |
no | Output paths and artifact toggles. |
forecast |
no | Reserved forecast toggle. |
Unknown keys fail validation.
Minimal valid config
Key differences from the retired schema
model.formulais no longer authored directly.schema_version: 1configs are rejected.- Trend and seasonality stay user-authored as ordinary columns under
controls. - Managed time effects are limited to holidays under
effects.holidays. reandcremodels usehierarchy, notcre.enabledflags.pooledmodels usepooling, notpooling.enabled.
Section reference
schema_version
| Key | Type | Rules |
|---|---|---|
schema_version |
integer | Must be 2. |
data
| Key | Type | Rules |
|---|---|---|
data.path |
string | Required. File must exist. Relative paths resolve from the config directory. |
data.format |
string | csv, rds, or long. |
data.date_var |
string | Required in M1. |
data.date_format |
string or null | Optional parser format for date columns. |
data.na_action |
string | omit or error. |
data.long_id_col |
string or null | Required when data.format: long. |
data.long_variable_col |
string or null | Required when data.format: long. |
data.long_value_col |
string or null | Required when data.format: long. |
data.dictionary_path |
string or null | Optional metadata CSV. |
data.dictionary |
mapping | Optional inline metadata keyed by term name. |
target
| Key | Type | Rules |
|---|---|---|
target.column |
string | Required response column. |
target.type |
string | revenue or subscriptions. |
target.transform |
string | identity or log. |
target.offset_column |
string or null | Supported only for model.type: blm in M1. |
media and controls
mediais a required list of modeled media terms.controlsis a required list, but it may be empty ([]).- A term may not appear in both lists.
- Manual trend and seasonality terms belong in
controls.
Compiled formula order is:
- generated holiday terms
controlsmedia- generated CRE mean terms
- optional offset
- hierarchical random-effects term
effects.holidays
Managed holidays are optional and are the only managed effect in M1.
| Key | Type | Rules |
|---|---|---|
effects.holidays.enabled |
boolean | Enables holiday feature generation. |
effects.holidays.path |
string | Required when enabled. CSV or RDS. |
effects.holidays.date_col |
string or null | Optional calendar date column override. |
effects.holidays.label_col |
string | Holiday label column. |
effects.holidays.country |
string or null | Optional single-country filter. |
effects.holidays.country_col |
string | Calendar column used with country. |
effects.holidays.date_format |
string or null | Optional parser format for non-ISO dates. |
effects.holidays.week_start |
string | monday through sunday. |
effects.holidays.timezone |
string | Timezone used in parsing/alignment. |
effects.holidays.prefix |
string | Prefix for generated holiday columns. |
effects.holidays.window_before |
integer | Non-negative. |
effects.holidays.window_after |
integer | Non-negative. |
effects.holidays.aggregation_rule |
string | count or any. |
effects.holidays.overlap_policy |
string | count_all or dedupe_label_date. |
effects.holidays.overwrite_existing |
boolean | Replaces existing columns only when true. |
Notes:
- The data date column must be aligned to the configured weekly anchor.
- Country filtering materializes a filtered calendar artifact before the compiled config is written.
model
| Key | Type | Rules |
|---|---|---|
model.name |
string | Defaults to the config filename stem. |
model.type |
string | blm, re, cre, or pooled. |
model.scale |
boolean | Controls internal scaling before fit. |
model.force_recompile |
boolean | Forces Stan recompilation when true. |
hierarchy
Required for model.type: re and model.type: cre.
| Key | Type | Rules |
|---|---|---|
hierarchy.group |
string | Grouping column for panel models. |
hierarchy.random_intercept |
boolean | Include `(1 |
hierarchy.random_slopes |
list of strings | Optional subset of authored media and controls. |
hierarchy.cre_variables |
list of strings | Required and non-empty for model.type: cre. |
hierarchy.cre_prefix |
string | Prefix for generated CRE mean terms. Default cre_mean_. |
pooling
Required for model.type: pooled.
| Key | Type | Rules |
|---|---|---|
pooling.grouping_vars |
list of strings | Required and non-empty. |
pooling.map_path |
string | Required. CSV or RDS. |
pooling.map_format |
string | csv or rds. |
pooling.min_waves |
integer or null | Optional positive integer. |
priors
| Key | Type | Rules |
|---|---|---|
priors.use_defaults |
boolean | Must remain true in M1. |
priors.likelihood |
mapping | Optional Abacus-style alias for noise_sd. |
priors.overrides |
list | Explicit parameter-level overrides. |
Grouped families are available when applicable:
interceptmedia_betacontrol_betaholiday_betacre_betapooling_betarandom_effect_sdnoise_sd
Each grouped family accepts either the legacy DSAMbayes style:
or the more explicit Abacus-style alias:
HalfNormal compiles to a zero-centered Normal prior plus an implied lower bound of 0 for unconstrained targeted parameter(s). Parameters that are already positive by construction, such as noise_sd and hierarchical sd_*[...], do not receive an extra boundary row.
The residual-noise prior also accepts this alias:
boundaries
Boundary families mirror the grouped prior families and may also use explicit boundaries.overrides.
Each grouped or explicit boundary row uses:
fit
| Key | Type | Rules |
|---|---|---|
fit.method |
string | mcmc or optimise. Pooled runs require mcmc. |
fit.seed |
numeric or null | Optional scalar seed. |
fit.optimise.* |
mapping | Optimisation controls. |
fit.mcmc.* |
mapping | Stan sampling controls. |
fit.mcmc.parameterization.positive_priors |
string | centered or noncentered. |
diagnostics
Retains the current runner surface for:
model_selectiontime_series_selectionidentifiability- publish-gate controls
Important M1 rule:
diagnostics.time_series_selection.enabled: trueis not supported for pooled runs.
allocation
Retains the current runner surface for budget optimisation, with channel targeting based on authored media terms.
outputs
outputs.root_dir and outputs.run_dir behave as before, but the metadata contract now includes:
config.original.yamlconfig.resolved.yamlconfig.compiled.yaml
forecast
Reserved toggle. No authored schema changes in M1.
Examples in this repository
config/blm_timeseries.yaml— weekly time-series BLM exampleconfig/cre_geo_panel.yaml— weekly geo-panel CRE example