DateTime.Now.ToUniversalTime()
уже перенастраивает UTC, вам не нужно снова преобразовывать этот в UTC.
Подсказка: используйте DateTime.UtcNow
, если вам действительно нужен UTC, тогда вам вообще не нужно заботиться о часовых поясах и о том, каким может быть ваш местный часовой пояс.
Обновление: О, и «GMT стандартное время» не означает «среднее время по Гринвичу».
Деревья решений, реализованные в sklearn, строятся только на основе критериев расщепления, учитывающих коэффициент Джини, энтропию или выигрыш в информации. Пользовательские функции потери невозможны.
Однако, Gradient Boosted Trees, такие как XGboost, LightGBM и CatBoost, позволяют указывать ваши собственные функции потерь. Учебное пособие можно найти здесь: https://towardsdatascience.com/custom-loss-functions-for-gradient-boosting-f79c1b40466d
Затем вы должны включить штрафной термин за нарушение вашего ограничение в функцию потерь.