Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум врачей-аспирантов _ Медицинская статистика _ Как грамотно поделить выборку на несколько сегментов перед предсказанием?

Автор: smeilz 7.07.2020 - 16:18

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

Автор: ogurtsov 7.07.2020 - 20:07

Кластеризацию нужно сделать, а уж какую - тут много вариантов.
Метки кластеров затем использовать как фичу.

Автор: passant 8.07.2020 - 11:30

Уважаемый smeilz.

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

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

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

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

Автор: 100$ 8.07.2020 - 18:42

А мне очень интересно, как скоро в этой теме появится один из бесчисленных клонов лёвы_биостата и пробухтит нам чё-нить ужасно познавательное по поводу логистической регрессии и "многомерных методов продуктивного анализа"?

Автор: ogurtsov 8.07.2020 - 19:05

Цитата(100$ @ 8.07.2020 - 18:42) *
А мне очень интересно, как скоро в этой теме появится один из бесчисленных клонов лёвы_биостата и пробухтит нам чё-нить ужасно познавательное по поводу логистической регрессии и "многомерных методов продуктивного анализа"?

hi.gif Не буди лихо (с) hi.gif

Автор: 100$ 8.07.2020 - 19:41



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


Вестимо, обострение классовой борьбы...

Автор: passant 8.07.2020 - 21:31

Нет, коллеги. В данном случае - вы ошибаетесь. Это действительно вопрос, который сначала фигурировал на другом форуме и судя до форме его представления и ответах на вопросы -ТС действительно интересуется вопросом, просто еще не столь глубоко в теме, что-бы его корректно задать (ну что поделать, результаты активного маркетинга различных ускоренных курсов и прочего "с нуля до профи за 7 дней"). Но на мой взгляд помочь ТС, дать ему различные вИдения, в конце концов "наставить его на путь истинный" области МL - я считаю, это где-то наш долг. Поэтому и отвечаю по четвертому кругу. Я свое мнение ему уже высказал. Если будет ваша добрая воля и желание ТС - будет даже интересно узнать и ваше мнение на предмет.
А вот что-до " как скоро в этой теме появится один из бесчисленных клонов.... " я ожидал этого "явления" в соседней теме про анализ СOVID-19. Но, видать спугнули :-)

Автор: 100$ 9.07.2020 - 00:17

passant,

поскольку Андрей (Огурцов) ничего ошибочного, вроде бы, не сказал, фразу

Цитата
В данном случае - вы ошибаетесь


принимаю исключительно на свой счет и настоящим сообщаю, что я рад буду ошибиться.

А словоблудливую ботяру из предыдущей ветки
Цитата
А вот что-до " как скоро в этой теме появится один из бесчисленных клонов.... " я ожидал этого "явления" в соседней теме про анализ СOVID-19. Но, видать спугнули :-)


я же и спугнул. Жаль модераторы потерли... Такой коммент был...

А вот по поводу ваших несбывшихся ожиданий имею-таки сказать следующее: в соседней теме про СOVID-19 - там, похоже, вся тема создана таким "явлением".

А вы, ребята, судя по всему, тест Тьюринга не проходите: не можете отличить имитацию от нормального "белкового" юзера. И ваша профессиональная разговорчивость взяла-таки верх: начали вежливо да тактично лекцыи читать этому клону.

А надо бы по принципу "Еще я всякую х...ню на Вы не называл"(с). Не подумайте, что сквернословлю. Из анекдота, знаете ли, слова выкинуть еще труднее, чем из песни.

В этой связи у меня вопрос: форум - фсё?

Как скоро эти интернет-боты загадят весь форум до антисанитарного состояния и при единодушном одобрямсе тутошних модеров выживут отсюда своей назойливой рекламой "коллектива, возглавляемого сами-знаете-кем" (где собраны кудесники "многомерных методов получения продуктивных результатов", тех немногих старожилов, которые еще как-то пытаются гальванизировать этого покой... (дальше неразборчиво)?

Автор: passant 9.07.2020 - 10:55

Цитата(100$ @ 9.07.2020 - 00:17) *
я же и спугнул. Жаль модераторы потерли...

Жаль, пропустил.

Цитата(100$ @ 9.07.2020 - 00:17) *
А вот по поводу ваших несбывшихся ожиданий имею-таки сказать следующее: в соседней теме про СOVID-19 - там, похоже, вся тема создана таким "явлением".

У меня тоже сложилось такое же впечатление. Но
Цитата(100$ @ 9.07.2020 - 00:17) *
начали вежливо да тактично лекцыи читать этому клону.

в надежде на "а вдруг все таки нет". Ошибся, признаю.


Цитата(100$ @ 9.07.2020 - 00:17) *
В этой связи у меня вопрос: форум - фсё?

Очень надеюсь, что нет. В "той" теме искренне описал свое отношение к этому форуму. И будет очень-очень жаль, если "фсё".

Кстати, с появлением короновируса на других форумах, особенно английских, наблюдался взрывной интерес к статметодам обработки информации касаемой этой проблемы. Ожидал, что и тут появится что-то интересное. Но нет. Это что - показатель состояния современного состояния мед. статистики на постсоветском пространстве?


Автор: nokh 9.07.2020 - 21:11

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

Ваша задача из разряда таких, которые требуют творческого подхода, т.е. одной технологии нет. Я согласен с ogurtsov, что раз внутри выборки есть какие-то сегменты, то логично начать с их поиска, т.е. кластеризации. Поскольку на выделение кластеров влияет набор показателей, то лучше сначала сократить пространство переменных, предварительно исключив метку класса (0/1) и искать кластеры уже в нём. Для качественных признаков наиболее распространённый способ редукции данных с обобщением - анализ соответствий (Correspondence Analysis), хотя мне он не особо нравится: даёт для некоторых показателей и объектов сильные выбросы или типа того, когда на ординационной диаграмме пара-тройка показателей по краям, а все остальные кучей в центре; причём те, что по краям часто показатели с небольшой долей редких категорий. Больше нравятся результаты оптимального шкалирования - нелинейного анализа главных компонент, обрабатывающих одновременно количественные, порядковые и номинальные признаки. Результаты интерпретируются аналогично PCA; можно посмотреть что за компоненты выделяются, постараться интерпретировать их, а уже в пространстве этих компонент можно поискать кластеры. Нет никакой гарантии, что эти кластеры и обусловливают различный характер поведения главного признака, но это тем не менее будут некие естественные группировки, что уже хорошо: с них можно начать.
Далее нужно отмоделировать классы в каждом кластере. Раз предикторов много, то лучше использовать Случайный лес деревьев классификации (Random forest). Далее сопоставить оптимальные наборы предикторов в кластерах, возможно какие-то кластеры окажутся в этом отношении сходными - их объединять и осмысливать, опираясь на предыдущий этап.

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

Если задача заключается не в том, чтобы разобраться, а в том, чтобы просто точно предсказывать, то может лучше обучить этому нейронную сеть? С сегментами внутри выборки она справится сама. Поскольку я всё время разбираюсь, опыта построения и оптимизации таких сетей не имею.

Автор: 100$ 9.07.2020 - 21:50

Цитата(nokh @ 9.07.2020 - 21:11) *
Больше нравятся результаты оптимального шкалирования - нелинейного анализа главных компонент, обрабатывающих одновременно количественные, порядковые и номинальные признаки. Результаты интерпретируются аналогично PCA


Nokh, а это пакет {homals}, да? А то я уже что-то забывать стал...

Автор: nokh 10.07.2020 - 08:10

Цитата(100$ @ 9.07.2020 - 23:50) *
Nokh, а это пакет {homals}, да? А то я уже что-то забывать стал...

Да, это {homals} и пришедший ему на смену {Gifi}. Оба проигрывают по удобству гибких настроек методу CATPCA из пакета SPSS. Я уже забыл что у меня не срасталось в пакетах для R, но раздражение помню)) Меня метод в SPSS вообще отлично устраивает, но только пакет коммерческий.

Автор: 100$ 10.07.2020 - 10:48

Цитата(nokh @ 10.07.2020 - 08:10) *
Да, это {homals} и пришедший ему на смену {Gifi}. Оба проигрывают по удобству гибких настроек методу CATPCA из пакета SPSS. Я уже забыл что у меня не срасталось в пакетах для R, но раздражение помню)) Меня метод в SPSS вообще отлично устраивает, но только пакет коммерческий.


Мерси.
Досадно только, что я уже много лет никак не могу въехать в теорию этого Gifi-transformation, чтобы сделать его для себя самому...

Автор: smeilz 10.07.2020 - 15:09

Цитата(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:13

Цитата(nokh @ 9.07.2020 - 21:11) *
Ваша задача из разряда таких, которые требуют творческого подхода, т.е. одной технологии нет. Я согласен с ogurtsov, что раз внутри выборки есть какие-то сегменты, то логично начать с их поиска, т.е. кластеризации. Поскольку на выделение кластеров влияет набор показателей, то лучше сначала сократить пространство переменных, предварительно исключив метку класса (0/1) и искать кластеры уже в нём. Для качественных признаков наиболее распространённый способ редукции данных с обобщением - анализ соответствий (Correspondence Analysis), хотя мне он не особо нравится: даёт для некоторых показателей и объектов сильные выбросы или типа того, когда на ординационной диаграмме пара-тройка показателей по краям, а все остальные кучей в центре; причём те, что по краям часто показатели с небольшой долей редких категорий. Больше нравятся результаты оптимального шкалирования - нелинейного анализа главных компонент, обрабатывающих одновременно количественные, порядковые и номинальные признаки. Результаты интерпретируются аналогично PCA; можно посмотреть что за компоненты выделяются, постараться интерпретировать их, а уже в пространстве этих компонент можно поискать кластеры. Нет никакой гарантии, что эти кластеры и обусловливают различный характер поведения главного признака, но это тем не менее будут некие естественные группировки, что уже хорошо: с них можно начать.
Далее нужно отмоделировать классы в каждом кластере. Раз предикторов много, то лучше использовать Случайный лес деревьев классификации (Random forest). Далее сопоставить оптимальные наборы предикторов в кластерах, возможно какие-то кластеры окажутся в этом отношении сходными - их объединять и осмысливать, опираясь на предыдущий этап.

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

Если задача заключается не в том, чтобы разобраться, а в том, чтобы просто точно предсказывать, то может лучше обучить этому нейронную сеть? С сегментами внутри выборки она справится сама. Поскольку я всё время разбираюсь, опыта построения и оптимизации таких сетей не имею.

Благодарю за подробный ответ.
Для начала хочу уточнить, а есть ли анализ соответствий (Correspondence Analysis) в каком-нибудь пакете на R, пожалуй я с него бы и начал.
Опыта в построении нейронных сетей не имею, так что пока это отложу.
Скорее стоит задача при помощи интересной мне задачи, освоить универсальный подход к задачам машинного обучения.
Как я понял умение правильно смотреть данные тоже признак профессионала.
В предыдущем посте я описал своими словами то, что я сделал, так как я думаю, что код выкладывать тут пока не требуется.

Автор: comisora 10.07.2020 - 15:28

Всем добрый день.

Самая первая/последняя книга по данной тематике, которую читал - Mair P. Modern Psychometrics with R (Use R!). 2018, https://doi.org/10.1007/978-3-319-93177-7 . В книге есть картинка (в приложении), примеры получения результатов PCA при помощи Gifi на интервальных данных. Объяснение математики там коротенькое:

"First of all, Gifi models involve dimension reduction, just as principal component analysis (PCA) and correspondence analysis (CA). Let p be the number of dimensions which needs to be fixed a priori. Let H be an n × m data matrix. Correspondingly, hj represents the column vector for variable j with kj as the number of categories. For each variable we define an indicator matrix Gj of dimension n×kj, consisting of 0s and 1s in the case of categorical data. These indicator matrices can be then collected in an indicator supermatrix G = (G1| . . . |Gm). Each variable is associated with a matrix Yj of dimension kj × p containing the category quantifications. The final component we need is the matrix X. It contains the so-called object scores and is of dimension n × p. At the end of the day, each person gets a score in the p-dimensional space, and each category of variable j gets an optimally scaled category quantification in p dimensions. Since we scale both the objects and the variables, these methods are sometimes referred to as dual scaling methods. Putting all these ingredients together, Gifi establishes the following loss function:

σ(X, Y1, . . . , Ym) = m ЗНАК СУММЫ j=1 tr(X − Gj Yj )(X − Gj Yj )

The right-hand side of the equation represents a sum-of-squares (SS) expression that needs to be minimized. This can be achieved by an alternating least squares (ALS) algorithm. This loss formulation is very general, and, depending on the particular Gifi model we fit, it simplifies correspondingly, or, for some versions, it can even get more complicated (see De Leeuw and Mair, 2009a)."

По моему опыту использования движок в пакете Gifi делает оптимальное шкалирование лучше функции lineals пакета {aspect}. Настроек там много, лучший вариант трансформации приходится искать перебором. К сожалению в пакете нет отдельной возможности получить просто трансформацию данных без последующего выполнения PCA. В этой связи приходится трансформированные данные извлекать из большого контейнера с данными. Есть ещё пакеты {optiscale}, {bestNormalize} и {smacof}, которые могут быть полезны при решении вопроса трансформации данных.

Ссылки из книги:
De Leeuw, J. (1988). Multivariate analysis with linearizable regressions. Psychometrika, 53, 437?454.
De Leeuw, J., & Mair, P. (2009a). Gifi methods for optimal scaling in R: The package homals. Journal of Statistical Software, 31(1), 1?21. https://www.jstatsoft.org/index.php/jss/article/view/v031i04
De Leeuw, J., & Mair, P. (2009b). Simple and canonical correspondence analysis using the R package anacor. Journal of Statistical Software, 31(5), 1?18. http://www.jstatsoft.org/v31/i05/
De Leeuw, J., Mair, P., & Groenen, P. J. F. (2017). Multivariate analysis with optimal scaling. http://gifi.stat.ucla.edu/gifi/_book/
Gifi, A. (1990). Nonlinear multivariate analysis. Chichester: Wiley.
Haegeli, P., Gunn, M., & Haider, W. (2012). Identifying a high-risk cohort in a complex and dynamic risk environment: Out-of-bounds skiing?An example from avalanche safety. Prevention Science, 13, 562?573.
Hoyle, R. H., Stephenson, M. T., Palmgreen, P., Pugzles Lorch, E., & Donohew, R. L. (2002). Reliability and validity of a brief measure of sensation seeking. Personality and Individual Differences, 32, 401?414.
Jacoby, W. G. (1991). Data theory and dimensional analysis. Thousand Oaks: Sage.
Jacoby, W. G. (1999). Levels of measurement and political research: An optimistic view. American Journal of Political Science, 43, 271?301.
Koller, I., Levenson, M. R., & Glück, J. (2017). What do you think you are measuring? A mixedmethods procedure for assessing the content validity of test items and theory-based scaling. Frontiers in Psychology, 8(126), 1?20.
Linting, M., Meulman, J. J., Groenen, P. J. F., & van der Kooij, A. J. (2007). Nonlinear principal components analysis: Introduction and application. Psychological Methods, 12, 336?358.

Профили авторов пакета {Gifi} с их публикациями:
https://www.researchgate.net/profile/Jan_De_Leeuw
https://www.researchgate.net/profile/Patrick_Mair

Может кому-то пригодится.


 

Автор: ogurtsov 10.07.2020 - 18:23

Цитата(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%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%ba%d0%b0%d0%bb%d0%b8%d0%b1%d1%80%d0%be%d0%b2%d0%ba%d0%b8-%d1%83%d0%b2%d0%b5%d1%80%d0%b5%d0%bd%d0%bd%d0%be%d1%81%d1%82%d0%b8/ Суть в том, что даже если классификатор выдает число в диапазоне от 0 до 1 (как логрег или более сложная нейросетка с сигмоидой на выходе), то это число лишь похоже на вероятность принадлежности к классу, но на самом деле вероятностью не является.
При помощи калибровки можно приблизить выхлоп модели к истинной оценке уверенности в предсказании, т.е. после калибровки в среднем из 100 предиктов со значением 0.6 в 60% случаев будет верно предсказан целевой класс.

Если копнуть еще глубже, то можно заняться интерпретацией модели с целью понять, почему она дает тот или иной ответ. Подходов много, но для выявления "проблемных" наблюдений можно прикрутить что-то типа https://pbiecek.github.io/ema/localDiagnostics.html

Автор: 100$ 10.07.2020 - 18:32

Ну вот, господа кластеризаторы и примкнувшие к ним нейросетевики )

А ларчик-то просто открывался: исследователь понимает, что на некоторых тестовых выборках прогноз будет неудовлетворительным. Отсюда все разговоры про заранее неизвестное число кластеров-сегментов в выборке, на которых "поведение классов будет..."В общем, что-то будет. В этой связи он желает выбросить все те наблюдения, которые искажают его картину мира. Сместив тем самым выборку и осознанно повысив переобученность модели. При этом напрочь забымши о том, что кросс-валидация модели основана на повторных выборках (выборках с возвращением).

Действительно, а что еще делать, если ЭВМ показывает не то, что нужно?
Главное в этой истории - потом гордо написать в резюме "работаю и на Питоне и на R".

Smeilz, надеюсь вам понятно, что все, что вы делаете, - из серии "как не надо заниматься статистикой"?

Только, чур, без обид.

Автор: ogurtsov 10.07.2020 - 19:14

Цитата(100$ @ 10.07.2020 - 18:32) *
Ну вот, господа кластеризаторы и примкнувшие к ним нейросетевики )

А ларчик-то просто открывался: исследователь понимает, что на некоторых тестовых выборках прогноз будет неудовлетворительным. Отсюда все разговоры про заранее неизвестное число кластеров-сегментов в выборке, на которых "поведение классов будет..."В общем, что-то будет. В этой связи он желает выбросить все те наблюдения, которые искажают его картину мира. Сместив тем самым выборку и осознанно повысив переобученность модели. При этом напрочь забымши о том, что кросс-валидация модели основана на повторных выборках (выборках с возвращением).

Я все же надеюсь, что целью было понять границы применимости модели и просто не использовать ее "в проде" (в какой-то системе поддержки принятия решений?) там, где нормальное качество получить не получается.
Ну и accuracy 62% при том, что константное предсказание преобладающего класса дает 57% - это обычно очень плохо, в том числе с точки зрения калибровки и интерпретации предсказаний модели.

Автор: 100$ 10.07.2020 - 20:30

Цитата(ogurtsov @ 10.07.2020 - 19:14) *
Я все же надеюсь, что целью было понять границы применимости модели и просто не использовать ее "в проде" (в какой-то системе поддержки принятия решений?) там, где нормальное качество получить не получается.
Ну и accuracy 62% при том, что константное предсказание преобладающего класса дает 57% - это обычно очень плохо, в том числе с точки зрения калибровки и интерпретации предсказаний модели.


"Ах, обмануть меня не трудно -
Я сам обманываться рад" ©

Автор: smeilz 10.07.2020 - 21:53

Цитата(100$ @ 10.07.2020 - 18:32) *
Ну вот, господа кластеризаторы и примкнувшие к ним нейросетевики )

А ларчик-то просто открывался: исследователь понимает, что на некоторых тестовых выборках прогноз будет неудовлетворительным. Отсюда все разговоры про заранее неизвестное число кластеров-сегментов в выборке, на которых "поведение классов будет..."В общем, что-то будет. В этой связи он желает выбросить все те наблюдения, которые искажают его картину мира. Сместив тем самым выборку и осознанно повысив переобученность модели. При этом напрочь забымши о том, что кросс-валидация модели основана на повторных выборках (выборках с возвращением).

Действительно, а что еще делать, если ЭВМ показывает не то, что нужно?
Главное в этой истории - потом гордо написать в резюме "работаю и на Питоне и на R".

Smeilz, надеюсь вам понятно, что все, что вы делаете, - из серии "как не надо заниматься статистикой"?

Только, чур, без обид.


У меня нет резюме, и я занимаюсь этим для своего личного проекта.
Хорошо, я специально ради Вас разобью выборку на 2-3 логических сегмента(я немного представляю откуда данные и как их можно разбить без математики), и попробую обучить каждый по-отдельности и потом доложу о результатах, и они могут Вас расстроить. =)
Хотя возможно и расстроюсь я. =(
P.S. Если что я не обидчивый, просто мне интересно искать истину в экспериментах, ну и учиться на своих ошибках.
P.P.S У меня есть похожие данные из немного другой выборки, попробую посчитать точность прогноза на этих данных

Автор: smeilz 10.07.2020 - 21:57

Цитата(ogurtsov @ 10.07.2020 - 19:14) *
Я все же надеюсь, что целью было понять границы применимости модели и просто не использовать ее "в проде" (в какой-то системе поддержки принятия решений?) там, где нормальное качество получить не получается.
Ну и accuracy 62% при том, что константное предсказание преобладающего класса дает 57% - это обычно очень плохо, в том числе с точки зрения калибровки и интерпретации предсказаний модели.

То есть в целом по такой precision можно сказать, что модель плохая? (И в том после имел ввиду precision конечно)
И второй вывод, который я понял из Ваших слов: Если бы accuracy была 57% при дисбалансе предсказываемого класса 57/43, то мы получили бы абсолютный рандом?
Если для Вас это очевидно, то я узнал это в процессе беседы с Вами, и для меня это уже польза и продвижение.
Я просто медленно учусь, но упорно. =)

Автор: smeilz 10.07.2020 - 22:23

Цитата(ogurtsov @ 10.07.2020 - 18:23) *
Вроде прояснилось.
Все деления по точности предиктов на трейне или даже на валидации бесполезны: для новых наблюдений все равно неизвестно, ошибается ли модель.
Вам нужна калибровка вероятности, которую дает классификатор - см., например, https://dyakonov.org/2020/03/27/%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%ba%d0%b0%d0%bb%d0%b8%d0%b1%d1%80%d0%be%d0%b2%d0%ba%d0%b8-%d1%83%d0%b2%d0%b5%d1%80%d0%b5%d0%bd%d0%bd%d0%be%d1%81%d1%82%d0%b8/ Суть в том, что даже если классификатор выдает число в диапазоне от 0 до 1 (как логрег или более сложная нейросетка с сигмоидой на выходе), то это число лишь похоже на вероятность принадлежности к классу, но на самом деле вероятностью не является.
При помощи калибровки можно приблизить выхлоп модели к истинной оценке уверенности в предсказании, т.е. после калибровки в среднем из 100 предиктов со значением 0.6 в 60% случаев будет верно предсказан целевой класс.

Если копнуть еще глубже, то можно заняться интерпретацией модели с целью понять, почему она дает тот или иной ответ. Подходов много, но для выявления "проблемных" наблюдений можно прикрутить что-то типа https://pbiecek.github.io/ema/localDiagnostics.html


Благодарю. Прочитал статью, буду изучать.
Что я сделал?
Я взял 3 похожих датасета только даже большего размера.
1 была совсем похожа и 2 других несколько отличались.
Установил те же границы prob0 и prob1 выбора класса0 и класса1, при которой процент верных прогнозов для класса1 не менее 69% и для класса0 не менее 55%.
Иными словами я сделал то, за что меня осудил 100$ и вы сказали, что это вероятностью не является, но я пока не могу применить знания из статьи и просто провожу эксперименты.
То есть отсекал все прогнозы, если Prob0 < эмпирического x1, и Prob1 < x2
РЕзультаты:
Для первого датасета, который был очень похож
1 Похожий датасет Дал 68.5% класс1 и 55.5% класс0
2 Менее похожих датасета дали нам 68% и 70% для класса1 и 51% и 51% для класса0

То есть несмотря на то, что эта вероятность(prob0/prob1) ей по сути не является, мы все равно получили устойчивые соотношения вероятностей предсказания целевого класса.
Да, для класса0 эта вероятность упала, но скорее всего это связано с отличием структуры двух последних выборок, и если мы один раз выставим нужный порог, то он будет неизменным.

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

Автор: smeilz 10.07.2020 - 22:42

Цитата(100$ @ 10.07.2020 - 18:32) *
А ларчик-то просто открывался: исследователь понимает, что на некоторых тестовых выборках прогноз будет неудовлетворительным. Отсюда все разговоры про заранее неизвестное число кластеров-сегментов в выборке, на которых "поведение классов будет..."В общем, что-то будет. В этой связи он желает выбросить все те наблюдения, которые искажают его картину мира. Сместив тем самым выборку и осознанно повысив переобученность модели. При этом напрочь забымши о том, что кросс-валидация модели основана на повторных выборках (выборках с возвращением).


Я кстати не собирался Вам доказывать, что разбиение необходимо, мне просто было интересно рассуждать вслух. Сейчас я пришел к выводу, что данные разбивать бесмысленно, если не знаешь почему эти сегменты могут иметь различные закономерности. В моем случае есть один вариант разбиения на 2 сегмента, но он практически пока слишком сложный в реализации, и я его отложу, и возьму все данные целиком.
И кстати меня учили, что один из главных признаков переобученности модели - это, когда precision, logloss сильно прыгает как на train/test, так и на новых похожих данных.
Пока мои эксперименты такого не показали.

Автор: 100$ 10.07.2020 - 22:56

Цитата(smeilz @ 10.07.2020 - 21:53) *
Хорошо, я специально ради Вас разобью выборку на 2-3 логических сегмента(я немного представляю откуда данные и как их можно разбить без математики), и попробую обучить каждый по-отдельности и потом доложу о результатах, и они могут Вас расстроить. =)


А я в виде ответной любезности напоминаю, что когда вы получите на 2-3 стратах ансамбль классификаторов, прежде чем предъявлять его мне, не забудьте предварительно усредниться по ансамблю. Иначе я точно расстроюсь.

"Я ухожу - легка моя дорога;
Теперь пойду по новому пути.
Таких, как вы, себе найду я много,
Таких, как я, вам больше не найти"

Народная песня.

Автор: passant 10.07.2020 - 23:18

Цитата(smeilz @ 10.07.2020 - 22:42) *
Я кстати не собирался Вам доказывать, что разбиение необходимо, мне просто было интересно рассуждать вслух. Сейчас я пришел к выводу, что данные разбивать бесмысленно, если не знаешь почему эти сегменты могут иметь различные закономерности. В моем случае есть один вариант разбиения на 2 сегмента, но он практически пока слишком сложный в реализации, и я его отложу, и возьму все данные целиком.

Ну, я специально тут молча постоял в сторонке, пока шло обсуждение. И я рад, что суммарная рекомендация, которая выработалась в ходе дискуссии практически совпало с тем, о чем я вам говорил на другом форуме.
Держите нас в курсе своих изысканий, будет интересно.
И лучше на этом форуме. Тут вас, конечно, побъют сильнее wink.gif , зато и профессиональнее, а значит - полезнее для дальнейшего научного опыта.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)