Альтернативой вашей проблеме может быть создание всей вашей проблемы как классификационной.
То есть вы преобразуете свой набор данных из регрессионного в классификационный. Более формальным принципом использования является группирование. Таким образом, если значение падает между 15,0 и 30,0, тогда вы назначаете категорию X каждому из точек данных, которые принадлежат этому интервалу.
Прогнозируемое положительное целое число будет, конечно, category_id.
Затем, в зависимости от количества точек данных, вы можете увеличить / уменьшить количество интервалов. Вы также избавляетесь от любой проблемы, связанной с попыткой реализации пользовательской функции потерь.
Если это не совсем тот случай, который возникает в вашей задаче, то округление конечного результата без «вмешательства» в функцию потерь является хорошим подходом, как вы предложили в определении вашей проблемы.