Предписывающее моделирование выходит на один шаг за рамки прогностического моделирования.
Делиться

В этой статье я продемонстрирую, как перейти от простого прогнозирования результатов к активному вмешательству в системы для достижения желаемых целей. На практических примерах предиктивного обслуживания я покажу, как решения, основанные на данных, могут оптимизировать операции и сократить время простоя.
Анализ данных начинается с описательного анализа для исследования «того, что произошло». В предиктивном анализе мы стремимся к инсайтам и определяем «то, что произойдет». С помощью байесовского предписывающего моделирования мы можем выйти за рамки прогнозирования и стремиться вмешаться в результат. Я покажу, как можно использовать данные, чтобы «заставить это произойти». Для этого нам нужно понять сложные отношения между переменными в (закрытой) системе. Моделирование причинно-следственных сетей является ключевым, и, кроме того, нам нужно сделать выводы для количественной оценки того, как система влияет на желаемый результат. В этой статье я кратко начну с объяснения теоретической основы. Во второй части я покажу, как строить причинно-следственные модели, которые направляют принятие решений для предиктивного обслуживания. Наконец, я объясню, что в реальных сценариях есть еще один важный фактор, который необходимо учитывать: насколько экономически эффективно предотвращение сбоев? Я буду использовать bnlearn для Python во всех своих анализах.
Этот блог содержит практические примеры! Это поможет вам быстрее учиться, лучше понимать и дольше помнить. Возьмите кофе и попробуйте! Раскрытие информации: я автор пакетов Python bnlearn.
Что вам нужно знать о прескриптивном анализе: краткое введение.
Предписывающий анализ может быть самым мощным способом понять эффективность вашего бизнеса, тенденции и оптимизировать эффективность, но это, безусловно, не первый шаг, который вы делаете в своем анализе. Первым шагом должно быть, как всегда, понимание данных с точки зрения описательного анализа с помощью разведочного анализа данных (EDA). Это шаг, на котором нам нужно выяснить, «что произошло». Это очень важно, потому что это дает нам более глубокое понимание переменных и их зависимостей в системе, что впоследствии помогает очистить, нормализовать и стандартизировать переменные в нашем наборе данных. Очищенный набор данных является основой любого анализа.
С очищенным набором данных мы можем начать работать над нашей предписывающей моделью. В общем, для этих типов анализа нам часто требуется много данных. Причина проста: чем лучше мы можем изучить модель, которая точно соответствует данным, тем лучше мы можем обнаружить причинно-следственные связи. В этой статье я буду часто использовать понятие «система», поэтому позвольте мне сначала дать определение «системе». Система в контексте предписывающего анализа и причинно-следственного моделирования представляет собой набор измеримых переменных или процессов, которые влияют друг на друга и производят результаты с течением времени. Некоторые переменные будут ключевыми игроками (драйверами), в то время как другие менее значимы (пассажирами).
В качестве примера предположим, что у нас есть система здравоохранения, которая содержит информацию о пациентах с их симптомами, лечением, генетикой, переменными окружающей среды и поведенческой информацией. Если мы понимаем причинно-следственный процесс, мы можем вмешаться, влияя на (одну или несколько) движущих переменных. Чтобы улучшить результат для пациента, нам может потребоваться только относительно небольшое изменение, например, улучшение его рациона питания. Важно, что переменная, на которую мы хотим повлиять или в которую мы должны вмешаться, должна быть движущей переменной, чтобы она была эффективной. Вообще говоря, изменение переменных для желаемого результата — это то, что мы делаем в нашей повседневной жизни. От закрытия окна, чтобы не зашел дождь, до советов друзей, семьи или специалистов, которые мы принимаем во внимание для определенного результата. Но это также может быть более пробной и ошибочной процедурой. С помощью предписывающего анализа мы стремимся определить движущие переменные, а затем количественно оценить, что происходит при вмешательстве.
При предписывающем анализе нам сначала необходимо отделить переменные водителя от пассажиров, а затем количественно оценить, что происходит при вмешательстве.
В этой статье я сосредоточусь на приложениях с системами, которые включают физические компоненты, такие как мосты, насосы, дамбы, в сочетании с экологическими переменными, такими как осадки, уровень рек, эрозия почвы и человеческие решения (например, графики и затраты на техническое обслуживание). В области управления водными ресурсами существуют классические случаи сложных систем, где предписывающий анализ может предложить серьезную ценность. Отличным кандидатом для предписывающего анализа является предиктивное обслуживание, которое может увеличить время работы и снизить затраты. Такие системы часто содержат различные датчики, что делает их богатыми данными. В то же время переменные в системах часто взаимозависимы, что означает, что действия в одной части системы часто распространяются и влияют на другие. Например, открытие шлюза выше по течению может изменить давление воды и динамику потока ниже по течению. Именно эта взаимосвязь является причиной того, почему важно понимать причинно-следственные связи. Когда мы понимаем ключевые части во всей системе, мы можем более точно вмешиваться. С помощью байесовского моделирования мы стремимся раскрыть и количественно оценить эти причинно-следственные связи.
Переменные в системах часто взаимозависимы, а это означает, что вмешательство в одну часть системы часто распространяется и влияет на другие.
В следующем разделе я начну с введения в байесовские сети вместе с практическими примерами. Это поможет вам лучше понять реальный вариант использования в следующих разделах.
Байесовские сети и причинно-следственные связи: строительные блоки.
По своей сути байесовская сеть — это графическая модель, которая представляет вероятностные связи между переменными. Эти сети с причинно-следственными связями являются мощными инструментами для предписывающего моделирования. Давайте разберем это на классическом примере: система полива . Предположим, вы пытаетесь выяснить, почему ваша трава мокрая. Одна из возможностей — вы включили полив; другая — пошел дождь. Погода тоже играет свою роль: в пасмурные дни вероятность дождя выше, и поведение полива может отличаться в зависимости от прогноза. Эти зависимости образуют сеть причинно-следственных связей, которые мы можем моделировать. С помощью bnlearn для Python мы можем моделировать связи, как показано в блоке кода:
# Установка пакета Python bnlearn pip install bnlearn # Импорт библиотеки import bnlearn as bn # Определение причинно-следственных связей sides = [('Cloudy', 'Sprinkler'), ('Cloudy', 'Rain'), ('Sprinkler', 'Wet_Grass'), ('Rain', 'Wet_Grass')] # Создание байесовской сети DAG = bn.make_DAG(edges) # Визуализация сети bn.plot(DAG)

Это создает направленный ациклический граф (DAG), где каждый узел представляет переменную, каждое ребро представляет причинно-следственную связь, а направление ребра показывает направление причинно-следственной связи. До сих пор мы не моделировали никаких данных, а только предоставили причинно-следственную структуру на основе наших собственных знаний о погоде в сочетании с нашим пониманием/гипотезой системы. Важно понимать, что такой DAG формирует основу для байесовского обучения! Таким образом, мы можем либо создать DAG самостоятельно, либо изучить структуру из данных с помощью структурного обучения. См. следующий раздел о том, как изучить данные формы DAG.
Изучение структуры на основе данных.
Во многих случаях мы заранее не знаем причинно-следственных связей, но у нас есть данные, которые мы можем использовать для изучения структуры. Библиотека bnlearn предоставляет несколько подходов к структурному обучению, которые можно выбрать на основе типа входных данных (дискретные, непрерывные или смешанные наборы данных); алгоритм PC (названный в честь Питера и Кларка), исчерпывающий поиск, поиск по холму, Чжоу-Лю, Naivebayes, TAN или Ica-lingam. Но решение о типе алгоритма также основано на типе сети, к которой вы стремитесь. Например, вы можете установить корневой узел, если у вас есть для этого веская причина. В блоке кода ниже вы можете изучить структуру сети, используя фрейм данных, где переменные являются категориальными. Выходными данными является DAG, идентичный показанному на рисунке 1.
# Импорт библиотеки import bnlearn as bn # Загрузка набора данных Sprinkler df = bn.import_example(data='sprinkler') # Показать фрейм данных print(df) +———+————+——+————+ | Облачно | Sprinkler | Rain | Wet_Grass | +———+————+——+————+ | 0 | 0 | 0 | 0 | | 1 | 0 | 1 | 1 | | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | | 1 | 1 | | … | … | … | | 1000 | 1 | 0 | 0 | +———+————+——+————+ # Модель обучения структуры = bn.structure_learning.fit(df) # Визуализация сети bn.plot(DAG)
DAG имеют значение для причинно-следственных связей.
Суть в том, что направленные ациклические графы (DAG) отображают причинно-следственные связи между переменными. Эта изученная модель формирует основу для выводов и ответов на такие вопросы, как:
- Если мы изменим X, что произойдет с Y?
- Или каков эффект вмешательства в X при сохранении постоянства других?
Выводы имеют решающее значение для предписывающего моделирования, поскольку они помогают нам понять и количественно оценить влияние переменных на вмешательство. Как упоминалось ранее, не все переменные в системах представляют интерес или подлежат вмешательству. В нашем простом варианте использования мы можем вмешаться для мокрой травы на основе разбрызгивателей, но мы не можем вмешаться для мокрой травы на основе дождя или облачных условий, потому что мы не можем контролировать погоду. В следующем разделе я углублюсь в практический вариант использования с реальным примером по предиктивному обслуживанию. Я покажу, как строить и визуализировать причинно-следственные модели, как изучать структуру из данных, вносить вмешательства, а затем количественно оценивать вмешательство с помощью выводов.
Источник: towardsdatascience.com

























