Проблема заключается в том, что, несмотря на крайний дисбаланс классов в вашем наборе данных, вы все еще используете пороговое значение «по умолчанию», равное 0,5, при принятии окончательной жесткой классификации в
preds = [1 if x >= 0.5 else 0 for x in preds]
Здесь не .
Это довольно большая тема, и я настоятельно рекомендую вам провести собственное исследование (попробуйте поискать в поисках порог или , чтобы исключить несбалансированность данных ), но вот несколько указателей на Начало работы ...
Из соответствующего ответа на Перекрестная проверка (выделение добавлено):
Не забывайте, что вы должны разумно устанавливать пороги , чтобы делать предсказания. Не всегда лучше прогнозировать 1, когда вероятность модели больше 0,5. Другой порог может быть лучше. Для этого вам следует изучить кривые эксплуатационных характеристик приемника (ROC) вашего классификатора, а не только прогнозирующий успех с порогом вероятности по умолчанию.
Из соответствующей академической статьи Нахождение лучшего порога классификации в несбалансированной классификации :
2,2. Как установить порог классификации для набора тестирования
Прогноз
Результаты
являются
в конечном счете
определенный
согласно
в
прогнозирование
вероятности.
порог
является
типично
задавать
в
0,5.
Если
прогнозирование
вероятность
превышает
0,5,
образец
является
предсказанный
в
быть
положительны;
иначе,
отрицательный.
Тем не мение,
0,5
является
не
идеальный
за
немного
случаи,
в частности
за
несбалансированный
наборы данных.
Пост Оптимизация вероятностных порогов для дисбалансов классов из (настоятельно рекомендуется) блога «Прикладное прогнозирующее моделирование» также имеет значение.
Возьмите домашний урок из всего вышесказанного: AUC достаточно редко, но сама ROC кривой часто является вашим лучшим другом ...
На более общем уровне относительно роли самого порога в процессе классификации (который, по крайней мере, по моему опыту, многие практики ошибаются), проверьте также Порог вероятности классификации нить (и предоставленные ссылки) на Cross Validated; ключевой момент:
статистический компонент вашего упражнения заканчивается, когда вы выводите вероятность для каждого класса новой выборки. Выбор порога, по которому вы классифицируете новое наблюдение как 1 против 0, больше не является частью статистики . Он является частью компонента решения .