Creatio development guide
PDF
Это документация Creatio версии 7.12.0. Мы рекомендуем использовать новую версию документации.

Как реализовать пользовательскую предиктивную модель

Glossary Item Box

Общие сведения

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

Подробно эта функциональность описана в статье "Сервис машинного обучения".

Описание кейса

Реализовать автоматическое прогнозирование колонки [Категория] ([AccountCategory]) по значениям полей [Страна] ([Country]), [Количество сотрудников] ([EmployeesNumber]), [Отрасль] ([Industry]) во время сохранения записи контрагента. При этом должны выполняться следующие условия:

  • Обучение модели необходимо формировать на основании записей о контрагентах за последние 90 дней.
  • Переобучение производить каждые 30 дней.
  • Допустимое значение точности прогнозирования для модели в целом — 0.6.

ВАЖНО

Для выполнения этого кейса необходимо удостовериться, что установлено корректное значение для системной настройки [API ключ облачных сервисов bpm'online] ([Bpmonline cloud services API key], код CloudServicesAPIKey) и установлен адрес предиктивного сервиса в поле [Url сервиса] ([Service endpoint Url]) записи справочника [Задачи машинного обучения] ([ML problem types]).

Алгоритм выполнения кейса

1. Обучение модели

Для обучения модели необходимо:

1. Добавить запись в справочник [Модели машинного обучения] (MLModel). Значения полей записи приведены в таблице 1.

Табл. 1. — Значения полей записи справочника MLModel

Поле Значение
Название Прогнозирование категории контрагента
Задача машинного обучения Прогнозирование справочного поля
Идентификатор корневого объекта Контрагент
Нижний порог допустимого качества 0.6
Частота переобучения 30
Метаданные выборки для обучения
{
    "inputs": [
        {
            "name": "CountryId",
            "type": "Lookup",
            "isRequired": true
        },
        {
            "name": "EmployeesNumberId",
            "type": "Lookup",
            "isRequired": true
        },
        {
            "name": "IndustryId",
            "type": "Lookup",
            "isRequired": true
        }
    ],
    "output": {
        "name": "AccountCategoryId",
        "type": "Lookup",
        "displayName": "AccountCategory"
    }
}
Выражение для выборки данных обучения
new Select(userConnection)
    .Column("a", "Id").As("Id")
    .Column("a", "CountryId")
    .Column("a", "EmployeesNumberId")
    .Column("a", "IndustryId")
    .Column("a", "AccountCategoryId")
    .Column("c", "Name").As("AccountCategory")
.From("Account").As("a")
.InnerJoin("AccountCategory").As("c").On("c", "Id").IsEqual("a", "AccountCategoryId")
.Where("a", "CreatedOn").IsGreater(Column.Parameter(DateTime.Now.AddDays(-90)))

Примеры составления запросов можно посмотреть в статье "Составление запросов на выборку данных для модели машинного обучения".

Флаг, включающий прогнозирование по модели Отметить

2. Выполнить действие [Запланировать задание обучения моделей] на странице справочника [Модели машинного обучения] (MLModel).

Далее необходимо подождать пока поле [Статус обработки моделей] пройдет цепочку значений DataTransfer, QueuedToTrain, Training, Done. Процесс ожидания может занять несколько часов (зависит от объема передаваемых данных и общей нагрузки на сервис предиктивных моделей).

2. Выполнение прогнозов

Для выполнения прогнозов необходимо:

1. В пользовательском пакете создать бизнес-процесс, для которого стартовым сигналом будет событие сохранения объекта [Контакт]. При этом нужно проверить заполненность значениями необходимых полей (рис. 1).

Рис. 1. — Свойства стартового сигнала

2. В бизнес-процесс добавить параметр-справочник MLModelId, ссылающийся на сущность [Модель машинного обучения]. В качестве значения нужно выбрать запись с созданной моделью [Прогнозирование категории Контрагента].

3. В бизнес-процесс добавить параметр-справочник RecordId, ссылающийся на сущность [Контрагент]. В качестве значения нужно выбрать ссылку на параметр RecordId элемента [Сигнал].

4. На диаграмму бизнес-процесса добавить элемент [Задание-сценарий] и добавить в него следующий исходный код:

var userConnection = Get<UserConnection>("UserConnection"); 
// Получение Id записи контрагента
Guid entityId = Get<Guid>("RecordId"); 
// Получение id модели.
var modelId = Get<Guid>("MLModelId");
var connectionArg = new ConstructorArgument("userConnection", userConnection);
// Объект для вызова прогнозирования
var predictor = ClassFactory.Get<LookupMLPredictor>(connectionArg);
// Загрузка модели.
if (predictor.TryLoadModelDataForPrediction(modelId)) {
    // Имя схемы прогнозируемой сущности.
    var schemaName = "Account";
    // Сопоставление полей сущности полям модели.
    var inputColumnPathMap = new Dictionary<string, string> {
        { "Country", "CountryId" },
        { "Industry", "IndustryId" },
        { "EmployeesCount.ZZZ.ZZZ", "EmployeesCountId" }
    };
    // Вызов сервиса прогнозирования. Данные сохраняются в MLPrediction и в случае высокой вероятности прогноза в нужное поле контрагента.
    predictor.PredictAndSaveResults(schemaName, entityId, inputColumnPathMap, "AccountCategory"); 
}
return true;

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

ВАЖНО

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

© Terrasoft 2002-2019.

Был ли данный материал полезен?

Как можно улучшить эту статью?