Значительно отличающаяся импотенция признаков между очень одними и теми же данными и очень похожей моделью для catboost - PullRequest
0 голосов
/ 30 августа 2018

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

У меня три комплекта.

  1. поезд с формой (1277, 927), цель присутствует около 12% времени
  2. Eval установлен с формой (174, 927), цель присутствует около 11,5% времени
  3. Выдержать сет с формой (414, 927), цель присутствует около 10% времени

Этот набор также строится с использованием временных интервалов. Набор поездов - самые старые данные. Продлите набор новейших данных. и набор Eval находится в среднем наборе.

Сейчас я строю две модели.

Model1:

# Initialize CatBoostClassifier
model = CatBoostClassifier(
    # custom_loss=['Accuracy'],
    depth=9,
    random_seed=42,
    l2_leaf_reg=1,
    # has_time= True,
    iterations=300,
    learning_rate=0.05,
    loss_function='Logloss',
    logging_level='Verbose',
)

## Fitting catboost model
model.fit(
    train_set.values, Y_train.values,
    cat_features=categorical_features_indices,
    eval_set=(test_set.values, Y_test)
    # logging_level='Verbose'  # you can uncomment this for text output
)

прогнозирование в режиме ожидания.

Model2:

model = CatBoostClassifier(
    # custom_loss=['Accuracy'],
    depth=9,
    random_seed=42,
    l2_leaf_reg=1,
    # has_time= True,
    iterations= 'bestIteration from model1',
    learning_rate=0.05,
    loss_function='Logloss',
    logging_level='Verbose',

)

## Fitting catboost model
model.fit(
    train.values, Y.values,
    cat_features=categorical_features_indices,
    # logging_level='Verbose'  # you can uncomment this for text output
)

Обе модели идентичны, кроме итераций. Первая модель имеет исправление 300 раундов, но она будет сокращать модель до лучших изменений. Где вторая модель использует это лучшее изменение от model1.

Однако, когда я сравниваю важность функции. Это выглядит радикально разница.

  Feature  Score_m1  Score_m2     delta
0      x0  3.612309  2.013193 -1.399116
1      x1  3.390630  3.121273 -0.269357
2      x2  2.762750  1.822564 -0.940186
3      x3  2.553052       NaN       NaN
4      x4  2.400786  0.329625 -2.071161

Как вы можете видеть, одна из функций х3, которая была на вершине 3 в первой модели, выпала во второй модели. Мало того, но есть большой сдвиг в весах между моделями для данной функции. Существует около 60 функций, которые присутствуют в модели1, но не представлены в модели2. И там около 60 функций, которые присутствуют в модели2, нет в модели1. дельта - это разница между Score_m1 и Score_m2. Я видел, где смена модели немного не такая радикальная. AUC и LogLoss не сильно меняются, когда я использую модель1 или модель2.

Теперь у меня есть следующие вопросы относительно этой ситуации.

  1. Являются ли эти модели нестабильными из-за малого количества образцов и большого количества функций. Если это так, как это проверить?

  2. Есть ли в этой модели особенность, которая просто не дает столько информации относительно результата модели, и есть случайное изменение, которое создает разделение. Если этот случай, как проверить эту ситуацию?

  3. Этот catboost является подходящей моделью для этой ситуации?

Любая помощь по этому вопросу будет оценена

...