Есть ли уверенность в классификации у дерева
Что проверяют
Знаете ли вы, откуда у дерева берётся вероятность и почему ей не всегда можно верить. Вопрос из блока coding, поэтому ждут и API: как получить её в scikit-learn. Следом обычно спрашивают про калибровку или про то, как уверенность считает случайный лес.
Как отвечать
Да, уверенность есть, и считается она просто. Объект спускается по дереву до листа, а вероятность класса равна доле обучающих объектов этого класса в листе, с учётом весов, если они заданы. В scikit-learn это DecisionTreeClassifier.predict_proba, а predict возвращает класс с наибольшей долей. Номер листа для объекта даёт метод apply.
Дальше главное, ради чего вопрос задают:
- переобученное дерево уверено всегда: по умолчанию
max_depth=Noneиmin_samples_leaf=1, дерево растёт до чистых листьев, иpredict_probaвыдаёт почти одни 0 и 1. Это не уверенность, а переобучение; - маленький лист ненадёжен: доля 1.0 из двух объектов и из двух тысяч выглядит одинаково. Помогают
min_samples_leaf,max_depthи обрезка поccp_alpha; - калибровка: проверяется кривой надёжности (
CalibrationDisplay), метриками Brier score и log loss. Исправляется черезCalibratedClassifierCVс методомsigmoidилиisotonicна данных, которых модель не видела; - ансамбли: случайный лес в scikit-learn усредняет вероятности деревьев, и оценка получается гораздо глаже. Разброс ответов отдельных деревьев годится как мера неопределённости. В градиентном бустинге вероятность получается из суммы значений листьев через сигмоиду или softmax.
Где спотыкаются
Отвечают метриками: accuracy, precision, F1. Это качество модели на выборке, а вопрос про уверенность в конкретном предсказании.
Трактуют 0.8 как «модель права в 80% случаев». На самом деле это доля класса в листе, и с реальной частотой она совпадает только у откалиброванной модели.
Калибруют на той же выборке, на которой учили дерево. Листья на обучающих данных чистые, калибратор решит, что всё идеально, и ничего не исправит.