XGBoost, features_names mismatch

08.04.2021

При использовании моеделей XGBoost может появляться ошибка вида:

ValueError: feature_names mismatch: [массив с названиями столбцов данных модели] [столбцы вида 'f0', 'f1', 'f2' и так далее]
expected [перечисление признаков модели] in input data
training data did not have the following fields: f61, f16, f5, [и так далее]

Причин ее появления может быть несколько. В моем случае эта ошибка возникла из-за того, что данные при фиттинге модели использовались в виде датафрейма Pandas, а при предикции в виде массива Numpy.

Для исправления ситуации необходимо передавать данные на этапах обучения и использования модели с унифицированным типом, например как массивы Numpy. Чтобы получить представление датафрейма Pandas в виде массива Numpy можно воспользоваться методом to_numpy().

Отдельно стоит отметить, что реализации алгоритмов на базе деревьев решений в Scikit-learn, такие как GradientBoostingClassifier, RandomForestClassifier или ExtraTreesClassifier подобной "проблемой" не страдают и корректно работают вне зависимости от типа данных на этапах обучения и использования модели.