Source code for biogeme.segmentation.segmentation_context

"""Class representing the characterization of a discrete segmentation.

A discrete segmentation divides a population based on the values of a socio-economic
variable, mapping each value to a category name. A reference category is defined
for comparison in model estimation.

Michel Bierlaire
Thu Apr 3 10:08:10 2025
"""

from __future__ import annotations

from typing import TYPE_CHECKING

from biogeme.exceptions import BiogemeError

if TYPE_CHECKING:
    from biogeme.expressions import Variable


[docs] class DiscreteSegmentationTuple: """Characterization of a discrete segmentation. This class is used to define how a discrete socio-economic variable is mapped to category names for segmentation purposes. One category is selected as the reference for use in estimation. """ def __init__( self, variable: Variable | str, mapping: dict[int, str], reference: str | None = None, ): """Initialize a discrete segmentation characterization. :param variable: Socio-economic variable used for segmentation, either as a Variable instance or a string name. :param mapping: Dictionary mapping integer values of the variable to category names. :param reference: Optional name of the reference category. If not provided, the first category in the mapping is used. :raises BiogemeError: If the provided reference category is not found in the mapping. """ from biogeme.expressions import Variable self.variable: Variable = ( variable if isinstance(variable, Variable) else Variable(variable) ) self.mapping: dict[int, str] = mapping if reference is None: self.reference: str = next(iter(mapping.values())) elif reference not in mapping.values(): error_msg = ( f'Reference category {reference} does not appear in the list ' f'of categories: {mapping.values()}' ) raise BiogemeError(error_msg) else: self.reference: str = reference if self.reference is None: raise BiogemeError('Reference should not be None') def __repr__(self) -> str: result = f'{self.variable.name}: [{self.mapping}] ref: {self.reference}' return result def __str__(self) -> str: result = f'{self.variable.name}: [{self.mapping}] ref: {self.reference}' return result