Почему не следует объяснять данные временных рядов с помощью табличных методов Шепли
Делиться

Введение
Методы, основанные на алгоритме Шепли, являются одними из самых популярных инструментов для объяснения моделей машинного обучения (МО) и глубокого обучения (ГО). Однако для данных временных рядов эти методы часто оказываются неэффективными, поскольку не учитывают временные зависимости, присущие таким наборам данных. В недавней статье мы (Анхель Луис Пералес Гомес, Лоренсо Фернандес Маймо и я) представили ShaTS — новый метод объяснимости, основанный на алгоритме Шепли, специально разработанный для моделей временных рядов. ShaTS устраняет ограничения традиционных методов Шепли, используя стратегии группировки, которые повышают как вычислительную эффективность, так и объяснимость.
Ценности Шепли: Основа
Число Шепли основано на теории кооперативных игр и справедливо распределяет общий выигрыш между игроками в зависимости от их индивидуального вклада в совместные усилия. Число Шепли для игрока рассчитывается путём рассмотрения всех возможных коалиций игроков и определения предельного вклада этого игрока в каждую коалицию.
Формально число Шепли φi для игрока i равно:
[ varphi_i(v) = sum_{S subseteq N setminus {i}}
frac{|S|! (|N| – |S| – 1)!}{|N|!} (v(S cup {i}) – v(S)) ]
где:
- N — множество всех игроков.
- S — коалиция игроков, не включающая i.
- v(S) — это функция ценности, которая присваивает ценность каждой коалиции (т. е. общий выигрыш, которого может достичь коалиция S).
Эта формула усредняет предельные вклады игрока i по всем возможным коалициям, взвешенные по вероятности формирования каждой коалиции.
От теории игр к xAI: величины Шепли в машинном обучении
В контексте объяснимого ИИ (xAI) числа Шепли связывают выходные данные модели с её входными характеристиками. Это особенно полезно для понимания сложных моделей, таких как глубокие нейронные сети, где связь между входными данными и выходными данными не всегда очевидна.
Методы, основанные на функции Шепли, могут быть весьма ресурсоёмкими, особенно по мере увеличения числа признаков, поскольку число возможных коалиций растёт экспоненциально. Однако методы аппроксимации, особенно реализованные в популярной библиотеке SHAP, сделали их практически реализуемыми. Эти методы оценивают значения Шепли, выбирая подмножество коалиций, а не оценивая все возможные комбинации, что значительно снижает вычислительную нагрузку.
Рассмотрим промышленную ситуацию с тремя компонентами: резервуаром для воды, термометром и двигателем. Предположим, у нас есть модель МО/ГО обнаружения аномалий (AD), которая обнаруживает вредоносную активность на основе показаний этих компонентов. Используя SHAP, мы можем определить, какой вклад каждый компонент вносит в прогноз модели относительно того, является ли активность вредоносной или безопасной.

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

Этот подход имеет два основных недостатка:
- Сложность вычислений : стоимость вычислений экспоненциально возрастает с количеством признаков, что делает ее непрактичной для больших наборов данных временных рядов.
- Игнорирование временных зависимостей : пояснения SHAP предназначены для табличных данных без временных зависимостей. Агрегация постфактум может привести к неточным пояснениям, поскольку не учитывает временные связи между признаками.
Подход ShaTS: группировка перед вычислением важности
В рамках теории Шепли ценность игрока определяется исключительно путём сравнения эффективности коалиции с этим игроком и без него. Хотя метод определён на индивидуальном уровне, ничто не мешает применять его к группам игроков, а не к отдельным игрокам. Таким образом, если мы рассмотрим множество игроков N, разделённое на p групп G = {G1, …, Gp}, мы можем вычислить вектор Шепли для каждой группы Gi, оценивая предельный вклад всей группы во все возможные коалиции оставшихся групп. Формально вектор Шепли для группы Gi можно выразить следующим образом:
[ varphi(G_i) = sum_{T subseteq G setminus G_i} frac{|T|! (|G| – |T| – 1)!}{|G|!} left( v(T cup G_i) – v(T) right) ]
где:
- G — множество всех групп.
- T — коалиция групп, не включающая Gi.
- v(T) — это функция значения, которая присваивает значение каждой коалиции групп.
Основываясь на этой идее, ShaTS работает с временными окнами и обеспечивает три различных уровня группировки в зависимости от цели объяснения:
Временной
Каждая группа содержит все измерения, зарегистрированные в определённый момент времени в пределах временного окна. Эта стратегия полезна для выявления критических моментов, существенно влияющих на прогноз модели.

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

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

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

Пользовательская визуализация ShaTS
ShaTS включает визуализацию, специально разработанную для последовательных данных и трёх описанных выше стратегий группировки. Горизонтальная ось показывает последовательные окна. На левой вертикальной оси перечислены группы, а на правой вертикальной оси наложена оценка аномальности модели для каждого окна. Каждая ячейка тепловой карты в точке (i, Gj) отражает важность группы Gj для окна i. Более тёплые красные оттенки указывают на более сильный положительный вклад в аномалию, более холодные синие оттенки указывают на более сильный отрицательный вклад, а почти белый цвет означает пренебрежимо малое влияние. Фиолетовая пунктирная линия отображает оценку аномалии по окнам, а горизонтальная пунктирная линия на уровне 0,5 обозначает порог принятия решения между аномальными и нормальными окнами.
Для иллюстрации представьте модель, обрабатывающую окна длиной 10, построенные на основе трёх признаков: X, Y и Z. Когда оператор получает оповещение и хочет узнать, какой сигнал его вызвал, он проверяет результаты группировки признаков. На следующем рисунке, в районе окон 10–11, оценка аномалии превышает пороговое значение, а атрибуция по признаку X усиливается. Эта закономерность указывает на то, что решение принимается в первую очередь по признаку X.

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

Экспериментальные результаты: тестирование ShaTS на наборе данных SWaT
В нашей недавней публикации мы провели валидацию ShaTS на испытательном стенде Secure Water Treatment (SWaT) – промышленной системе водоснабжения с 51 датчиком/исполнительным механизмом, организованной на шести этапах (P1–P6). В качестве детектора служил стековый Bi-LSTM, обученный на оконных сигналах, и мы сравнили ShaTS с апостериорным KernelSHAP, используя три точки зрения: временную (какой момент в окне имеет значение), датчик/исполнительный механизм (какое устройство) и процесс (какой из шести этапов).
В ходе атак ShaTS давал узкие, интерпретируемые полосы, которые точно определяли истинный источник — вплоть до уровня датчика/исполнительного механизма или установки, — тогда как SHAP, полученный постфактум, имел тенденцию распылять важность между множеством групп, что затрудняло анализ первопричин. ShaTS также был быстрее и масштабируемее: группировка сужает набор игроков, поэтому пространство коалиции значительно уменьшается; время выполнения остаётся практически постоянным при увеличении длины окна, поскольку количество групп не меняется; а выполнение на графическом процессоре дополнительно ускоряет метод, делая практичным использование в режиме, близком к реальному времени.
Практический пример: интеграция ShaTS в ваш рабочий процесс
В этом пошаговом руководстве показано, как подключить ShaTS к типичному рабочему процессу Python: импортировать библиотеку, выбрать стратегию группировки, инициализировать пояснитель с помощью обученной модели и фоновых данных, вычислить групповые значения Шепли на тестовом наборе и визуализировать результаты. В примере предполагается, что используется модель временных рядов PyTorch, а данные имеют оконный формат (например, shape [window_len, n_features] на выборку).
1. Импортируйте ShaTS и настройте Explainer.
В вашем скрипте Python или блокноте начните с импорта необходимых компонентов из библиотеки ShaTS. Хотя репозиторий предоставляет абстрактный класс ShaTS, обычно вы создаёте экземпляр одной из его конкретных реализаций (например, FastShaTS).
импорт shats из shats.grouping импорт TimeGroupingStrategy из shats.grouping импорт FeaturesGroupingStrategy из shats.grouping импорт MultifeaturesGroupingStrategy
2. Инициализируйте модель и данные
Предположим, у вас есть предобученная модель временных рядов PyTorch и фоновый набор данных, который должен представлять собой список тензоров, представляющих типичные выборки данных, с которыми модель сталкивалась во время обучения. Если вы хотите лучше разобраться в фоновом наборе данных, ознакомьтесь с этой статьёй в блоге Кристофа Молнара.
модель = MyTrainedModel() случайные_выборки = случайный.выборка(диапазон(len(trainDataset)), 100) фон = [trainDataset[idx] для idx в random_samples] shapley_class = shats.FastShaTS(модель, support_dataset=фон, grouping_strategy=ОсобенностиGroupingStrategy(имена=имена_переменных)
3. Вычислить значения Шепли
После инициализации объясняющего модуля вычислите значения ShaTS для тестового набора данных. Тестовый набор данных должен быть отформатирован аналогично фоновому набору данных.
shats_values = shaTS.compute(testDataset)
4. Визуализируйте результаты
Наконец, используйте встроенную функцию визуализации для построения графика значений ShaTS. Вы можете указать, какой класс (например, аномальный или нормальный) вы хотите описать.
shaTS.plot(shats_values, test_dataset=testDataset, class_to_explain=1)
Ключевые выводы
- Фокусированная атрибуция : ShaTS обеспечивает более целенаправленную атрибуцию, чем постфактум SHAP, что упрощает выявление первопричины в моделях временных рядов.
- Эффективность : Сокращая количество игроков в группах, ShaTS значительно уменьшает количество коалиций, подлежащих оценке, что приводит к ускорению вычислений.
- Масштабируемость : ShaTS сохраняет стабильную производительность даже при увеличении размера окна благодаря фиксированной групповой структуре.
- Ускорение графического процессора : ShaTS может использовать ресурсы графического процессора, что еще больше повышает его скорость и эффективность.
Попробуйте сами.
Интерактивная демонстрация
Сравните ShaTS с постфактумным SHAP на синтетических временных рядах здесь. Обучающее видео можно найти в следующем видео.
Открытый исходный код
Модуль ShaTS полностью документирован и готов к подключению к вашему конвейеру машинного и глубокого обучения. Код доступен на Github.
Надеюсь, вам понравилось! Свяжитесь со мной, если у вас есть вопросы, вы хотите оставить отзыв или просто хотите представить свои проекты.
Источник: towardsdatascience.com























