Анализ чувствительности используется для определения влияния набора независимых факторов на зависимую переменную при определенных условиях.
Это сильный подход для определения того, как выходные данные модели влияют на входные данные модели в общих чертах. В этом посте я дам краткий обзор анализа чувствительности с помощью SALib, бесплатного пакета анализа чувствительности Python.
Числовое значение, известное как индекс чувствительности, часто представляет собой чувствительность каждого входа. Существует множество типов индексов чувствительности:
- Индексы первого порядка: вычисляет вклад одного входа модели в выходную дисперсию.
- Индексы второго порядка: вычисляет вклад двух входных данных модели в выходную дисперсию.
- Индекс полного порядка: количественно определяет вклад входных данных модели в выходную дисперсию, включая как эффекты первого порядка (только входные колебания), так и любые взаимодействия более высокого порядка.
Что такое SALib?
SALib основан на Python открытые источники набор инструментов для оценки чувствительности. Он имеет обособленный рабочий процесс, что означает, что он не взаимодействует напрямую с математической или вычислительной моделью. Вместо этого SALib отвечает за создание входных данных модели (с помощью одной из функций выборки) и вычисление индексов чувствительности (с помощью одной из функций анализа) на основе выходных данных модели.
Типичный анализ чувствительности SALib состоит из четырех этапов:
- Определите входные данные модели (параметры) и диапазон выборки для каждого из них.
- Чтобы создать входные параметры модели, запустите демонстрационную функцию.
- Оцените модель, используя сгенерированные входные данные, и сохраните результаты модели.
- Чтобы вычислить индексы чувствительности, используйте функцию анализа выходных данных.
Sobol, Morris и FAST — это лишь некоторые из методов анализа чувствительности, предоставляемых SALib. Многие факторы влияют на то, какой подход лучше всего подходит для данного приложения, как мы увидим позже. В настоящее время имейте в виду, что вам нужно использовать только две функции, выборку и анализ, независимо от того, какую технику вы используете. Мы проведем вас через базовый пример, чтобы проиллюстрировать, как использовать SALib.
Пример SALib – анализ чувствительности Соболя
В этом примере мы исследуем чувствительность Соболя функции Ишигами, как показано ниже. Из-за высокой нелинейности и немонотонности функция Ишигами широко используется для оценки методологий анализа неопределенности и чувствительности.
Шаги идут следующим образом:
1. Импорт SALib
Первым шагом является добавление необходимых библиотек. Функции выборки и анализа SALib хранятся отдельно в модулях Python. Импорт спутниковой выборки и функций анализа Соболя, например, показан ниже.
Мы также используем функцию Ишигами, которая доступна в качестве тестовой функции в SALib. Наконец, мы импортируем NumPy, так как SALib использует его для хранения входных и выходных данных модели в матрице.
2. Ввод модели
Затем должны быть определены входные данные модели. Функция Исигами принимает три входа: x1, x2 и x3. В SALib мы создаем словарь, в котором указывается количество входов, их имена и ограничения для каждого входа, как показано ниже.
3. Создайте образцы и модель
Затем генерируются образцы. Нам нужно создать образцы с помощью пробоотборника Saltelli, поскольку мы проводим анализ чувствительности по Соболю. В этом случае значения параметров представляют собой матрицу NumPy. Мы можем заметить, что матрица имеет размер 8000 на 3, запустив параметр values.shape. С помощью семплера Saltelli было создано 8000 сэмплов. Сэмплер Saltelli создает сэмплы, где N равно 1024 (параметр, который мы предоставили), а D равно 3 (количество входных данных модели).
Как указывалось ранее, SALib не занимается оценкой математических или вычислительных моделей. Если модель написана на Python, вы обычно просматриваете каждый входной пример и оцениваете модель:
Образцы можно сохранить в текстовый файл, если модель разработана не на Python:
Каждая строка в param values.txt представляет один вход модели. Вывод модели должен быть сохранен в другом файле в том же стиле, с одним выводом в каждой строке. После этого выходы могут быть загружены:
В этом примере мы будем использовать функцию Исигами из SALib. Эти тестовые функции можно оценить следующим образом:
4. Выполните анализ
Наконец, мы можем вычислить индексы чувствительности после загрузки результатов модели в Python. В этом примере мы будем использовать sobol.analyze для вычисления индексов первого, второго и общего порядка.
Si — это словарь Python с ключами «S1», «S2», «ST», «S1 conf», «S2 conf» и «ST conf». Ключи _conf содержат соответствующие доверительные интервалы, которые обычно устанавливаются на 95 процентов. Чтобы вывести все индексы, используйте параметр ключевого слова print для console=True. В качестве альтернативы, как показано ниже, мы можем распечатать отдельные значения из Si.
Мы видим, что x1 и x2 обладают чувствительностью первого порядка, но x3, по-видимому, не оказывает влияния первого порядка.
Если индексы полного порядка значительно больше, чем индексы первого порядка, то, скорее всего, имеют место взаимодействия более высокого порядка. Мы можем увидеть эти взаимодействия более высокого порядка, взглянув на индексы второго порядка:
Мы можем заметить, что x1 и x3 имеют значительные взаимодействия. После этого результат может быть преобразован в Pandas DataFrame для дальнейшего изучения.
5. Заговор
Для вашего удобства предусмотрены базовые средства построения графиков. Функция plot() создает объекты оси matplotlib для последующей обработки.
Заключение
SALib — это сложный набор инструментов для анализа чувствительности. Другие методы в SALib включают тест чувствительности по амплитуде Фурье (FAST), метод Морриса и независимое измерение дельта-момент. Хотя это библиотека Python, она предназначена для работы с моделями любого типа.
SALib предлагает простой в использовании интерфейс командной строки для создания входных данных модели и оценки выходных данных модели. Проверить документация SALib чтобы узнать больше.
Оставьте комментарий