Skip to main content

PyPI t CI / CD

nowcasting-dfm

A Python implementation of the Dynamic Factor Model (DFM) for macroeconomic nowcasting, extending the FRBNY framework (Qian & Bok) with a modern API: real-time vintage management, Kalman-based news decomposition, optional Numba acceleration, caching, and interactive Plotly visualizations.

Based on "Macroeconomic Nowcasting and Forecasting with Big Data" (Bok et al., Staff Reports 830, NY Fed).

Installation

pip install nowcasting-dfm

For Jupyter notebook support:

pip install "nowcasting-dfm[all]"

Quick Start

from dfm_sp import Options, get_with_options, run, download_sample_data

# Download sample US vintage data (only needed once)
download_sample_data()

# Configure and run the model
options = Options(
    vintage="2016-12-16",
    country="US",
    spec_file_name="Spec_US_example.xls",
    max_iter=5000,
    use_cache=True,
)

Spec, X, Time, Z = get_with_options(options)
result = run(X, Spec, options)

Nowcast update — decompose the impact of new data releases

from dfm_sp import Options, sp_update_nowcast

options = Options(vintage="2016-12-16", country="US", spec_file_name="Spec_US_example.xls")

result = sp_update_nowcast(
    options,
    new_date="2016-12-23",
    series="GDPC1",
    period="2016q4",
)
result["fig"].show()  # interactive Plotly waterfall chart

Architecture & Optimizations

  • Modular Architecture (sp_* modules): Transitioned the procedural scripts into a structured object-oriented library (dfm_sp). Introduced formal configuration dataclasses (sp_classes.py) and modular plotting logic (sp_plots.py) to streamline experimental workflows.
  • Centralized Transformations (sp_transformations.py): Abstracted legacy nested-lambda blocks into a dedicated MacroTransformations registry. Implements 4 new stationary bounds (dln, dl1, d2l, zsc) allowing complex structural vector geometries without inline array indexing side-effects.
  • Execution Caching: Integrated a use_cache parameter into the Options class. High-dimensional Expectation-Maximization (EM) operations are serialized, allowing rapid iteration on visualization and reporting without repeatedly waiting on matrix re-calculations.
  • Numba JIT Acceleration: The core Expectation-Maximization algorithm and Kalman Filter transition loop have been rewritten for ahead-of-time C compilation via @numba.jit. This drastically cuts execution time for extensive parameter searches (max_iter 5000+).
  • Automated Econometric Validation: Integrated Augmented Dickey-Fuller (ADF) testing via statsmodels to evaluate series stationarity post-transformation, directly guarding against feeding non-stationary data into the DFM.
  • Testing Suite: A comprehensive pytest suite enforces the mathematical integrity of the Numba translation against the pure Python implementation, particularly concerning NaN propagation ("ragged edges") inherent in raw macroeconomic releases.
  • Dependency Management: Packaged with pyproject.toml and a hatchling build backend; supports Python 3.10+.
  • HTML Reporting: Automatically generates standalone Plotly HTML reports containing Factor Contributions, Likelihood optimizations, and Model loadings.
  • "News" Attribution Waterfalls: Provides native bindings (sp_news.py) to dissect the mathematical drivers behind week-over-week DFM forecast changes. Generates Plotly Waterfall charts bridging Actual vs Expected impacts weighted by the Kalman gain.
  • Pseudo-Real-Time Synthesizer: Includes sp_vintage_generator.py for automatically simulating historical "ragged-edge" data matrices from a single modern dataset. Maps execution algorithms (e.g. 1st Friday of the Month, 15th of the Month) to dynamically blind data that had not yet been published, allowing mathematically un-cheated backtesting independent of the FRED ALFRED API.

Repository Structure

  • data/ : Example US macro series retrieved from FRED.
  • dfm_sp/ : Core package encompassing the execution engines and analytics.
    • core/ : Kalman filtering, spline imputation, EM-step mathematics, and data loaders.
    • tests/ : Component tests simulating missing economic data and ragged tails.
  • examples/ : Ready-to-run scripts and configuration examples (CSV pipeline, custom config, spec generation).
  • notebooks/ : Jupyter notebooks covering classic usage, news waterfalls, pseudo-vintages, and weekly integration.
  • main.py : Execution script illustrating the estimation of a standard panel and generating visualization artifacts.
  • example_Nowcast.py : Demonstration of out-of-sample prediction mechanics (e.g., real GDP growth).

Attribution & Notice

This package is not affiliated with the Federal Reserve Bank of New York.

The lineage of this work is:

  1. Eric Qian & Brandyn Bok (FRBNY) — original MATLAB implementation of the DFM nowcasting framework (FRBNY-TimeSeriesAnalysis/Nowcasting)
  2. Galib Khan (MajesticKhan) — independent Python translation (MajesticKhan/Nowcasting-Python)
  3. Sermet Pekin — this package: modernised API, caching, plotting layer, news decomposition, vintage synthesizer, and testing suite

Academic credit for the methodology: Bok, Caratelli, Giannone, Sbordone & Tambalotti, "Macroeconomic Nowcasting and Forecasting with Big Data", Staff Reports 830, Federal Reserve Bank of New York.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nowcasting_dfm-0.1.7.tar.gz (56.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nowcasting_dfm-0.1.7-py3-none-any.whl (72.2 kB view details)

Uploaded Python 3

File details

Details for the file nowcasting_dfm-0.1.7.tar.gz.

File metadata

  • Download URL: nowcasting_dfm-0.1.7.tar.gz
  • Upload date:
  • Size: 56.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.15

File hashes

Hashes for nowcasting_dfm-0.1.7.tar.gz
Algorithm Hash digest
SHA256 3f691056c593c3901ab7dd4a2a3d0a394855e3762fcdda17f11f2d74ad67959b
MD5 69a5399812540d19fc48279ce921bf56
BLAKE2b-256 3f34b81a0a6afe6698da05cc73d2fc83f8ca084bd2fb057d4813d0126e068cb0

See more details on using hashes here.

File details

Details for the file nowcasting_dfm-0.1.7-py3-none-any.whl.

File metadata

  • Download URL: nowcasting_dfm-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 72.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.15

File hashes

Hashes for nowcasting_dfm-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 8e3b3bf75756c1a0cb1e562a33e40836ff437cb00b334d116aa90e1dd4fa338d
MD5 7a5871df274d19134eb3a8ce7f4dd8bf
BLAKE2b-256 b630a813a15d55950666db19b18d8427456b46a6e272cd4fc1487fec88f1a5d2

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.13

2 files

0.1.12

2 files

0.1.11

2 files

0.1.10

2 files

0.1.9

2 files

0.1.8

2 files

This release

0.1.7 This release

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page