@Kind_Man

Как повысить точность модели машинного обучения?

Мне нужно решить очень важную задачу в ML с использованием алгоритма Random Forest. Я новичок в ML, и задача, которую мне предстоит решить, не из самых простых, но другого способа, кроме как решить ее, нет.

У меня есть безликий набор данных с примерно 500 записями внутри и примерно 30 features в каждой записи. 300 из всех записей имеют статус 1, остальные 0. Мне нужно построить модель, которая будет предсказывать будущий статус.

Итак, даже будучи новичком в ML, я думаю, что попытался сделать все необходимое, чтобы решить эту проблему:

1) Features, предоставленные мне для этой задачи, как я уже написал, обезличенные, поэтому они все нужные. Перед этим они были проверены/верифицированы.
2) Тем не менее для построения качественной модели я провел их отбор, используя RFE.
3) Далее, найдя самые важные features, я приступил к тюнингу модели, используя GridSearch / Bayesian / Random Search (каждую отдельно, но все они привели к почти одинаковым результатам).

В итоге они все дали мне результаты с точностью 0,6-0,65 (а f1, precision recall находятся в том же диапазоне), которые не ужасны, но и не великолепны. Задача состоит в том, чтобы достичь как минимум более 75% точности, здорово, если она будет больше. Более того, до тюна обычно модель давала даже больше результатов точности.

Поэтому, пожалуйста, не могли бы вы дать мне советы, что делать дальше? Что изменить, что почитать, как сделать? И если вы суперпрофессионал или супер добрый человек, может быть, даже вы сможете попытаться чего-то добиться с моим набором данных и повышением точности алгоритма?
  • Вопрос задан
  • 412 просмотров
Пригласить эксперта
Ответы на вопрос 1
Maksim_64
@Maksim_64
Data Analyst
Features, предоставленные мне для этой задачи, как я уже написал, обезличенные, поэтому они все нужные

Данные могут быть числовые или категориальные. В свою очередь категориальные делятся на nominal и ordinal из чего следует что во первых если они присутствуют их надо закодировать и второе закодировать правильно, в sklearn есть OrdinalEncoder и OneHotEncoder. О том сделали ли вы это (и правильно ли сделали) вы нам конечно же не сообщаете, это действие относится к этапу Preprocessing data, там же Standard Scaler и другие возможно очень полезные трансформаторы вплоть до создания своего кастомного трансформатора.
Просто данные не в один алгоритм не запихивают. Их приводят к такому виду (трансформируют) на которых алгоритм хорошо работает, а потом уже имеет смысл тюнить. Вам нужен результат. пожалуйста https://scikit-learn.org/stable/data_transforms.html . Вот это та глава в документации (а документация у sklearn как учебник) которая поправит дело. Результат достигается посредством трансформаций данных и в этой области лежит решение. Глава 6 что я вам скинул большая и за несколько часов или даже дней ее не осилить (если конечно же учится а не кусочки кода запускать). Начните с того что бы научится пользоваться объектом Pipeline (он не так прост как кажется) И с применением хотя бы простого трансформера StandardScaler и что бы без ошибок. Чтобы метод fit_transform вызывался на тренировочном сете а на тестовом только transform и т.д. или с правильным использованием Pipeline он это сам сделает. И приходите с кодом где вы перед тренировкой трансформируете данные.

На данный момент у вас нет ничего 0.6 - 0.65 точность, у вас 300 / 500 = 0.6 то есть абсолютно случайно без какого либо обучения в среднем на длинной дистанции в 60% случаях можно угадывать статус 1.

Мне нужно построить модель, которая будет предсказывать будущий статус.
Что значит будущий речь идет о временной последовательности, а не о классической классификации?. Тогда препроцессинг должен быть сделан совершенно другой начиная от сплитов и т.д. В таком случае все данные нужно агрегировать разными функциями в пределах окна и на них учить, обязательно это проясните.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы