Какой инструмент подходит для работы?

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

Редко встречаются ресурсы, выходящие за рамки основ, поэтому я хочу поделиться своим опытом более глубокого изучения этих специальных моделей. Особенно когда дело доходит до оценки и динамических моделей (обновление прогнозов с течением времени), я придумал некоторые решения, которые я еще нигде не видел.

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

Весь код, относящийся к этому сообщению, можно найти здесь

Мотивация

Многим знакомо чувство столкновения с неизвестной проблемой, для которой у нас еще нет решения в нашем наборе инструментов, и мы даже не знаем, существует ли оно.

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

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

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

Пытаясь найти библиотеки и решить проблемы в этой области, я обнаружил, что ресурсы определенно есть, но они редко выходят за рамки основ. Он не является частью популярных библиотек, таких как sklearn или fast.ai, или имеет ограниченные реализации, как в библиотеке xgboost.

В образовании мало специализированных курсов на Coursera или datacamp, например. Но без упоминания этой темы в базовых курсах вы, вероятно, никогда не наткнетесь на них. Кроме того, программы этих курсов кажутся довольно поверхностными и устаревшими (например, с использованием только линейных моделей).

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

  • Смерть или выздоровление при лечении
  • Отказ в механических системах
  • Отток клиентов
  • Конец забастовки
  • Конец правления правительства

Модели выживания

Теория

Название «Выживание» связано с истоками метода в области медицины. Хотя я бы предложил более общий термин, такой как «Модели времени до события», «Модели выживания» или «Анализ выживания» широко распространены, поэтому я буду придерживаться их здесь.

Я не хочу слишком много говорить о теории, а сосредоточусь на практических приложениях. Два хороших источника для основ — эта статья и введение в библиотеку жизненных линий.

Данные и примеры

В основном я буду использовать один набор данных для блокнотов и примеров в этой статье. Речь идет о продолжительности правления политических режимов (демократий и диктатур) в 202 странах с 1946 года или года независимости по 2008 год.

Цель состоит в том, чтобы предсказать вероятность того, что правительство останется у власти с течением времени или, другими словами. предсказать случай смены власти. Характеристики включают в основном информацию о регионе (например, континент) и типе правительства (например, демократия).

Цели выживания

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

В качестве целей используются две точки данных: событие и продолжительность.

Событие

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

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

Существуют различные формы цензуры, но мы сосредоточимся здесь на наиболее распространенной форме правой цензуры, что означает, что мы не знаем, что происходит через определенный момент времени.

Рассмотрим этот пример оттока клиентов:

  1. Клиент расторг контракт: произошло событие оттока
  2. Клиент все еще активен: событие оттока еще не произошло, но может произойти в будущем (цензура справа)
  3. Клиент ушел из-за внешних обстоятельств (например, смерти): событие оттока не произошло, и клиент подвергается цензуре справа в момент времени, когда произошли внешние обстоятельства.

Продолжительность

Столбец «Длительность» содержит информацию о том, сколько времени прошло до наблюдения события или в другой конкретный момент (например, дата анализа, внешние обстоятельства), если событие еще не наблюдается. Единица продолжительности зависит от данных и может принимать значения от секунд до лет.

Целевое моделирование

Давайте посмотрим, как мы можем смоделировать цели в регрессии, классификации (если вы не знакомы с ними, отметьте это) и модели выживания. Код для этого раздела можно найти здесь.

Моделирование как проблема регрессии

Модель регрессии используется для прогнозирования непрерывных значений.

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

В большинстве случаев это не кажется хорошей идеей.

Моделирование как проблема классификации

Модель классификации используется для прогнозирования дискретных значений и присвоения вероятностей классам.

В нашем примере он может использовать событие в качестве цели, но также может включать фиксированную продолжительность времени (например, происходит ли событие по прошествии одного года).

Возможна потеря данных, поскольку нельзя использовать строки, в которых нет событий и продолжительность которых меньше выбранной фиксированной продолжительности (например, один год). Вы можете найти пример этого в Записной книжке по целевому моделированию).

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

Однако это может быть допустимым подходом в зависимости от варианта использования (например, нас интересует только вероятность события, происходящего в определенное время t) и доступности данных.

Моделирование как проблема выживания

Давайте посмотрим, как мы можем преодолеть эти недостатки, используя метод выживания:

Как видите, он может включать обе цели в качестве входных данных для модели!

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

Что еще интереснее, выходные данные можно преобразовать в кривую выживания с вероятностями событий во времени. Существуют разные способы (параметры) превратить опасность в кривую выживания, но большинство библиотек могут справиться с этим за вас. Нейронные сети могут даже оптимизировать форму кривой выживания, используя один выходной нейрон для каждой точки кривой. Эти вероятности с течением времени можно использовать для расчетов других показателей, например, пожизненной ценности клиента.

Вот кривая выживания с вероятностями конца правления правительства в течение следующих 20 лет. Например, через десять лет вероятность того, что это демократическое правительство из Океании все еще у власти, составляет около 23%:

Подход выживания к проблемам выживания

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

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

Модели и библиотеки

Сначала хорошие новости: модели выживания адаптируют классические модели машинного обучения, такие как логистическая регрессия, деревья решений и нейронные сети. Как и в других областях, новые разработки в основном происходят с методами глубокого обучения.

Вот библиотеки, которые я рекомендую при работе с моделями выживания:

  • линии жизни: линейные модели и множество статистических функций. Это хорошая отправная точка, но в большинстве случаев не будут создаваться самые точные модели.
  • pycox: модели выживания на основе нейронных сетей. В основном они реализуют функции потерь, которые можно положить поверх любой архитектуры pytorch.
  • XGBSE: реализация XGBoost моделей выживания с различной сложностью модели

Вы можете найти один блокнот для каждой библиотеки, чтобы увидеть, как данные должны быть подготовлены, и модель может быть запущена здесь (02 / 03 / 04).

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

Я также пробовал некоторые другие библиотеки, которые не добавили мне ценности:

  • xgboost: почти никакой документации по функциям выживания, только прогнозирует уровень опасности (одно значение)
  • scikit-survival: библиотека выживания на основе scikit-learn с различными моделями (CoxPH, Random Forests, Boosting). Нелинейные реализации очень медленные и плохо масштабируются
  • pySurvival: в основном я пробовал Random Survival Forests, которые очень медленные и плохо масштабируются.

Оценка

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

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

Код для этого раздела можно найти здесь.

Индекс соответствия

Индекс соответствия является основным показателем, используемым для оценки моделей выживания, и вы найдете его практически во всех научных статьях для оценки новых методов.

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

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

Кривая качества выживания

Все становится сложнее, когда мы хотим оценить кривую выживания, то есть попытаться оценить прогнозируемую кривую вероятности относительно потенциального возникновения события.

В случае, если событие не произошло, идеальной кривой будет 100% до момента цензурирования. Дальше этого момента неясно:

В случае, если событие действительно произошло, идеальная кривая будет равна 100 %, пока событие не произойдет, и нулю после него:

Одной из распространенных метрик, используемых для этой проблемы, является Оценка Брайера, зависящая от времени. Это Survival-адаптация показателя Brier Score или Mean Squared Error (см. реализацию sklearn).

Показатель Брайера можно легко рассчитать для одного наблюдения, в котором наблюдалось событие. В этом примере оценка обычно движется в направлении, противоположном прогнозируемой кривой, до тех пор, пока событие не будет наблюдаться. В этом случае спрогнозированная вероятность была уже достаточно низкой при возникновении события, и поэтому потери резко падают:

Этот показатель имеет некоторые недостатки:

  • Его можно рассчитать только для одного наблюдения, если событие наблюдалось. Для цензурированных случаев используется групповой подход, что затрудняет понимание и общение.
  • Brier зависит от длительности, т. е. наблюдения с большей продолжительностью обычно имеют худший балл, и наоборот.

Есть и другие метрики (например, Динамический AUC), но я не нашел подходящей и простой в общении метрики для оценки качества прогнозируемой кривой выживания при наличии цензуры.

Форма кривой выживания

Качество кривой измеряется в зависимости от возникновения события, но это может не сказать всего. Различные модели могут давать кривые разной формы (величина, скорость снижения, падение в определенные моменты времени), которые могут быть очень близкими по качественным показателям. Поэтому полезно визуализировать и количественно оценить форму прогнозируемых кривых.

TODO Вот некоторые вещи, на которые следует обратить внимание:

  • Величина: некоторые модели могут давать более оптимистичные кривые, чем другие.
  • Скорость снижения
  • Кривые (внутри подгрупп), падающие до 0 через некоторый момент времени: это означает, что прогнозирование событий не может выходить за пределы этой точки, и может быть признаком недостаточного количества обучающих данных для этой комбинации функций.
  • Резкие падения из-за циклического появления событий, например, ежегодных подписок клиентов или циклов выборов (в четырехлетнем цикле выборов должно быть значительное снижение коэффициента выживания после t = 5, t = 9 и т. д.)

Очень простой вещью является построение среднего значения кривых в целом и для интересующих подгрупп. Этот пример показывает, что модель предсказывает, что африканские правительства будут править дольше, чем европейские. Доверительные интервалы показывают, что спред в странах Африки менее стабилен, чем в Европе:

Чтобы количественно оценить величину кривых, мы можем рассчитать площадь под кривой (AUC). Этот подход может обобщить приведенный выше сюжет:

Визуализация прогнозируемого распределения в определенное время может показать, выше или ниже кривые, чем ожидалось. Например, когда мы смотрим на предсказанные вероятности для первого года, мы видим, что они уже падают ниже 60% для многих наблюдений, и мы можем спросить себя, реалистично ли это после всего лишь одного года правления правительства:

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

Для логистических опасностей средняя кривая падает до нуля примерно через восемь лет. Это означало бы, что ни одно правительство не проработает более десяти лет, что не кажется полезным прогнозом.

DeepHit показывает линейное снижение, в то время как остальные три модели имеют более резкое снижение в первые годы, которое затем стабилизируется. Это могло бы быть более разумным, так как правительство изначально имеет более высокий риск, который сглаживается после успешного старта.

Динамическая модель

До сих пор мы рассматривали модели, предсказывающие кривые выживания с начальной точки наблюдения (например, с начала правления правительства). Назовем это статической моделью.

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

Код для этого раздела можно найти здесь.

Статический против динамического

В следующей таблице приведены различия между этими двумя подходами:

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

Разделение

Что такое сплиты

В общем, для наших данных существует два типа разделения:

  • Разделение оценки: разделите данные на наборы для обучения и оценки — это то, что мы всегда делаем.
  • Динамическое разделение: разделите наблюдения по их временному измерению и вычислите признаки в точке разделения (например, используйте первые пять лет правления правительства в качестве входных данных для предсказания после этой точки).

Рассмотрим этот пример с правлением шести разных правительств:

Как мы можем применить оценку и динамическое разделение здесь? Давайте сначала посмотрим на статическую модель.

Статический

В статическом контексте разделение в зависимости от времени неприменимо, поскольку мы всегда прогнозируем с начальной точки. Как и ожидалось, разделение на обучение и тестирование.

Для случайного разделения оценки мы помещаем случайно выбранное подмножество (например, 20%) в тестовый набор:

Это имеет то преимущество, что оно смешивается с более ранними наблюдениями, которые мы все еще можем захотеть предсказать и, следовательно, оценить.

Вторая возможность — это разделение оценки времени, когда мы помещаем каждое наблюдение, которое начинается после определенной точки разделения, в тестовый набор:

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

Поскольку эти расщепления хорошо известны, я не буду включать их в следующее динамическое объяснение и сосредоточусь только на расщеплении, зависящем от времени.

Динамический

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

Есть разные способы сделать это. Первый подход, который я увидел реализованным, был фиксированным временным разделением, которое разделяет все данные в одной и той же точке, чтобы имитировать «сегодня»:

Фиксированный временной интервал имеет определенные недостатки:

  • Потеря данных: можно использовать только те данные, которые начинаются до фиксированной точки и выходят за ее пределы. Все остальное нужно выбросить! На приведенной выше диаграмме эти наблюдения отмечены как Removed.
  • Фиксированный горизонт прогнозирования модели, определяемый точкой прогнозирования до сегодняшнего дня

Вот таблица с примерами данных, где разделение рассчитано в 1988 году. Столбец split_time (split_year-start_year) станет новой функцией, а duration_split (duration-split_time или end_year-split_year) станет новой целью продолжительности:

Вернемся к потере данных: если нас интересует 20-летний горизонт прогнозирования, мы должны разделить данные на 1988 год (данные заканчиваются на 2008 год, обычно это будет today - prediction horizon). Мы должны отбросить все данные, где 1988 год не находится между начальным и конечным годом, оставив нам только 8% данных!

Чтобы преодолеть эти недостатки, я придумал случайное разделение, в котором каждое наблюдение разбивается в случайной точке между датой начала и датой окончания:

Вот таблица с примерами данных, где split_time — это случайное целое число от 1 до его продолжительности. Как упоминалось выше, столбец split_time станет новой функцией, а duration_split (duration-split_time) станет новой целью продолжительности:

Преимущества

  • Все данные могут быть использованы независимо от времени начала
  • Гибкий горизонт прогнозирования модели
  • Позволяет использовать некоторую форму увеличения данных
  • Повторное использование наблюдений в разных точках разделения
  • Особенно рекомендуется добавлять наблюдения, начиная с промежуточного времени 1, чтобы увеличить время выживания на тренировке. Это противостоит риску более низких прогнозов из-за более низких целей продолжительности.

Из этих примеров видно, что не только вычисление признаков зависит от разделения, но и цель продолжительности изменяется, в то время как цель события остается неизменной.

Динамические функции

В дополнение ко всем статическим функциям (например, континент или тип правительства) мы должны добавить динамические функции для улучшения модели. Вот некоторые примеры:

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

Некоторые функции могут быть статическими и динамическими, например, мы можем включить рейтинг одобрения в начале времени начала и в момент прогнозирования. При использовании Deep Learning мы можем пойти еще дальше и добавить целые последовательности (например, рейтинги одобрения за последние n месяцев), используя архитектуру RNN.

Имейте в виду, что для расчета динамических характеристик требуется историзация (кроме split_time) всех данных, чтобы получить правильные значения в точке разделения.

Динамическая оценка

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

Мы можем смоделировать прогнозы в разное время, заменив функцию split time. Первая диаграмма показывает все прогнозы в разное время, начиная с одной и той же точки, а вторая отображает фактические начальные точки:

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

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

Заключение

Я надеюсь, что эта статья смогла дать представление об актуальности и проблемах моделей выживания. Подводя итог, вот три основные проблемы, которые я вижу в этой области, и то, как эта статья, надеюсь, способствовала их решению:

  • Образование: включение в курсы по основам науки о данных и популярные библиотеки (scikit-learn, fast.ai) для распространения информации и повышения доступности. Кроме того, необходим более глубокий контент, выходящий за рамки основ. Это тип контента, который я пытался создать с помощью этой статьи.
  • Оценка: слишком много внимания уделяется одной метрике ранжирования (согласованности), чего, на мой взгляд, недостаточно. В целом не хватает интуитивно понятных метрик для оценки качества и формы кривой выживания. В моей статье приведены некоторые примеры визуального осмотра и советы о том, на что обратить внимание, чтобы смягчить эти проблемы.
  • Динамические модели: обновление прогнозов с течением времени становится очень сложным и еще более трудным для оценки (лучшие методы оценки могут смягчить это). К сожалению, практически нет ресурсов для изучения этой темы. Я рассказал об особых проблемах динамических и статических моделей для выживания, обсудил различные методы разделения и привел примеры для визуальной оценки, чтобы уменьшить сложность. Большую часть этого контента я больше нигде не нашел.

Наука о данных — это большая область с множеством областей, и мы не должны стремиться понять все в деталях. Но наличие широких базовых знаний является ключом к переводу бизнес-проблем в подходящие проблемы с данными и, следовательно, к реализации успешных проектов. Я надеюсь, что смогу внести свой вклад в эту статью, чтобы получить больше признательности за модели выживания, и в будущем в сообществе данных будет больше контента.