Для импорта сторонней модели/версии модели необходимо:
- В разделе «Репозиторий» выбрать кнопку «Импортировать» в верхней части таблицы.
- В открывшемся окне «Импорт» задать:
- Параметры импорта:
- Тип импорта — Модель или Версия модели.
- Проект — указать проект из списка созданных.
- Имя модели.
- Имя версии.
- Описание (необязательно).
- Проект (только для типа импорта Модель).
- Ссылка на проект MD (только для типа импорта версия модели).
- Алгоритм — указать алгоритм, который лежит в основе Модели или версии Модели (необязательно).
- Библиотека, используемая при обучении модели.
- Входные переменные. Важно, чтобы порядок переменных при импорте соответствовал входным параметрам в модели (или энкодере если используется).
- Выходные переменные.
- Характеристики модели (значение метрик качества на конкретном наборе данных).
- Параметры импорта:
- После ввода параметров необходимо их подтвердить, нажатием кнопки «Завершить» или отменить действие, нажатием кнопки «Отменить».
- Выбрать в компоненте «Репозиторий» во вкладке «Репозиторий» наименование версии модели и во вкладке «Скоринговый код» загрузить архив с локального устройства.
- Архив с моделью содержит в себе 4 и более файлов:
- Файлы. pkl с моделью и предобученными этапами обработки данных (например Стандартизация), pkl-файл формируется в IDE при помощи команды pickle.dump из библиотеки pickle.
Важно!
Все этапы предобработки, которые подразумевают проведение обучения и трансформации, а именно методы fit и transform должны быть сохранены в pkl.
- init.py – необходим для запуска модели, не содержит в себе переменных.
- eval.py – файл, содержащий метрики для анализа результатов, а также параметры оценки качества модели.
- score.py – файл содержит данные о файлах модели, он содержит в себе список всех обученных преобразований и моделей в pkl-файлах в поле pkls.
- При обучении модели локально, необходимо загружать каждый этап преобразования с сохранением состояния, отдельным pkl-файлом. При скачивании версии в архиве в файле score.py будут содержаться все этапы, влияющие на инференс модели в том порядке, в котором она обучалась на стенде (в случае обучения новой версии модели вне системы)
- Файлы. pkl с моделью и предобученными этапами обработки данных (например Стандартизация), pkl-файл формируется в IDE при помощи команды pickle.dump из библиотеки pickle.
Содержимое файла 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")

