Skip to content

Constant - Constant Prediction Model

Simple baseline model that predicts constant distributions for benchmarking and ablation studies.


Class Definition

Bases: BaseModel

A baseline model that predicts a constant distribution, ignoring covariates.

  • Before fit(): mean = 1 (Gamma/IG), 0 (Gaussian); dispersion = 1.
  • fit(): ignores X, sets mean to y_train.mean(), estimates dispersion via estimate_dispersion.

Functions

clone()

Create a copy of the model with the same parameters.

predict(x)

Create a (constant) distributional forecast for the given inputs.

Overview

The Constant model provides: - Simple baselines - Predict same distribution for all inputs - Benchmarking - Performance comparison baseline - Ablation studies - Control model for feature importance - Sanity checks - Verify that other models add value

Key Features

  • Distribution fitting - Fits single distribution to all training data
  • Fast inference - No feature processing required
  • Multiple distributions - Supports Gaussian, Gamma, etc.
  • Debugging tool - Helps identify modeling issues

Quick Example

from drn.models import Constant

# Fit constant Gamma distribution
constant_model = Constant(distribution='gamma')
constant_model.fit(X_train, y_train)

# All predictions are identical
pred1 = constant_model.predict(X_test[:1])
pred2 = constant_model.predict(X_test[100:101])

# Same distribution parameters
assert torch.allclose(pred1.mean, pred2.mean)
assert torch.allclose(pred1.variance, pred2.variance)

Use Cases

Benchmarking

from drn.metrics import rmse, crps

# Compare against constant baseline
constant_baseline = Constant('gamma')
constant_baseline.fit(X_train, y_train)

your_model = SomeModel()
your_model.fit(X_train, y_train)

# Evaluate both
constant_pred = constant_baseline.predict(X_test)
your_pred = your_model.predict(X_test)

constant_rmse = rmse(y_test, constant_pred.mean)
your_rmse = rmse(y_test, your_pred.mean)

print(f"Constant baseline RMSE: {constant_rmse:.4f}")
print(f"Your model RMSE: {your_rmse:.4f}")
print(f"Improvement: {((constant_rmse - your_rmse) / constant_rmse * 100):.1f}%")

Performance Characteristics

The Constant model excels in simplicity and speed:

Aspect Rating Notes
Training Speed ⭐⭐⭐⭐⭐ Instant - just fits distribution to data
Memory Usage ⭐⭐⭐⭐⭐ Minimal - stores only distribution parameters
Flexibility None - same prediction for all inputs
Interpretability ⭐⭐⭐⭐⭐ Perfect - single fitted distribution
Stability ⭐⭐⭐⭐⭐ Maximum - no complexity to cause instability

Supported Distributions

The Constant model supports various distributions, but can be easily extended:

Continuous Distributions

# Gaussian for unbounded data
constant_gaussian = Constant('gaussian')

# Gamma for positive data  
constant_gamma = Constant('gamma')

# Log-normal for multiplicative processes
constant_lognormal = Constant('lognormal')

# Inverse Gaussian for right-skewed positive data
constant_ig = Constant('inversegaussian')