Как я могу визуализировать важность различных входных данных для прогноза для нелинейной модели черного ящика?

9

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

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

Модели, которые я разрабатываю, имеют сильный авторегрессивный компонент, который иногда значительно изменяется в результате событий, которые отображаются в виде измеренных значений в некоторых предикторах, которые во время отсутствия событий близки к нулю. Это согласуется с ментальной моделью, которую используют синоптики. Ключевой частью является возможность продемонстрировать, какие из измерений «события» являются наиболее влиятельными в отклонении прогноза от значения авторегрессии для любого данного прогноза. Я представляю процесс таким образом; предсказатель угадывает их лучшее предположение, модель предлагает другое, и предсказатель спрашивает, почему. Модель отвечает примерно так: «смотрите здесь, это значение этого предиктора увеличивает прогнозное значение летом. Если бы это была зима, она бы пошла в другую сторону. Я знаю, что есть и другие измерения,

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

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

богдановской
источник
1
Что вы получили в итоге - вы могли бы выложить одну или две фотографии? Кроме того, «установка всех значений на ноль, кроме одного предиктора» - разве вы не хотите, чтобы градиент был вокруг текущих лучших значений, а не вокруг всех 0?
Денис

Ответы:

4

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

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

См. « Как объяснить индивидуальные решения по классификации», David Baehrens et. и др. в JMLR для получения дополнительной информации об этой идее. В статье рассматривается классификация, но также легко обобщается регрессия.

Innuo
источник
Это круто! Очень полезная ссылка, которая будет полезна для этой проблемы, которую я имею и в другом месте.
Богдановист
2

Вы пробовали модуль scikit-learn в python.

Вы можете "computer_importance" для функций его randomForestClassifier

jf328
источник
1
Сначала я также подумал, что вычисление важности признаков может быть полезным, но, в конце концов, это сравнительно плохой подход, когда нужно объяснить прогнозируемое значение для конкретного случая. Важность функции дает только расплывчатые намеки экспертам.
Штеффен
Кроме того, ОП попросил модельный независимый подход ...
Штеффен
Проблема с переменными показателями важности состоит в том, что они применяются в среднем ко всему набору данных, а не говорят о том, что действительно важно в каком-либо конкретном случае.
Богдановист
На самом деле, я думаю, что это модельно-независимый подход, вы действительно можете применить его к другим классификаторам, кроме случайных лесов. На веб-сайте Бреймана есть тонкое замечание о том, как можно вычислить значение переменной для одного случая. stat.berkeley.edu/~breiman/RandomForests/cc_home.htm#varimp (последнее предложение) Я думаю, что это еще не было тщательно изучено или, по крайней мере, тщательно проверено. Среднее значение переменной не всегда то, что вы хотите. Например, это не когда вы хотите помочь практикующему принять решение по одному делу. Это действительно интересная тема.
Симона
Есть интересная статья, в которой Брейман также немного обсуждает этот метод логистической регрессии: «Статистическое моделирование: две культуры». Приятного чтения. Фраза, которая мне нравится больше всего: «Мое определение важности переменной основано на прогнозе. Переменная может считаться важной, если ее удаление серьезно влияет на точность прогнозирования». Это утверждение относится к любому классификатору, который вы можете использовать.
Симона