Метрики для eval_set в CatBoost

есть 2 сета:
S: https://yadi.sk/d/SwrEb2n4C-_H0A
D: https://yadi.sk/d/-YqN7qXgeK1EAQ
Задача мультиклассификации (несколько классов в таргете), таргет не сбалансирован (есть 1 основной класс и далее несколько менее крупных классов), обучаю на CatBoost GPU

Проблема - перебирая различные метрики ['MultiClass', 'TotalF1', 'MCC', 'Accuracy', 'HingeLoss','HammingLoss', 'ZeroOneLoss', 'Kappa', 'WKappa'] для остановки на eval_set, на сете S всё работает нормально: метрики считаются корректно, можно посмотреть значения и график ошибки на сете для остановки cb_model.evals_result_ и cb_model.fit(train, eval_set=test, verbose_eval=0, plot=True)

Однако на сете D, ничего кроме ['MultiClass', 'HingeLoss'] не показывает результатов, ошибка равна 0 с самого старта.

Прикладываю код

import pandas as pd
import numpy as np
from catboost import CatBoostRegressor, CatBoostClassifier, Pool

X_1 = pd.read_csv('../X_S')
x_train, x_test, y_train, y_test = train_test_split(X_1.loc[:, X_1.columns.drop('target')],
                                                    X_1.loc[:, 'target'],
                                                    test_size=0.1)
train = Pool(x_train, y_train)
test = Pool(x_test, y_test)

metrics = ['MultiClass', 'TotalF1', 'MCC', 'Accuracy', 'HingeLoss',
           'HammingLoss', 'ZeroOneLoss', 'Kappa', 'WKappa']

for metric in metrics:

    model_params = {
        'depth': 7,
        'learning_rate': 0.03,
        'l2_leaf_reg': 3,
        'min_data_in_leaf': 50,
        'od_wait': 500,
        'random_strength': 1,
        'iterations': 1000,
        'task_type': 'GPU',
        'devices': '0:1',
        'od_type': 'Iter',
        'loss_function': 'MultiClass',
        'eval_metric': metric,
        'has_time': False,
    }

    cb_model = CatBoostClassifier(**model_params)
    cb_model.fit(train, eval_set=test, verbose_eval=0, plot=True)

Почему другие метрики не работают?
Пробовал разные разбиения на train_test_split, менять параметры модели. Думал, может сама специфика расчёта метрики влияет: на данных метриках мы смотрим на TP, FP, etc и проводим разлинчые математические операции с ними: суммируем, находим разность, отношение и т.д. и получается, что если мы немного улучшили предсказание вероятности класса ('MultiClass'), но сам класс так и остался в TP, FP, etc, то и метрика на остановке меняться не будет. Тогда всё равно не ясно, почему в первом случае все работает или это такая специфика остальных датасетов?

Идея в том, что у меня несколько таргетов {S, D, M, N..}, вот на одном S - всё работает, а других, которых еще 5 штук, аналогичная ситуация как и на D


Ответы (0 шт):