Форум врачей-аспирантов

Здравствуйте, гость ( Вход | Регистрация )

> Как грамотно поделить выборку на несколько сегментов перед предсказанием?, Деление выборки по неизвестным критериям
smeilz
сообщение 7.07.2020 - 16:18
Сообщение #1





Группа: Пользователи
Сообщений: 7
Регистрация: 2.07.2020
Пользователь №: 39533



Добрый день.
Есть очень большая выборка для бинарной классификации. Нужно предсказать 2 класса(0/1)
Есть огромная куча предикторов(независимых переменных), все они категориальные, и известно, что выборка содержит в себе несколько сегментов, в которых поведение предсказываемых классов будет существенно отличаться. Количество сегментов неизвестно.
Как грамотно найти эти сегменты и поделить выборку для дальнейшего предсказания?

Сообщение отредактировал smeilz - 7.07.2020 - 16:19
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
 
Открыть тему
Ответов
passant
сообщение 8.07.2020 - 11:30
Сообщение #2





Группа: Пользователи
Сообщений: 231
Регистрация: 27.04.2016
Пользователь №: 28223



Уважаемый smeilz.

Что-то вы начинаете "путаться в показаниях". На другом форуме вы пишете:
Есть датасет с одним бинарным признаком(зависимой переменной) 0 или 1. Распределение 57/43
На этом:
Есть очень большая выборка для бинарной классификации. Нужно предсказать 2 класса(0/1)
Это как бы две совершенно разные задачи. В одном случае - обучение с учителем (т.е. датасет с признаком) , в другом - обучение без учителя (признака изначально нет).

Кроме того, вы так и не пояснили, что означает
поведение предсказываемых классов будет существенно отличаться.
как вы себе представляете "поведение класса"? В чем оно у час выражается?
Что такое "сегмент" и чем он в вашем представлении отличается от "класса". Подчеркну - "предсказываемых классов" ??

Что означает
Как грамотно найти эти сегменты и поделить выборку для дальнейшего предсказания?
Если вы разбиваете выборку на то-ли сегменты, то-ли классы, то что вы собираетесь предсказывать дальше?

Про кластеризацию, и ее возможное использование как предварительный этап классификации вам сказали что тут, что там. Но ясности как не было, так и нет.
И я еще раз повторю:
Поставьте четко задачу, а то создается все более уверенное впечатление, что вы вообще не очень понимаете, а что в итоге вам надо?

Сообщение отредактировал passant - 8.07.2020 - 11:32
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
smeilz
сообщение 10.07.2020 - 15:09
Сообщение #3





Группа: Пользователи
Сообщений: 7
Регистрация: 2.07.2020
Пользователь №: 39533



Цитата(passant @ 8.07.2020 - 11:30) *
Уважаемый 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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
ogurtsov
сообщение 10.07.2020 - 18:23
Сообщение #4





Группа: Пользователи
Сообщений: 127
Регистрация: 15.12.2015
Пользователь №: 27760



Цитата(smeilz @ 10.07.2020 - 15:09) *
Спасибо за вопросы и ответы.
Хорошо.
Есть датасет.
В нем примерно 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


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 

Сообщений в этой теме
- smeilz   Как грамотно поделить выборку на несколько сегментов перед предсказанием?   7.07.2020 - 16:18
- - ogurtsov   Кластеризацию нужно сделать, а уж какую - тут мног...   7.07.2020 - 20:07
- - passant   Уважаемый smeilz. Что-то вы начинаете "путат...   8.07.2020 - 11:30
|- - 100$   ЦитатаКроме того, вы так и не пояснили, что означа...   8.07.2020 - 19:41
|- - smeilz   Цитата(passant @ 8.07.2020 - 11:30) ...   10.07.2020 - 15:09
|- - ogurtsov   Цитата(smeilz @ 10.07.2020 - 15:09) ...   10.07.2020 - 18:23
|- - smeilz   Цитата(ogurtsov @ 10.07.2020 - 18:23...   10.07.2020 - 22:23
- - 100$   А мне очень интересно, как скоро в этой теме появ...   8.07.2020 - 18:42
|- - ogurtsov   Цитата(100$ @ 8.07.2020 - 18:42...   8.07.2020 - 19:05
- - passant   Нет, коллеги. В данном случае - вы ошибаетесь. Это...   8.07.2020 - 21:31
|- - 100$   passant, поскольку Андрей (Огурцов) ничего ошибо...   9.07.2020 - 00:17
- - passant   Цитата(100$ @ 9.07.2020 - 00:17...   9.07.2020 - 10:55
- - nokh   Цитата(smeilz @ 7.07.2020 - 18:18) Д...   9.07.2020 - 21:11
|- - 100$   Цитата(nokh @ 9.07.2020 - 21:11) Бол...   9.07.2020 - 21:50
||- - nokh   Цитата(100$ @ 9.07.2020 - 23:50...   10.07.2020 - 08:10
||- - 100$   Цитата(nokh @ 10.07.2020 - 08:10) Да...   10.07.2020 - 10:48
|- - smeilz   Цитата(nokh @ 9.07.2020 - 21:11) Ваш...   10.07.2020 - 15:13
- - comisora   Всем добрый день. Самая первая/последняя книга по...   10.07.2020 - 15:28
- - 100$   Ну вот, господа кластеризаторы и примкнувшие к ним...   10.07.2020 - 18:32
|- - ogurtsov   Цитата(100$ @ 10.07.2020 - 18:3...   10.07.2020 - 19:14
||- - 100$   Цитата(ogurtsov @ 10.07.2020 - 19:14...   10.07.2020 - 20:30
||- - smeilz   Цитата(ogurtsov @ 10.07.2020 - 19:14...   10.07.2020 - 21:57
|- - smeilz   Цитата(100$ @ 10.07.2020 - 18:3...   10.07.2020 - 21:53
||- - 100$   Цитата(smeilz @ 10.07.2020 - 21:53) ...   10.07.2020 - 22:56
|- - smeilz   Цитата(100$ @ 10.07.2020 - 18:3...   10.07.2020 - 22:42
- - passant   Цитата(smeilz @ 10.07.2020 - 22:42) ...   10.07.2020 - 23:18


Добавить ответ в эту темуОткрыть тему