Configuration Validator Module

Overview

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.

Module Location

src/core/config_validator.py

Key Features

  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

Main Functions

validate_and_normalize_config

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

get_close_matches

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

Parameter Mappings

User-Friendly to Internal Names

User-Friendly Name

Internal Name

Description

saturation_beta

lam

Saturation parameter

adstock_alpha

alpha

Adstock decay rate

media_coefficients

beta_channel

Media effectiveness

control_coefficients

gamma_control

Control variables

seasonality_coefficients

gamma_fourier

Seasonality terms

Usage Example

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}
#     }
# }

Error Handling

Invalid Parameter Name

config = {'saturaton_beta': {...}}  # Typo
validate_and_normalize_config(config)
# Raises: ValueError: Invalid parameter 'saturaton_beta'. Did you mean 'saturation_beta'?

Invalid Distribution

config = {'lam': {'dist': 'Norml', ...}}  # Typo
validate_and_normalize_config(config)
# Raises: ValueError: Invalid distribution 'Norml'. Did you mean 'Normal'?

Integration Points

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

Testing

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