Firstly, SklearnRandomSplit which wraps scikit-learn's (Stratified)ShuffleSplit method. Three splits (RandomSplit, ClusterSplit, ScaffoldSplit) are included that utilize the BalanceSplit package to create well-balanced data splits for (sparse) datasets without data leakage between different tasks. The ManualSplit can be used to apply a predefined split. The TemporalSplit is used to make time seriesbased test or cross-validation splits. QSPRpred also has a BootstrapSplit class that can wrap any split and use it for repeated sampling of the dataset applying the specified split in replicates. Furthermore, any of the above-mentioned splitters can be applied to PCM modelling with the help of the PCMSplit class, which will ensure the splits are balanced with respect to the protein targets. Two other PCM-specific splitters are also available LeaveTargetOut and TemporalPerTarget. LeaveTargetOut will remove all the data points for a certain target, to evaluate how well the PCM model extends to new targets. The TemporalPerTarget split applies a temporal split that avoids data leakage with multiple tests for compounds for different targets over time, by using the first occurrence of the molecule in the dataset for all proteins as timepoint. wrapper for all scikit-learn estimators . The DNNModel is a PyTorch implementation of a fully-connected neural network. PyBoost is a wrapper around the Py-Boost package, a Gradient Boosted Decision Tree toolkit. The ChempropModel wraps the basic Chemprop message passing neural network, although it does not support all functionality that Chemprop provides. Moreover, any new type of model can be simply implemented by creating a subclass of the abstract base class QSPRModel, requiring the user to just implement methods for fitting, predicting and serialization of the model. There is also a dedicated tutorial to implementing new models (see section 2.5) to help QSPR practitioners with integration of novel methods.