Odkrycie przyczyn: czy pianie koguta powoduje wschody słońca?

10 linii kodu Pythona do automatyzacji odkrywania przyczyn, które musisz zobaczyć

Photo by Egor Myznik on Unsplash

Moje ostatnie badania skupiały się głównie na tym wnioskowania przyczynowego motywowani rosnącymi prośbami, które otrzymuję od klientów, aby wyjść poza przewidywania uczenia maszynowego i odpowiedzieć na pytanie „co jeśli?” wpisz pytania, aby wpłynąć na wpływ i wyniki.

Jedną z rzeczy, która początkowo mnie zaintrygowała, było: „Jak zbudowane są diagramy przyczynowe?”. W wielu przykładach dostępnych w Internecie wydają się one ożywać w pełni uformowane, bez wyjaśnienia, w jaki sposób zidentyfikowano węzły i łącza.

To doprowadziło mnie do przeczytania „Księgi powodów” Judei Pearl i Dany Mackenzie (kilka razy!) i wyraziłem jeden z poglądów, że nie można dokonać inżynierii wstecznej diagramu przyczynowego, znanego również jako skierowany graf acykliczny (DAG), na podstawie danych sam.

Dane mogą ujawnić korelację, ale nie związek przyczynowy, więc jak można „odkryć” związek przyczynowy?

Uwaga: wszystkie zestawy danych w tym artykule są objęte licencją do użytku publicznego. Wszystkie źródła i odniesienia znajdują się w sekcji odniesienia na końcu artykułu.

Zanim zagłębimy się w odkrywanie przyczyn, rozważmy…

Dołączam do Medium za pomocą mojego linku polecającego (Otrzymam część opłat, jeśli zarejestrujesz się za pomocą tego linku).

Subskrybowanie bezpłatnego e-maila za każdym razem, gdy opublikuję nowe opowiadanie.

Szybki przegląd moich poprzednich artykułów.

Pobieram bezpłatne ramy podejmowania strategicznych decyzji opartych na danych.

Odwiedzanie mojej witryny poświęconej analizie danych — Blog danych.

Rozważ liczbę wartości z następującego zestawu danych binarnych…

Uwaga: zestaw danych o wschodach słońca i kogucikach to dane syntetyczne utworzone przez autora. Pełne źródło i szczegóły referencyjne można znaleźć w sekcji literatury na końcu artykułu.

Zdjęcie autora

W 90.25% obserwacji widzimy, że kogut pieje, gdy wschodzi słońce, ale skąd na podstawie samych danych wiemy, czy wschód słońca powoduje pianie koguta, czy pianie koguta powoduje wschód słońca?

Liczba przypadków, gdy kogut pieje, gdy słońce nie wschodzi, lub gdy słońce wschodzi, ale kogut milczy, jest praktycznie identyczna (50,000 47,500 w porównaniu z XNUMX XNUMX), więc nie można znaleźć związku przyczynowego poprzez porównanie względnej ilości danych.

Jednym z podejść mogłoby być spojrzenie na aspekt czasowy. Jeśli słońce wschodzi regularnie, zanim kogut zapieje, będzie to dobry wskaźnik przyczynowości, ale co, jeśli nasz kogut wstanie wcześnie?

Odpowiedzią jest skonsultowanie się z ekspertami domenowymi. Gdybyśmy mogli zebrać zespół składający się z astrologa, fizyka i hodowcy drobiu, doszliby do wniosku, że to słońce powoduje pianie koguta, a nie odwrotnie!

Photo by Federico Respiniego on Unsplash

Niezrażony wschodem słońca i pianiem kogutów, wyruszyłem w poszukiwaniu czegoś, co już istniało, co mogłoby dokonać magii odkrywania przyczynowego w oparciu o dane.

Istnieje algorytm o nazwie „NOTEARS”, który rzeczywiście twierdzi, że jest w stanie wdrożyć odkrywanie przyczynowe, więc spróbujmy i zobaczmy, co potrafi…

Uwaga: zestaw danych dotyczących ospy prawdziwej jest danymi syntetycznymi stworzonymi przez autora. Pełne źródło i szczegóły referencyjne można znaleźć w sekcji literatury na końcu artykułu.

Zdjęcie autora

Ten zbiór danych modeluje związki przyczynowo-skutkowe w szczepieniach przeciwko ospie prawdziwej. Uruchommy przeciwko niemu algorytm NOTEARS i zobaczmy, co potrafi…

[('Reakcja?', 'Szczepienie?'),
(„Ospa?”, „Reakcja?”),
(„Śmierć?”, „Reakcja?”),
(„Śmierć?”, „Ospa?”)]

Gdybyśmy mieli zwizualizować wyniki uzyskane przez NOTEARS, wyglądałoby to tak…

Zdjęcie autora

Nie wygląda to zbyt dobrze, prawda? Według NOTEARS śmierć powoduje ospę. Aspekt doczesny mówi nam, że ospa jest najważniejsza, więc nie może być spowodowana śmiercią. Ospa nie może również wywołać reakcji (szczepionka powoduje reakcję), a reakcja z pewnością nie może wywołać szczepienia.

Korzystając z wiedzy ekspertów dziedzinowych, możemy łatwo ustalić, że szczepienie ma związek przyczynowy z wystąpieniem reakcji u pacjenta i rozwojem choroby, przy czym zarówno reakcja, jak i ospa prawdziwa mają związek przyczynowy ze śmiercią…

Zdjęcie autora

Ustaliliśmy zatem, że nawet w bardzo prostym modelu przyczynowym algorytm odkrywania przyczyn przyczynowych NOTEARS nie daje poprawnych wyników. Ponadto czytelnik jednego z moich poprzednich artykułów zauważył, że NOTEARS nie działa w Pythonie 3.9, a ponieważ mam zamiar dokonać aktualizacji, jest to kolejny duży problem.

Jeśli chcesz przeczytać więcej na temat nieprzydatności NOTEARS w odniesieniu do przyczynowości, tutaj znajdziesz doskonałą pracę naukową — https://arxiv.org/pdf/2104.05441.pdf (Marcus Kaiser i Maksim Sipos).

Zanim zrezygnujemy z w pełni zautomatyzowanego odkrywania przyczyn, przyjrzyjmy się alternatywie dla NOTEARS, algorytmowi „Lasso” –

Uwaga: zestaw danych dotyczących dochodów ze spisu ludności / zarobków absolwentów jest objęty licencją do użytku publicznego. Pełne źródło i szczegóły referencyjne można znaleźć w sekcji odniesienia na końcu artykułu.

Zdjęcie autora
Zdjęcie autora

Och, Lasso to katastrofa! Przewidział, że wszystko jest przyczyną wszystkiego innego i że węzły również powodują siebie!

Moje ostatnie próby polegały na wypróbowaniu algorytmów GES, GIES i LINGAM, ale wszystkie wymagają bibliotek R. Nie używam R i nawet gdyby udało mi się poprawnie skonfigurować konfigurację, nigdy nie byłbym w stanie stworzyć przenośnego kodu, którego mogliby używać inni badacze danych.

Dostępne biblioteki i algorytmy odkrywania przyczyn nie działają, co ugruntowało pogląd wyrażony w „Księdze powodów”, mówiący, że przyczynowości nie można odtworzyć na podstawie samych danych.

Ten wniosek skłonił mnie do opracowania własnego podejścia…

Photo by Amanda Jones on Unsplash

Karty na stół, nie napisałem algorytmu odkrywania przyczynowego. Mój algorytm raczej implementuje odkrywanie korelacyjne z niespodzianką (bez zamierzonej gry słów!).

Kiedy zrezygnowałem z bibliotek odkrywania przyczyn, nadal potrzebowałem sposobu na wizualizację związku przyczynowego jako punktu wyjścia do rozmowy z ekspertami w danej dziedzinie.

Doszedłem do wniosku, że mogę łatwo obliczyć korelacje między cechami/węzłami i że byłby to przynajmniej dobry punkt wyjścia.

Rozwinąłem swoje myślenie w następujący sposób — w modelach odkrywania przyczynowego zwykle identyfikujemy „efekt”, czyli cechę danych, która nas interesuje (jak „cel” w przewidywaniach uczenia maszynowego). W przykładzie ospy jest to „Śmierć?”, a w przykładzie zarobków absolwentów jest to zarobek „większyDziękuję50 tys.”.

Dlatego też, jeśli istnieją korelacje pomiędzy jakąkolwiek cechą a „skutkiem”, kierunek przyczynowy musi przebiegać od innych cech do skutku, tak jak jest to na „końcu linii”.

Moim następnym krokiem było opracowanie algorytmu rekurencyjnego, który można zwizualizować w następujący sposób…

Zdjęcie autora

Duplikaty i linki dwukierunkowe muszą być koniecznie wykluczone. Chciałem także mieć możliwość jawnego włączania lub wykluczania połączeń (krawędzi) i jawnego wykluczania elementów (węzłów).

Oto 10 linii rekurencyjnego kodu Pythona, które wymyśliłem, aby zaimplementować odkrywanie przyczynowe

Aby zobrazować działanie rozwiązania, wyselekcjonowałem dane dotyczące danych o anulowaniu rezerwacji hotelowych.

Zacznijmy od wczytania się w dane i rzucenia okiem na korelacje…

Uwaga: zbiór danych o rezerwacjach hotelowych jest objęty licencją do użytku publicznego. Pełne źródło i szczegóły referencyjne znajdują się w sekcji referencji na końcu artykułu.

Zdjęcie autora

Pierwsze uruchomienie algorytmu odkrywania polega na ograniczeniu liczby iteracji do 1, więc patrzymy tylko na korelacje (które powinny być przyczynowe) z „efektem”, tj. tym, czy rezerwacja hotelu została anulowana, czy nie…

Zdjęcie autora

OK, to niezły początek, zwiększmy liczbę iteracji/rekurencji/warstw do 3, podkręćmy trochę próg korelacji i zobaczmy, co otrzymamy…

Zdjęcie autora

OK, też nie jest tak źle, ale jest trochę „zajęty”, więc następnym krokiem jest wykluczenie niektórych węzłów, co do których podejrzewamy, że mogą powodować część hałasu (uwaga: w prawdziwym przypadku biznesowym rozmawialibyśmy z nasi eksperci domenowi na tym etapie).

Zdjęcie autora

To zaczyna wyglądać lepiej. Pamiętaj, że mój algorytm ma pewność, że linki do „IsCancelled” są przyczynowe, ponieważ jest to „efekt”, dlatego nic po nim nie następuje.

Pozostałe warstwy drzewa są jednak po prostu skorelowane, kierunek strzałek został dodany w oparciu o kolejność, w jakiej je znalazł algorytm.

Pracując z ekspertami domenowymi (w tym przypadku z własnego doświadczenia z rezerwacjami hoteli!) zauważyłem, co następuje –

  • Link z „DifferentRoomAssigned” do „LeadTime” prowadzi w złym kierunku, ponieważ długi czas realizacji rezerwacji zwiększa prawdopodobieństwo zmiany rezerwacji pokoju, a nie odwrotnie.
  • Korelacja pomiędzy „BookingChanges” a „DifferentRoomAssigned” jest poniżej progu, ale może mieć istotny związek przyczynowo-skutkowy, dlatego należy ją uwzględnić.

Następna próba instruuje algorytm, aby dokonał tych poprawek –

Zdjęcie autora

„Niezaobserwowany czynnik zakłócający” to czynnik, który naszym zdaniem wpływa na nasz model przyczynowy, zapewniając połączenie między niektórymi węzłami, ale nie został on zmierzony i dlatego nie został uwzględniony na diagramie.

Moje doświadczenie związane z odwiedzaniem hoteli i wiedza na temat zbioru danych dotyczących hoteli wzbudziły we mnie podejrzenia, że ​​istnieje „niezaobserwowany czynnik zakłócający” wpływający na dane dotyczące hoteli.

W danych znajdują się dwa hotele – hotel „miejski” i hotel „kurortowy”. To prowadzi mnie do hipotezy, że niezaobserwowanym czynnikiem zakłócającym w tym modelu przyczynowym jest: „powód pobytu w hotelu”.

Moja hipoteza jest taka wczasowicze zatrzymują się głównie w hotelu wypoczynkowym, a ludzie biznesu i urlopowicze zatrzymują się głównie w hotelu miejskim.

Co więcej, postawiłem hipotezę, że te dwie grupy mają odmienne zachowania i że jest to „nieobserwowany czynnik zakłócający” (nieobserwowany, ponieważ dane nie uwzględniają „powodu pozostania”).

NOTEARS i inne podobne algorytmy nie są w stanie uwzględnić „nieobserwowanych czynników zakłócających”, ale opracowany przeze mnie algorytm może je uwzględnić, wyraźnie je włączając w następujący sposób…

Zdjęcie autora

Wynikiem końcowej iteracji jest wiarygodna, czytelna i zrozumiała wizualizacja związku przyczynowego w danych hotelu, którą z pewnością zbadam i udoskonalę wraz z ekspertami dziedzinowymi. To są najważniejsze punkty…

  • Istnieje „niezauważona przyczyna zakłócająca”, która jest głównym powodem pobytu (wakacje vs. służbowe / wypad do miasta).
  • Słowo „kraj” ma związek przyczynowy z niezauważonym czynnikiem zakłócającym — osoby podróżujące z niektórych krajów częściej spędzają wakacje.
  • To samo dotyczy „TotalGuests”. Duże grupy częściej wybierają się na wakacje, single wybierają się w podróż służbową, a we dwójkę podczas wycieczek do miasta.
  • Niezauważony „powód pobytu” ma skutek przyczynowy na „LeadTime”, „HotelType” i „DepositType”.
  • „LeadTime”, „DifferentRoomAssigned”, „HotelType”, „DepositType” i „Reason for Stay” (U) mają związek przyczynowy z wartością „IsCanceled”.

Odkrycie przyczynowe to proces wykraczania poza powiązania korelacyjne w celu odkrycia powiązań przyczynowych (tj. na którym końcu linii korelacyjnej a znajduje się strzałka?). Zautomatyzowanie tego za pomocą algorytmów takich jak NOTEARS nie jest możliwe lub przynajmniej niezwykle trudne, ponieważ odpowiedzi nie istnieją w samych danych.

Jednakże nadal istnieje krytyczna potrzeba wizualizacji związku przyczynowego, aby można go było zbadać wraz z ekspertami w danej dziedzinie w celu zbudowania diagramu przyczynowego (nazywanego również ukierunkowanym grafem acyklicznym lub DAG).

W tym artykule zaproponowano algorytm oparty na zwiększaniu odkrywania korelacji przy użyciu zaledwie 10 linii kodu Pythona, który może być używany przez ekspertów dziedzinowych w celu wielokrotnego udoskonalania czułości (próg) oraz poprawiania, dodawania lub usuwania łączy (strzałek) i wykluczania nieistotnych węzły.

W przyszłych artykułach te diagramy przyczynowe zostaną wykorzystane do zbudowania pełnego modelu przyczynowego uczenia maszynowego, który będzie w stanie odpowiedzieć na złożone pytania „co jeśli?” wpisz pytania od klientów i liderów biznesu.

Jeśli spodobał Ci się ten artykuł, rozważ…

Dołączam do Medium za pomocą mojego linku polecającego (Otrzymam część opłat, jeśli zarejestrujesz się za pomocą tego linku).

Subskrybowanie bezpłatnego e-maila za każdym razem, gdy opublikuję nowe opowiadanie.

Szybki przegląd moich poprzednich artykułów.

Pobieram bezpłatne ramy podejmowania strategicznych decyzji opartych na danych.

Odwiedzanie mojej witryny poświęconej analizie danych — Blog danych.

Dane dotyczące wschodu słońca / piania kogutów

Dane dotyczące ospy

Zarobki absolwentów / dane dotyczące dochodów ze spisu powszechnego

Dane dotyczące rezerwacji hoteli

Odkrycie przyczynowe: czy pianie koguta powoduje wschód słońca? Opublikowano ponownie ze źródła https://towardsdatascience.com/causal-discovery-does-the-cockerel-crowing-cause-the-sun-to-rise-f4308453ecfa?source=rss—-7f60cf5620c9—4 za pośrednictwem https://towardsdatascience. com/feed

<!–

->

Znak czasu:

Więcej z Konsultanci Blockchain