КАКИЕ ценности?

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

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

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

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

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

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

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

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

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

Как мы можем измерить влияние функций друг на друга, которые, в свою очередь, влияют на результат, предсказанный моделью?
Чтобы измерить эти отношения, мы можем использовать значения Шепли. . Начнем с простого примера трех характеристик: [цвет, ткань, размер] для рубашки. Чтобы получить значение Шепли для признака «цвет», мы рассмотрим следующие расчеты:

Чтобы рассчитать баллы, где f — функция оценки:

  • S1: f({цвет, ткань, размер})-f({цвет, ткань})
  • S2: f({цвет, размер})-f({цвет})
  • S3: f({размер})-f({})
  • S4: f({ткань, цвет, размер})-f({ткань, цвет})
  • S5: f({ткань, размер})-f({ткань})
  • S6: f({размер})-f({})

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

Наконец, чтобы рассчитать оценку Шепли, вы усредняете эти оценки:

И вуаля! У вас есть оценка Шепли по признаку «размер»! Оценки Шепли других функций будут следующими:

Ткань

  • S1: f({цвет, размер, ткань})-f({цвет, размер})
  • S2: f({цвет, ткань})-f({цвет})
  • S3: f({ткань})-f({})
  • S4: f({размер, цвет, ткань})-f({размер, цвет})
  • S5: f({размер, ткань})-f({размер})
  • S6: f({ткань})-f({})

Цвет

  • S1: f({размер, ткань, цвет})-f({размер, ткань})
  • S2: f({размер, цвет})-f({размер})
  • S3: f({цвет})-f({})
  • S4: f({ткань, размер, цвет})-f({ткань, размер})
  • S5: f({ткань, цвет})-f({ткань})
  • S6: f({цвет})-f({})

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

Однако, как вы можете себе представить, получение значений Шепли для огромных наборов функций в больших наборах данных может быть слишком дорогим. К счастью, есть легкодоступные библиотеки, которые реализуют этот метод, используя более быстрые приближения, такие как https://github.com/slundberg/shap в Python.

Теперь, когда вы знаете, что такое значение Шепли, вы можете рассмотреть его в следующий раз, когда будете строить свою классификационную модель!