Configuration Validator Module
Overview
Section titled “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
Section titled “Module Location”src/core/config_validator.py
Key Features
Section titled “Key Features”- Parameter Aliasing: Supports user-friendly names that map to internal mathematical parameters
- Fuzzy Matching: Detects and suggests corrections for typos in parameter names
- Distribution Validation: Verifies PyMC distribution names and arguments
- Fail-Fast Design: Raises clear errors immediately rather than silently falling back to defaults
Main Functions
Section titled “Main Functions”validate_and_normalize_config
Section titled “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 parametersraise_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 andraise_on_error=True
get_close_matches
Section titled “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 matchpossibilities: List of valid wordsn: Maximum number of matches to returncutoff: Minimum similarity score (0.0 to 1.0)
Returns:
- List of close matches sorted by similarity
Parameter Mappings
Section titled “Parameter Mappings”User-Friendly to Internal Names
Section titled “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
Section titled “Usage Example”from src.core.config_validator import validate_and_normalize_config
# User provides configuration with friendly namesuser_config = { 'saturation_beta': { 'dist': 'Gamma', 'kwargs': {'alpha': 3, 'beta': 1} }, 'media_coefficients': { 'dist': 'HalfNormal', 'kwargs': {'sigma': 2} }}
# Validate and normalize to internal namesnormalized_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
Section titled “Error Handling”Invalid Parameter Name
Section titled “Invalid Parameter Name”config = {'saturaton_beta': {...}} # Typovalidate_and_normalize_config(config)# Raises: ValueError: Invalid parameter 'saturaton_beta'. Did you mean 'saturation_beta'?Invalid Distribution
Section titled “Invalid Distribution”config = {'lam': {'dist': 'Norml', ...}} # Typovalidate_and_normalize_config(config)# Raises: ValueError: Invalid distribution 'Norml'. Did you mean 'Normal'?Integration Points
Section titled “Integration Points”The validator should be integrated at these points:
src/prepro/config.py- When loading custom priors from configurationsrc/core/mmm_base.py- During model initialization- Any location where configuration parameters are processed
Testing
Section titled “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