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¶
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¶
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¶
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¶
User-Friendly to Internal Names¶
User-Friendly Name |
Internal Name |
Description |
|---|---|---|
|
|
Saturation parameter |
|
|
Adstock decay rate |
|
|
Media effectiveness |
|
|
Control variables |
|
|
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:
src/prepro/config.py- When loading custom priors from configurationsrc/core/mmm_base.py- During model initializationAny 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