Привет! Меня зовут Дмитрий Литвиненко, я Data Scientist в компании Prooftech IT. В первой части статьи мы задали довольно обширную базу по событиям, корреляции и причинности. Эта часть статьи более глубоко погружается в причинность и причуды с ней связанные. Что примерно происходит в мозгах людей и мощных системах мониторинга? Как же мы:

  • восстанавливаем причинность;

  • (не)справляемся с иллюзиями в процессе этого;

  • и, наконец, находим способы ослабить иллюзии?

Восстановление причинности и атрибуция

В жизни

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

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

Мы можем рассматривать понятия, такие как "животные" или "растения", на высоком уровне абстракции, прежде чем углубляться в более конкретные категории, вроде "собаки" или "дубы". Можем строить причинно-следственные связи на уровнях ниже, выше, или между ними.

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

В классических экспериментах с пациентами, у которых связь между полушариями мозга была нарушена хирургическим путем, ученые, такие как Роджер Сперри и Майкл Гэззанига, обнаружили интересный эффект. Если одной половине мозга давалась команда, которую другая не могла воспринять, пациенты все равно находили объяснение своим действиям, даже если оно не соответствовало действительности. Например, если левое полушарие получало команду встать, пациент вставал, но объяснял это тем, что ему нужно что-то взять или куда-то пойти, хотя реальная причина оставалась скрытой. У людей с нормальной связью между полушариями такие объяснения не возникают, так как информация свободно передается от одного полушария к другому.

Ну и как не упомянуть пессимистичные интерпретации действий и слов других людей?

Событие А - я надел шапку, в которой не уверен, что хорошо выгляжу, события B1, B2, B3, ..... - различные действия и взгляды прохожих. Из всего многообразия событий B{i} мой мозг социального животного обязательно достанет событие B26, в котором кто-то посмеялся, и события B19, B30 - в которых кто-то посмотрел на меня. Опасения о виде шапки присвоят иррационально большую уверенность в причинности A -> B26, A -> B19, A -> B30.

В IT-мониторинге

В IT-мире восстановление причинности — тоже непростая задача из-за огромного количества событий и их взаимосвязей. Более того, системы могут сильно меняться со временем, и в них достаточно много акторов.

То, что я написал о жизни, в системах мониторинга несколько ограничено:

  • Во-первых, сложно создать такой же крутой механизм построения причинно-следственных связей между абстракциями, как в нашем мозге, ещё и сохранив при этом интерпретируемость всей системы;

  • Во-вторых, наш мир всё же более стабилен, чем инфраструктура.

Какие методы нам помогают?

Обогащение дополнительными тегами

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

У события стоит тег 'application'. И мы знаем, на каком сервере крутится это приложение. Можно добавить тег 'server', рассматривая теперь ещё и это уровень.

Байесовские сети

Это графические модели, изображающие вероятностные зависимости между событиями. Чтобы использовать их, мы должны установить временной промежуток, в течение которого мы будем считать события связанными. Возьмём его за 30 минут:

13:35 Встал с кровати 13:45 Позавтракал 13:50 Почистил зубы 15:00 Пошёл гулять (не будет связано с событиями выше из-за того, что прошло слишком много времени)

Байесовские сети основаны на формуле условной вероятности:

Она звучит как "(вероятность события A при условии, что B произошло в течение последних 30 минутравна (вероятности наступления событий A и B с разрывом не более 30 минутделённой на (вероятность события B)". В общем, жуть.

С набором данных даже малого размера можно было бы провести расчёт условных вероятностей, и прийти к чему-то вроде:

  • Вероятность того, что (некто "Почистит зубы" при условии | что этот некто "Совершил действие") = числу от 0 до 1, где 1 - что событие точно произойдёт

  • P("Почистит зубы"|"Встал с кровати") = 0.9 - логично

  • P("Почистит зубы"|"Позавтракал") = 0.95 - логично

  • P("Почистит зубы"|"Пообедал") = 0.01 - логично

  • P("Почистит зубы"|"Поужинал") = 0.7 - логично, если вспомнить, что поужинать мог не дома

  • P("Почистит зубы"|"Поел") = 0.5 - логично, но заметьте, как вероятность снижается

    В этом микропримере, "Поел" - это кластер из событий "Позавтракал", "Пообедал", "Поужинал". В некоторых случаях можно использовать его вместо самих событий. С созданием таких кластеров, кстати, помогает машинное обучение - в частности, представление текста событий в виде векторов (больших размерностей, порядка 700) и рассмотрения того, как распределены события во всём векторном пространстве, и можно ли легко выделить группы событий.

Задавая порог значимости связей, например 0.5, можно получить большой красивый граф поведения человека :)

Кросс-корреляция

Этот метод напрямую сравнивает два временных ряда событий (A произошло, B произошло), пошагово сдвигая один ряд во времени и оценивая, насколько те совпадают при каждом сдвиге.

Предположим, событие A (обновление системы) и событие B (возникновение ошибок) зафиксированы со временной разницей в:+1 минута: 1 раз+2 минуты: 5 раз+3 минуты: 40 раз+4 минуты: 4 раза+5 минут: 0 раз

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

Иллюзии и сложности

Вот мы выбрали метод, запустили его, отбросили слабые связи, а вершины такие:

Как такой треугольник вообще мог получиться? Я же точно знаю, что C из B не следует. Почему у BC такой большой вес?

Эффект общей причины

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

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

Транзитивная причинность

Это явление часто вводит в заблуждение: когда событие A вызывает событие B, а B, в свою очередь, приводит к событию C. Так можно ошибочно предположить, что A напрямую вызывает C. Но если и не предположить, то всё равно получается одна лишняя связь.

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

Эту же ошибку можно совершить в сложных технических системах.

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

Скрытая переменная

Это как эффект общей причины, только страшнее - общая причина остаётся вне поля зрения.

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

Так как же избежать иллюзий?

В мониторинге

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

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

В жизни

В повседневной жизни важно осознавать свои когнитивные искажения и склонности к определенным выводам. На этот счёт натыкался на интересную статью тут же, на Хабре в контексте разработки ПО.

Однако будьте готовы к встрече с иллюзиями, похожими на те, что описаны выше. Помните: ваша уверенность в причинно-следственных связях — это всего лишь ощущение, которое может не совпадать с реальностью.

Мы часто подгоняем причины под следствия, создавая логические цепочки, и в этом процессе нередко проявляем предвзятость. Чтобы минимизировать ошибки, используйте подходы вроде бритвы Оккама (отдавайте предпочтение более простым объяснениям) и рассматривайте противоположные интерпретации. Например, если ситуация вызывает у вас тревогу, попробуйте взглянуть на неё более оптимистично. Если же вы склонны к излишнему оптимизму, например, в оценке сроков проекта или доверяя советам консультанта в магазине, представьте возможные негативные сценарии. Такой баланс помогает принимать более взвешенные решения.

Что мы узнали?

Мы всегда стремимся найти первопричины происходящих событий и предсказать их дальнейшее развитие, полагаясь на нашу внутреннюю карту причинно-следственных связей. Однако, поскольку мы не машины и не ведем статистику, наши прогнозы часто смещаются то в оптимистичную, то в пессимистичную сторону.

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

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

Мы с вами вспомнили и про когнитивные искажения. Думаю, если вы хорошенько ознакомитесь с ними и выберете ваши любимые искажения, то иррациональные ошибки в поиске причин будут преследовать вас куда реже :)

Помните ли вы, как стали жертвой иллюзий определения причинности? Какие иррациональные приёмы вы использовали, чтобы усложнить себе жизнь, но потом отыскали их? Если вспомните чего-нибудь, обязательно поделитесь!

Комментарии (2)


  1. Wagok
    19.11.2024 11:42

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

    Тем не менее считаю полезным «лишний раз» провести анализ и попробовать выявить «эффекты» и особенности человеческого мышления для более формальной среды - сложной информационной системы.


    1. ProoftechIT Автор
      19.11.2024 11:42

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

      Может быть, у вас есть на примете материалы, в которых бы проводили компактный и понятный реверс-инжиниринг мозга в решении различных абстрактных задач?