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

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

На одной из самых престижных конференций по машинному обучению NeurIPS2022 профессор Стэнфордского университета Эммануэль Кандес завершил свой ключевой доклад «Конформное предсказание в 2022 году» перед десятками тысяч исследователей и практиков машинного обучения, заявив: «Методы конформного вывода становятся все более популярными. как в научных кругах, так и в промышленности. Короче говоря, эти методы обеспечивают точные интервалы прогнозирования для будущих наблюдений, не делая каких-либо предположений о распределении, за исключением наличия единых и, в более общем плане, обменных данных».

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

Общая осведомленность о Conformal Prediction в научно-техническом сообществе экспоненциально росла в течение последних 2–3 лет, в том числе благодаря выпуску нескольких популярных руководств и библиотек с открытым исходным кодом, таких как MAPIE и Amazon Fortuna, которые сделали Модели Conformal Prediction доступны для всех, кто напишет всего несколько строк кода.

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

Awesome Conformal Prediction — лучший, наиболее полный, профессионально подобранный ресурс обо всем, что касается Conformal Prediction. Каждые несколько недель на GitHub добавляются сотни звезд, что является отражением растущей популярности Conformal Prediction в академических кругах. и промышленность. Если вы еще не проверили его, поставьте звездочку 🌟 в репозитории и распространите информацию.

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

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

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

Итак, учитывая преимущества ICP, он должен быть предпочтительным инструментом по умолчанию, верно? Не так быстро; критика ICP по поводу неэффективного использования данных совершенно правильна и обоснована. ICP также не является оригинальной версией Conformal Prediction, и чтобы по-настоящему понять и оценить эту замечательную структуру, нужно изучить и понять исходную структуру Conformal Prediction — Transductive (full) Conformal Prediction.

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

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

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

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

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

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

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

Так как же это работает? Хотя TCP, как правило, несколько сложнее, здесь объясняются основные шаги, которые можно выполнить для построения надежной модели полного конформного прогнозирования. В этой статье мы рассмотрим, как можно создать полный бинарный классификатор Transductive Conformal Prediction, либо написав код с нуля (для целей обучения), либо, альтернативно, используя Nonconformist библиотека всего несколькими (фактически 4!) дополнительными строками кода.

Шаг 1. Выберите меру несоответствия; вот здесь все довольно быстро становится туманным (до сих пор!), так как выбор хорошей меры – непростая задача, особенно для новичков.

Даже понять, какие существуют потенциальные меры несоответствия, нелегко (по сравнению с регрессионной задачей, где простой мерой несоответствия является y-y^что, ох, как это просто), запрос GPT-4 может не помочь, так как он часто вызывает галлюцинации и делает не дает правильных ответов (я проверял это несколько раз), это не приготовление рецепта, а скорее техническая область с ограниченным освещением в Интернете — гарантированный путь к отказу GPT-4.

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

Существует несколько не зависящих от модели показателей несоответствия, с которых легко начать и которые легко понять. Они также, как правило, хорошо работают с различными наборами данных и базовыми моделями. Один из них называется потери шарнира (или также называется обратная вероятность) и может быть вычислен просто как 1 − P(y|x), где P(y|x равно ) – это показатель классификации, полученный моделью классификации для фактического класса. Помните, что оценки классификации не являются вероятностями класса, а predict_proba — очень неудачное и вводящее в заблуждение название в Scikit-learn.

Как вычислить оценку обратного вероятностного (шарнирного) несоответствия? Например, предположим, что ваш классификатор выводит две оценки: class_0 = 0,6, class_1 = 0,4 и фактическая метка y=1. Возьмите вероятность истинного класса (в данном случае 0) и вычтите ее из 1, чтобы получить оценку несоответствия обратной вероятности (шарнира) 0,4.

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

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

Шаг 2. Используйте обучающий набор для обучения базовых моделей классификаторов. Conformal Prediction не зависит от модели, в качестве классификатора можно использовать любую модель, от статистической до машинного обучения и глубокого обучения.

Способ обучения базовой модели классификатора состоит в том, чтобы подготовить ее дважды для каждой точки в тестовом наборе, присвоив каждой тестовой точке две потенциальные метки — 0 и 1.

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

Всего вы будете тренироваться 2 x m раз, где m — количество баллов в вашем тестовом наборе.

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

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

Мы можем разделить набор данных на обучающий и тестовый наборы и перебрать каждую точку в тестовом наборе.

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

Теперь для этой контрольной точки у нас есть набор функций для обучения двум моделям классификации, одной с постулированной меткой 0 и одной с постулированной меткой 1. Мы создаем две метки следующим образом.

y_train_plus_test_0 = np.append(y_train, 0)
y_train_plus_test_1 = np.append(y_train, 1)

Мы обучаем две модели с помощью любого классификатора (в моем случае я использовал логистическую регрессию от Scikit-learn):

# train classifier with y_test label 0
model.fit(X_train_plus_test, y_train_plus_test_0)
y_pred_score_train_plus_test_0 = model.predict_proba(X_train_plus_test)

# train classifier with y_test label 1
model.fit(X_train_plus_test, y_train_plus_test_1)
y_pred_score_train_plus_test_1 = model.predict_proba(X_train_plus_test)

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

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

Результатом являются два вектора оценок несоответствия: один для потенциальной метки 0, а другой для потенциальной метки 1.

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

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

# Here, we use inverse probability nonconformity measure known as hinge loss. The function below calculates the probability of not predicting the correct class by simply looking up
# probability score predicted by the underlying model for the correct class and subtracting it from 1
# For each correct output in ``y``, nonconformity is defined as math:: 1 - \hat{P}(y_i | x)
# this measure is also known as a hinge loss and is based simply on the probability estimate provided for the correct class label y_i 

def InverseProbabilityNC(predicted_score, y):
  prob = np.zeros(y.size, dtype=np.float32)
  for i, y_ in enumerate(y):
    if y_ >= predicted_score.shape[1]:
      prob[i] = 0
    else:
      prob[i] = predicted_score[i, int(y_)]
  return 1 - prob

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

Это указывает на то, что тестовому объекту можно присвоить метку 0, а 1 менее вероятно. Но Conformal Prediction — это надежная структура математического машинного обучения, поэтому нам нужно количественно оценить это решение. Вот где возникают p-значения.

Шаг 4. Дважды вычислите p-значения для каждой контрольной точки, для метки потенциального класса 0 и метки потенциального класса 1.

Для этого мы используем определение p-значений из книги Вовка «Алгоритмическое обучение в случайном мире».

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

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

Предположим, что в тренировочном наборе есть достаточное количество точек, которые так же или даже более неконформны с «мешком» тренировочных точек в качестве контрольной точки. В этом случае мы считаем, что на основе данных, которые мы видели, и оценок несоответствия для контрольной точки (для каждой конкретной постулируемой метки) соответствующая постулируемая метка [0 или 1] хорошо соответствует (или не соответствует) данным. и мы включаем (или иным образом исключаем этот ярлык из) набора прогнозов.

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

Вот иллюстрация кода Python, показывающая, как вычислять p-значения. Не забудьте вычислить два p-значения для каждого тестового объекта, одно для потенциальной метки 0 и одно для потенциальной метки 1.

for i, test_point_conformity_score in enumerate(non_conformity_scores_test):
    p_value = (np.sum(non_conformity_scores_train >= test_point_conformity_score) + 1) / (len(non_conformity_scores_train)+1)
    p_values.append(p_value)

Подумайте о тестовых объектах, подобных кошкам Шредингера — у них нет метки (поскольку мы не знаем их меток), поэтому, пока мы не знаем настоящие метки, тестовые объекты могут иметь две метки одновременно!

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

Нет стресса! Мы почти закончили.

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

Если p-значение для соответствующего потенциального ярлыка превышает значимый уровень, мы включаем такой ярлык. В противном случае мы исключаем его.

В качестве примера предположим, что мы получили два значения p для первого объекта в тестовом наборе:

  • P-значение для метки 0–0,55, поскольку p-значение больше, чем уровень значимости (0,05), мы включаем постулируемую метку (в данном случае 0) в набор прогнозов для этой контрольной точки.
  • Значение p для метки 1–0,002, поскольку значение p меньше уровня значимости (0,05), мы не можем включить постулируемую метку (в данном случае 1) в набор прогнозов для этой контрольной точки.

Окончательный набор прогнозов для этой точки равен [0].

Все возможные комбинации, которые существуют, это [] (ничего, нада, пшик, пустой набор — на основе тестирования мы исключаем обе метки, поскольку объект настолько странный, что не соответствует требованиям после назначения обоих вариантов 0 и 1, поэтому с учетом выбранного уровня достоверности, мы не уверены, давая метку.Модель эффективно говорит «я не знаю», более безопасный вариант, особенно в критических приложениях, таких как медицинские изображения для диагностики серьезных заболеваний, вместо того, чтобы говорить, что нет снижения и пропущено критическое заболевание). Другие возможные варианты: [0], [1], [0,1].

Если вы не заснули, читая шаги, поздравляю, вы поняли, как работает полное трансдуктивное конформное предсказание под капотом и что общего между TCP и кошками Шредингера!

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

# Create a default nonconformity function; model is your underlying classifier
nc = NcFactory.create_nc(model,err_func=InverseProbabilityErrFunc()) 

# Create a transductive conformal classifier
tcp = TcpClassifier(nc)   
# Fit the TCP using the proper training set
tcp.fit(X_train, y_train)

# Produce predictions for the test set with a confidence of 95%
prediction = tcp.predict(X_test.values, significance=0.05)

Я надеюсь, вам понравится читать эту статью; вы можете подписаться на меня в LinkedIn и Twitter. Не забудьте поставить лайк этой статье и звездочку репозиторию Awesome Conformal Prediction.

Дополнительные материалы:

  1. Удивительное конформное предсказание
  2. ‘Независимые от модели функции несоответствия для конформной классификации’
  3. Учебник по конформному предсказанию Вовка и Шафера
  4. Алгоритмическое обучение в случайном мире (книга Владимира Вовка о конформном предсказании)
  5. Nonconformist — оригинальная библиотека Conformal Prediction от
    Хенрика Линуссона.
  6. Python Predict Proba на самом деле не предсказывает вероятности