We performed both single and multi-task modeling with regression gradient boosting models constructed using pyboost, using the mean squared error (MSE) as the loss function. For multi-task modeling, where the output often consisted of a sparce matrix, missing values were masked. During cross validation, we applied early stopping based on (masked) R-squared (R 2 ) values on a holdout set.