diff --git a/bofire/data_models/domain/domain.py b/bofire/data_models/domain/domain.py
index 73f6ed8c2..1120340ca 100644
--- a/bofire/data_models/domain/domain.py
+++ b/bofire/data_models/domain/domain.py
@@ -138,6 +138,31 @@ def validate_constraints(self):
c.validate_inputs(self.inputs)
return self
+ @model_validator(mode="after")
+ def validate_timeseries_config(self):
+ """Validate the timeseries configuration of the domain.
+
+ Raises:
+ ValueError: If multiple features are marked as timeseries.
+
+ Returns:
+ self: The validated domain instance.
+ """
+ # Get all numerical inputs that have the is_timeseries attribute
+ from bofire.data_models.features.numerical import NumericalInput
+
+ timeseries_features = [
+ f.key
+ for f in self.inputs
+ if isinstance(f, NumericalInput) and getattr(f, "is_timeseries", False)
+ ]
+
+ if len(timeseries_features) > 1:
+ raise ValueError(
+ f"Multiple features ({', '.join(timeseries_features)}) are marked as timeseries. Only one is allowed."
+ )
+ return self
+
# TODO: tidy this up
def get_nchoosek_combinations(self, exhaustive: bool = False):
"""Get all possible NChooseK combinations
@@ -310,9 +335,9 @@ def aggregate_by_duplicates(
experiments = self.coerce_invalids(experiments)
# group and aggregate
- agg: Dict[str, Any] = {
- feat: method for feat in self.outputs.get_keys(ContinuousOutput)
- }
+ agg: Dict[str, Any] = dict.fromkeys(
+ self.outputs.get_keys(ContinuousOutput), method
+ )
agg["labcode"] = lambda x: delimiter.join(sorted(x.tolist()))
for feat in self.outputs.get_keys(Output):
agg[f"valid_{feat}"] = lambda x: 1
@@ -383,6 +408,79 @@ def validate_experiments(
strict=strict,
)
experiments = self.outputs.validate_experiments(experiments=experiments)
+
+ # Check for _trajectory_id if timeseries features are present
+ from bofire.data_models.features.numerical import NumericalInput
+
+ timeseries_features = [
+ f.key
+ for f in self.inputs
+ if isinstance(f, NumericalInput) and getattr(f, "is_timeseries", False)
+ ]
+
+ if len(timeseries_features) > 0:
+ trajectory_col = "_trajectory_id"
+ if trajectory_col not in experiments.columns:
+ raise ValueError(
+ f"Timeseries feature '{timeseries_features[0]}' detected, but required column '{trajectory_col}' "
+ f"is not present in the experiments. When using timeseries features, you must include a "
+ f"'{trajectory_col}' column that identifies which trajectory/experiment each row belongs to."
+ )
+
+ return experiments
+
+ def add_trajectory_id(
+ self,
+ experiments: pd.DataFrame,
+ eps: float = 1e-6,
+ ) -> pd.DataFrame:
+ """Add _trajectory_id column to experiments by inferring trajectory groupings.
+
+ This method automatically groups experiments into trajectories based on their
+ non-timeseries input feature values. Experiments with the same (or nearly same,
+ within eps) values for all non-timeseries features are assigned the same
+ trajectory ID.
+
+ This is useful when you have experimental data from multiple runs/trajectories
+ but haven't manually labeled which observations belong to which trajectory.
+
+ Args:
+ experiments (pd.DataFrame): Dataframe with experimental data. Must contain
+ columns for all input features defined in the domain. If _trajectory_id
+ already exists, it will be overwritten.
+ eps (float, optional): Tolerance for comparing continuous values. Two
+ continuous values are considered equal if their absolute difference is
+ less than eps. Default: 1e-6. Does not apply to discrete, categorical,
+ or molecular features.
+
+ Returns:
+ pd.DataFrame: Copy of experiments with _trajectory_id column added or updated.
+
+ Raises:
+ ValueError: If no timeseries feature is found in the domain.
+ ValueError: If required input feature columns are missing from experiments.
+
+ Example:
+ >>> domain = Domain(
+ ... inputs=Inputs(features=[
+ ... ContinuousInput(key="time", bounds=(0, 100), is_timeseries=True),
+ ... ContinuousInput(key="temperature", bounds=(20, 80)),
+ ... ]),
+ ... outputs=Outputs(features=[ContinuousOutput(key="yield")]),
+ ... )
+ >>> experiments = pd.DataFrame({
+ ... 'time': [0, 10, 20, 0, 10, 20],
+ ... 'temperature': [25, 25, 25, 30, 30, 30],
+ ... 'yield': [0.1, 0.2, 0.3, 0.2, 0.3, 0.4],
+ ... 'valid_yield': [1] * 6,
+ ... })
+ >>> experiments = domain.add_trajectory_id(experiments)
+ >>> # Rows with temperature=25 get one ID, temperature=30 get another
+ """
+ from bofire.utils.timeseries import infer_trajectory_id
+
+ experiments = experiments.copy()
+ experiments["_trajectory_id"] = infer_trajectory_id(experiments, self, eps=eps)
return experiments
def describe_experiments(self, experiments: pd.DataFrame) -> pd.DataFrame:
diff --git a/bofire/data_models/features/numerical.py b/bofire/data_models/features/numerical.py
index a8e4aa2d0..278610a67 100644
--- a/bofire/data_models/features/numerical.py
+++ b/bofire/data_models/features/numerical.py
@@ -3,6 +3,7 @@
import numpy as np
import pandas as pd
+from pydantic import Field
from bofire.data_models.features.feature import Input, TTransform
@@ -11,6 +12,10 @@ class NumericalInput(Input):
"""Abstract base class for all numerical (ordinal) input features."""
unit: Optional[str] = None
+ is_timeseries: bool = Field(
+ default=False,
+ description="Field to mark if this feature represents time in a timeseries",
+ )
@staticmethod
def valid_transform_types() -> List:
diff --git a/bofire/surrogates/trainable.py b/bofire/surrogates/trainable.py
index eb91ddd65..1280eb982 100644
--- a/bofire/surrogates/trainable.py
+++ b/bofire/surrogates/trainable.py
@@ -4,7 +4,12 @@
import numpy as np
import pandas as pd
-from sklearn.model_selection import GroupShuffleSplit, KFold, StratifiedKFold
+from sklearn.model_selection import (
+ GroupKFold,
+ GroupShuffleSplit,
+ KFold,
+ StratifiedKFold,
+)
from bofire.data_models.enum import OutputFilteringEnum
from bofire.data_models.features.api import (
@@ -85,6 +90,7 @@ def cross_validate(
random_state: Optional[int] = None,
stratified_feature: Optional[str] = None,
group_split_column: Optional[str] = None,
+ use_shuffle_split: bool = False,
hooks: Optional[
Dict[
str,
@@ -118,6 +124,9 @@ def cross_validate(
training and testing sets. This is useful in scenarios where data points are related or dependent on each
other, and splitting them into different sets would violate the assumption of independence. The number of
unique groups must be greater than or equal to the number of folds. Defaults to None.
+ use_shuffle_split (bool, optional): When group_split_column is provided, use GroupShuffleSplit
+ instead of GroupKFold. GroupKFold (default) ensures each group is tested exactly once,
+ while GroupShuffleSplit allows flexible test_size but may not test all groups. Defaults to False.
hooks (Dict[str, Callable[[Model, pd.DataFrame, pd.DataFrame, pd.DataFrame, pd.DataFrame], Any]], optional):
Dictionary of callable hooks that are called within the CV loop. The callable retrieves the current trained
modeld and the current CV folds in the following order: X_train, y_train, X_test, y_test. Defaults to {}.
@@ -156,6 +165,26 @@ def cross_validate(
"The feature to be stratified needs to be a DiscreteInput, CategoricalInput, CategoricalOutput, or ContinuousOutput",
)
+ # Auto-detect timeseries and use appropriate group split
+ if group_split_column is None:
+ # Check if any input feature is marked as timeseries
+ timeseries_features = [
+ feat
+ for feat in self.inputs.get() # type: ignore
+ if hasattr(feat, "is_timeseries") and feat.is_timeseries
+ ]
+ if len(timeseries_features) > 0:
+ # When timeseries feature is present, require _trajectory_id column
+ trajectory_col = "_trajectory_id"
+ if trajectory_col in experiments.columns:
+ group_split_column = trajectory_col
+ else:
+ raise ValueError(
+ f"Timeseries feature '{timeseries_features[0].key}' detected, but required column '{trajectory_col}' "
+ f"is not present in the experiments. When using timeseries features, you must include a "
+ f"'{trajectory_col}' column that identifies which trajectory/experiment each row belongs to."
+ )
+
if group_split_column is not None:
# check if the group split column is present in the experiments
if group_split_column not in experiments.columns:
@@ -187,6 +216,7 @@ def cross_validate(
stratified_feature=stratified_feature,
group_split_column=group_split_column,
random_state=random_state,
+ use_shuffle_split=use_shuffle_split,
)
key = self.outputs.get_keys()[0] # type: ignore
@@ -301,8 +331,9 @@ def _make_cv_split(
stratified_feature: Optional[str] = None,
group_split_column: Optional[str] = None,
random_state: Optional[int] = None,
+ use_shuffle_split: bool = False,
) -> Tuple[
- Union[KFold, StratifiedKFold, GroupShuffleSplit],
+ Union[KFold, StratifiedKFold, GroupKFold, GroupShuffleSplit],
Generator[Tuple[np.ndarray, np.ndarray], None, None],
]:
"""
@@ -321,7 +352,12 @@ def _make_cv_split(
if stratified_feature is None:
if group_split_column is not None:
# GROUP SPLIT FUNCTIONALITY
- cv = GroupShuffleSplit(n_splits=folds, random_state=random_state)
+ if use_shuffle_split:
+ # Use GroupShuffleSplit for flexible test_size
+ cv = GroupShuffleSplit(n_splits=folds, random_state=random_state)
+ else:
+ # Use GroupKFold for exhaustive testing (default)
+ cv = GroupKFold(n_splits=folds)
cv_func = cv.split(experiments, groups=experiments[group_split_column])
else:
cv = KFold(n_splits=folds, shuffle=True, random_state=random_state)
diff --git a/bofire/utils/timeseries.py b/bofire/utils/timeseries.py
new file mode 100644
index 000000000..904b4e6b1
--- /dev/null
+++ b/bofire/utils/timeseries.py
@@ -0,0 +1,152 @@
+"""Utilities for working with timeseries data in BoFire."""
+
+from typing import TYPE_CHECKING
+
+import numpy as np
+import pandas as pd
+
+
+if TYPE_CHECKING:
+ from bofire.data_models.domain.domain import Domain
+
+
+def infer_trajectory_id(
+ experiments: pd.DataFrame,
+ domain: "Domain",
+ eps: float = 1e-6,
+) -> pd.Series:
+ """
+ Automatically infer trajectory IDs by grouping experiments with the same
+ non-timeseries input feature values.
+
+ For each row in the experiments DataFrame, this function identifies which
+ trajectory it belongs to by comparing the values of all non-timeseries input
+ features. Rows with the same (or nearly same, within eps) values for all
+ non-timeseries features are assigned the same trajectory ID.
+
+ This is useful when you have experimental data from multiple runs/trajectories
+ where the timeseries feature varies, but you haven't manually labeled which
+ observations belong to which trajectory.
+
+ Args:
+ experiments: DataFrame with experimental data. Must contain columns for
+ all input features defined in the domain.
+ domain: Domain object that defines the input features and identifies
+ which feature (if any) is marked as timeseries.
+ eps: Tolerance for comparing continuous values. Two continuous values
+ are considered equal if their absolute difference is less than eps.
+ Default: 1e-6. Does not apply to discrete, categorical, or molecular
+ features, which use exact equality.
+
+ Returns:
+ pd.Series: Series of integer trajectory IDs (0, 1, 2, ...) corresponding
+ to each row in experiments. Rows with the same trajectory ID belong
+ to the same experimental run/trajectory.
+
+ Raises:
+ ValueError: If no timeseries feature is found in the domain.
+ ValueError: If required input feature columns are missing from experiments.
+
+ Example:
+ >>> from bofire.data_models.domain.api import Domain, Inputs, Outputs
+ >>> from bofire.data_models.features.api import ContinuousInput, ContinuousOutput
+ >>> from bofire.utils.timeseries import infer_trajectory_id
+ >>> import pandas as pd
+ >>>
+ >>> # Define domain with timeseries
+ >>> inputs = Inputs(features=[
+ ... ContinuousInput(key="time", bounds=(0, 100), is_timeseries=True),
+ ... ContinuousInput(key="temperature", bounds=(20, 80)),
+ ... ])
+ >>> outputs = Outputs(features=[ContinuousOutput(key="yield")])
+ >>> domain = Domain(inputs=inputs, outputs=outputs)
+ >>>
+ >>> # Create experiments (3 trajectories, temperature varies between them)
+ >>> experiments = pd.DataFrame({
+ ... 'time': [0, 10, 20, 0, 10, 20, 0, 10, 20],
+ ... 'temperature': [25, 25, 25, 30, 30, 30, 25, 25, 25],
+ ... 'yield': [0.1, 0.2, 0.3, 0.2, 0.3, 0.4, 0.1, 0.2, 0.3],
+ ... 'valid_yield': [1] * 9,
+ ... })
+ >>>
+ >>> # Infer trajectory IDs
+ >>> experiments['_trajectory_id'] = infer_trajectory_id(experiments, domain)
+ >>> print(experiments['_trajectory_id'].tolist())
+ [0, 0, 0, 1, 1, 1, 0, 0, 0] # Rows with temp=25 get same ID
+ """
+ from bofire.data_models.features.categorical import CategoricalInput
+ from bofire.data_models.features.discrete import DiscreteInput
+ from bofire.data_models.features.molecular import MolecularInput
+ from bofire.data_models.features.numerical import NumericalInput
+
+ # Identify timeseries feature
+ timeseries_features = [
+ f
+ for f in domain.inputs
+ if isinstance(f, NumericalInput) and getattr(f, "is_timeseries", False)
+ ]
+
+ if len(timeseries_features) == 0:
+ raise ValueError(
+ "No timeseries feature found in the domain. "
+ "At least one input feature must be marked with is_timeseries=True."
+ )
+
+ timeseries_key = timeseries_features[0].key
+
+ # Get all non-timeseries input features
+ grouping_features = [f for f in domain.inputs if f.key != timeseries_key]
+
+ if len(grouping_features) == 0:
+ # Special case: only timeseries feature exists
+ # All rows belong to the same trajectory
+ return pd.Series(0, index=experiments.index)
+
+ # Check that all required columns are present
+ missing_cols = [
+ f.key for f in grouping_features if f.key not in experiments.columns
+ ]
+ if missing_cols:
+ raise ValueError(
+ f"Required input feature columns missing from experiments: {missing_cols}"
+ )
+
+ # Build a grouping key for each row based on non-timeseries features
+ # We'll create a tuple for each row representing its grouping values
+
+ def make_grouping_key(row):
+ """Create a hashable grouping key for a row."""
+ key_parts = []
+ for feature in grouping_features:
+ value = row[feature.key]
+
+ if isinstance(feature, (CategoricalInput, DiscreteInput, MolecularInput)):
+ # Categorical, discrete, and molecular features: use exact value
+ key_parts.append(value)
+ elif isinstance(feature, NumericalInput):
+ # Continuous features: round to tolerance for grouping
+ # This handles floating point comparison issues
+ if pd.isna(value):
+ key_parts.append(None)
+ else:
+ # Round to appropriate decimal places based on eps
+ decimal_places = max(0, int(-np.log10(eps)))
+ rounded_value = round(float(value), decimal_places)
+ key_parts.append(rounded_value)
+ else:
+ # Fallback: use exact value
+ key_parts.append(value)
+
+ return tuple(key_parts)
+
+ # Create grouping keys for all rows
+ grouping_keys = experiments.apply(make_grouping_key, axis=1)
+
+ # Map unique grouping keys to trajectory IDs
+ unique_keys = grouping_keys.unique()
+ key_to_id = {key: idx for idx, key in enumerate(unique_keys)}
+
+ # Assign trajectory IDs
+ trajectory_ids = grouping_keys.map(key_to_id)
+
+ return trajectory_ids
diff --git a/docs/examples.md b/docs/examples.md
index 2a6cd94d7..f126af1f3 100644
--- a/docs/examples.md
+++ b/docs/examples.md
@@ -19,6 +19,7 @@ Optimization with some of the challenges faced in real-world experiments:
- [A toy example for optimizing a reaction](reaction_optimization.ipynb)
- [Using a Tanimoto fingerprint kernel to optimize over molecules](fingerprint_bayesopt.ipynb)
- [Using a MultiFidelity strategy with cheap, approximate experiments](multifidelity_bo.ipynb)
+- [Handling timeseries data and kinetic measurements](timeseries_kinetic_measurements.ipynb)
## API with BoFire
diff --git a/tests/bofire/data_models/domain/test_domain_validators.py b/tests/bofire/data_models/domain/test_domain_validators.py
index d712734fb..bb10f3a33 100644
--- a/tests/bofire/data_models/domain/test_domain_validators.py
+++ b/tests/bofire/data_models/domain/test_domain_validators.py
@@ -11,7 +11,7 @@
ConstraintNotFulfilledError,
LinearEqualityConstraint,
)
-from bofire.data_models.domain.api import Domain
+from bofire.data_models.domain.api import Domain, Inputs, Outputs
from bofire.data_models.features.api import (
CategoricalDescriptorInput,
CategoricalInput,
@@ -405,3 +405,128 @@ def test_outputs_add_valid_columns():
experiments["valid_out1"] = _test_val
with pytest.raises(ValueError):
domain0.outputs.add_valid_columns(experiments)
+
+
+def test_domain_timeseries_validation():
+ """Test that the Domain validates timeseries configuration correctly."""
+
+ # Test 1: Single timeseries feature - should work
+ time_input = ContinuousInput(key="time", bounds=(0, 100), is_timeseries=True)
+ x_input = ContinuousInput(key="x", bounds=(0, 10))
+ y_output = ContinuousOutput(key="y")
+
+ domain = Domain(
+ inputs=Inputs(features=[time_input, x_input]),
+ outputs=Outputs(features=[y_output]),
+ )
+ # Check that the domain was created successfully
+ assert (
+ len(
+ [
+ f
+ for f in domain.inputs
+ if hasattr(f, "is_timeseries") and f.is_timeseries
+ ]
+ )
+ == 1
+ )
+
+ # Test 2: Multiple timeseries features - should fail
+ time_input2 = ContinuousInput(key="time", bounds=(0, 100), is_timeseries=True)
+ step_input2 = DiscreteInput(key="step", values=[0, 1, 2, 3], is_timeseries=True)
+ x_input2 = ContinuousInput(key="x", bounds=(0, 10))
+ y_output2 = ContinuousOutput(key="y")
+
+ with pytest.raises(
+ ValueError, match="Multiple features .* are marked as timeseries"
+ ):
+ Domain(
+ inputs=Inputs(features=[time_input2, step_input2, x_input2]),
+ outputs=Outputs(features=[y_output2]),
+ )
+
+ # Test 3: Normal domain without timeseries - should work
+ x_input3 = ContinuousInput(key="x", bounds=(0, 10))
+ y_output3 = ContinuousOutput(key="y")
+
+ domain3 = Domain(
+ inputs=Inputs(features=[x_input3]),
+ outputs=Outputs(features=[y_output3]),
+ )
+ # Check that no timeseries features exist
+ assert (
+ len(
+ [
+ f
+ for f in domain3.inputs
+ if hasattr(f, "is_timeseries") and f.is_timeseries
+ ]
+ )
+ == 0
+ )
+
+
+def test_domain_timeseries_trajectory_id_validation():
+ """Test that validate_experiments checks for _trajectory_id when timeseries features are present."""
+
+ # Create domain with timeseries feature
+ time_input = ContinuousInput(key="time", bounds=(0, 100), is_timeseries=True)
+ x_input = ContinuousInput(key="x", bounds=(0, 10))
+ y_output = ContinuousOutput(key="y")
+
+ domain = Domain(
+ inputs=Inputs(features=[time_input, x_input]),
+ outputs=Outputs(features=[y_output]),
+ )
+
+ # Test 1: Experiments with _trajectory_id - should work
+ experiments_with_trajectory = pd.DataFrame(
+ {
+ "_trajectory_id": [0, 0, 0, 1, 1, 1],
+ "time": [0, 10, 20, 0, 10, 20],
+ "x": [1, 2, 3, 4, 5, 6],
+ "y": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6],
+ "valid_y": [1, 1, 1, 1, 1, 1],
+ }
+ )
+
+ # Should not raise an error
+ validated = domain.validate_experiments(experiments_with_trajectory)
+ assert validated is not None
+ assert "_trajectory_id" in validated.columns
+
+ # Test 2: Experiments without _trajectory_id - should fail
+ experiments_without_trajectory = pd.DataFrame(
+ {
+ "time": [0, 10, 20, 0, 10, 20],
+ "x": [1, 2, 3, 4, 5, 6],
+ "y": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6],
+ "valid_y": [1, 1, 1, 1, 1, 1],
+ }
+ )
+
+ with pytest.raises(
+ ValueError,
+ match="Timeseries feature 'time' detected, but required column '_trajectory_id' is not present",
+ ):
+ domain.validate_experiments(experiments_without_trajectory)
+
+ # Test 3: Non-timeseries domain doesn't require _trajectory_id
+ domain_no_timeseries = Domain(
+ inputs=Inputs(features=[x_input]), # No timeseries feature
+ outputs=Outputs(features=[y_output]),
+ )
+
+ experiments_no_timeseries = pd.DataFrame(
+ {
+ "x": [1, 2, 3, 4, 5, 6],
+ "y": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6],
+ "valid_y": [1, 1, 1, 1, 1, 1],
+ }
+ )
+
+ # Should work without _trajectory_id since there's no timeseries feature
+ validated_no_ts = domain_no_timeseries.validate_experiments(
+ experiments_no_timeseries
+ )
+ assert validated_no_ts is not None
diff --git a/tests/bofire/data_models/features/test_continuous.py b/tests/bofire/data_models/features/test_continuous.py
index 5fb93f38a..952e69a95 100644
--- a/tests/bofire/data_models/features/test_continuous.py
+++ b/tests/bofire/data_models/features/test_continuous.py
@@ -7,7 +7,11 @@
from pandas.testing import assert_series_equal
import tests.bofire.data_models.specs.api as specs
-from bofire.data_models.features.api import ContinuousDescriptorInput, ContinuousInput
+from bofire.data_models.features.api import (
+ ContinuousDescriptorInput,
+ ContinuousInput,
+ DiscreteInput,
+)
def test_continuous_input_invalid_stepsize():
@@ -324,3 +328,20 @@ def test_continuous_input_feature_to_unit_range(feature, x, expected, real):
def test_continuous_input_feature_is_fixed(input_feature, expected, expected_value):
assert input_feature.is_fixed() == expected
assert input_feature.fixed_value() == expected_value
+
+
+def test_continuous_input_is_timeseries():
+ """Test that the is_timeseries flag works correctly for ContinuousInput."""
+ # Default value should be False
+ feature = ContinuousInput(key="x", bounds=(0, 10))
+ assert not feature.is_timeseries
+
+ # Should be able to set to True
+ time_feature = ContinuousInput(key="time", bounds=(0, 100), is_timeseries=True)
+ assert time_feature.is_timeseries
+
+ # DiscreteInput should also support is_timeseries
+ discrete_time_feature = DiscreteInput(
+ key="timestep", values=[0, 1, 2, 3, 4], is_timeseries=True
+ )
+ assert discrete_time_feature.is_timeseries
diff --git a/tests/bofire/data_models/specs/features.py b/tests/bofire/data_models/specs/features.py
index 5395c08a6..bdc62c80a 100644
--- a/tests/bofire/data_models/specs/features.py
+++ b/tests/bofire/data_models/specs/features.py
@@ -21,6 +21,7 @@
"values": [random.random(), random.random() + 3],
"unit": random.choice(["°C", "mg", "mmol/l", None]),
"rtol": 1e-7,
+ "is_timeseries": False,
},
)
@@ -45,6 +46,7 @@
"unit": random.choice(["°C", "mg", "mmol/l", None]),
"local_relative_bounds": None,
"stepsize": None,
+ "is_timeseries": False,
"allow_zero": False,
},
)
@@ -69,6 +71,7 @@
"key": str(uuid.uuid4()),
"bounds": [3, 5.3],
"descriptors": ["d1", "d2"],
+ "is_timeseries": False,
"values": [1.0, 2.0],
"unit": random.choice(["°C", "mg", "mmol/l", None]),
"local_relative_bounds": None,
diff --git a/tests/bofire/surrogates/test_cross_validate.py b/tests/bofire/surrogates/test_cross_validate.py
index b5430f0a5..bd6b953c9 100644
--- a/tests/bofire/surrogates/test_cross_validate.py
+++ b/tests/bofire/surrogates/test_cross_validate.py
@@ -1,6 +1,11 @@
import pandas as pd
import pytest
-from sklearn.model_selection import GroupShuffleSplit, KFold, StratifiedKFold
+from sklearn.model_selection import (
+ GroupKFold,
+ GroupShuffleSplit,
+ KFold,
+ StratifiedKFold,
+)
import bofire.surrogates.api as surrogates
from bofire.data_models.domain.api import Inputs, Outputs
@@ -645,13 +650,26 @@ def test_make_cv_split():
assert isinstance(cv, StratifiedKFold)
assert len(list(cv_func)) == 5
- # Test GroupShuffleSplit split
+ # Test GroupKFold split (default for group_split_column)
cv, cv_func = model._make_cv_split(
experiments,
folds=2,
random_state=1,
stratified_feature=None,
group_split_column="group",
+ use_shuffle_split=False, # Use GroupKFold (default)
+ )
+ assert isinstance(cv, GroupKFold)
+ assert len(list(cv_func)) == 2
+
+ # Test GroupShuffleSplit split (optional)
+ cv, cv_func = model._make_cv_split(
+ experiments,
+ folds=2,
+ random_state=1,
+ stratified_feature=None,
+ group_split_column="group",
+ use_shuffle_split=True, # Use GroupShuffleSplit
)
assert isinstance(cv, GroupShuffleSplit)
assert len(list(cv_func)) == 2
@@ -691,3 +709,373 @@ def test_check_valid_nfolds():
model._check_valid_nfolds(1, 10)
with pytest.raises(ValueError, match="Experiments is empty."):
model._check_valid_nfolds(5, 0)
+
+
+def test_model_cross_validate_timeseries():
+ """Test cross-validation with timeseries data using GroupKFold."""
+ # Create inputs with a timeseries feature
+ inputs = Inputs(
+ features=[
+ ContinuousInput(
+ key="time",
+ bounds=(0, 100),
+ is_timeseries=True, # Mark as timeseries
+ ),
+ ContinuousInput(
+ key="x",
+ bounds=(-4, 4),
+ ),
+ ],
+ )
+ outputs = Outputs(features=[ContinuousOutput(key="y")])
+
+ # Create experiments with overlapping time values across trajectories with realistic noise
+ # This reflects realistic timeseries where different experiments run over similar time ranges
+ # with slight measurement variations
+ experiments = pd.DataFrame(
+ {
+ "time": [
+ 0.0,
+ 4.95,
+ 10.1,
+ 14.9, # trajectory 0
+ 0.05,
+ 5.02,
+ 9.98,
+ 15.05, # trajectory 1
+ 0.0,
+ 5.1,
+ 10.03,
+ 15.01, # trajectory 2
+ 0.02,
+ 4.99,
+ 9.95,
+ 14.98, # trajectory 3
+ ],
+ "x": [-4, -3, -2, -1, 0, 1, 2, 3, -4, -3, -2, -1, 0, 1, 2, 3],
+ "y": [1, 2, 3, 4, 5, 6, 7, 8, 2, 3, 4, 5, 6, 7, 8, 9],
+ "_trajectory_id": [
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ 2,
+ 2,
+ 2,
+ 2,
+ 3,
+ 3,
+ 3,
+ 3,
+ ], # Trajectory/experiment groups
+ "valid_y": [1] * 16,
+ }
+ )
+
+ # Initialize model
+ model = SingleTaskGPSurrogate(
+ inputs=inputs,
+ outputs=outputs,
+ )
+ model = surrogates.map(model)
+
+ # Test with automatic group_split_column for timeseries data
+ # Since we have a timeseries feature and _trajectory_id column exists,
+ # it should be used automatically
+ train_cv, test_cv, _ = model.cross_validate(
+ experiments,
+ folds=4,
+ # No group_split_column specified - should auto-use _trajectory_id
+ )
+
+ # Verify that groups are kept together
+ test_indices = []
+ train_indices = []
+ for cvresults in test_cv.results:
+ test_indices.append(list(cvresults.observed.index))
+
+ for cvresults in train_cv.results:
+ train_indices.append(list(cvresults.observed.index))
+
+ # Get indices for each experiment group
+ exp0_indices = experiments[experiments["_trajectory_id"] == 0].index.tolist()
+ exp1_indices = experiments[experiments["_trajectory_id"] == 1].index.tolist()
+ exp2_indices = experiments[experiments["_trajectory_id"] == 2].index.tolist()
+ exp3_indices = experiments[experiments["_trajectory_id"] == 3].index.tolist()
+
+ all_exp_indices = [exp0_indices, exp1_indices, exp2_indices, exp3_indices]
+
+ # Verify that each experiment group is entirely in either train or test set
+ for test_index, train_index in zip(test_indices, train_indices):
+ for exp_indices in all_exp_indices:
+ test_set = set(test_index)
+ train_set = set(train_index)
+ # Each experiment should be entirely in either test or train set
+ assert test_set.issuperset(exp_indices) or train_set.issuperset(exp_indices)
+
+
+def test_model_cross_validate_groupkfold_vs_shufflesplit():
+ """Test that GroupKFold is default and GroupShuffleSplit can be enabled with flag."""
+ inputs = Inputs(
+ features=[
+ ContinuousInput(
+ key="time",
+ bounds=(0, 100),
+ is_timeseries=True, # Timeseries feature
+ ),
+ ContinuousInput(key="x", bounds=(-4, 4)),
+ ],
+ )
+ outputs = Outputs(features=[ContinuousOutput(key="y")])
+
+ experiments = pd.DataFrame(
+ {
+ "time": [0, 5, 10, 15],
+ "x": [-4, -3, -2, -1],
+ "y": [1, 2, 3, 4],
+ "group": [0, 0, 1, 1],
+ "valid_y": [1] * 4,
+ }
+ )
+
+ model = SingleTaskGPSurrogate(inputs=inputs, outputs=outputs)
+ model = surrogates.map(model)
+
+ # Test 1: Default behavior - should use GroupKFold
+ cv_default, _ = model._make_cv_split(
+ experiments,
+ folds=2,
+ group_split_column="group",
+ )
+ assert isinstance(cv_default, GroupKFold)
+
+ # Test 2: With use_shuffle_split=True - should use GroupShuffleSplit
+ cv_shuffle, _ = model._make_cv_split(
+ experiments,
+ folds=2,
+ group_split_column="group",
+ use_shuffle_split=True,
+ random_state=42,
+ )
+ assert isinstance(cv_shuffle, GroupShuffleSplit)
+
+
+def test_model_cross_validate_timeseries_automatic_trajectory_id():
+ """Test that cross_validate automatically uses _trajectory_id column for timeseries."""
+ # Create inputs with a timeseries feature
+ inputs = Inputs(
+ features=[
+ ContinuousInput(
+ key="time",
+ bounds=(0, 100),
+ is_timeseries=True,
+ ),
+ ContinuousInput(
+ key="x",
+ bounds=(-4, 4),
+ ),
+ ],
+ )
+ outputs = Outputs(features=[ContinuousOutput(key="y")])
+
+ # Create experiments WITH a _trajectory_id column
+ experiments = pd.DataFrame(
+ {
+ "_trajectory_id": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3],
+ "time": [0, 5, 10, 0, 5, 10, 0, 5, 10, 0, 5, 10],
+ "x": [-4, -3, -2, -1, 0, 1, 2, 3, 4, -4, -3, -2],
+ "y": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
+ "valid_y": [1] * 12,
+ }
+ )
+
+ model = SingleTaskGPSurrogate(
+ inputs=inputs,
+ outputs=outputs,
+ )
+ model = surrogates.map(model)
+
+ # This should automatically use _trajectory_id as group_split_column
+ cv_train, cv_test, _ = model.cross_validate(
+ experiments,
+ folds=2,
+ include_X=True, # Include X to check trajectory groups
+ # No group_split_column specified - should auto-use _trajectory_id
+ )
+
+ # Check that results are returned
+ assert len(cv_train.results) == 2
+ assert len(cv_test.results) == 2
+
+ # CRITICAL: Verify that trajectory groups are never split between train and test
+ for fold_idx in range(2):
+ train_data = cv_train.results[fold_idx].X
+ test_data = cv_test.results[fold_idx].X
+
+ # Get the trajectory IDs from the original experiments
+ train_indices = train_data.index
+ test_indices = test_data.index
+
+ train_trajectories = set(experiments.loc[train_indices, "_trajectory_id"])
+ test_trajectories = set(experiments.loc[test_indices, "_trajectory_id"])
+
+ # Ensure no overlap between train and test trajectory groups
+ assert (
+ len(train_trajectories.intersection(test_trajectories)) == 0
+ ), f"Fold {fold_idx}: Trajectory groups are mixed between train and test!"
+
+ # Ensure all trajectories are accounted for
+ assert train_trajectories.union(test_trajectories) == {
+ 0,
+ 1,
+ 2,
+ 3,
+ }, f"Fold {fold_idx}: Not all trajectories are covered!"
+
+
+def test_model_cross_validate_timeseries_use_shuffle_split():
+ """Test that use_shuffle_split parameter works correctly with timeseries data."""
+ inputs = Inputs(
+ features=[
+ ContinuousInput(key="time", bounds=(0, 100), is_timeseries=True),
+ ContinuousInput(key="x", bounds=(-4, 4)),
+ ],
+ )
+ outputs = Outputs(features=[ContinuousOutput(key="y")])
+
+ # Create experiments with 4 trajectories
+ experiments = pd.DataFrame(
+ {
+ "_trajectory_id": [0, 0, 1, 1, 2, 2, 3, 3],
+ "time": [0, 10, 0, 10, 0, 10, 0, 10],
+ "x": [-4, -3, -2, -1, 0, 1, 2, 3],
+ "y": [1, 2, 3, 4, 5, 6, 7, 8],
+ "valid_y": [1] * 8,
+ }
+ )
+
+ model = SingleTaskGPSurrogate(inputs=inputs, outputs=outputs)
+ model = surrogates.map(model)
+
+ # Test with GroupKFold (default) - should use all trajectories
+ train_cv_kfold, test_cv_kfold, _ = model.cross_validate(
+ experiments,
+ folds=2,
+ )
+
+ # Test with GroupShuffleSplit - may not use all trajectories
+ train_cv_shuffle, test_cv_shuffle, _ = model.cross_validate(
+ experiments,
+ folds=2,
+ use_shuffle_split=True,
+ random_state=42,
+ )
+
+ # Both should return results
+ assert len(train_cv_kfold.results) == 2
+ assert len(test_cv_kfold.results) == 2
+ assert len(train_cv_shuffle.results) == 2
+ assert len(test_cv_shuffle.results) == 2
+
+
+def test_model_cross_validate_groupkfold_exhaustive():
+ """Test that GroupKFold ensures every trajectory is tested exactly once."""
+ inputs = Inputs(
+ features=[
+ ContinuousInput(key="time", bounds=(0, 100), is_timeseries=True),
+ ContinuousInput(key="x", bounds=(-4, 4)),
+ ],
+ )
+ outputs = Outputs(features=[ContinuousOutput(key="y")])
+
+ # Create experiments with 6 trajectories
+ n_trajectories = 6
+ experiments = pd.DataFrame(
+ {
+ "_trajectory_id": [i for i in range(n_trajectories) for _ in range(3)],
+ "time": [0, 5, 10] * n_trajectories,
+ "x": list(range(18)),
+ "y": list(range(18)),
+ "valid_y": [1] * 18,
+ }
+ )
+
+ model = SingleTaskGPSurrogate(inputs=inputs, outputs=outputs)
+ model = surrogates.map(model)
+
+ # Use 3 folds - each trajectory should appear in exactly one test fold
+ train_cv, test_cv, _ = model.cross_validate(
+ experiments,
+ folds=3,
+ )
+
+ # Collect all tested trajectory IDs across folds
+ tested_trajectories = set()
+ for cv_result in test_cv.results:
+ test_indices = cv_result.observed.index
+ test_data = experiments.iloc[test_indices]
+ tested_trajectories.update(test_data["_trajectory_id"].unique())
+
+ # Every trajectory should be tested exactly once
+ assert tested_trajectories == set(range(n_trajectories))
+
+ # Check that no trajectory appears in multiple test sets
+ trajectory_test_counts = {i: 0 for i in range(n_trajectories)}
+ for cv_result in test_cv.results:
+ test_indices = cv_result.observed.index
+ test_data = experiments.iloc[test_indices]
+ for traj_id in test_data["_trajectory_id"].unique():
+ trajectory_test_counts[traj_id] += 1
+
+ # Each trajectory should be tested exactly once
+ assert all(count == 1 for count in trajectory_test_counts.values())
+
+
+def test_model_cross_validate_timeseries_missing_column():
+ """Test that error is raised when _trajectory_id column is missing with timeseries feature."""
+ # Create inputs with a timeseries feature
+ inputs = Inputs(
+ features=[
+ ContinuousInput(
+ key="time",
+ bounds=(0, 100),
+ is_timeseries=True,
+ ),
+ ContinuousInput(
+ key="x",
+ bounds=(-4, 4),
+ ),
+ ],
+ )
+ outputs = Outputs(features=[ContinuousOutput(key="y")])
+
+ # Create experiments WITHOUT the _trajectory_id column
+ experiments = pd.DataFrame(
+ {
+ "time": [0, 5, 10, 15],
+ "x": [-4, -3, -2, -1],
+ "y": [1, 2, 3, 4],
+ "valid_y": [1] * 4,
+ }
+ )
+
+ model = SingleTaskGPSurrogate(
+ inputs=inputs,
+ outputs=outputs,
+ )
+ model = surrogates.map(model)
+
+ # Should raise error about missing _trajectory_id column
+ with pytest.raises(
+ ValueError,
+ match="Timeseries feature 'time' detected, but required column '_trajectory_id' is not present",
+ ):
+ model.cross_validate(
+ experiments,
+ folds=2,
+ # No group_split_column specified - should error on missing _trajectory_id
+ )
diff --git a/tests/bofire/utils/test_timeseries.py b/tests/bofire/utils/test_timeseries.py
new file mode 100644
index 000000000..6d40054a1
--- /dev/null
+++ b/tests/bofire/utils/test_timeseries.py
@@ -0,0 +1,364 @@
+"""Tests for timeseries utilities."""
+
+import pandas as pd
+import pytest
+
+from bofire.data_models.domain.api import Domain, Inputs, Outputs
+from bofire.data_models.features.api import (
+ CategoricalInput,
+ ContinuousInput,
+ ContinuousOutput,
+ DiscreteInput,
+ MolecularInput,
+)
+from bofire.utils.timeseries import infer_trajectory_id
+
+
+def test_infer_trajectory_id_continuous_only():
+ """Test trajectory ID inference with continuous features only."""
+ # Create domain with timeseries
+ inputs = Inputs(
+ features=[
+ ContinuousInput(key="time", bounds=(0, 100), is_timeseries=True),
+ ContinuousInput(key="temperature", bounds=(20, 80)),
+ ContinuousInput(key="pressure", bounds=(1, 5)),
+ ]
+ )
+ outputs = Outputs(features=[ContinuousOutput(key="yield")])
+ domain = Domain(inputs=inputs, outputs=outputs)
+
+ # Create experiments with 3 distinct trajectories
+ experiments = pd.DataFrame(
+ {
+ "time": [0, 10, 20, 0, 10, 20, 0, 10, 20],
+ "temperature": [25, 25, 25, 30, 30, 30, 25, 25, 25],
+ "pressure": [2, 2, 2, 2, 2, 2, 3, 3, 3],
+ "yield": [0.1, 0.2, 0.3, 0.2, 0.3, 0.4, 0.15, 0.25, 0.35],
+ "valid_yield": [1] * 9,
+ }
+ )
+
+ trajectory_ids = infer_trajectory_id(experiments, domain)
+
+ # Check that we have 3 trajectories
+ assert len(trajectory_ids.unique()) == 3
+
+ # Check that rows with same temp/pressure get same ID
+ assert trajectory_ids.iloc[0] == trajectory_ids.iloc[1] == trajectory_ids.iloc[2]
+ assert trajectory_ids.iloc[3] == trajectory_ids.iloc[4] == trajectory_ids.iloc[5]
+ assert trajectory_ids.iloc[6] == trajectory_ids.iloc[7] == trajectory_ids.iloc[8]
+
+ # All three trajectories should have different IDs
+ assert (
+ len({trajectory_ids.iloc[0], trajectory_ids.iloc[3], trajectory_ids.iloc[6]})
+ == 3
+ )
+
+
+def test_infer_trajectory_id_with_categorical():
+ """Test trajectory ID inference with categorical features."""
+ inputs = Inputs(
+ features=[
+ ContinuousInput(key="time", bounds=(0, 100), is_timeseries=True),
+ CategoricalInput(key="catalyst", categories=["A", "B", "C"]),
+ ContinuousInput(key="temperature", bounds=(20, 80)),
+ ]
+ )
+ outputs = Outputs(features=[ContinuousOutput(key="yield")])
+ domain = Domain(inputs=inputs, outputs=outputs)
+
+ experiments = pd.DataFrame(
+ {
+ "time": [0, 10, 20, 0, 10, 20, 0, 10, 20],
+ "catalyst": ["A", "A", "A", "B", "B", "B", "A", "A", "A"],
+ "temperature": [25, 25, 25, 25, 25, 25, 30, 30, 30],
+ "yield": [0.1, 0.2, 0.3, 0.2, 0.3, 0.4, 0.15, 0.25, 0.35],
+ "valid_yield": [1] * 9,
+ }
+ )
+
+ trajectory_ids = infer_trajectory_id(experiments, domain)
+
+ # Should have 3 trajectories: (A, 25), (B, 25), (A, 30)
+ assert len(trajectory_ids.unique()) == 3
+
+ # Rows 0-2: catalyst A, temp 25
+ assert trajectory_ids.iloc[0] == trajectory_ids.iloc[1] == trajectory_ids.iloc[2]
+
+ # Rows 3-5: catalyst B, temp 25
+ assert trajectory_ids.iloc[3] == trajectory_ids.iloc[4] == trajectory_ids.iloc[5]
+
+ # Rows 6-8: catalyst A, temp 30
+ assert trajectory_ids.iloc[6] == trajectory_ids.iloc[7] == trajectory_ids.iloc[8]
+
+ # All three should be different
+ assert (
+ len({trajectory_ids.iloc[0], trajectory_ids.iloc[3], trajectory_ids.iloc[6]})
+ == 3
+ )
+
+
+def test_infer_trajectory_id_with_discrete():
+ """Test trajectory ID inference with discrete features."""
+ inputs = Inputs(
+ features=[
+ ContinuousInput(key="time", bounds=(0, 100), is_timeseries=True),
+ DiscreteInput(key="n_cycles", values=[1, 2, 3, 4, 5]),
+ ContinuousInput(key="temperature", bounds=(20, 80)),
+ ]
+ )
+ outputs = Outputs(features=[ContinuousOutput(key="yield")])
+ domain = Domain(inputs=inputs, outputs=outputs)
+
+ experiments = pd.DataFrame(
+ {
+ "time": [0, 10, 20, 0, 10, 20],
+ "n_cycles": [2, 2, 2, 3, 3, 3],
+ "temperature": [25, 25, 25, 25, 25, 25],
+ "yield": [0.1, 0.2, 0.3, 0.2, 0.3, 0.4],
+ "valid_yield": [1] * 6,
+ }
+ )
+
+ trajectory_ids = infer_trajectory_id(experiments, domain)
+
+ # Should have 2 trajectories: n_cycles=2 and n_cycles=3
+ assert len(trajectory_ids.unique()) == 2
+
+ # First 3 rows should have same ID
+ assert trajectory_ids.iloc[0] == trajectory_ids.iloc[1] == trajectory_ids.iloc[2]
+
+ # Last 3 rows should have same ID
+ assert trajectory_ids.iloc[3] == trajectory_ids.iloc[4] == trajectory_ids.iloc[5]
+
+ # The two groups should be different
+ assert trajectory_ids.iloc[0] != trajectory_ids.iloc[3]
+
+
+def test_infer_trajectory_id_mixed_features():
+ """Test trajectory ID inference with mixed feature types."""
+ inputs = Inputs(
+ features=[
+ ContinuousInput(key="time", bounds=(0, 100), is_timeseries=True),
+ CategoricalInput(
+ key="solvent", categories=["water", "ethanol", "methanol"]
+ ),
+ DiscreteInput(key="stirring_speed", values=[100, 200, 300]),
+ ContinuousInput(key="temperature", bounds=(20, 80)),
+ ]
+ )
+ outputs = Outputs(features=[ContinuousOutput(key="yield")])
+ domain = Domain(inputs=inputs, outputs=outputs)
+
+ experiments = pd.DataFrame(
+ {
+ "time": [0, 10, 20, 0, 10, 20, 0, 10, 20],
+ "solvent": [
+ "water",
+ "water",
+ "water",
+ "ethanol",
+ "ethanol",
+ "ethanol",
+ "water",
+ "water",
+ "water",
+ ],
+ "stirring_speed": [100, 100, 100, 100, 100, 100, 200, 200, 200],
+ "temperature": [25, 25, 25, 25, 25, 25, 25, 25, 25],
+ "yield": [0.1, 0.2, 0.3, 0.2, 0.3, 0.4, 0.15, 0.25, 0.35],
+ "valid_yield": [1] * 9,
+ }
+ )
+
+ trajectory_ids = infer_trajectory_id(experiments, domain)
+
+ # Should have 3 trajectories
+ assert len(trajectory_ids.unique()) == 3
+
+ # Check grouping
+ assert trajectory_ids.iloc[0] == trajectory_ids.iloc[1] == trajectory_ids.iloc[2]
+ assert trajectory_ids.iloc[3] == trajectory_ids.iloc[4] == trajectory_ids.iloc[5]
+ assert trajectory_ids.iloc[6] == trajectory_ids.iloc[7] == trajectory_ids.iloc[8]
+
+
+def test_infer_trajectory_id_with_eps():
+ """Test that eps parameter works for continuous features."""
+ inputs = Inputs(
+ features=[
+ ContinuousInput(key="time", bounds=(0, 100), is_timeseries=True),
+ ContinuousInput(key="temperature", bounds=(20, 80)),
+ ]
+ )
+ outputs = Outputs(features=[ContinuousOutput(key="yield")])
+ domain = Domain(inputs=inputs, outputs=outputs)
+
+ # Create experiments with small differences in temperature
+ experiments = pd.DataFrame(
+ {
+ "time": [0, 10, 20, 0, 10, 20],
+ "temperature": [25.0, 25.0, 25.0, 25.0000001, 25.0000001, 25.0000001],
+ "yield": [0.1, 0.2, 0.3, 0.2, 0.3, 0.4],
+ "valid_yield": [1] * 6,
+ }
+ )
+
+ # With default eps=1e-6, should group together
+ trajectory_ids_tight = infer_trajectory_id(experiments, domain, eps=1e-6)
+ assert len(trajectory_ids_tight.unique()) == 1
+
+ # With stricter eps, should be separate
+ trajectory_ids_strict = infer_trajectory_id(experiments, domain, eps=1e-8)
+ assert len(trajectory_ids_strict.unique()) == 2
+
+
+def test_infer_trajectory_id_only_timeseries():
+ """Test when only timeseries feature exists (edge case)."""
+ inputs = Inputs(
+ features=[
+ ContinuousInput(key="time", bounds=(0, 100), is_timeseries=True),
+ ]
+ )
+ outputs = Outputs(features=[ContinuousOutput(key="yield")])
+ domain = Domain(inputs=inputs, outputs=outputs)
+
+ experiments = pd.DataFrame(
+ {
+ "time": [0, 10, 20, 30],
+ "yield": [0.1, 0.2, 0.3, 0.4],
+ "valid_yield": [1] * 4,
+ }
+ )
+
+ trajectory_ids = infer_trajectory_id(experiments, domain)
+
+ # All rows should have same trajectory ID (only one trajectory)
+ assert len(trajectory_ids.unique()) == 1
+ assert trajectory_ids.iloc[0] == 0
+
+
+def test_infer_trajectory_id_no_timeseries_error():
+ """Test that error is raised when no timeseries feature exists."""
+ inputs = Inputs(
+ features=[
+ ContinuousInput(key="temperature", bounds=(20, 80)),
+ ContinuousInput(key="pressure", bounds=(1, 5)),
+ ]
+ )
+ outputs = Outputs(features=[ContinuousOutput(key="yield")])
+ domain = Domain(inputs=inputs, outputs=outputs)
+
+ experiments = pd.DataFrame(
+ {
+ "temperature": [25, 30],
+ "pressure": [2, 3],
+ "yield": [0.1, 0.2],
+ "valid_yield": [1, 1],
+ }
+ )
+
+ with pytest.raises(ValueError, match="No timeseries feature found"):
+ infer_trajectory_id(experiments, domain)
+
+
+def test_infer_trajectory_id_missing_columns_error():
+ """Test that error is raised when required columns are missing."""
+ inputs = Inputs(
+ features=[
+ ContinuousInput(key="time", bounds=(0, 100), is_timeseries=True),
+ ContinuousInput(key="temperature", bounds=(20, 80)),
+ ]
+ )
+ outputs = Outputs(features=[ContinuousOutput(key="yield")])
+ domain = Domain(inputs=inputs, outputs=outputs)
+
+ experiments = pd.DataFrame(
+ {
+ "time": [0, 10, 20],
+ # Missing temperature column
+ "yield": [0.1, 0.2, 0.3],
+ "valid_yield": [1, 1, 1],
+ }
+ )
+
+ with pytest.raises(ValueError, match="Required input feature columns missing"):
+ infer_trajectory_id(experiments, domain)
+
+
+def test_domain_add_trajectory_id():
+ """Test the Domain.add_trajectory_id convenience method."""
+ inputs = Inputs(
+ features=[
+ ContinuousInput(key="time", bounds=(0, 100), is_timeseries=True),
+ ContinuousInput(key="temperature", bounds=(20, 80)),
+ ]
+ )
+ outputs = Outputs(features=[ContinuousOutput(key="yield")])
+ domain = Domain(inputs=inputs, outputs=outputs)
+
+ experiments = pd.DataFrame(
+ {
+ "time": [0, 10, 20, 0, 10, 20],
+ "temperature": [25, 25, 25, 30, 30, 30],
+ "yield": [0.1, 0.2, 0.3, 0.2, 0.3, 0.4],
+ "valid_yield": [1] * 6,
+ }
+ )
+
+ # Test that add_trajectory_id works
+ result = domain.add_trajectory_id(experiments)
+
+ # Check that _trajectory_id was added
+ assert "_trajectory_id" in result.columns
+
+ # Check that original dataframe was not modified
+ assert "_trajectory_id" not in experiments.columns
+
+ # Check grouping is correct
+ assert len(result["_trajectory_id"].unique()) == 2
+ assert result["_trajectory_id"].iloc[0] == result["_trajectory_id"].iloc[1]
+ assert result["_trajectory_id"].iloc[3] == result["_trajectory_id"].iloc[4]
+ assert result["_trajectory_id"].iloc[0] != result["_trajectory_id"].iloc[3]
+
+
+def test_infer_trajectory_id_with_molecular():
+ """Test trajectory ID inference with molecular features."""
+ inputs = Inputs(
+ features=[
+ ContinuousInput(key="time", bounds=(0, 100), is_timeseries=True),
+ MolecularInput(key="solvent"),
+ ContinuousInput(key="temperature", bounds=(20, 80)),
+ ]
+ )
+ outputs = Outputs(features=[ContinuousOutput(key="yield")])
+ domain = Domain(inputs=inputs, outputs=outputs)
+
+ experiments = pd.DataFrame(
+ {
+ "time": [0, 10, 20, 0, 10, 20, 0, 10, 20],
+ "solvent": [
+ "O",
+ "O",
+ "O",
+ "CCO",
+ "CCO",
+ "CCO",
+ "O",
+ "O",
+ "O",
+ ], # water, ethanol, water
+ "temperature": [25, 25, 25, 25, 25, 25, 30, 30, 30],
+ "yield": [0.1, 0.2, 0.3, 0.2, 0.3, 0.4, 0.15, 0.25, 0.35],
+ "valid_yield": [1] * 9,
+ }
+ )
+
+ trajectory_ids = infer_trajectory_id(experiments, domain)
+
+ # Should have 3 trajectories: (water, 25), (ethanol, 25), (water, 30)
+ assert len(trajectory_ids.unique()) == 3
+
+ # Check grouping
+ assert trajectory_ids.iloc[0] == trajectory_ids.iloc[1] == trajectory_ids.iloc[2]
+ assert trajectory_ids.iloc[3] == trajectory_ids.iloc[4] == trajectory_ids.iloc[5]
+ assert trajectory_ids.iloc[6] == trajectory_ids.iloc[7] == trajectory_ids.iloc[8]
diff --git a/tutorials/basic_examples/timeseries_kinetic_measurements.ipynb b/tutorials/basic_examples/timeseries_kinetic_measurements.ipynb
new file mode 100644
index 000000000..d07b77cfa
--- /dev/null
+++ b/tutorials/basic_examples/timeseries_kinetic_measurements.ipynb
@@ -0,0 +1,1128 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Timeseries Features in BoFire: Preventing Data Leakage in Kinetic Measurements\n",
+ "\n",
+ "This notebook demonstrates the importance of properly handling timeseries data in cross-validation when working with kinetic measurements. We'll show how improper cross-validation can lead to data leakage and overly optimistic performance metrics.\n",
+ "\n",
+ "## Scenario: Catalytic Reaction Optimization\n",
+ "\n",
+ "We're optimizing a catalytic reaction where we measure:\n",
+ "- **Yield** over time (focusing on yield for cross-validation demonstration)\n",
+ "- Variables: Temperature, Catalyst amount, Catalyst type (A, B, C), Base type (A, B, C), Base equivalents\n",
+ "- Each experiment consists of 8 time points (0, 15, 30, 45, 60, 90, 120, 180 minutes)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "import seaborn as sns\n",
+ "from sklearn.model_selection import GroupKFold, KFold\n",
+ "\n",
+ "import bofire.surrogates.api as surrogates\n",
+ "from bofire.data_models.domain.api import Domain, Inputs, Outputs\n",
+ "from bofire.data_models.enum import RegressionMetricsEnum\n",
+ "from bofire.data_models.features.api import (\n",
+ " CategoricalInput,\n",
+ " ContinuousInput,\n",
+ " ContinuousOutput,\n",
+ ")\n",
+ "from bofire.data_models.kernels.api import HammingDistanceKernel, MaternKernel\n",
+ "from bofire.data_models.objectives.api import MaximizeObjective\n",
+ "from bofire.data_models.priors.api import MBO_LENGTHSCALE_PRIOR, MBO_NOISE_PRIOR\n",
+ "from bofire.data_models.surrogates.api import MixedSingleTaskGPSurrogate\n",
+ "\n",
+ "\n",
+ "# Set random seed for reproducibility\n",
+ "np.random.seed(42)\n",
+ "\n",
+ "# Configure plotting\n",
+ "sns.set_style(\"whitegrid\")\n",
+ "plt.rcParams[\"figure.figsize\"] = (12, 6)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 1. Generate Synthetic Kinetic Data\n",
+ "\n",
+ "We'll create realistic kinetic data with the following characteristics:\n",
+ "- Catalyst B doesn't work (no conversion)\n",
+ "- Base B doesn't work (no conversion)\n",
+ "- Catalyst A + Base A gives excellent yield\n",
+ "- High base loading increases impurities\n",
+ "- Temperature affects reaction rate"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Generated 128 data points from 16 experiments\n",
+ "\n",
+ "First few rows:\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " _trajectory_id | \n",
+ " time | \n",
+ " temperature | \n",
+ " catalyst_amount | \n",
+ " base_equiv | \n",
+ " catalyst | \n",
+ " base | \n",
+ " yield | \n",
+ " impurity | \n",
+ " valid_yield | \n",
+ " valid_impurity | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 0 | \n",
+ " 0.000000 | \n",
+ " 74.981605 | \n",
+ " 9.556429 | \n",
+ " 2.463988 | \n",
+ " A | \n",
+ " A | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 0 | \n",
+ " 14.765263 | \n",
+ " 74.981605 | \n",
+ " 9.556429 | \n",
+ " 2.463988 | \n",
+ " A | \n",
+ " A | \n",
+ " 33.628679 | \n",
+ " 0.562401 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 0 | \n",
+ " 29.767135 | \n",
+ " 74.981605 | \n",
+ " 9.556429 | \n",
+ " 2.463988 | \n",
+ " A | \n",
+ " A | \n",
+ " 52.252612 | \n",
+ " 0.119179 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 0 | \n",
+ " 44.137541 | \n",
+ " 74.981605 | \n",
+ " 9.556429 | \n",
+ " 2.463988 | \n",
+ " A | \n",
+ " A | \n",
+ " 65.710234 | \n",
+ " 0.000000 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 0 | \n",
+ " 60.157124 | \n",
+ " 74.981605 | \n",
+ " 9.556429 | \n",
+ " 2.463988 | \n",
+ " A | \n",
+ " A | \n",
+ " 73.651333 | \n",
+ " 0.170375 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 0 | \n",
+ " 90.732824 | \n",
+ " 74.981605 | \n",
+ " 9.556429 | \n",
+ " 2.463988 | \n",
+ " A | \n",
+ " A | \n",
+ " 83.852661 | \n",
+ " 0.273337 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 0 | \n",
+ " 119.287626 | \n",
+ " 74.981605 | \n",
+ " 9.556429 | \n",
+ " 2.463988 | \n",
+ " A | \n",
+ " A | \n",
+ " 90.243038 | \n",
+ " 1.294397 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 0 | \n",
+ " 179.424503 | \n",
+ " 74.981605 | \n",
+ " 9.556429 | \n",
+ " 2.463988 | \n",
+ " A | \n",
+ " A | \n",
+ " 92.994677 | \n",
+ " 1.819754 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " 1 | \n",
+ " 0.000000 | \n",
+ " 62.602064 | \n",
+ " 9.539970 | \n",
+ " 2.931264 | \n",
+ " B | \n",
+ " B | \n",
+ " 0.751396 | \n",
+ " 0.000000 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " 1 | \n",
+ " 15.926139 | \n",
+ " 62.602064 | \n",
+ " 9.539970 | \n",
+ " 2.931264 | \n",
+ " B | \n",
+ " B | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " _trajectory_id time temperature catalyst_amount base_equiv \\\n",
+ "0 0 0.000000 74.981605 9.556429 2.463988 \n",
+ "1 0 14.765263 74.981605 9.556429 2.463988 \n",
+ "2 0 29.767135 74.981605 9.556429 2.463988 \n",
+ "3 0 44.137541 74.981605 9.556429 2.463988 \n",
+ "4 0 60.157124 74.981605 9.556429 2.463988 \n",
+ "5 0 90.732824 74.981605 9.556429 2.463988 \n",
+ "6 0 119.287626 74.981605 9.556429 2.463988 \n",
+ "7 0 179.424503 74.981605 9.556429 2.463988 \n",
+ "8 1 0.000000 62.602064 9.539970 2.931264 \n",
+ "9 1 15.926139 62.602064 9.539970 2.931264 \n",
+ "\n",
+ " catalyst base yield impurity valid_yield valid_impurity \n",
+ "0 A A 0.000000 0.000000 1 1 \n",
+ "1 A A 33.628679 0.562401 1 1 \n",
+ "2 A A 52.252612 0.119179 1 1 \n",
+ "3 A A 65.710234 0.000000 1 1 \n",
+ "4 A A 73.651333 0.170375 1 1 \n",
+ "5 A A 83.852661 0.273337 1 1 \n",
+ "6 A A 90.243038 1.294397 1 1 \n",
+ "7 A A 92.994677 1.819754 1 1 \n",
+ "8 B B 0.751396 0.000000 1 1 \n",
+ "9 B B 0.000000 0.000000 1 1 "
+ ]
+ },
+ "execution_count": null,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "def generate_kinetic_data(n_experiments: int = 16) -> pd.DataFrame:\n",
+ " \"\"\"Generate synthetic kinetic measurement data for catalytic reactions.\"\"\"\n",
+ "\n",
+ " # Time points for kinetic measurements (in minutes)\n",
+ " time_points = np.array([0, 15, 30, 45, 60, 90, 120, 180])\n",
+ "\n",
+ " # Generate experimental conditions\n",
+ " experiments = []\n",
+ "\n",
+ " for exp_id in range(n_experiments):\n",
+ " # Randomly sample conditions\n",
+ " temperature = np.random.uniform(60, 100) # °C\n",
+ " catalyst_amount = np.random.uniform(1, 10) # mol%\n",
+ " base_equiv = np.random.uniform(1, 3) # equivalents\n",
+ " catalyst = np.random.choice([\"A\", \"B\", \"C\"])\n",
+ " base = np.random.choice([\"A\", \"B\", \"C\"])\n",
+ "\n",
+ " # Generate kinetic profiles based on conditions\n",
+ " for _i, time in enumerate(time_points):\n",
+ " # Base reaction kinetics\n",
+ " k_rate = 0.01 * (temperature - 50) / 50 # Temperature effect on rate\n",
+ "\n",
+ " # Catalyst effects\n",
+ " if catalyst == \"B\":\n",
+ " catalyst_factor = 0.0 # Catalyst B doesn't work\n",
+ " elif catalyst == \"A\":\n",
+ " catalyst_factor = 1.5 # Catalyst A is excellent\n",
+ " else: # catalyst == 'C'\n",
+ " catalyst_factor = 0.7 # Catalyst C is moderate\n",
+ "\n",
+ " # Base effects\n",
+ " if base == \"B\":\n",
+ " base_factor = 0.0 # Base B doesn't work\n",
+ " elif base == \"A\":\n",
+ " base_factor = 1.2 # Base A is good\n",
+ " else: # base == 'C'\n",
+ " base_factor = 0.8 # Base C is moderate\n",
+ "\n",
+ " # Synergistic effect: Catalyst A + Base A\n",
+ " synergy = 1.5 if (catalyst == \"A\" and base == \"A\") else 1.0\n",
+ "\n",
+ " # Calculate yield (follows first-order kinetics)\n",
+ " effective_rate = (\n",
+ " k_rate * catalyst_factor * base_factor * synergy * catalyst_amount / 5\n",
+ " )\n",
+ " max_yield = min(\n",
+ " 95, 60 * catalyst_factor * base_factor * synergy\n",
+ " ) # Asymptotic max\n",
+ " yield_val = max_yield * (1 - np.exp(-effective_rate * time))\n",
+ "\n",
+ " # Calculate impurity (increases with base loading and time)\n",
+ " impurity_rate = 0.002 * base_equiv * (temperature - 50) / 50\n",
+ " impurity = 2 * base_equiv * (1 - np.exp(-impurity_rate * time))\n",
+ "\n",
+ " # Add some noise\n",
+ " yield_val += np.random.normal(0, 2)\n",
+ " impurity += np.random.normal(0, 0.5)\n",
+ "\n",
+ " # Add realistic noise to time measurements\n",
+ " actual_time = time + np.random.normal(0, 0.5) if time > 0 else time\n",
+ "\n",
+ " experiments.append(\n",
+ " {\n",
+ " \"_trajectory_id\": exp_id,\n",
+ " \"time\": actual_time,\n",
+ " \"temperature\": temperature,\n",
+ " \"catalyst_amount\": catalyst_amount,\n",
+ " \"base_equiv\": base_equiv,\n",
+ " \"catalyst\": catalyst,\n",
+ " \"base\": base,\n",
+ " \"yield\": max(0, yield_val), # Ensure non-negative\n",
+ " \"impurity\": max(0, impurity), # Ensure non-negative\n",
+ " }\n",
+ " )\n",
+ "\n",
+ " df = pd.DataFrame(experiments)\n",
+ " # Add validity columns for BoFire\n",
+ " df[\"valid_yield\"] = 1\n",
+ " df[\"valid_impurity\"] = 1\n",
+ "\n",
+ " return df\n",
+ "\n",
+ "\n",
+ "# Generate the data\n",
+ "kinetic_data = generate_kinetic_data(n_experiments=16)\n",
+ "print(\n",
+ " f\"Generated {len(kinetic_data)} data points from {kinetic_data['_trajectory_id'].nunique()} experiments\"\n",
+ ")\n",
+ "print(\"\\nFirst few rows:\")\n",
+ "kinetic_data.head(10)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 2. Visualize the Kinetic Data\n",
+ "\n",
+ "Let's visualize some of the kinetic profiles to understand our data better."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAABdIAAAHqCAYAAAAAkLx0AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd8zWf7wPHPWTnZU4YQRBB7VauUalEtsXWpGg+lrYei1C5F1XioWq0i6EhrRFDV6q/a52ntDlSp2HslEdnJmd/fH0cOR4aEQ4Lr/XrlJTnfdX/vnMj1vXLf161SFEVBCCGEEEIIIYQQQgghhBD5Upd0A4QQQgghhBBCCCGEEEKI0kwS6UIIIYQQQgghhBBCCCFEISSRLoQQQgghhBBCCCGEEEIUQhLpQgghhBBCCCGEEEIIIUQhJJEuhBBCCCGEEEIIIYQQQhRCEulCCCGEEEIIIYQQQgghRCEkkS6EEEIIIYQQQgghhBBCFEIS6UIIIYQQQgghhBBCCCFEISSRLoQQQgghhBBCCCGEEEIUQhLpQghRgJYtWzJ69OjbOjYyMpL58+ffcr/58+cTGRl5W9coSM+ePenZs6dTz1kcd9JvJWn//v28/PLL1K9fn8jISA4dOpTv9+d+vT8hhBBCCFG4uLg4IiMjOXfuXEk3xW737t1ERkaye/fuErl+aeyTojCbzcycOZMWLVpQvXp1Bg4cCOR9Trtf708IUTIkkS6EeOi89tprPProoyQlJeXZlp6eTrNmzXjhhRewWq0l0Lr8jR49mgYNGuR5PT4+nsaNG9OyZct7Gvzt2bOH+fPnk5aWdlev07JlSyIjI+0fTZo04ZVXXuHHH3906nVMJhNDhw4lJSWFMWPGMHPmTEJDQ516DSGEEEKIB1luQvLvv/8u6aY4VUxMDHFxcU4957lz54iMjCQ6OtrhdUVRmDBhQpEH5TjTokWL2LJly129Ru57JPejTp06PPvss0yePDnfZ7M7sXbtWqKjo3n22WeZPn06ffr0cer5hRAPJ21JN0AIIe61iRMn0qFDB6ZNm8bs2bMdtn344YdcvXqVpUuXUrlyZVQqVQm18taOHDlCnz59cHd357PPPqN8+fIAeQLyu2Hv3r0sWLCALl264O3t7bBt8+bNTu23GjVq8K9//QuAhIQEVq1axaBBg3jvvffo3r27U65x5swZzp8/z/vvv88LL7xgf/3NN99kwIABTrmGEEIIIYQo3Tp16kRUVBQuLi72177++mv8/Pzo2rXrXb22oii89957rFq1ioEDBzJ48GAAHn30Ufbv349Op7ur1//000959tlnad26tcPr+fXJnXrrrbcoX748RqORP//8k6+//ppffvmFb7/9Fjc3N6dcY9euXQQHBzN27FiH1/fv349Go3HKNYQQDx9JpAshHjphYWH8+9//ZtasWXTp0oVmzZoBtqBq5cqV9O3bl+rVq5dwKwt39OhRevfujaurK59//jlhYWH2bc4Mcm+Hs68fHBxMp06d7F937tyZNm3asGLFigIT6WazGavVWuS2JCcnA+Dl5eXwularRauVX5VCCCGEEA+yrKws3N3d0Wg0JZZknTJlCitXruSNN95gyJAh9tfVajV6vb5E2gTclT558sknqVOnDgAvvPACvr6+LF++nJ9++on27dvne0zu96iorly5kmfAD1CifSmEuP9JaRchxEPpX//6F5GRkUyaNAmDwYDFYuG9994jNDSUQYMGAfnXwk5LS2Pq1Km0aNGC2rVr88wzz7B48eIilYH5448/6NatG3Xq1KF169asXLnyttp+/Phx+vTpg4uLS54kOuStkZ5bV/G7777jk08+sQeuvXv35vTp03nO/9dff9GvXz8eeeQR6tWrx6uvvsqff/5p3z5//nxmzpwJQKtWrexTM3NLyxTUbx988AEtW7akdu3aPPnkk4wcOdKewC6OwMBAKleuzPnz5wHHqbErVqygdevW1KlTh+PHjwOwc+dOXnnlFerXr0+jRo1488037dvAVjbn1VdfBWDIkCFERkba+6+oNeyL+r7YtGkTXbt2pUGDBjRs2JAOHTrw2WefFbsPhBBCCCHuB7nlCS9cuMDrr79OgwYNaN68OTExMQAcPnyYXr16Ub9+fZ5++mk2btzocHxuKZDff/+dCRMm0LhxYxo2bMjIkSNJTU112Legcig3x6a55/ztt9947733aNKkCS1atHDYdmNce/ToUX777Td7zNuzZ0/Onj1LZGQkK1asyHO9PXv2EBkZybffflvkfnr//feJiYnh9ddfZ9iwYQ7b8quR3rNnT9q3b8+xY8fo2bMn9erVo3nz5ixZsiTPuY1GI/PmzeOZZ56hdu3atGjRgpkzZ2I0Gh36Lisri3Xr1tnvM7fPCqoh/ssvv/Dqq6/a49pu3brl+f4V1eOPPw5gv0bu++bMmTP079+fBg0aMGLECMCWUJ8+fbo97n722WeJjo5GURT7OXL76+jRo/b7ye2/opbN+eWXX+zPEA0aNGDAgAEcPXrUYZ/ExETGjBnDk08+Se3atWnWrBlvvvmm1FsX4gEmw+yEEA8lrVbLlClTePnll/n444/x9/fn4MGDLF26tMDphNnZ2bz66qtcvnyZl19+mbJly7J3714+/PBDEhMTGTduXIHXO3z4MP369cPf35/BgwdjNpuZP38+AQEBxWr3iRMn6N27NxqNhs8//5wKFSoU+dglS5agUqno27cvGRkZLF26lBEjRrBmzRr7Pjt37qR///7Url2bQYMGoVKpiIuLo3fv3nz11VfUrVuXZ555hlOnTvHtt98yZswY/Pz8APD398/3upmZmfTo0YPjx4/TrVs3atasydWrV/n555+5fPlygccVxGQycenSJXx9fR1ej4uLw2Aw8OKLL+Li4oKPjw87duygf//+lC9fnkGDBpGTk8OXX35J9+7diYuLo3z58rz00ksEBwezaNEievbsSZ06dShTpkyR21PU98X27dt5++23adKkif1B4MSJE+zZs4fevXsXqw+EEEIIIe4XFouF/v3706hRI0aMGMHGjRuZPHkybm5uzJkzhw4dOtCmTRtWrlzJqFGjqF+/fp6BIpMnT8bb25tBgwZx8uRJvv76ay5cuMAXX3xx2yUFJ02ahL+/P//+97/JysrKd5+xY8cyZcoU3N3deeONNwAoU6YMYWFhNGzYkG+++SZP7e2NGzfi4eFBq1atitSODz74gC+++IL+/fvz9ttvF7n9qampvPbaazzzzDO0bduWH374gVmzZlGtWjX7HwasVitvvvkmf/75Jy+++CIREREcOXKEzz77jFOnTvHxxx8DMHPmTMaPH0/dunV58cUXAQp9zoiLi2Ps2LFUrVqV119/HS8vLw4dOsTWrVvp0KFDke8h15kzZwAc4nuz2Wwf3DNq1ChcXV1RFIU333yT3bt38/zzz1OjRg22bt3KzJkzuXz5MmPHjsXf35+ZM2eyaNEisrKy7H0aERFR5PasX7+e0aNH06xZM0aMGEF2djZff/01r7zyCuvWrbOX1Bw8eDDHjh3j1VdfpVy5ciQnJ7N9+3YuXrxo30cI8WCRRLoQ4qFVr149XnnlFaKjo9HpdLRv357mzZsXuP/y5cs5e/Ys69ato1KlSgC8/PLLBAUFER0dTd++fSlbtmy+x86bNw9FUYiJibEvYvnss88WK9A0mUz06tULlUrF559/TsWKFYt+s4DBYGD9+vX2cife3t5MnTqVI0eOUK1aNXtdxsaNG7N06VL7Q8nLL79MVFQUH330EcuWLaN69erUrFmTb7/9ltatW98ySIyOjubIkSMsWLCAZ555xv76wIED7SNHCmM2m+0j1xMSEli8eDFJSUkOo+4BLl26xI8//uiQmB84cCA+Pj6sWrXKHpi3bt2aLl26MH/+fGbMmEGDBg0wGo0sWrSIRo0a8dxzz926M29Q1PfF//73Pzw9PYmOjpa6jEIIIYR4aBgMBjp27Mjrr78OQIcOHWjevDljx47lww8/pF27dgA0bdqUtm3bsn79ent98Fw6nY4VK1bY64SHhobyn//8h59//rnICeub+fj4sGLFikLjstatW/PRRx/h5+fnUGoQbOUGJ0yYwPHjx+1JWpPJxPfff0+bNm2KVOs7JiaG8+fP069fP/tAi6JKSEhgxowZdO7cGYDnn3+eli1bsnbtWnsifePGjezYsYMvvviCRo0a2Y+tWrUqEydOZM+ePTRs2JBOnTrx3nvvERYWluc+b5aens77779P3bp1+eKLLxxKpRQltgfIyMggOTkZo9HInj17WLhwIa6urjz99NP2fYxGI8899xzDhw+3v7ZlyxZ27drF0KFDefPNNwHo0aMHb731Fp9//jmvvvoqFSpUoFOnTsTGxnL16tVb3s/NMjMzmTp1Ki+88AJTpkyxv96lSxeee+45Pv30U6ZMmUJaWhp79+5l5MiR9OvXz75f7vtcCPFgktIuQoiH2rBhw/D19UWtVjNmzJhC9928eTOPPPII3t7eJCcn2z+aNm2KxWLh999/z/c4i8XCtm3baN26tT2JDrZREbn12YvCYrGQkpKCr6+vfRR4cXTt2tWhZnhuMH327FkADh06xKlTp+jQoQNXr161319WVhZNmjTh999/L1IJm5v93//9H9WrV3dIoucqygiibdu20aRJE5o0aUKnTp3YvHkznTp1yvOw0aZNG4ckekJCAocOHaJLly4Oo1uqV69O06ZN+eWXX4p9L/kp6vvC29ub7Oxstm/f7pTrCiGEEELcL25czN3b25vw8HDc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z3E9jqFbSe4hj0RP5/1gqjoS2jRhm++Sh/+E4zttxPOR0J7JkqzPRW2aXGrP5EvnNj2YuPOISaQfjs4K1NO5k6UqtWlyqT2TT22afGrT5FJ7Jp/aNLnSuT1TOZGeajqzrdK5j6UitWfyqU2TT22aXGrP5FObJpfaM/nSuU0PJu5M/UP4IiIiIiIiIiIiIiKdSIl0EREREREREREREZFWKJEuIiIiIiIiIiIiItIKJdJFRERERERERERERFqhRLqIiIiIiIiIiIiISCuUSBcRERERERERERERaYUS6SIiIiIiIiIiIiIirVAiXURERERERERERESkFUqki4iIiIiIiIiIiIi0Qol0EREREREREREREZFWKJEuIiIiIiIiIiIiItIKb2dXIBUYYwBwHKfDX9d1XRzHwbKsDn3tI5XaNLnUnsmnNk0+tWlyqT2TT22aXOncnk2xZlPsKfvXWfF502unax9LRWrP5FObJp/aNLnUnsmnNk0utWfypXObHkyMrkQ64LouAB9++GEn10REREREjnRNsafsn+JzEREREelIbYnRLaMhMbiuSzQaxbbttDtqIiIiIiLpoWmkjtfrxbY1w2JrFJ+LiIiISEc4mBhdiXQRERERERERERERkVZoKIyIiIiIiIiIiIiISCuUSBcRERERERERERERaYUS6SIiIiIiIiIiIiIirVAiXURERERERERERESkFUqki4iIiIiIiIiIiIi0Qol0EREREREREREREZFWKJEuIiIiIiIiIiIiItIKJdI70W9/+1smTJjAsGHD+OpXv8oHH3zQ2VVKC4899hiTJ0+mrKyM008/nWuuuYb169cnrHPllVcycODAhNuPfvSjTqpx6nvooYeatdd5550XXx4KhZg9ezYjR46krKyM733ve1RUVHRijVPbhAkTmrXnwIEDmT17NqD+2RYrVqzgv/7rvxgzZgwDBw5k8eLFCcuNMTzwwAOMGTOG4cOHc9VVV/H5558nrLN7925uueUWTjrpJE455RR++MMfUldX14HvIrW01qaRSIT77ruPiy66iBEjRjBmzBhmzpzJjh07Ep6jpb79+OOPd/RbSQkH6qM/+MEPmrXV9OnTE9ZRH010oDZtab86cOBAnnzyyfg66qNyuBSfHzrF6Mml+Dz5FKMfPsXoyaX4PPkUoyeX4vPmvJ1dgaPVwoULmTNn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fShGTz7F5+1PMXpyHE3xuaZ26STTpk1j1qxZDB06lOHDhzNv3jwaGhq49NJLO7tqKW/27Nn8+c9/5pFHHiE7Ozs+T1Vubi6BQIBNmzaxYMECxo0bR9euXVm7di1z5szh1FNPbdNGfTS69957GT9+PCUlJezcuZOHHnoI27a58MILyc3NZfLkycydO5e8vDxycnK4++67KSsrU6DeCtd1mT9/Pl/5ylfwer/c1ap/tk1dXR2bNm2K39+yZQuffPIJeXl5lJSUMHXqVH7961/Tr18/evfuzQMPPEBxcTETJ04EYhfcGjt2LP/zP//D7NmziUQi3HXXXVxwwQUJp/AeTVpr06KiIq6//no+/vhjHnvsMRzHie9b8/LyyMjIYOXKlaxatYrTTjuN7OxsVq5cyZw5c7j44oubXUjuaNBae+bl5fHwww9z7rnn0q1bNzZv3sx9991Hv379GDt2LKA+2pIDbfcQ+0G+aNEiZs2a1ezx6qNyuBSfHx7F6Mml+Lx9KEY/PIrRk0vxefIpRk8uxefNWcYY09mVOFo9//zzPPXUU5SXl3PiiSdy++23x08fk/0bOHBgi+Vz5szh0ksvZfv27dx66618+umn1NfX07NnTyZOnMg111xzwNOgjlY33XQTK1asYPfu3RQUFHDyySdz0003xecCDIVCzJ07l9dee41wOMyYMWO44447NDqjFUuXLmX69OksWrSI/v37x8vVP9vm7bffZurUqc3KJ02axNy5czHG8OCDD/LCCy9QU1PDySefzB133JHQ1rt37+auu+7i73//O7Ztc84553D77beTnZ3dkW8lZbTWptdddx1nnXVWi4979tlnGTlyJB999BGzZ89m/fr1hMNhevfuzSWXXMK0adPScm67w9Vae/74xz/m2muv5eOPP2bPnj0UFxczevRobrjhhoQpItRHEx1ouwf4wx/+wD333MPSpUvJzc1NWE99VJJB8fmhU4yeXIrP24di9MOjGD25FJ8nn2L05FJ83pwS6SIiIiIiIiIiIiIirdAc6SIiIiIiIiIiIiIirVAiXURERERERERERESkFUqki4iIiIiIiIiIiIi0Qol0EREREREREREREZFWKJEuIiIiIiIiIiIiItIKJdJFRERERERERERERFqhRLqIiIiIiIiIiIiISCuUSBcRERERERERERERaYUS6SIiIiIiIiIiIiIirVAiXUQkhfzgBz/gmmuu6bTXv/XWW3n00UcP6znmz5/PKaeckqQata8pU6bwxhtvdHY1RERERCSFKUbvWIrRRSRVWcYY09mVEBE5GgwcOLDV5ddddx1XXXUVxhi6dOnSQbX60po1a/jWt77F3//+d7Kzsw/5eYLBIHV1dRQWFiaxdrH2+9WvfsXEiROT9pz/+Mc/mDNnDosWLcK2dWxZRERE5GijGP3wKEYXkaOJt7MrICJytFi6dGn8/4ULF/Lggw+yaNGieFlWVtZhBceH67nnnuPcc8897DoEAgECgUCSatW+zjjjDG6//XbeeustzjzzzM6ujoiIiIh0MMXoqUcxuoikKh3aExHpIEVFRfFbbm4ulmUllGVnZzc7bfTKK6/krrvu4ic/+Qmnnnoqo0aN4oUXXqC+vp7bbruNsrIyzj77bJYsWZLwWuvWrePb3/42ZWVljBo1iltvvZVdu3btt26O4/DGG28wYcKEhPIJEybwyCOPMHPmTMrKyhg/fjx/+9vf2LVrFzNmzKCsrIyLLrqIDz/8MP6YfU8bfeihh7jkkkv44x//yIQJEzj55JO56aabqK2tTXidZ555JuG1L7nkEh566KH4coBrr72WgQMHJtRz8eLFTJo0iWHDhnHWWWfx8MMPE41GATDG8NBDD3HmmWcydOhQxowZw9133x1/rMfj4YwzzuC1117bb9uIiIiIyJFLMbpidBGRtlIiXUQkxb3yyivk5+fz4osvcsUVV/DjH/+YG264gbKyMl555RVGjx7NzJkzaWhoAKCmpoZvfetbDB48mJdeeoknn3ySyspKbrzxxv2+xtq1a9mzZw9Dhw5ttmzevHmcdNJJvPLKK4wbN46ZM2cyc+ZMLr74YubPn0/fvn2ZNWsWrc0UtmnTJv72t7/x6KOP8thjj7FixQqeeOKJNrfBSy+9BMCcOXNYunRp/P67777LrFmzmDp1KgsXLuTOO+9k/vz58Tkk33jjDZ555hlmz57NX/7yFx555BEGDBiQ8NzDhw/n3//+d5vrIiIiIiKiGF0xuogcfZRIFxFJcYMGDeKaa67hmGOO4eqrr8bv95Ofn8+UKVM45phjuPbaa9m9ezdr164F4Pnnn2fw4MHcfPPNHHfccQwePJh77rmHt99+mw0bNrT4Gtu2bcPj8bQ4Z+IZZ5zB17/+9fhr1dbWMmzYMM4//3z69+/Pd77zHT777DMqKir2+x6MMcyZM4cBAwZwyimncPHFF7N8+fI2t0FBQQEAXbp0oaioKH7/4Ycf5rvf/S6TJk2iT58+jB49mhtuuIHf//73AGzfvp1u3boxatQoSkpKGD58OFOmTEl47uLiYrZv347rum2uj4iIiIgc3RSjK0YXkaOP5kgXEUlxe18AyePx0LVr14QRG926dQOgsrISiF2Q6O2336asrKzZc23atIn+/fs3Kw8Gg2RkZGBZVquv3/Rae79+U2BfWVlJUVFRi++hV69e5OTkxO8XFxfH63s41qxZw3vvvRcf3QKxU2BDoRANDQ2cd955zJs3j4kTJzJ27FjGjRvH+PHj8Xq//PoLBAK4rks4HE6beSNFREREpHMpRt8/xegicqRSIl1EJMXtHVACWJaVUNYUWDedtllfX8/48eP5/ve/3+y59hdE5+fn09DQQDgcJiMjY7+v3/RaPp9vv6/flvew7/ot/ThomkOxNfX19Xzve9/jnHPOabbM7/fTs2dPFi1axLJly1i2bBmzZ8/mqaee4rnnnou/h+rqarKyshSgi4iIiEibKUbfP8XoInKkUiJdROQIM2TIEN544w169erVYnDckhNPPBGAzz77LP5/RyooKGDnzp3x+7W1tWzZsiVhHZ/Ph+M4CWWDBw9mw4YN9OvXb7/PHQgEmDBhAhMmTOCb3/wm559/PuvWrWPIkCFA7KJPnfGeRUREROTooRg9kWJ0EUlHmiNdROQI881vfpPq6mpuvvlmPvjgAzZt2sQ///lPbrvttmZBbpOCggKGDBnSaRf0Oe2003j11Vd59913Wbt2LbNmzcK2E7+ievXqxfLlyykvL6e6uhqAa6+9lj/96U88/PDDfPrpp3z22We89tpr/OIXvwBg/vz5vPjii6xbt47Nmzfz6quvEggEKCkpiT/vv//9b0aPHt1xb1ZEREREjjqK0RWji0j6UyJdROQI0717d/73f/8X13WZPn06F110Effccw+5ubnNAt+9XXbZZSxYsKADa/qlq6++mlNPPZWrr76aq6++mokTJ9K3b9+EdWbNmsWyZcs488wzmTRpEgBjx47l0UcfZenSpVx22WVMmTKFZ555hl69egGxCx+9+OKLfOMb34hfPOnRRx8lPz8fgB07drBy5UomT57csW9YRERERI4qitEVo4tI+rNMaxNmiYjIUSMYDHLeeefxi1/8osWLIB2J7rvvPmpqarjrrrs6uyoiIiIiIs0oRhcRSR2aI11ERIDYPIX33nsvVVVVnV2VDlNYWMi0adM6uxoiIiIiIi1SjC4ikjo0Il1EREREREREREREpBWaI11EREREREREREREpBVKpIuIiIiIiIiIiIiItEKJdBERERERERERERGRViiRLiIiIiIiIiIiIiLSCiXSRURERERERERERERaoUS6iIiIiIiIiIiIiEgrlEgXEREREREREREREWmFEukiIiIiIiIiIiIiIq1QIl1EREREREREREREpBX/P6bn+NbApZA7AAAAAElFTkSuQmCC",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Catalyst-Base combinations in dataset:\n",
+ "catalyst base\n",
+ "A A 5\n",
+ " C 3\n",
+ "B B 1\n",
+ " C 3\n",
+ "C A 2\n",
+ " B 1\n",
+ " C 1\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Plot kinetic profiles for a few experiments\n",
+ "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 5))\n",
+ "\n",
+ "# Select a few interesting experiments to plot\n",
+ "selected_exps = kinetic_data[\"_trajectory_id\"].unique()[:6]\n",
+ "colors = plt.cm.tab10(np.linspace(0, 0.6, len(selected_exps)))\n",
+ "\n",
+ "for idx, exp_id in enumerate(selected_exps):\n",
+ " exp_data = kinetic_data[kinetic_data[\"_trajectory_id\"] == exp_id].sort_values(\n",
+ " \"time\"\n",
+ " )\n",
+ "\n",
+ " # Get experiment conditions for label\n",
+ " catalyst = exp_data.iloc[0][\"catalyst\"]\n",
+ " base = exp_data.iloc[0][\"base\"]\n",
+ " temp = exp_data.iloc[0][\"temperature\"]\n",
+ "\n",
+ " label = f\"Exp {exp_id}: Cat-{catalyst}, Base-{base}, T={temp:.0f}°C\"\n",
+ "\n",
+ " ax1.plot(\n",
+ " exp_data[\"time\"],\n",
+ " exp_data[\"yield\"],\n",
+ " \"o-\",\n",
+ " color=colors[idx],\n",
+ " label=label,\n",
+ " alpha=0.7,\n",
+ " )\n",
+ " ax2.plot(\n",
+ " exp_data[\"time\"],\n",
+ " exp_data[\"impurity\"],\n",
+ " \"o-\",\n",
+ " color=colors[idx],\n",
+ " label=label,\n",
+ " alpha=0.7,\n",
+ " )\n",
+ "\n",
+ "ax1.set_xlabel(\"Time (minutes)\")\n",
+ "ax1.set_ylabel(\"Yield (%)\")\n",
+ "ax1.set_title(\"Yield Kinetic Profiles\")\n",
+ "ax1.legend(loc=\"best\", fontsize=8)\n",
+ "ax1.grid(True, alpha=0.3)\n",
+ "\n",
+ "ax2.set_xlabel(\"Time (minutes)\")\n",
+ "ax2.set_ylabel(\"Impurity (%)\")\n",
+ "ax2.set_title(\"Impurity Kinetic Profiles\")\n",
+ "ax2.legend(loc=\"best\", fontsize=8)\n",
+ "ax2.grid(True, alpha=0.3)\n",
+ "\n",
+ "plt.tight_layout()\n",
+ "plt.show()\n",
+ "\n",
+ "# Show distribution of catalyst/base combinations\n",
+ "print(\"\\nCatalyst-Base combinations in dataset:\")\n",
+ "combo_counts = kinetic_data.groupby([\"catalyst\", \"base\"])[\"_trajectory_id\"].nunique()\n",
+ "print(combo_counts.to_string())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 3. Define the Optimization Domain\n",
+ "\n",
+ "We'll create two versions of the domain:\n",
+ "1. **Without** the `is_timeseries` flag (incorrect approach)\n",
+ "2. **With** the `is_timeseries` flag (correct approach)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Domain created successfully!\n",
+ "Inputs: base_equiv, catalyst_amount, temperature, time, base, catalyst\n",
+ "Output: yield\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Domain WITHOUT timeseries flag (incorrect)\n",
+ "def create_domain_without_timeseries() -> Domain:\n",
+ " inputs = Inputs(\n",
+ " features=[\n",
+ " ContinuousInput(\n",
+ " key=\"time\",\n",
+ " bounds=(0, 180),\n",
+ " unit=\"min\",\n",
+ " # Note: is_timeseries=False (default)\n",
+ " ),\n",
+ " ContinuousInput(\n",
+ " key=\"temperature\",\n",
+ " bounds=(60, 100),\n",
+ " unit=\"°C\",\n",
+ " ),\n",
+ " ContinuousInput(\n",
+ " key=\"catalyst_amount\",\n",
+ " bounds=(1, 10),\n",
+ " unit=\"mol%\",\n",
+ " ),\n",
+ " ContinuousInput(\n",
+ " key=\"base_equiv\",\n",
+ " bounds=(1, 3),\n",
+ " unit=\"equiv\",\n",
+ " ),\n",
+ " CategoricalInput(\n",
+ " key=\"catalyst\",\n",
+ " categories=[\"A\", \"B\", \"C\"],\n",
+ " ),\n",
+ " CategoricalInput(\n",
+ " key=\"base\",\n",
+ " categories=[\"A\", \"B\", \"C\"],\n",
+ " ),\n",
+ " ]\n",
+ " )\n",
+ "\n",
+ " # Single output for cross-validation\n",
+ " outputs = Outputs(\n",
+ " features=[\n",
+ " ContinuousOutput(\n",
+ " key=\"yield\",\n",
+ " objective=MaximizeObjective(w=1.0),\n",
+ " unit=\"%\",\n",
+ " ),\n",
+ " ]\n",
+ " )\n",
+ "\n",
+ " return Domain(inputs=inputs, outputs=outputs)\n",
+ "\n",
+ "\n",
+ "# Domain WITH timeseries flag (correct)\n",
+ "def create_domain_with_timeseries() -> Domain:\n",
+ " inputs = Inputs(\n",
+ " features=[\n",
+ " ContinuousInput(\n",
+ " key=\"time\",\n",
+ " bounds=(0, 180),\n",
+ " unit=\"min\",\n",
+ " is_timeseries=True, # Mark as timeseries!\n",
+ " ),\n",
+ " ContinuousInput(\n",
+ " key=\"temperature\",\n",
+ " bounds=(60, 100),\n",
+ " unit=\"°C\",\n",
+ " ),\n",
+ " ContinuousInput(\n",
+ " key=\"catalyst_amount\",\n",
+ " bounds=(1, 10),\n",
+ " unit=\"mol%\",\n",
+ " ),\n",
+ " ContinuousInput(\n",
+ " key=\"base_equiv\",\n",
+ " bounds=(1, 3),\n",
+ " unit=\"equiv\",\n",
+ " ),\n",
+ " CategoricalInput(\n",
+ " key=\"catalyst\",\n",
+ " categories=[\"A\", \"B\", \"C\"],\n",
+ " ),\n",
+ " CategoricalInput(\n",
+ " key=\"base\",\n",
+ " categories=[\"A\", \"B\", \"C\"],\n",
+ " ),\n",
+ " ]\n",
+ " )\n",
+ "\n",
+ " # Single output for cross-validation\n",
+ " outputs = Outputs(\n",
+ " features=[\n",
+ " ContinuousOutput(\n",
+ " key=\"yield\",\n",
+ " objective=MaximizeObjective(w=1.0),\n",
+ " unit=\"%\",\n",
+ " ),\n",
+ " ]\n",
+ " )\n",
+ "\n",
+ " return Domain(inputs=inputs, outputs=outputs)\n",
+ "\n",
+ "\n",
+ "domain_without_ts = create_domain_without_timeseries()\n",
+ "domain_with_ts = create_domain_with_timeseries()\n",
+ "\n",
+ "print(\"Domain created successfully!\")\n",
+ "print(f\"Inputs: {', '.join(domain_with_ts.inputs.get_keys())}\")\n",
+ "print(f\"Output: {', '.join(domain_with_ts.outputs.get_keys())}\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 4. Cross-Validation WITHOUT Timeseries Flag (Incorrect)\n",
+ "\n",
+ "First, let's see what happens when we don't properly handle timeseries data. This approach will randomly split data points, potentially putting different time points from the same experiment in both training and test sets."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Performing cross-validation WITHOUT timeseries handling...\n",
+ "This will use regular KFold, potentially splitting time points from the same experiment.\n",
+ "\n",
+ "\n",
+ "=== Results WITHOUT timeseries handling ===\n",
+ "\n",
+ "Yield metrics:\n",
+ " Train R²: 0.9990\n",
+ " Train RMSE: 1.0029\n",
+ " Test R²: 0.9865\n",
+ " Test RMSE: 3.7298\n",
+ "\n",
+ "⚠️ Note the suspiciously high test R² value!\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Create and train model without timeseries handling\n",
+ "# Use better priors for lengthscales and noise\n",
+ "model_spec_without_ts = MixedSingleTaskGPSurrogate(\n",
+ " inputs=domain_without_ts.inputs,\n",
+ " outputs=domain_without_ts.outputs,\n",
+ " continuous_kernel=MaternKernel(\n",
+ " ard=True, nu=2.5, lengthscale_prior=MBO_LENGTHSCALE_PRIOR()\n",
+ " ),\n",
+ " categorical_kernel=HammingDistanceKernel(ard=True),\n",
+ " noise_prior=MBO_NOISE_PRIOR(),\n",
+ ")\n",
+ "model_without_ts = surrogates.map(model_spec_without_ts)\n",
+ "\n",
+ "# Perform cross-validation (will use regular KFold, mixing time points from same experiments)\n",
+ "print(\"Performing cross-validation WITHOUT timeseries handling...\")\n",
+ "print(\n",
+ " \"This will use regular KFold, potentially splitting time points from the same experiment.\\n\"\n",
+ ")\n",
+ "\n",
+ "cv_train_no_ts, cv_test_no_ts, _ = model_without_ts.cross_validate(\n",
+ " experiments=kinetic_data,\n",
+ " folds=4,\n",
+ " random_state=42,\n",
+ ")\n",
+ "\n",
+ "# Get metrics for yield (RMSE = sqrt(MSD))\n",
+ "yield_metrics_no_ts = {\n",
+ " \"Train R²\": float(cv_train_no_ts.get_metric(RegressionMetricsEnum.R2).iloc[0]),\n",
+ " \"Train RMSE\": np.sqrt(\n",
+ " float(cv_train_no_ts.get_metric(RegressionMetricsEnum.MSD).iloc[0])\n",
+ " ),\n",
+ " \"Test R²\": float(cv_test_no_ts.get_metric(RegressionMetricsEnum.R2).iloc[0]),\n",
+ " \"Test RMSE\": np.sqrt(\n",
+ " float(cv_test_no_ts.get_metric(RegressionMetricsEnum.MSD).iloc[0])\n",
+ " ),\n",
+ "}\n",
+ "\n",
+ "print(\"\\n=== Results WITHOUT timeseries handling ===\")\n",
+ "print(\"\\nYield metrics:\")\n",
+ "for metric, value in yield_metrics_no_ts.items():\n",
+ " print(f\" {metric}: {value:.4f}\")\n",
+ "\n",
+ "print(\"\\n⚠️ Note the suspiciously high test R² value!\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 5. Cross-Validation WITH Timeseries Flag (Correct)\n",
+ "\n",
+ "Now let's use the correct approach with the `is_timeseries` flag. This will ensure that all time points from the same experiment stay together in either training or test set."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Performing cross-validation WITH timeseries handling...\n",
+ "This will automatically detect the timeseries feature and use GroupKFold.\n",
+ "All time points from the same experiment will stay together.\n",
+ "\n",
+ "\n",
+ "=== Results WITH proper timeseries handling ===\n",
+ "\n",
+ "Yield metrics:\n",
+ " Train R²: 0.9991\n",
+ " Train RMSE: 0.9549\n",
+ " Test R²: 0.8544\n",
+ " Test RMSE: 12.2661\n",
+ "\n",
+ "✅ These are more realistic test metrics!\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Create and train model with proper timeseries handling\n",
+ "# Use better priors for lengthscales and noise\n",
+ "model_spec_with_ts = MixedSingleTaskGPSurrogate(\n",
+ " inputs=domain_with_ts.inputs,\n",
+ " outputs=domain_with_ts.outputs,\n",
+ " continuous_kernel=MaternKernel(\n",
+ " ard=True, nu=2.5, lengthscale_prior=MBO_LENGTHSCALE_PRIOR()\n",
+ " ),\n",
+ " categorical_kernel=HammingDistanceKernel(ard=True),\n",
+ " noise_prior=MBO_NOISE_PRIOR(),\n",
+ ")\n",
+ "model_with_ts = surrogates.map(model_spec_with_ts)\n",
+ "\n",
+ "# Perform cross-validation (will automatically use GroupKFold with _trajectory_id)\n",
+ "print(\"Performing cross-validation WITH timeseries handling...\")\n",
+ "print(\"This will automatically detect the timeseries feature and use GroupKFold.\")\n",
+ "print(\"All time points from the same experiment will stay together.\\n\")\n",
+ "\n",
+ "cv_train_ts, cv_test_ts, _ = model_with_ts.cross_validate(\n",
+ " experiments=kinetic_data,\n",
+ " folds=4,\n",
+ " random_state=42,\n",
+ ")\n",
+ "\n",
+ "# Get metrics for yield (RMSE = sqrt(MSD))\n",
+ "yield_metrics_ts = {\n",
+ " \"Train R²\": float(cv_train_ts.get_metric(RegressionMetricsEnum.R2).iloc[0]),\n",
+ " \"Train RMSE\": np.sqrt(\n",
+ " float(cv_train_ts.get_metric(RegressionMetricsEnum.MSD).iloc[0])\n",
+ " ),\n",
+ " \"Test R²\": float(cv_test_ts.get_metric(RegressionMetricsEnum.R2).iloc[0]),\n",
+ " \"Test RMSE\": np.sqrt(\n",
+ " float(cv_test_ts.get_metric(RegressionMetricsEnum.MSD).iloc[0])\n",
+ " ),\n",
+ "}\n",
+ "\n",
+ "print(\"\\n=== Results WITH proper timeseries handling ===\")\n",
+ "print(\"\\nYield metrics:\")\n",
+ "for metric, value in yield_metrics_ts.items():\n",
+ " print(f\" {metric}: {value:.4f}\")\n",
+ "\n",
+ "print(\"\\n✅ These are more realistic test metrics!\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 6. Compare Results: Data Leakage Analysis\n",
+ "\n",
+ "Let's compare the cross-validation results to understand the impact of data leakage."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Create comparison dataframe\n",
+ "comparison_data = pd.DataFrame(\n",
+ " {\n",
+ " \"Metric\": [\"Train R²\", \"Test R²\", \"Train RMSE\", \"Test RMSE\"],\n",
+ " \"Without Timeseries\": [\n",
+ " yield_metrics_no_ts[\"Train R²\"],\n",
+ " yield_metrics_no_ts[\"Test R²\"],\n",
+ " yield_metrics_no_ts[\"Train RMSE\"],\n",
+ " yield_metrics_no_ts[\"Test RMSE\"],\n",
+ " ],\n",
+ " \"With Timeseries\": [\n",
+ " yield_metrics_ts[\"Train R²\"],\n",
+ " yield_metrics_ts[\"Test R²\"],\n",
+ " yield_metrics_ts[\"Train RMSE\"],\n",
+ " yield_metrics_ts[\"Test RMSE\"],\n",
+ " ],\n",
+ " }\n",
+ ")\n",
+ "\n",
+ "# Plot comparison\n",
+ "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5))\n",
+ "\n",
+ "# R² Comparison\n",
+ "ax = ax1\n",
+ "x = np.arange(2) # Train and Test\n",
+ "width = 0.35\n",
+ "\n",
+ "train_no_ts = yield_metrics_no_ts[\"Train R²\"]\n",
+ "test_no_ts = yield_metrics_no_ts[\"Test R²\"]\n",
+ "train_ts = yield_metrics_ts[\"Train R²\"]\n",
+ "test_ts = yield_metrics_ts[\"Test R²\"]\n",
+ "\n",
+ "# Bars for R²\n",
+ "bars1 = ax.bar(\n",
+ " x - width / 2,\n",
+ " [train_no_ts, test_no_ts],\n",
+ " width,\n",
+ " label=\"Without Timeseries\",\n",
+ " color=[\"lightblue\", \"lightcoral\"],\n",
+ " edgecolor=[\"darkblue\", \"darkred\"],\n",
+ " linewidth=2,\n",
+ ")\n",
+ "bars2 = ax.bar(\n",
+ " x + width / 2,\n",
+ " [train_ts, test_ts],\n",
+ " width,\n",
+ " label=\"With Timeseries\",\n",
+ " color=[\"lightgreen\", \"darkgreen\"],\n",
+ " edgecolor=\"darkgreen\",\n",
+ " linewidth=2,\n",
+ ")\n",
+ "\n",
+ "ax.set_ylabel(\"R² Score\")\n",
+ "ax.set_title(\"R² Comparison: Impact of Timeseries Handling\")\n",
+ "ax.set_xticks(x)\n",
+ "ax.set_xticklabels([\"Train\", \"Test\"])\n",
+ "ax.legend()\n",
+ "ax.grid(True, alpha=0.3)\n",
+ "ax.set_ylim([0, 1.05])\n",
+ "\n",
+ "# Add value labels on bars\n",
+ "for bars in [bars1, bars2]:\n",
+ " for bar in bars:\n",
+ " height = bar.get_height()\n",
+ " ax.text(\n",
+ " bar.get_x() + bar.get_width() / 2.0,\n",
+ " height,\n",
+ " f\"{height:.3f}\",\n",
+ " ha=\"center\",\n",
+ " va=\"bottom\",\n",
+ " fontsize=9,\n",
+ " )\n",
+ "\n",
+ "# RMSE Comparison\n",
+ "ax2 = ax2\n",
+ "train_rmse_no_ts = yield_metrics_no_ts[\"Train RMSE\"]\n",
+ "test_rmse_no_ts = yield_metrics_no_ts[\"Test RMSE\"]\n",
+ "train_rmse_ts = yield_metrics_ts[\"Train RMSE\"]\n",
+ "test_rmse_ts = yield_metrics_ts[\"Test RMSE\"]\n",
+ "\n",
+ "bars3 = ax2.bar(\n",
+ " x - width / 2,\n",
+ " [train_rmse_no_ts, test_rmse_no_ts],\n",
+ " width,\n",
+ " label=\"Without Timeseries\",\n",
+ " color=[\"lightblue\", \"lightcoral\"],\n",
+ " edgecolor=[\"darkblue\", \"darkred\"],\n",
+ " linewidth=2,\n",
+ ")\n",
+ "bars4 = ax2.bar(\n",
+ " x + width / 2,\n",
+ " [train_rmse_ts, test_rmse_ts],\n",
+ " width,\n",
+ " label=\"With Timeseries\",\n",
+ " color=[\"lightgreen\", \"darkgreen\"],\n",
+ " edgecolor=\"darkgreen\",\n",
+ " linewidth=2,\n",
+ ")\n",
+ "\n",
+ "ax2.set_ylabel(\"RMSE\")\n",
+ "ax2.set_title(\"RMSE Comparison: Impact of Timeseries Handling\")\n",
+ "ax2.set_xticks(x)\n",
+ "ax2.set_xticklabels([\"Train\", \"Test\"])\n",
+ "ax2.legend()\n",
+ "ax2.grid(True, alpha=0.3)\n",
+ "\n",
+ "# Add value labels on bars\n",
+ "for bars in [bars3, bars4]:\n",
+ " for bar in bars:\n",
+ " height = bar.get_height()\n",
+ " ax2.text(\n",
+ " bar.get_x() + bar.get_width() / 2.0,\n",
+ " height,\n",
+ " f\"{height:.2f}\",\n",
+ " ha=\"center\",\n",
+ " va=\"bottom\",\n",
+ " fontsize=9,\n",
+ " )\n",
+ "\n",
+ "plt.tight_layout()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 7. Understanding Data Leakage\n",
+ "\n",
+ "Let's visualize exactly how data leakage occurs when we don't use proper timeseries handling."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "WITHOUT timeseries handling (regular KFold):\n",
+ "Train experiments: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]\n",
+ "Test experiments: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]\n",
+ "\n",
+ "🚨 Experiments split between train and test: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]\n",
+ "Number of leaked experiments: 16 out of 16\n",
+ "\n",
+ "Example - Experiment 0:\n",
+ " Total time points: 8\n",
+ " Time points in TRAIN: 6 - Times: ['14.8', '29.8', '44.1', '90.7', '119.3', '179.4']\n",
+ " Time points in TEST: 2 - Times: ['0.0', '60.2']\n",
+ "\n",
+ " ⚠️ The model sees some time points during training and predicts\n",
+ " neighboring time points during testing - this is cheating!\n",
+ "\n",
+ "============================================================\n",
+ "\n",
+ "WITH timeseries handling (GroupKFold with _trajectory_id):\n",
+ "Train experiments: [0, 1, 2, 4, 5, 6, 8, 9, 10, 12, 13, 14]\n",
+ "Test experiments: [3, 7, 11, 15]\n",
+ "\n",
+ "✅ Experiments split between train and test: None\n",
+ "Number of leaked experiments: 0\n",
+ "\n",
+ "✅ Each experiment's complete kinetic profile stays together!\n"
+ ]
+ }
+ ],
+ "source": [
+ "# from sklearn.model_selection import KFold\n",
+ "\n",
+ "\n",
+ "# Demonstrate data leakage with a single fold\n",
+ "kf = KFold(n_splits=4, shuffle=True, random_state=42)\n",
+ "train_idx, test_idx = next(kf.split(kinetic_data))\n",
+ "\n",
+ "# Check which experiments have points in both train and test\n",
+ "train_experiments = set(kinetic_data.iloc[train_idx][\"_trajectory_id\"])\n",
+ "test_experiments = set(kinetic_data.iloc[test_idx][\"_trajectory_id\"])\n",
+ "leaked_experiments = train_experiments.intersection(test_experiments)\n",
+ "\n",
+ "print(\"WITHOUT timeseries handling (regular KFold):\")\n",
+ "print(f\"Train experiments: {sorted(train_experiments)}\")\n",
+ "print(f\"Test experiments: {sorted(test_experiments)}\")\n",
+ "print(f\"\\n🚨 Experiments split between train and test: {sorted(leaked_experiments)}\")\n",
+ "print(\n",
+ " f\"Number of leaked experiments: {len(leaked_experiments)} out of {kinetic_data['_trajectory_id'].nunique()}\"\n",
+ ")\n",
+ "\n",
+ "# Show example of leakage for one experiment\n",
+ "if leaked_experiments:\n",
+ " example_exp = list(leaked_experiments)[0]\n",
+ " exp_data = kinetic_data[kinetic_data[\"_trajectory_id\"] == example_exp]\n",
+ " exp_train_idx = [i for i in train_idx if i in exp_data.index]\n",
+ " exp_test_idx = [i for i in test_idx if i in exp_data.index]\n",
+ "\n",
+ " train_times = sorted(exp_data.loc[exp_train_idx, \"time\"].values)\n",
+ " test_times = sorted(exp_data.loc[exp_test_idx, \"time\"].values)\n",
+ "\n",
+ " print(f\"\\nExample - Experiment {example_exp}:\")\n",
+ " print(f\" Total time points: {len(exp_data)}\")\n",
+ " print(\n",
+ " f\" Time points in TRAIN: {len(exp_train_idx)} - Times: {[f'{t:.1f}' for t in train_times]}\"\n",
+ " )\n",
+ " print(\n",
+ " f\" Time points in TEST: {len(exp_test_idx)} - Times: {[f'{t:.1f}' for t in test_times]}\"\n",
+ " )\n",
+ " print(\"\\n ⚠️ The model sees some time points during training and predicts\")\n",
+ " print(\" neighboring time points during testing - this is cheating!\")\n",
+ "\n",
+ "print(\"\\n\" + \"=\" * 60)\n",
+ "\n",
+ "# Now show correct handling\n",
+ "# from sklearn.model_selection import GroupKFold\n",
+ "\n",
+ "\n",
+ "gkf = GroupKFold(n_splits=4)\n",
+ "train_idx_correct, test_idx_correct = next(\n",
+ " gkf.split(kinetic_data, groups=kinetic_data[\"_trajectory_id\"])\n",
+ ")\n",
+ "\n",
+ "train_experiments_correct = set(kinetic_data.iloc[train_idx_correct][\"_trajectory_id\"])\n",
+ "test_experiments_correct = set(kinetic_data.iloc[test_idx_correct][\"_trajectory_id\"])\n",
+ "leaked_experiments_correct = train_experiments_correct.intersection(\n",
+ " test_experiments_correct\n",
+ ")\n",
+ "\n",
+ "print(\"\\nWITH timeseries handling (GroupKFold with _trajectory_id):\")\n",
+ "print(f\"Train experiments: {sorted(train_experiments_correct)}\")\n",
+ "print(f\"Test experiments: {sorted(test_experiments_correct)}\")\n",
+ "print(\n",
+ " f\"\\n✅ Experiments split between train and test: {sorted(leaked_experiments_correct) if leaked_experiments_correct else 'None'}\"\n",
+ ")\n",
+ "print(f\"Number of leaked experiments: {len(leaked_experiments_correct)}\")\n",
+ "print(\"\\n✅ Each experiment's complete kinetic profile stays together!\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 8. Key Takeaways\n",
+ "\n",
+ "### 🔑 **Critical Insights:**\n",
+ "\n",
+ "1. **Data Leakage in Timeseries**: Without proper handling, cross-validation splits time points from the same experiment between train and test sets. The model learns to interpolate between neighboring time points rather than truly predicting new experiments.\n",
+ "\n",
+ "2. **Overly Optimistic Metrics**: The test R² without timeseries handling is artificially high because the model has seen other time points from the same experiments during training.\n",
+ "\n",
+ "3. **Proper Validation**: Using the `is_timeseries` flag ensures that complete kinetic profiles stay together, providing realistic performance estimates.\n",
+ "\n",
+ "### 📋 **Best Practices for Kinetic/Timeseries Data:**\n",
+ "\n",
+ "- Always mark your time feature with `is_timeseries=True`\n",
+ "- Include a `_trajectory_id` column to identify which measurements belong to the same experiment\n",
+ "- Use GroupKFold (default) or GroupShuffleSplit for cross-validation\n",
+ "- Be skeptical of suspiciously high test metrics - they might indicate data leakage!\n",
+ "\n",
+ "### 🎯 **When to Use Timeseries Features:**\n",
+ "\n",
+ "- Kinetic measurements (reaction progress over time)\n",
+ "- Process monitoring (temperature, pressure profiles)\n",
+ "- Batch processes (fermentation, crystallization)\n",
+ "- Any sequential measurements where order and grouping matter"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 9. Bonus: Using GroupShuffleSplit for Flexible Test Size\n",
+ "\n",
+ "Sometimes you might want more control over your test set size. Here's how to use GroupShuffleSplit:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Using GroupShuffleSplit for flexible test set size...\n",
+ "\n",
+ "GroupShuffleSplit Results (5 random 80/20 splits):\n",
+ "Yield Test R²: 0.8629\n",
+ "Yield Test RMSE: 12.7704\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Cross-validation with GroupShuffleSplit\n",
+ "print(\"Using GroupShuffleSplit for flexible test set size...\\n\")\n",
+ "\n",
+ "cv_train_shuffle, cv_test_shuffle, _ = model_with_ts.cross_validate(\n",
+ " experiments=kinetic_data,\n",
+ " folds=5, # Number of random splits\n",
+ " use_shuffle_split=True, # Use GroupShuffleSplit instead of GroupKFold\n",
+ " random_state=42,\n",
+ ")\n",
+ "\n",
+ "print(\"GroupShuffleSplit Results (5 random 80/20 splits):\")\n",
+ "print(\n",
+ " f\"Yield Test R²: {float(cv_test_shuffle.get_metric(RegressionMetricsEnum.R2).iloc[0]):.4f}\"\n",
+ ")\n",
+ "print(\n",
+ " f\"Yield Test RMSE: {np.sqrt(float(cv_test_shuffle.get_metric(RegressionMetricsEnum.MSD).iloc[0])):.4f}\"\n",
+ ")"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.12.8"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}