![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#1
|
|
Группа: Пользователи Сообщений: 7 Регистрация: 2.07.2020 Пользователь №: 39533 ![]() |
Добрый день.
Есть очень большая выборка для бинарной классификации. Нужно предсказать 2 класса(0/1) Есть огромная куча предикторов(независимых переменных), все они категориальные, и известно, что выборка содержит в себе несколько сегментов, в которых поведение предсказываемых классов будет существенно отличаться. Количество сегментов неизвестно. Как грамотно найти эти сегменты и поделить выборку для дальнейшего предсказания? Сообщение отредактировал smeilz - 7.07.2020 - 16:19 |
|
![]() |
![]() |
![]() |
![]()
Сообщение
#2
|
|
Группа: Пользователи Сообщений: 231 Регистрация: 27.04.2016 Пользователь №: 28223 ![]() |
Уважаемый smeilz.
Что-то вы начинаете "путаться в показаниях". На другом форуме вы пишете: Есть датасет с одним бинарным признаком(зависимой переменной) 0 или 1. Распределение 57/43 На этом: Есть очень большая выборка для бинарной классификации. Нужно предсказать 2 класса(0/1) Это как бы две совершенно разные задачи. В одном случае - обучение с учителем (т.е. датасет с признаком) , в другом - обучение без учителя (признака изначально нет). Кроме того, вы так и не пояснили, что означает поведение предсказываемых классов будет существенно отличаться. как вы себе представляете "поведение класса"? В чем оно у час выражается? Что такое "сегмент" и чем он в вашем представлении отличается от "класса". Подчеркну - "предсказываемых классов" ?? Что означает Как грамотно найти эти сегменты и поделить выборку для дальнейшего предсказания? Если вы разбиваете выборку на то-ли сегменты, то-ли классы, то что вы собираетесь предсказывать дальше? Про кластеризацию, и ее возможное использование как предварительный этап классификации вам сказали что тут, что там. Но ясности как не было, так и нет. И я еще раз повторю: Поставьте четко задачу, а то создается все более уверенное впечатление, что вы вообще не очень понимаете, а что в итоге вам надо? Сообщение отредактировал passant - 8.07.2020 - 11:32 |
|
![]() |
![]() |
![]()
Сообщение
#3
|
|
Группа: Пользователи Сообщений: 7 Регистрация: 2.07.2020 Пользователь №: 39533 ![]() |
Уважаемый smeilz. Что-то вы начинаете "путаться в показаниях". На другом форуме вы пишете: Есть датасет с одним бинарным признаком(зависимой переменной) 0 или 1. Распределение 57/43 На этом: Есть очень большая выборка для бинарной классификации. Нужно предсказать 2 класса(0/1) Это как бы две совершенно разные задачи. В одном случае - обучение с учителем (т.е. датасет с признаком) , в другом - обучение без учителя (признака изначально нет). Кроме того, вы так и не пояснили, что означает поведение предсказываемых классов будет существенно отличаться. как вы себе представляете "поведение класса"? В чем оно у час выражается? Что такое "сегмент" и чем он в вашем представлении отличается от "класса". Подчеркну - "предсказываемых классов" ?? Что означает Как грамотно найти эти сегменты и поделить выборку для дальнейшего предсказания? Если вы разбиваете выборку на то-ли сегменты, то-ли классы, то что вы собираетесь предсказывать дальше? Про кластеризацию, и ее возможное использование как предварительный этап классификации вам сказали что тут, что там. Но ясности как не было, так и нет. И я еще раз повторю: Поставьте четко задачу, а то создается все более уверенное впечатление, что вы вообще не очень понимаете, а что в итоге вам надо? Спасибо за вопросы и ответы. Хорошо. Есть датасет. В нем примерно 70-80 категориальных признаков(независимых переменных или предикторов) и 1 категориальная(зависимая), которую я и буду предсказывать. Распределение этой переменной 43%/57%. Вот 2 класса, которые уже присутствуют, соответственно я их и предсказываю. Получается у нас датасет с признаком и обучение с учителем. Про поведение я пожалуй не совсем корректно выразился. Я имел ввиду, что по каким-то кускам нашей выборки прогноз будет не очень точным. Например 55% вероятность, что это класс 1 и 45% вероятность, что класс 0, их большинство. Такие прогнозы мне не очень нужны, так как я буду часто ошибаться. Моя задача предполагает возможность отбросить куски данных и не давать по ним прогноза, если он не очень точный. А есть куски, где прогнозы будут 65/35 или даже 70/30, они более точные, и я бы хотел брать те сегменты, где вероятность принадлежности к классу1 или классу0 больше определенного порога. Соответственно у меня уже есть 3 сегмента. 1) Там, где прогноз класса0>65% 2) Там, где прогноз класса1> 65% 3) Остальные Корректно ли так делать? Если нет, то как грамотно? В данный момент, я сделал так. 1) Взял пакет Catboost на python 2) Исключил оттуда признак, который мы предсказываем 3) Получил модель accuracy=63.5% 4) Провел на валидационной выборке, получил accuracy=62.5% 5) По тому, что качество модели упало незначительно, исключил Overfitting 6) Опытным путем нашел ту границу выбора класса0 и класса1, при которой процент ошибочных прогнозов не более 65% (там можно автоматически задавать процент ошибки FPR и FNR, то я предпочел разобраться вручную) В итоге что я хочу: 1)Более осознанно подходить к выбору признаков, например изучить их визуально при помощи визуализации на R. Возможно они дадут дополнительную информацию и буду точно понимать с каким признаками я имею дело. Меня ранее учили, что нельзя выбрасывать данные, даже если на первый взгляд кажется, что их влияние на целевую переменную очень маленькое, и даже если признаки скоррелированы. 2)Работать с данными не по принципу чёрного ящика, а лучше понимать, что я делаю, так как задача для меня интересная и хотелось бы повысить свой уровень понимания процесса 3)Понять какие ошибки я допустил в процессе и узнать, нужно ли балансировать данные, чтобы предсказываемые классы были в соотношении 50 на 50. Сообщение отредактировал smeilz - 10.07.2020 - 15:20 |
|
![]() |
![]() |
![]()
Сообщение
#4
|
|
Группа: Пользователи Сообщений: 127 Регистрация: 15.12.2015 Пользователь №: 27760 ![]() |
Спасибо за вопросы и ответы. Хорошо. Есть датасет. В нем примерно 70-80 категориальных признаков(независимых переменных или предикторов) и 1 категориальная(зависимая), которую я и буду предсказывать. Распределение этой переменной 43%/57%. Вот 2 класса, которые уже присутствуют, соответственно я их и предсказываю. Получается у нас датасет с признаком и обучение с учителем. Про поведение я пожалуй не совсем корректно выразился. Я имел ввиду, что по каким-то кускам нашей выборки прогноз будет не очень точным. Например 55% вероятность, что это класс 1 и 45% вероятность, что класс 0, их большинство. Такие прогнозы мне не очень нужны, так как я буду часто ошибаться. Моя задача предполагает возможность отбросить куски данных и не давать по ним прогноза, если он не очень точный. А есть куски, где прогнозы будут 65/35 или даже 70/30, они более точные, и я бы хотел брать те сегменты, где вероятность принадлежности к классу1 или классу0 больше определенного порога. Соответственно у меня уже есть 3 сегмента. 1) Там, где прогноз класса0>65% 2) Там, где прогноз класса1> 65% 3) Остальные Корректно ли так делать? Если нет, то как грамотно? В данный момент, я сделал так. 1) Взял пакет Catboost на python 2) Исключил оттуда признак, который мы предсказываем 3) Получил модель accuracy=63.5% 4) Провел на валидационной выборке, получил accuracy=62.5% 5) По тому, что качество модели упало незначительно, исключил Overfitting 6) Опытным путем нашел ту границу выбора класса0 и класса1, при которой процент ошибочных прогнозов не более 65% (там можно автоматически задавать процент ошибки FPR и FNR, то я предпочел разобраться вручную) В итоге что я хочу: 1)Более осознанно подходить к выбору признаков, например изучить их визуально при помощи визуализации на R. Возможно они дадут дополнительную информацию и буду точно понимать с каким признаками я имею дело. Меня ранее учили, что нельзя выбрасывать данные, даже если на первый взгляд кажется, что их влияние на целевую переменную очень маленькое, и даже если признаки скоррелированы. 2)Работать с данными не по принципу чёрного ящика, а лучше понимать, что я делаю, так как задача для меня интересная и хотелось бы повысить свой уровень понимания процесса 3)Понять какие ошибки я допустил в процессе и узнать, нужно ли балансировать данные, чтобы предсказываемые классы были в соотношении 50 на 50. Вроде прояснилось. Все деления по точности предиктов на трейне или даже на валидации бесполезны: для новых наблюдений все равно неизвестно, ошибается ли модель. Вам нужна калибровка вероятности, которую дает классификатор - см., например, https://dyakonov.org/2020/03/27/%d0%bf%d1%8...81%d1%82%d0%b8/ Суть в том, что даже если классификатор выдает число в диапазоне от 0 до 1 (как логрег или более сложная нейросетка с сигмоидой на выходе), то это число лишь похоже на вероятность принадлежности к классу, но на самом деле вероятностью не является. При помощи калибровки можно приблизить выхлоп модели к истинной оценке уверенности в предсказании, т.е. после калибровки в среднем из 100 предиктов со значением 0.6 в 60% случаев будет верно предсказан целевой класс. Если копнуть еще глубже, то можно заняться интерпретацией модели с целью понять, почему она дает тот или иной ответ. Подходов много, но для выявления "проблемных" наблюдений можно прикрутить что-то типа https://pbiecek.github.io/ema/localDiagnostics.html Сообщение отредактировал ogurtsov - 10.07.2020 - 18:26 ![]() |
|
![]() |
![]() |
![]() ![]() |