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

индекс соответствия или c-index - это показатель для оценки прогнозов, сделанных алгоритмом. Он определяется как доля согласованных пар, деленная на общее количество возможных оценочных пар. Давайте разберемся на нескольких примерах, что означает это определение на практике.

Сначала мы устанавливаем линии жизни библиотеки и обычный импорт:

Представьте, что мы - оператор связи с 5 клиентами (Алиса, Боб, Кэрол, Дэйв и Ева), и мы пытаемся предсказать, кто первым откажется от подписки на наши услуги (также известный как отток). Предположим, что Алиса ушла через 1 год, Боб через 2 года, Кэрол через 3 года, Дэйв через 4 года и Ева через 5 лет. Наш алгоритм сделал следующий прогноз: Алиса уйдет через 1 год, Боб через 2 года, Кэрол через 3 года, Дэйв через 4 года и Ева через 5 лет.

Это идеальный прогноз. В этом случае индекс соответствия равен своему максимальному значению 1.

Однако индекс соответствия интересует порядок прогнозов, а не сами прогнозы. Теперь предположим, что алгоритм предсказал: Алиса уйдет через 2 года, Боб через 3 года, Кэрол через 5 лет, Дэйв через 8 лет и Ева через 14 лет. В этом случае индекс соответствия по-прежнему равен своему максимальному значению 1, поскольку порядок прогнозов правильный (несмотря на то, что ни одно из прогнозов не является правильным по отдельности!).

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

Давайте рассмотрим случай, когда алгоритм полностью ошибся в порядке прогнозов. Скажем, алгоритм предсказал, что Ева уйдет первой через 1 год, Дэйв - через 2 года, Кэрол - через 3 года, Боб - через 4 года, а Алиса - через 5 лет, поэтому порядок полностью обратный (хотя обратите внимание, что Кэрол ушла через 3 года). годы!). В этом случае индекс соответствия будет равен своему минимальному значению 0.

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

Теперь самое интересное. Что делает индекс соответствия, когда порядок предсказаний не является ни полностью правильным, ни полностью неправильным? Какую оценку вы даете следующему прогнозу?

Прогноз 1: Алиса уйдет через 3 года, Боб через 2 года, Кэрол через 1 год, Дэйв через 5 лет и Ева через 4 года.

Ну, индекс соответствия перечисляет все возможные пары, в нашем случае есть 10 потенциальных пар: (Алиса, Боб), (Алиса, Кэрол), (Алиса, Дэйв), (Алиса, Ева), (Боб, Кэрол), (Боб, Дэйв), (Боб, Ева), (Кэрол, Дэйв), (Кэрол, Ева), (Дэйв, Ева), а затем подсчитывается, сколько из этих предсказаний пар было правильным. Например, для Прогноз 1:

  • Предполагается, что Алиса сменится после Боба, а Боб - после Алисы.
  • Предполагается, что Алиса пойдет вслед за Кэрол, а Кэрол пойдет за Алисой.
  • Предполагается, что Боб будет уходить после Кэрол, а Кэрол - после Боба.
  • Предполагается, что Дейв сбежит после Евы, а Ева - после Дейва.

Все остальные прогнозы по парам верны. Из 10 возможных пар 6 совпадают, поэтому индекс конкордантности равен 6/10 или 0,6.

Что происходит в случае ничьей? Связи в ваших прогнозах считаются полусогласованными парами:

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

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

Предположим, что Алиса уволилась через 1 год, Боб через 2 года, Кэрол не ушла через 3 года, Дэйв уволился через 4 года, а Ева через 5 лет.

и наш прогноз следующий:

Прогноз 2: Алиса уйдет через 1 год, Боб через 2 года, Кэрол через 3 года, Дэйв через 5 лет и Ева через 4 года.

Обратите внимание на то, что тот факт, что Кэрол не ушла через 3 года, дает нам информацию о том, что время ее ухода, если это произойдет, произойдет за время, большее или равное 3 годам. Следовательно, мы не можем дать оценку парам (Кэрол, Дэйв) и (Кэрол, Ева), поскольку мы просто не знаем, кто отказался первым. Следовательно, у нас всего 8 потенциальных пар. Предполагается, что Дейв сбежит после Евы, а Ева - после Дейва. Все остальные прогнозы по парам верны. Из 8 возможных пар 7 совпадают, поэтому индекс конкордантности равен 7/8 или 0,875.

В нашем коде нам нужно указать, наблюдалось ли событие (True) или не наблюдалось (False):

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

Случайные прогнозы дают средний индекс соответствия примерно 0,5. Таким образом, модель, которая ничему не научилась, дает средний индекс соответствия 0,5.

Разница индексов соответствия между библиотеками: lifeelines, scikit-survival и PySurvival

Для этого сравнения мы устанавливаем PySurvival и scikit-survival:

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

Индекс соответствия (жизненные пути) = 1-индекс соответствия (scikit-выживаемость)

Scikit-Survival также дает количество совпадающих пар, количество несогласованных пар, количество пар со связанными предполагаемыми рисками и количество сопоставимых пар, разделяющих одно и то же время.

Давайте посмотрим на более интересный пример:

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

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

Мы замечаем, что PySurvival считает пары два раза (Алиса, Боб) и (Боб, Алиса), в то время как scikit-survival считает это только один раз. Это объясняет разницу между количеством совпадающих пар (558 + 43 + 179 = 780 и 780 * 2 = 1560). Точно так же количество согласованных пар в PySurvival рассматривает согласованные пары и пары связанных рисков как полусогласованные пары (2 * 558 + 179 = 1295).

Выводы

Индекс соответствия - полезный показатель для оценки прогнозов, сделанных алгоритмом. Он может рассматривать случай правильной цензуры, то есть, когда к концу исследования интересующее событие (например, в медицине «смерть пациента» или в нашем примере «отток клиента») только произошло. для подмножества наблюдений. Мы видели три библиотеки (lifeelines, scikit-survival и PySurvival), которые реализуют индекс соответствия, но с некоторыми тонкими различиями.

Источники