Для импорта сторонней модели/версии модели необходимо:

  • В разделе «Репозиторий» выбрать кнопку «Импортировать» в верхней части таблицы.


Импорт модели


  • В открывшемся окне «Импорт» задать:
    • Параметры импорта:
      • Тип импорта — Модель или Версия модели.
      • Проект — указать проект из списка созданных.
      • Имя модели.
      • Имя версии.
      • Описание (необязательно).
      • Проект (только для типа импорта Модель).
      • Ссылка на проект MD (только для типа импорта версия модели).
      • Алгоритм — указать алгоритм, который лежит в основе Модели или версии Модели (необязательно).
      • Библиотека, используемая при обучении модели.
    • Входные переменные. Важно, чтобы порядок переменных при импорте соответствовал входным параметрам в модели (или энкодере если используется).
    • Выходные переменные.
    • Характеристики модели (значение метрик качества на конкретном наборе данных).


Импорт модели. Параметр


  • После ввода параметров необходимо их подтвердить, нажатием кнопки «Завершить» или отменить действие, нажатием кнопки «Отменить».
  • Выбрать в компоненте «Репозиторий» во вкладке «Репозиторий» наименование версии модели и во вкладке «Скоринговый код» загрузить архив с локального устройства.
  • Архив с моделью содержит в себе 4 и более файлов:
    • Файлы. pkl с моделью и предобученными этапами обработки данных (например Стандартизация), pkl-файл формируется в IDE при помощи команды pickle.dump из библиотеки pickle.

      Важно!

      Все этапы предобработки, которые подразумевают проведение обучения и трансформации, а именно методы fit и transform должны быть сохранены в pkl.

    • init.py – необходим для запуска модели, не содержит в себе переменных.
    • eval.py – файл, содержащий метрики для анализа результатов, а также параметры оценки качества модели.
    • score.py – файл содержит данные о файлах модели, он содержит в себе список всех обученных преобразований и моделей в pkl-файлах в поле pkls.
    • При обучении модели локально, необходимо загружать каждый этап преобразования с сохранением состояния, отдельным pkl-файлом. При скачивании версии в архиве в файле score.py будут содержаться все этапы, влияющие на инференс модели в том порядке, в котором она обучалась на стенде (в случае обучения новой версии модели вне системы)


Содержимое файла init.py

from .score import on_init, pre_score, score, post_score, finalize
__all__ = ["score", "on_init", "pre_score", "post_score", "finalize"]


Для того, чтобы загрузить новую версию модели необходимо заменить в архиве файлы с моделями, которые были изменены, например этапы предобработки с новыми параметрами, а также в файле score.py заменить название файлов модели в строках "pkls" и "__models" для каждого узла (этапа обработки данных) на необходимый файл с версией. Важно, чтобы при обучении внешней версии модели использовались те же названия переменных в датасете, что и в пайплайне Model Designer. Это касается в том числе промежуточных этапов, в которых вы можете изменять названия столбцов в датасете. Количество этапов и узлов также должно совпадать. 

Для импорта новой модели можно использовать следующий шаблон кода в score.py:

import os
from typing import Dict, Any
import joblib
import numpy as np
import pandas as pd

"""
- Все объекты, участвующие в пайплайне (модель, препроцессоры и т. п.), должны быть сериализованы и сохранены в .pkl-файл.
- Эти объекты должны реализовывать методы .transform() (а при обучении — и .fit()), и применяться строго в том же порядке, в котором они были обучены.

⚠️ Важно:
- Пользователь обязан сохранить все этапы препроцессинга (например: scaler, dummizer, imputer и т.д.) в итоговый словарь перед сериализацией.

- Во время исполнения score(...) все препроцессоры должны вызываться в правильной последовательности:
    1. imputing
    2. scaling
    3. encoding
    4. и только потом — модель

- Поддерживаются разные типы моделей:
    - Если у модели есть метод predict_proba, возвращаются вероятности и классификация по порогу.
    - Иначе используется метод predict (например, для регрессии).

- Пример кода вызова:
    X = model["imputer"].transform(df)
    X = model["scaler"].transform(X)
    X_cat = model["dummizer"].transform(df[cat_features])
    X_full = np.concatenate([X, X_cat], axis=1)
    y_pred = model["model"].predict_proba(X_full) или predict(X_full)
"""

# Инициализация модели

def on_init() -> Dict[Any, Any]:
    script_dir = os.path.dirname(file)
    models = {}

    #  Укажите список ID моделей (файлы .pkl)
    pkls = ['<MODEL_ID>']

    for pkl in pkls:
        models[pkl] = joblib.load(os.path.join(script_dir, f'{pkl}.pkl'))

    return models

# Предобработка входных данных (опционально)
def pre_score(df: pd.DataFrame) -> None:
    pass

# Основная логика scoring-а
def score(df, models):
	df=df.copy()
    model = models['<MODEL_ID>']

    # Предсказание вероятностей
    proba = model.predict_proba(df)

    # Создание DataFrame с результатами
    output = pd.DataFrame(
        proba,
        columns=[f'P_target_{cls:.2f}' for cls in model.classes_],
        index=df.index
    )

    # Классификация по порогу 0.5
    output['C_target0'] = (output['P_target_1.00'] >= 0.5).astype(float)

    # Объединение с исходными данными (если требуется)
    df_out = df.copy()
    df_out = pd.concat([df_out, output], axis=1)

    return df_out

# Постобработка результата (опционально)
def post_score(df: pd.DataFrame, res: Any) -> None:
    pass

# Завершение пайплайна
def finalize() -> None:
    print("finalize stage")


  • Нет меток