Skip to content

Configuration Validator Module

The config_validator module provides robust validation and normalization for MMM configuration parameters, particularly for custom priors. It includes parameter aliasing, typo detection, and detailed error reporting.

src/core/config_validator.py

  1. Parameter Aliasing: Supports user-friendly names that map to internal mathematical parameters
  2. Fuzzy Matching: Detects and suggests corrections for typos in parameter names
  3. Distribution Validation: Verifies PyMC distribution names and arguments
  4. Fail-Fast Design: Raises clear errors immediately rather than silently falling back to defaults
def validate_and_normalize_config(
config: Dict[str, Any],
raise_on_error: bool = True
) -> Dict[str, Any]

Validates and normalizes configuration parameters.

Parameters:

  • config: Dictionary of configuration parameters
  • raise_on_error: If True, raises ValueError on invalid parameters; if False, logs warnings

Returns:

  • Normalized configuration dictionary with internal parameter names

Raises:

  • ValueError: If invalid parameters are found and raise_on_error=True
def get_close_matches(
word: str,
possibilities: List[str],
n: int = 3,
cutoff: float = 0.6
) -> List[str]

Finds close matches for a potentially misspelled parameter name.

Parameters:

  • word: The word to match
  • possibilities: List of valid words
  • n: Maximum number of matches to return
  • cutoff: Minimum similarity score (0.0 to 1.0)

Returns:

  • List of close matches sorted by similarity
User-Friendly NameInternal NameDescription
saturation_betalamSaturation parameter
adstock_alphaalphaAdstock decay rate
media_coefficientsbeta_channelMedia effectiveness
control_coefficientsgamma_controlControl variables
seasonality_coefficientsgamma_fourierSeasonality terms
from src.core.config_validator import validate_and_normalize_config
# User provides configuration with friendly names
user_config = {
'saturation_beta': {
'dist': 'Gamma',
'kwargs': {'alpha': 3, 'beta': 1}
},
'media_coefficients': {
'dist': 'HalfNormal',
'kwargs': {'sigma': 2}
}
}
# Validate and normalize to internal names
normalized_config = validate_and_normalize_config(user_config)
# Result:
# {
# 'lam': {
# 'dist': 'Gamma',
# 'kwargs': {'alpha': 3, 'beta': 1}
# },
# 'beta_channel': {
# 'dist': 'HalfNormal',
# 'kwargs': {'sigma': 2}
# }
# }
config = {'saturaton_beta': {...}} # Typo
validate_and_normalize_config(config)
# Raises: ValueError: Invalid parameter 'saturaton_beta'. Did you mean 'saturation_beta'?
config = {'lam': {'dist': 'Norml', ...}} # Typo
validate_and_normalize_config(config)
# Raises: ValueError: Invalid distribution 'Norml'. Did you mean 'Normal'?

The validator should be integrated at these points:

  1. src/prepro/config.py - When loading custom priors from configuration
  2. src/core/mmm_base.py - During model initialization
  3. Any location where configuration parameters are processed

Detailed tests are available in tests/core/test_config_validator.py, covering:

  • Parameter aliasing
  • Typo detection
  • Distribution validation
  • Error message formatting
  • Edge cases and invalid inputs