| from __future__ import annotations | |
| from dataclasses import dataclass | |
| class BaselineAssumptions: | |
| total_reference_population: int = 10_000_000 | |
| uncertainty_low: float = 0.72 | |
| uncertainty_high: float = 1.28 | |
| BASELINE = BaselineAssumptions() | |
| AGE_BAND_FACTORS = { | |
| "18-24": 0.12, | |
| "25-34": 0.22, | |
| "35-44": 0.20, | |
| "45-54": 0.18, | |
| "55-70": 0.28, | |
| } | |
| REGION_FACTORS = { | |
| "all_ukraine": 1.0, | |
| "large_cities": 0.34, | |
| "kyiv_region": 0.13, | |
| "western_regions": 0.24, | |
| } | |
| TARGET_POPULATION_FACTORS = { | |
| "all_adults": 1.0, | |
| "women": 0.53, | |
| "men": 0.47, | |
| } | |
| RELATIONSHIP_STATUS_FACTORS = { | |
| "any": 1.0, | |
| "not_married": 0.46, | |
| "single_or_divorced": 0.32, | |
| } | |
| HEIGHT_FACTORS = { | |
| 160: 0.92, | |
| 165: 0.82, | |
| 170: 0.67, | |
| 175: 0.48, | |
| 180: 0.28, | |
| 185: 0.13, | |
| 190: 0.04, | |
| } | |
| INCOME_FACTORS = { | |
| "any": 1.0, | |
| "above_median": 0.42, | |
| "top_25": 0.25, | |
| "top_10": 0.10, | |
| } | |
| EDUCATION_FACTORS = { | |
| "any": 1.0, | |
| "higher_education": 0.38, | |
| "graduate_plus": 0.16, | |
| } | |
| DATA_QUALITY_NOTES = [ | |
| { | |
| "label": "Population", | |
| "note": "Replace demo baseline with current age-sex population estimates before publication.", | |
| }, | |
| { | |
| "label": "Relationship status", | |
| "note": "Official marital status does not equal real availability; label as estimated.", | |
| }, | |
| { | |
| "label": "Income", | |
| "note": "Income and salary filters are sensitive to self-employment and informal earnings.", | |
| }, | |
| { | |
| "label": "Height", | |
| "note": "Height currently requires proxy distribution unless a Ukraine-specific source is validated.", | |
| }, | |
| ] | |