Спецификация экстремальных значений/значений по умолчанию в Scikit-Learn и PMML с использованием ContinuousDomain

Часто разработчик модели хочет ограничить диапазон значений, которыми может быть предиктор. Например, многие переменные реальной жизни, такие как доход или время до завершения, обычно имеют логарифмически нормальное распределение. Разработчик модели может не захотеть, чтобы сверхвысокое значение некоторых переменных подавляло другие переменные в модели для прогнозов. Точно так же многие разработчики моделей не хотят, чтобы диапазон значений их предикторов выходил за пределы диапазона значений, используемых во время обучения модели.

Scikit-Learn не предоставляет никаких функций для явного ограничения экстремальных значений, и вы всегда можете написать свои собственные функции с помощью FunctionTransformer. Однако пользовательские функции не поддерживаются, если нужно перенести модель в файл PMML.

Пакет sklearn2pmml поддерживает функцию ContinuousDomain(), которая позволит пользователю указать минимальное, максимальное значение и значение по умолчанию для одной или нескольких переменных.

В приведенном ниже примере шаг конвейера ContinuousDomain установит все значения меньше 300 и 1500 в эти значения соответственно. Он также установит указанные отсутствующие значения (np.nan и -1) равными 350. Я включил пару последующих шагов конвейера в качестве примера того, как ContinuousDomain можно включить в общий, более крупный конвейер.

Иногда вы захотите закодировать переменную как двоичную, независимо от того, являются ли значения нулевыми. В обычном Sklearn/Python вы можете использовать pd.isnull вместе с `FunctionTransformer` для создания столбца. Для sklearn2pmml ExpressionTransformer может использовать функцию pandas isnull. См. суть ниже для шага по созданию двоичного столбца в столбце с нулевыми значениями.