<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Model Specification — Abacus Documentation</title>
    <link>/model-specification/index.html</link>
    <description>This section explains how PanelMMM is defined: the model structure, media transforms, priors, panel dimensions, optional time variation, and calibration hooks.&#xA;Pages Model Overview - The actual PanelMMM mean structure, scaled-space formulation, and optional components. Adstock and Saturation - Supported media transforms, their priors, and the adstock_first composition order. Priors and Configuration - Default prior keys, model_config, transform-prior overrides, and directional control priors. Time-Varying Parameters - How time_varying_intercept and time_varying_media use SoftPlusHSGP. Seasonality and Trends - Built-in yearly seasonality plus custom Fourier, trend, and event effects. Panel Dimensions - How dims change the shape of the data and parameters. Calibration - Lift-test and cost-per-target calibration for a built model.</description>
    <generator>Hugo</generator>
    <language>en-gb</language>
    <atom:link href="/model-specification/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Model Overview</title>
      <link>/model-specification/model-overview/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/model-specification/model-overview/index.html</guid>
      <description>PanelMMM is an additive Bayesian marketing mix model built in PyMC. This page describes the model structure that Abacus actually builds.&#xA;For input layout, see Data Preparation. For individual configuration surfaces, see the other pages in this section.&#xA;Core structure At fit time, Abacus builds the model mean in scaled target space as:&#xA;mu = intercept_contribution + sum(channel_contribution over channel) + sum(control_contribution over control), if control_columns are configured + mundlak_contribution, if use_mundlak_cre=True + yearly_seasonality_contribution, if yearly_seasonality is enabled + any additional mu_effects The observed target is then attached through the configured likelihood distribution with mu=mu.</description>
    </item>
    <item>
      <title>Adstock and Saturation</title>
      <link>/model-specification/adstock-and-saturation/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/model-specification/adstock-and-saturation/index.html</guid>
      <description>PanelMMM requires one adstock transform and one saturation transform. Abacus applies them inside the model graph rather than as a fixed preprocessing step.&#xA;For the econometrics framing of these transforms, see Adstock and Saturation for Econometricians.&#xA;How the transform path works Abacus combines the two transforms through forward_pass(...):&#xA;if adstock_first=True, the order is adstock then saturation if adstock_first=False, the order is saturation then adstock The transformed result becomes channel_contribution on the model scale.</description>
    </item>
    <item>
      <title>Seasonality and Trends</title>
      <link>/model-specification/seasonality-and-trends/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/model-specification/seasonality-and-trends/index.html</guid>
      <description>Abacus supports one built-in seasonality switch on PanelMMM and a broader additive-effect mechanism for custom seasonality, trend, and event terms.&#xA;Built-in yearly seasonality Set yearly_seasonality=&lt;int&gt; to add a yearly Fourier term directly to the main model specification.&#xA;mmm = PanelMMM( date_column=&#34;date&#34;, target_column=&#34;sales&#34;, channel_columns=[&#34;tv&#34;, &#34;search&#34;], yearly_seasonality=3, adstock=GeometricAdstock(l_max=8), saturation=LogisticSaturation(), ) This creates:&#xA;fourier_contribution as the unsummed Fourier basis contribution yearly_seasonality_contribution as the additive contribution to mu The prior for this built-in seasonality comes from model_config[&#34;gamma_fourier&#34;].</description>
    </item>
    <item>
      <title>Priors and Configuration</title>
      <link>/model-specification/priors-and-configuration/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/model-specification/priors-and-configuration/index.html</guid>
      <description>Abacus uses model_config to control priors on the underlying PyMC variables. Transform priors can be configured either on the transform objects themselves or through their prefixed variable names in model_config.&#xA;Where configuration lives Surface Use it for model_config Intercept, likelihood, controls, seasonality, Mundlak terms, time-varying config, and prefixed transform priors adstock=... and saturation=... Transform choice plus direct transform-prior overrides control_impacts and control_sign_policy Directional expectations for controls Default model_config PanelMMM.default_model_config is built from the current model state.</description>
    </item>
    <item>
      <title>Panel Dimensions</title>
      <link>/model-specification/panel-dimensions/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/model-specification/panel-dimensions/index.html</guid>
      <description>Use dims when your dataset is a panel rather than a single timeseries.&#xA;Examples of useful panel dimensions:&#xA;geo brand market country For the input row layout, see Panel Data Layout.&#xA;What dims does dims tells PanelMMM which extra categorical axes exist alongside date.&#xA;With no extra dims, the model is indexed by:&#xA;date channel optionally control With dims=(&#34;geo&#34;,), the model is indexed by:</description>
    </item>
    <item>
      <title>Time-Varying Parameters</title>
      <link>/model-specification/time-varying-parameters/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/model-specification/time-varying-parameters/index.html</guid>
      <description>Abacus supports time-varying intercept and media effects through SoftPlusHSGP, a Hilbert Space Gaussian Process approximation.&#xA;Two ways to enable time variation For both time_varying_intercept and time_varying_media, you can pass:&#xA;True to use the config-driven default path a custom HSGPBase instance such as SoftPlusHSGP(...) Boolean mode The simplest entry point is a boolean flag:</description>
    </item>
    <item>
      <title>Calibration</title>
      <link>/model-specification/calibration/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/model-specification/calibration/index.html</guid>
      <description>Calibration lets you add external evidence to a built PanelMMM.&#xA;Abacus currently supports two retained calibration paths:&#xA;lift-test measurements through add_lift_test_measurements(...) cost-per-target calibration through add_cost_per_target_calibration(...) General rule Both calibration methods operate on a built model, not a bare constructor.&#xA;Typical sequence:&#xA;mmm.build_model(X, y) # optional calibration step(s) here idata = mmm.fit(X, y) If you try to add calibration before the model graph exists, Abacus raises an error.</description>
    </item>
  </channel>
</rss>