Использование PMML в Loginom

3 февраля 2025
0 комментариев

PMML может быть эффективно использован для интеграции с low-code платформой Loginom, позволяя применять, читать и трансформировать модели. Рассмотрим процесс подготовки системы и установки всех необходимых зависимостей для работы с этим форматом.

PMML (Predictive Model Markup Language) — это стандартный формат, разработанный для обмена и хранения предсказательных моделей, созданных с помощью различных методов машинного обучения и статистики. Он позволяет разработчикам и аналитикам легко обмениваться моделями между различными системами и инструментами, поддерживающими PMML.

Основные характеристики PMML:

  • XML-формат: PMML представляет собой XML-документ, что делает его читаемым и удобным для обработки с помощью различных программных инструментов и языков программирования.
  • Широкий спектр моделей: формат поддерживает множество типов моделей, включая линейную регрессию, деревья решений, нейронные сети, кластеризацию, ассоциативные правила и другие алгоритмы машинного обучения.
  • Независимость от платформы: модели в формате PMML могут быть использованы в различных системах и средах, независимо от того, где и каким образом они были созданы.
  • Легкость интеграции: PMML упрощает интеграцию предсказательных моделей в приложения и сервисы, позволяя использовать модели без необходимости повторного их обучения или переписывания кода.

Популярность PMML

Формат PMML существует с 1997 года и был разработан независимым консорциумом Data Mining Group (DMG), который занимается созданием стандартов для интеллектуальной обработки данных.

Сегодня формат PMML поддерживается более чем 30 крупными поставщиками аналитических систем, включая: IBM SPSS Modeler, SAP Predictive Analytics, SAS Enterprise Miner, Microsoft Azure Machine Learning, Microsoft SQL Server 2008 Analysis Services, Oracle Data Mining, Google Cloud AutoML, Amazon SageMaker, RapidMiner, Knime, Statistica, Apache Spark.

Во многих языках программирования также имеются библиотеки для работы с PMML. В частности:

  • Python (pypmml, sklearn2pmml);
  • R (пакеты pmml, pmml2, и ;rpart позволяют экспортировать модели, созданные в R, в PMML);
  • Java (JPMML и JPMML-Evaluator);
  • C/C++ (cPMML).

Поддержка PMML популярными языками программирования позволяет экспортировать модель, например, реализованную на Python для программы на C++ или Java.

Доступные модели и преобразования

PMML формат поддерживает следующие ML-модели:

PMML формат поддерживает следующие преобразования:

  • Нормализация.
  • Дискретизация.
  • Картографирование значений.
  • Индексация текста.
  • Функции.

Встраивание PMML формата в Loginom

Для чего это нужно

Если уже есть какая-то обученная модель, то ее можно перенести и использовать в Loginom, экспортировав в формат PMML (при условии, что она поддерживается, о чем можно узнать в спецификации). Использование PMML исключает обучения модели заново, что серьезно экономит ресурсы компании.

Кроме того, PMML является общепринятым форматом, что, с одной стороны, добавляет строгость и требовательность к оформлению описаний, а с другой — дает гарантии корректности их интерпретации.

Модели в формате PMML легко встраиваются в сценарии обработки данных на Loginom и могут вызываться как обычные узлы. Можно с минимальными сложностями создать универсальный Производный компонент.

Реализация

Для работы с PMML-форматом в Loginom потребуется использовать компонент Python, позволяющий задействовать дополнительные библиотеки, в том числе и для работы с PMML.

Далее будет рассмотрена реализация двух узлов:

Ограничения и допущения

Тестирование данного функционала производилось на Loginom версии 6.5.5 и выше. На более ранних версиях использование возможно, но из-за отсутствия опции запуска интерпретатора в отдельном процессе могут возникнуть проблемы с выгрузкой библиотек при завершении обработки. Для обхода этого ограничения можно задействовать subprocess в Python, вынеся все взаимодействие с PMML-форматом в отдельный подпроцесс.

Используется операционная система Windows. С работой на Linux-подобных системах не должна возникнуть проблем, но процессы подготовки системы и установки зависимостей будут иметь отличия.

ML-модели, созданные на основе Data Mining компонентов Loginom, на текущий момент не поддерживают возможность выгрузки в формат PMML. Здесь и далее рассматривается только чтение и применение моделей, созданных в других системах.

Программный код имеет демонстрационный характер. Для использования на продуктовой среде желательно добавить функционал обработки ошибок, предварительной подготовке и валидации входных данных.

Подготовка системы и установка зависимостей

Для корректной работы необходимо соблюдение условий:

  • версия Python 3.5 или выше;
  • java версии 8 или выше, но ниже 16.

Для запуска не нужен пакет разработки Java (JDK), достаточно виртуальной машины Java (JRE). Необязательно использовать официальный пакет от Oracle. Можно использовать форки и альтернативные сборки, соответствующие указанным версиям.

Важно, чтобы на операционной системе были правильно настроены пути к Python и Java. Обычно эти пути настраиваются автоматически во время установки программного обеспечения, однако могут возникать исключения.

Чтобы убедиться в корректности настройки путей и соответствию требованиям, достаточно ввести в терминале командной строки следующие строки:

python --version
java --version

Если python и java установлены и пути корректно настроены, то будет выведена информация о текущих версиях. В обратном случае будет получено сообщение с ошибкой.

Необходимо также для python установить библиотеку pypmml.

Если система имеет доступ к интернету, то можно воспользоваться командой в терминале командной строки:

pip install pypmml

В случае отсутствия выхода в интернет потребуется произвести установку указанной библиотеки вручную, скачав на другой машине пакет с репозитория PyPI.

Также потребуется установить пакет Py4J, обеспечивающий API между python и java. Команда в терминале:

pip install py4j

Если нет выгруженной PMML-модели, то для тестирования можно взять пример с официального репозитория Datasets for PMML Sample Files. На этом ресурсе можно найти готовые наборы данных для большинства моделей, представленных в формате PMML, которые идеально подходят для тестирования.

Применение модели в PMML-формате в Loginom

Чтобы использовать модель достаточно подать данные, к которым нужно ее применить, на вход компонента Python (Predicted_model).

Сценарий для работы с PMML в Loginom

Сценарий для работы с PMML в Loginom

Как правило, входные данные — это таблица с параметрами, по которым необходимо произвести предсказание.

Марафон Loginom - На высоту enterprise-аналитики

Марафон Loginom - На высоту enterprise-аналитики

На входной порт переменных model_path узла Predicted_model необходимо подать абсолютный путь до репозитория, в котором располагается PMML-файл.

Настройка пути до PMML модели

Настройка пути до PMML модели

Внутри узла Python должны быть выставлены следующие настройки: разрешение на формирование выходных столбцов из кода и запуск в отдельном процессе.

Установка разрешений

Установка разрешений

Установка разрешений

Установка разрешений

В поле ввода кода необходимо добавить следующие строки:

Код для применения PMML модели

Код для применения PMML модели

Код, приведенный на изображении:

# Подключение основных библиотек
import builtin_data, os
from builtin_data import InputTable, InputTables, InputVariables, OutputTable, DataType, DataKind, UsageType
from builtin_pandas_utils import to_data_frame, prepare_compatible_table, fill_table
import numpy as np, pandas as pd
from pypmml import Model

# Получаем путь из порта переменных
link = InputVariables.Items['model_path'].Value

# Проверка корректности пути
if not os.path.exists(link):
    raise FileNotFoundError(f"PMML file not found at {link}")

# Загрузка PMML-модели
model = Model.load(link)

# Чтение входных данных для модели PMML
input_frame = to_data_frame(InputTable)

# Применение модели в PMML-формате к входному набору данных
y = model.predict(input_frame)

# Добавляем предсказанные значения к входному набору данных и формирование выходной таблицы
output_frame = pd.concat([input_frame, y], axis=1)
if isinstance(OutputTable, builtin_data.ConfigurableOutputTableClass):
    prepare_compatible_table(OutputTable, output_frame, with_index=False)
fill_table(OutputTable, output_frame, with_index=False)

В результате запуска узлов мы получим выходную таблицу с результатами применения модели.

Чтение параметров полей в формате PMML в Loginom

Часто возникает необходимость в предварительной подготовке данных и приведении данных к требуемому формату. Для этого можно реализовать еще один узел в Loginom, назначение которого в чтении мета-данных модели.

Сценарий Loginom для чтения полей PMML модели

Сценарий Loginom для чтения полей PMML модели

Для реализации функционала достаточно только настроить порт входных переменных и подать абсолютный путь до файла.

Строки кода будут незначительно отличаться от предыдущего варианта.

Код python для чтения полей PMML модел

Код python для чтения полей PMML модел

Код, приведенный на изображении:

# Подключение основных библиотек
import builtin_data, os
from builtin_data import InputTable, InputTables, InputVariables, OutputTable, DataType, DataKind, UsageType
from builtin_pandas_utils import to_data_frame, prepare_compatible_table, fill_table
import numpy as np, pandas as pd
from pypmml import Model

# Получаем путь из порта переменных
link = InputVariables.Items['model_path'].Value

# Проверка корректности пути
if not os.path.exists(link):
    raise FileNotFoundError(f"PMML file not found at {link}")

# Инициализация PMML-модели
model = Model.load(link) 

# Добавляем предсказанные значения к входному набору данных и формирование выходной таблицы
output_frame = pd.DataFrame({'input_fields': str(model.inputNames), 'output_fields': str(model.outputNames)}, index=[0])
# Если включена опция "Разрешить формировать выходные столбцы из кода", структуру выходного набора можно подготовить по pd.DataFrame
if isinstance(OutputTable, builtin_data.ConfigurableOutputTableClass):
    prepare_compatible_table(OutputTable, output_frame, with_index=False)
fill_table(OutputTable, output_frame, with_index=False)

В результате запуска узлов мы получим выходную таблицу с результатами применения модели.

Код python для чтения полей PMML модели

Код python для чтения полей PMML модели

В данном случае реализован вывод входных (input_fields) и выходных (output_fields) полей в виде массивов значений. При необходимости это можно изменить в зависимости от того, что требуется получить от приведенной вспомогательной операции.

Теперь, зная, какие параметры ожидает модель в формате PMML, можно сосредоточить усилия на подготовке данных с помощью различных компонентов Loginom.

Другие материалы по теме:

Планировщик задач в Loginom

Как избежать проклятий: правильная организация сценариев в Loginom

#машинное обучение#loginom

Смотрите также

Подписывайтесь на телеграмм-канал Loginom
Новости, материалы по аналитике, кейсы применения, активное сообщество
Подписаться