Canada Economic Pulse Index (CEPI) — Methodology
Overview
The Canada Economic Pulse Index (CEPI) is a daily composite index designed to measure real-time momentum in Canadian economic activity.
CEPI imagines Canada as if it were a tradable asset. It aggregates high-frequency throughput signals — including cross-border flows, transportation activity, currency stability, and monetary policy conditions — into a single, continuously updated index level.
CEPI is not a GDP forecast. It is not a long-term growth model. It is a structured measure of acceleration or deceleration in observable economic activity.
CEPI consists of two distinct layers:
- CEPI-D (Daily Pulse Index) — a bounded, mean-reverting daily composite centred on 100. Values above 100 indicate above-trend macro momentum; values below 100 indicate below-trend momentum.
- Structural Composite Index — quarterly composite built from core macroeconomic pillars.
All data sources, transformations, and weights are explicitly documented below.
Design Principles
CEPI is governed by the following principles:
- Transparency — All data inputs and transformations are published.
- Reproducibility — A third party can reconstruct CEPI from this document.
- Mean Reversion — CEPI-D is a bounded index centred on 100; it naturally reverts toward baseline, producing visible regime shifts and recoveries.
- Lag Robustness — Explicit grace-period logic governs publication.
- Layer Separation — Daily pulse and structural fundamentals are independent systems.
Data Sources
3.1 Daily & High-Frequency Inputs (CEPI-D)
CEPI-D incorporates the following vectors:
Flow Signals
- International arrivals by air (daily)
- International arrivals by land (daily)
- Cross-border truck entries (daily)
Financial Signals
- CAD/USD daily average exchange rate
- CAD/EUR daily average exchange rate
- CAD/GBP daily average exchange rate
- CAD/CNY daily average exchange rate
- CAD/JPY daily average exchange rate
Monetary Policy
- Bank of Canada target overnight rate (daily)
Transportation Activity
- Domestic aircraft movements (weekly)
- Transborder aircraft movements (weekly)
Freight Activity
- National railway carloadings (monthly)
All vectors are version-locked and monitored for availability.
CEPI-D Construction
4.1 Daily Spine
Let:
Where:
- t0 = canonical start date (2025-07-01)
- T = publication end date, determined by grace logic
All vectors are mapped onto a common daily calendar spine.
4.2 Grace Period Logic
Define:
targetEnd= yesterday (UTC calendar date)seriesMaxi= most recent available date for series i
Each series has a maximum permitted lag:
| Series | Grace Window |
|---|---|
| Arrivals / Trucks (border flows) | 45 days |
| FX (USD, EUR, GBP) | 3 days |
| FX (CNY, JPY) | 60 days |
| Policy Rate | 60 days |
Lag is defined as:
If lagi > gracei, then:
Otherwise:
The index publishes through spineEnd = graceEnd. Any previously computed values beyond spineEnd are pruned.
The border-flow inputs (air and land arrivals, and trucks) are daily observations, but Statistics Canada releases them in monthly batches in arrears — a month’s daily values are typically published roughly two weeks after month-end. Their grace window is therefore set to 45 days so the index keeps publishing between releases, forward-filling these inputs from their last reported day. While this forward-fill is active, cepi_border_data_status is set to forward_filled and cepi_border_data_as_of records the date through which real border-flow data exists; both are surfaced as a note on the index page.
4.3 Forward Fill
Sparse series are forward-filled onto the daily spine:
xt = xt−1 otherwise
This avoids artificial zeros during short reporting gaps.
4.4 Flow Transformations
For daily flow-type series:
Step 1 — 7-Day Rolling Sum
Step 2 — Year-over-Year Growth (Preferred)
Fallback (if insufficient history for YoY):
Step 3 — Rolling Causal Z-score (120-day window)
A minimum of 60 observations in the window is required before a z-score is emitted. This rolling normalization replaces the former expanding z-score, enabling CEPI-D to adapt to regime changes within approximately four months rather than carrying the full history as a permanent reference.
Step 4 — Winsorization
Extreme values are clamped to reduce tail distortions.
Step 5 — Nonlinear Scaling
4.5 FX Stability Signal
Exchange rate stability is computed via rolling realized volatility. Let σc,t denote the 30-day rolling volatility for currency c.
Signal:
Currency weights are derived from export shares:
Basket signal:
Standardization and scaling follow the same Z-score and tanh transformation.
4.6 Policy Rate Signal
The policy rate signal is constructed from daily changes (first differences):
Rate holds produce a near-zero signal; cuts or hikes produce directional scores. This replaces the former level-based signal, which produced persistent negative drift whenever rates were below their expanding-window mean.
Standardized via rolling z-score and winsorized as above.
4.7 Weekly & Monthly Inputs
Weekly and monthly inputs are forward-filled to the daily spine before transformation. Each applies the same YoY-preferred signal chain with a frequency-appropriate fallback window for the pre-YoY period:
- Weekly aircraft (28-day rolling sum): YoY preferred; 42-day momentum fallback.
- Monthly rail (90-day rolling sum): YoY preferred; 90-day momentum fallback.
CEPI-D Composite Formula
The composite Z is the weighted average of the component z-scores available on a given day (with the trade-exposure multiplier applied to trucks and rail), renormalized by the sum of those available weights. On days when some components do not report — for example the daily border-flow series on weekends — the composite uses only the components that reported rather than treating the missing ones as neutral, so daily values stay comparable across dates. The composite is then transformed to a bounded signal:
The bounded CEPI-D level is:
CEPI-D is centred on 100. Values above 100 indicate above-trend macro momentum; values below 100 indicate below-trend momentum. The practical range is approximately [90, 110]. This bounded construction replaces the former chain-linked cumulative return, which produced irreversible downward drift.
Structural Composite Index (Quarterly)
Quarterly pillars:
- Real GDP per capita
- Business investment per worker
- Business R&D intensity
- Labour productivity
- Export diversification
Structural momentum:
Nowcast momentum:
Standardized and scaled to:
Export Diversification Score
Herfindahl–Hirschman Index:
Diversification score:
Publication Policy
- CEPI-D updates daily.
- Structural index updates only when all pillars are available.
- Trade data may lead the structural composite.
- Quarter mismatches are disclosed.
Revision Policy
- All source revisions propagate automatically.
- Composite recalculated on each run.
- Methodology changes increment the version number.
- All changes are documented within this file.
Limitations
- High-frequency data exhibits volatility.
- Weekend and holiday distortions exist.
- Forward-fill assumes short persistence.
- Grace logic introduces bounded estimation risk.
- Structural data is release-lagged.
Change Log
- Methodological upgrade from cumulative chain-linked returns to bounded level index. CEPI-D now uses CEPIt = 100 + 10 · Σwi·tanh(Zi,t/2), producing a mean-reverting index centred on 100.
- Expanding z-scores replaced with rolling causal z-scores (120-day window, 60-day minimum warmup). This enables CEPI-D to detect regime changes and recover from deteriorations rather than carrying a permanent negative reference.
- Policy rate signal changed from z-score of rate level to z-score of daily rate change (Δr). Rate holds now produce near-zero signals instead of persistent negative drift.
- Chain-linking and the daily return function removed. CEPI-D is now a direct bounded level, not a cumulative product of daily returns.
- Component contributions now use bounded signals (tanh of z-score) rather than raw z-scores.
- Rationale: the v1 chain-linked construction produced monotonic downward drift because negative signals compounded irreversibly while stabilization produced near-zero returns. The bounded level model recovers naturally and produces visible regime shifts, matching CEPI's intended behaviour as a tradable macro pulse index.
- Fallback momentum horizons shortened to improve CEPI responsiveness in the pre-YoY period: daily flows 28d → 14d; weekly aircraft 84d → 42d; monthly rail 180d → 90d.
- Rolling aggregation windows, normalization framework, and chain-linking behaviour unchanged.
- Initial public release.
- Grace period framework formalized.
- Equal-weight CEPI-D composite locked.