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






Содержимое файла 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")