biogeme.segmentation

Examples of use of several functions.

This is designed for programmers who need examples of use of the functions of the module. The examples are designed to illustrate the syntax. They do not correspond to any meaningful model.

author:

Michel Bierlaire

date:

Thu Dec 7 15:18:45 2023

from biogeme.expressions import Beta, Variable
from biogeme.segmentation import DiscreteSegmentationTuple, Segmentation
from biogeme.version import get_text

Version of Biogeme.

print(get_text())
biogeme 3.3.1 [2025-09-03]
Home page: http://biogeme.epfl.ch
Submit questions to https://groups.google.com/d/forum/biogeme
Michel Bierlaire, Transport and Mobility Laboratory, Ecole Polytechnique Fédérale de Lausanne (EPFL)
socio_eco_1 = Variable('socio_eco_1')
segmentation_1 = DiscreteSegmentationTuple(
    variable=socio_eco_1,
    mapping={
        1: 'high',
        2: 'medium',
        3: 'low',
    },
)
socio_eco_2 = Variable('socio_eco_2')
segmentation_2 = DiscreteSegmentationTuple(
    variable=socio_eco_2,
    mapping={
        1: 'level_1',
        2: 'level_2',
        3: 'level_3',
        4: 'level_4',
    },
)
beta_x = Beta('beta_x', 0, None, None, 0)
segmented_parameter = Segmentation(beta_x, (segmentation_1,))

The expressions for the segmented parameter is obtained as follows:

segmented_parameter.segmented_beta()
MultipleSum([<Beta name=beta_x_ref value=0 status=0>, (<Beta name=beta_x_diff_medium value=0 status=0> * Equal(<Variable name=socio_eco_1>, <Numeric value=2.0>)), (<Beta name=beta_x_diff_low value=0 status=0> * Equal(<Variable name=socio_eco_1>, <Numeric value=3.0>))])

The corresponding Python code can be obtained as follows.

print(segmented_parameter.segmented_code())
beta_x_diff_medium = Beta('beta_x_diff_medium', 0, None, None, 0)
beta_x_diff_low = Beta('beta_x_diff_low', 0, None, None, 0)
segmented_beta_x = bioMultSum([Beta('beta_x_ref', 0, None, None, 0), beta_x_diff_medium * (Variable('socio_eco_1') == 2), beta_x_diff_low * (Variable('socio_eco_1') == 3)])

The code of the original Beta is also available:

print(segmented_parameter.beta_ref_code())
Beta('beta_x_ref', 0, None, None, 0)

Same with the second segmentation

segmented_parameter = Segmentation(beta_x, (segmentation_2,))
segmented_parameter.segmented_beta()
MultipleSum([<Beta name=beta_x_ref value=0 status=0>, (<Beta name=beta_x_diff_level_2 value=0 status=0> * Equal(<Variable name=socio_eco_2>, <Numeric value=2.0>)), (<Beta name=beta_x_diff_level_3 value=0 status=0> * Equal(<Variable name=socio_eco_2>, <Numeric value=3.0>)), (<Beta name=beta_x_diff_level_4 value=0 status=0> * Equal(<Variable name=socio_eco_2>, <Numeric value=4.0>))])
print(segmented_parameter.segmented_code())
beta_x_diff_level_2 = Beta('beta_x_diff_level_2', 0, None, None, 0)
beta_x_diff_level_3 = Beta('beta_x_diff_level_3', 0, None, None, 0)
beta_x_diff_level_4 = Beta('beta_x_diff_level_4', 0, None, None, 0)
segmented_beta_x = bioMultSum([Beta('beta_x_ref', 0, None, None, 0), beta_x_diff_level_2 * (Variable('socio_eco_2') == 2), beta_x_diff_level_3 * (Variable('socio_eco_2') == 3), beta_x_diff_level_4 * (Variable('socio_eco_2') == 4)])

The two segmentations can be combined.

segmented_parameter = Segmentation(
    beta_x,
    (
        segmentation_1,
        segmentation_2,
    ),
)
segmented_parameter.segmented_beta()
MultipleSum([<Beta name=beta_x_ref value=0 status=0>, (<Beta name=beta_x_diff_medium value=0 status=0> * Equal(<Variable name=socio_eco_1>, <Numeric value=2.0>)), (<Beta name=beta_x_diff_low value=0 status=0> * Equal(<Variable name=socio_eco_1>, <Numeric value=3.0>)), (<Beta name=beta_x_diff_level_2 value=0 status=0> * Equal(<Variable name=socio_eco_2>, <Numeric value=2.0>)), (<Beta name=beta_x_diff_level_3 value=0 status=0> * Equal(<Variable name=socio_eco_2>, <Numeric value=3.0>)), (<Beta name=beta_x_diff_level_4 value=0 status=0> * Equal(<Variable name=socio_eco_2>, <Numeric value=4.0>))])
print(segmented_parameter.segmented_code())
beta_x_diff_medium = Beta('beta_x_diff_medium', 0, None, None, 0)
beta_x_diff_low = Beta('beta_x_diff_low', 0, None, None, 0)
beta_x_diff_level_2 = Beta('beta_x_diff_level_2', 0, None, None, 0)
beta_x_diff_level_3 = Beta('beta_x_diff_level_3', 0, None, None, 0)
beta_x_diff_level_4 = Beta('beta_x_diff_level_4', 0, None, None, 0)
segmented_beta_x = bioMultSum([Beta('beta_x_ref', 0, None, None, 0), beta_x_diff_medium * (Variable('socio_eco_1') == 2), beta_x_diff_low * (Variable('socio_eco_1') == 3), beta_x_diff_level_2 * (Variable('socio_eco_2') == 2), beta_x_diff_level_3 * (Variable('socio_eco_2') == 3), beta_x_diff_level_4 * (Variable('socio_eco_2') == 4)])

Total running time of the script: (0 minutes 0.002 seconds)

Gallery generated by Sphinx-Gallery