Передо мной стоит задача классификации с тремя классами и чрезвычайно дисбалансным датасетом.
Распределения в тестовом и тренировочном сетах такие:
Тестовый набор данных полностью отражает реальное распределение данных из жизни, поэтому он ценен для
честной оценки модели. В нем лежат :
113 тыс. выборок класса 2,
900 выборок класса 1
240 выборок класса 0.
Тренировочный набор данных содержит:
1 миллион выборок класса 2,
262 тыс. выборок класса 1
102 тыс. выборок класса 0.
Веса классов из тестового сета который имеет распределение из реальной задачи из реальной жизни, равны:
{2: 0.33674243092169065, 1: 41.56039173014146, 0: 158.4813278008299}
Я знаю обо всех известных техниках и методиках, и перепробовал очень многое:
- оверсемплил SMOTE'ом и обучал на распределении 1 к 1 с миллионом сэмплов для каждого класса
- использовал обучение с весами из тренировочного класса
- даунсемплил самый большой класс 2
- пробовал разные модели, вроде Random Forest, XGBoost, AdaBoost, Decision Tree и другие.
И попробовав и перепробовав все, я получил максимум такие результаты:
Они меня не устраивают. Как эту задачу решить?