For multiple competitions we have had fields to go along with the features and targets, such as metadata, pseudolabels etc. Sometimes datasets from other sources as well. If instead of numpy arrays or tuples, an object is used to pass along the data, it is much easier to pass around multiple data sources as fields of that object at the same time, implement getter functions, and prevent having to update type hints in many places when the data source changes.