Причинно-наслідкове відкриття : чи кукурікання півника спричиняє схід сонця?

10 рядків коду Python для автоматизації причинного виявлення, які ви повинні побачити

Фото Єгор Мизник on Unsplash

У центрі мого останнього дослідження було причинно-наслідковий висновок завдяки зростаючій кількості запитів, які я отримую від клієнтів, перейти від прогнозів машинного навчання до відповіді на запитання «що-якщо?» тип запитань для досягнення впливу та результатів.

Однією з речей, яка мене спочатку заінтригувала, було «Як будуються причинно-наслідкові діаграми?». У багатьох онлайн-прикладах вони, здається, оживають повністю сформованими без пояснення того, як були визначені вузли та зв’язки.

Це змусило мене прочитати «Книгу чому» Джудеї Перл і Дани Маккензі (кілька разів!), і одна з висловлених точок зору полягає в тому, що ви не можете провести реверсивну інженерію причинно-наслідкової діаграми, також відомої як спрямований ациклічний графік (DAG), з даних поодинці.

Дані можуть виявити кореляцію, але не причинно-наслідковий зв’язок, тож як можна «виявити» причинно-наслідковий зв’язок?

Примітка: усі набори даних у цій статті ліцензовані для загального використання. Усі джерела та посилання можна знайти в розділі посилань у кінці статті.

Перш ніж ми зануримося в причинно-наслідкові відкриття, будь ласка, подумайте про...

Приєднання до Medium за реферальним посиланням (Я отримаю частину гонорару, якщо ви зареєструєтесь за цим посиланням).

Підписка на безкоштовну електронну пошту щоразу, коли я публікую нову історію.

Швидко переглянувши мої попередні статті.

Завантажую мою безкоштовну систему прийняття рішень на основі стратегічних даних.

Відвідування мого веб-сайту з вивчення даних — Блог даних.

Розглянемо підрахунки значень із наступного двійкового набору даних…

Примітка: набір даних про схід сонця/півника є синтетичними даними, створеними автором. Будь ласка, перегляньте розділ посилань у кінці статті, щоб отримати повну інформацію про джерело та посилання.

Зображення автора

Ми бачимо, що півник співає, коли сходить сонце, у 90.25% спостережень, але як ми дізнаємося, чи схід сонця викликає півень, чи крик півня викликає схід сонця, виходячи лише з даних?

Кількість випадків, коли півник кукурікає, коли сонце не сходить, або коли сонце сходить, але півник мовчить, практично однакова (50,000 47,500 проти XNUMX XNUMX), тому причинно-наслідкову відповідь неможливо знайти шляхом порівняння відносних обсягів даних.

Одним із підходів може бути розгляд тимчасового аспекту. Якщо сонце сходить раніше, ніж кричить півник, це буде хорошим показником причинно-наслідкового зв’язку, але що, якщо наш півник встає рано?

Відповідь полягає в тому, щоб проконсультуватися з експертами домену. Якби ми могли зібрати команду з астролога, фізика та птахівника, вони б дійшли висновку, що сонце змушує півника кукурікати, а не навпаки!

Фото Федеріко Респіні on Unsplash

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

Існує алгоритм під назвою «NOTEARS», який стверджує, що він здатний реалізувати причинно-наслідкове відкриття, тож давайте спробуємо його та подивимось, що він може зробити…

Примітка: набір даних про віспу є синтетичними даними, створеними автором, будь ласка, перегляньте розділ посилань у кінці статті, щоб отримати повну інформацію про джерело та посилання.

Зображення автора

Цей набір даних моделює причинно-наслідкові зв’язки під час вакцинації проти віспи. Давайте запустимо алгоритм NOTEARS проти нього та побачимо, що він може зробити…

[('Реакція?', 'Вакцинація?'),
(«Віспа?», «Реакція?»),
(«Смерть?», «Реакція?»),
(«Смерть?», «Віспа?»)]

Якби ми візуалізували результати, отримані NOTEARS, це виглядало б так...

Зображення автора

Це виглядає не дуже добре, правда? Згідно з NOTEARS смерть викликає віспа. Тимчасовий аспект говорить нам, що віспа виникає на першому місці, тому вона не може бути спричинена смертю. Також віспа не може спричинити реакцію (вакцина викликає реакцію), і реакція точно не може спричинити вакцинацію.

Використовуючи знання експертів у галузі, ми можемо легко встановити, що вакцинація має причинно-наслідковий вплив на те, чи є у пацієнта реакція та чи розвивається у нього хвороба, а реакція та віспа мають причинний зв’язок зі смертю…

Зображення автора

Отже, ми встановили, що навіть у дуже простій причинно-наслідковій моделі алгоритм причинного виявлення NOTEARS не дає правильних результатів. Крім того, читач однієї з моїх попередніх статей зазначив, що NOTEARS не працює в Python 3.9, і оскільки я збираюся оновити, це ще одна велика проблема.

Якщо ви хочете прочитати більше про непридатність NOTEARS для причинності, ось чудова академічна стаття — https://arxiv.org/pdf/2104.05441.pdf (Маркус Кайзер і Максим Сіпос).

Перш ніж ми відмовимося від повністю автоматизованого відкриття причинно-наслідкових зв’язків, давайте подивимося на альтернативу NOTEARS, алгоритм «Лассо» –

Примітка: набір даних про доходи/заробітки випускників ліцензовано для загального користування. Будь ласка, перегляньте розділ посилань у кінці статті, щоб отримати повну інформацію про джерело та посилання.

Зображення автора
Зображення автора

Боже, ласо - це катастрофа! Він передбачив, що все спричиняє все інше і що вузли спричиняють себе також!

Останніми моїми спробами були спробувати алгоритми GES, GIES і LINGAM, але всі вони потребують бібліотек R. Я не використовую R, і навіть якби мені вдалося правильно налаштувати конфігурацію, я б ніколи не зміг створити портативний код, який могли б використовувати інші дослідники даних.

Доступні бібліотеки та алгоритми виявлення причинно-наслідкових зв’язків не працюють, і це підтвердило точку зору, висловлену в «Книзі чому», тобто те, що причинно-наслідковий зв’язок не може бути зворотно сконструйований лише на основі даних.

Цей висновок змусив мене розробити власний підхід...

Фото Аманда Джонс on Unsplash

Картки на стіл, я не написав алгоритму причинного відкриття. Скоріше мій алгоритм реалізує кореляційне відкриття з родзинкою (без каламбуру!).

Коли я відмовився від бібліотек причинних відкриттів, мені все ще потрібен був спосіб візуалізації причинно-наслідкових зв’язків як відправної точки для розмови з експертами в області.

Я подумав, що можу легко обчислити кореляції між функціями/вузлами, і що це було б принаймні хорошою відправною точкою.

Я розвинув своє мислення наступним чином — у моделях причинного відкриття ми зазвичай ідентифікуємо «ефект», тобто функцію даних, яка нас цікавить (як «мішень» у прогнозах машинного навчання). У прикладі з віспою це «Смерть?», а у прикладі із заробітками випускників це заробіток «greaterThank50k».

Тому, якщо існує кореляція між будь-якою ознакою та «ефектом», причинно-наслідковий напрямок має бути від інших ознак до ефекту, оскільки він знаходиться на «кінці лінії».

Моїм наступним кроком була розробка рекурсивного алгоритму, який можна візуалізувати таким чином...

Зображення автора

Дублікати та двонаправлені посилання повинні бути примусово виключені. Я також хотів мати можливість явно включати або виключати з’єднання (краї) і явно виключати функції (вузли).

Це 10 рядків рекурсивного коду Python, який я придумав для впровадження причинного відкриття

Щоб показати, як працює рішення, я вибрав деякі дані про скасування бронювання готелів.

Давайте почнемо з читання даних і подивимось на кореляції…

Примітка: набір даних про бронювання готелів ліцензовано для загального використання. Будь ласка, перегляньте розділ посилань у кінці статті, щоб отримати повну інформацію про джерело та посилання.

Зображення автора

Перший запуск алгоритму виявлення передбачає зменшення кількості ітерацій до 1, тому ми просто дивимось на кореляції (які мають бути причинно-наслідковими) з «ефектом», тобто чи скасовано бронювання готелю чи ні…

Зображення автора

Добре, це непоганий початок, давайте збільшимо кількість ітерацій / рекурсій / шарів до 3, трохи налаштуємо кореляційний поріг і подивимося, що ми отримаємо ...

Зображення автора

Гаразд, теж не дуже погано, але він трохи «завантажений», тому наступним кроком буде виключення деяких вузлів, які, на нашу думку, можуть спричиняти певний шум (примітка: у реальному бізнес-випадку ми б спілкувалися з наших експертів із домену на цьому етапі).

Зображення автора

Це починає виглядати краще. Пам’ятайте, що мій алгоритм впевнений, що посилання на «IsCancelled» є причинно-наслідковими, оскільки це «ефект», отже, після нього нічого не відбувається.

Інші шари дерева є просто корелятивними, хоча напрямок стрілок було додано просто на основі порядку, у якому їх знайшов алгоритм.

Працюючи з експертами домену (або мій власний досвід бронювання готелів у цьому випадку!), я помітив наступне –

  • Посилання від «DifferentRoomAssigned» до «LeadTime» неправильне, тому що тривалий час бронювання збільшує ймовірність того, що бронювання номера зміниться, а не навпаки.
  • Кореляція між «BookingChanges» і «DifferentRoomAssigned» нижча за порогове значення, але вона може бути значною причинно-наслідковою причиною, тому її потрібно включити.

Наступна спроба наказує алгоритму зробити ці виправлення –

Зображення автора

«Неспостережуваний змішувач» — це фактор, який, на нашу думку, впливає на нашу причинно-наслідкову модель, забезпечуючи зв’язок між деякими вузлами, але його не було виміряно і, отже, не включено до діаграми.

Мій досвід відвідування готелів і мої знання набору даних готелів змусили мене запідозрити, що існує «неспостережуваний зловмисник», який впливає на дані готелів.

У даних є два готелі — «міський» і «курортний». Це привело мене до гіпотези про те, що неспостережуваним змішувачем у цій причинно-наслідковій моделі є “Причина проживання в готелі”.

Моя гіпотеза така відпочиваючі в основному зупиняються в курортному готелі, а ділові люди та туристи - в міському готелі.

Крім того, я висунув гіпотезу, що ці дві групи мають різну поведінку і що це «неспостережуваний фактор» (не спостережуваний, тому що дані не фіксують «причину перебування»).

NOTEARS та інші подібні алгоритми не можуть врахувати «неспостережувані змішування», але алгоритм, який я розробив, може врахувати їх, явно включивши їх таким чином...

Зображення автора

Результатом останньої ітерації є правдоподібна, читабельна та зрозуміла візуалізація причинно-наслідкових зв’язків у даних готелю, яку я з упевненістю міг би вивчити й уточнити разом із експертами галузі. Це ключові моменти…

  • Існує «непомічена причина», яка є основною причиною перебування (відпустка чи бізнес/виїзд у місто).
  • «Країна» має причинно-наслідковий вплив на неспостережуваний змішувач — ті, хто подорожує з деяких країн, швидше за все, будуть у відпустці.
  • Те саме стосується «TotalGuests». Великі групи, швидше за все, будуть відпочивати, холостяки – у відрядженнях, а двоє – у міських відпустках.
  • Непомічена «причина перебування» має причинно-наслідковий вплив на «LeadTime», «HotelType» і «DepositType».
  • «LeadTime», «DifferentRoomAssigned», «HotelType», «DepositType» і «Reason for Stay» (U) мають причинно-наслідковий вплив на «IsCanceled».

Причинне відкриття це процес виходу за межі кореляційних зв’язків до виявлення причинно-наслідкових зв’язків (тобто, на якому кінці кореляційної лінії знаходиться стрілка?). Це неможливо або, принаймні, надзвичайно важко автоматизувати за допомогою таких алгоритмів, як NOTEARS, оскільки відповіді існують не в самих даних.

Проте все ще існує критична потреба у візуалізації причинно-наслідкового зв’язку, щоб її можна було досліджувати експертами в галузі для побудови причинно-наслідкової діаграми (також відомої як спрямований ациклічний графік або DAG).

У цій статті було запропоновано алгоритм, заснований на розширенні кореляційного відкриття, з використанням лише 10 рядків коду Python, який можна використовувати з експертами домену для неодноразового уточнення чутливості (порогове значення), а також для виправлення, додавання або видалення посилань (стрілки) і виключення нерелевантних вузлів.

У наступних статтях ці причинно-наслідкові діаграми використовуватимуться для побудови повномасштабної причинно-наслідкової моделі машинного навчання, яка зможе відповісти на складне запитання «що, якщо?» типу запитань від клієнтів і керівників підприємств.

Якщо вам сподобалася ця стаття, подумайте про...

Приєднання до Medium за реферальним посиланням (Я отримаю частину гонорару, якщо ви зареєструєтесь за цим посиланням).

Підписка на безкоштовну електронну пошту щоразу, коли я публікую нову історію.

Швидко переглянувши мої попередні статті.

Завантажую мою безкоштовну систему прийняття рішень на основі стратегічних даних.

Відвідування мого веб-сайту з вивчення даних — Блог даних.

Sun Rising / Cockerel Crowing Data

Дані про віспу

Заробітки випускників / Дані про доходи за переписом

Дані бронювання готелів

Причинно-наслідкове відкриття : чи кукурікання півника спричиняє схід сонця? Перепубліковано з джерела https://towardsdatascience.com/causal-discovery-does-the-cockerel-crowing-cause-the-sun-to-rise-f4308453ecfa?source=rss—-7f60cf5620c9—4 через https://towardsdatascience. com/feed

<!–

->

Часова мітка:

Більше від Консультанти з блокчейнів