Kausaalinen löytö: Saako kukonkiiruus auringon nousemaan?

10 Python-koodiriviä automatisoimaan syy-havainnon, joka sinun on nähtävä

Kuva Egor Myznik on Unsplash

Viimeaikaisen tutkimukseni painopiste on ollut kausaalinen päätelmä Asiakkailta saamani lisääntyvät pyynnöt siirtyä koneoppimisennusteiden lisäksi vastaamaan "mitä jos?" kirjoita kysymyksiä vaikutusten ja tulosten lisäämiseksi.

Yksi minua aluksi kiehtovista asioista oli - "Kuinka kausaalikaaviot rakennetaan?". Monissa online-esimerkeissä ne näyttävät heräävän eloon täysin muodostuneena ilman selitystä siitä, kuinka solmut ja linkit tunnistettiin.

Tämä sai minut lukemaan Judea Pearlin ja Dana Mackenzien "The Book of Why" (useita kertoja!), ja yksi näkemys on, että et voi kääntää kausaalidiagrammia, joka tunnetaan myös nimellä Directed Acyclic Graph (DAG), tiedoista. yksin.

Data voi paljastaa korrelaation, mutta ei syy-yhteyttä, joten kuinka on mahdollista "löytää" syy-yhteys?

Huomautus: kaikki tämän artikkelin tietojoukot on lisensoitu julkiseen käyttöön, katso kaikki lähteet ja viitteet artikkelin lopussa olevasta viittausosiosta.

Ennen kuin sukeltaamme syy-selvitykseen, harkitse…

Liittyminen Mediumiin viittauslinkilläni (Saan osan maksuista, jos kirjaudut tämän linkin kautta).

Tilaan ilmaisen sähköpostin aina, kun julkaisen uuden tarinan.

Vilkaisen nopeasti aikaisempia artikkeleitani.

Lataan ilmaisen strategisen datapohjaisen päätöksentekokehykseni.

Vierailemassa datatieteen verkkosivustollani - Data-blogi.

Harkitse arvolukemia seuraavasta binääritietojoukosta…

Huomautus: auringonnousun / kukon tietojoukko on kirjoittajan luomaa synteettistä dataa. Katso täydelliset lähde- ja viitetiedot artikkelin lopussa olevasta viiteosiosta.

Kuva tekijältä

Voimme nähdä, että kukko laulaa auringon noustessa 90.25 prosentissa havainnoista, mutta mistä tiedämme, aiheuttaako auringon nousu kukon vai kukon laulaminen auringon nousun pelkän datan perusteella?

Tapausten määrä, jolloin kukko laulaa, kun aurinko ei nouse tai kun aurinko nousee, mutta kukko pysyy hiljaa, on käytännössä identtinen (50,000 47,500 vs. XNUMX XNUMX), joten kausaalista vastausta ei voida löytää vertaamalla suhteellisia datamääriä.

Yksi lähestymistapa voisi olla ajallinen näkökulma. Jos aurinko nousee johdonmukaisesti ennen kukon laulua, se on hyvä syy-suhteen indikaattori, mutta entä jos kukkomme on aikaisin nouseva?

Vastaus on kysyä verkkoalueen asiantuntijoita. Jos voisimme koota tiimin astrologin, fyysikon ja siipikarjankasvattajan kanssa, he päättelivät, että aurinko saa kukon laulamaan eikä päinvastoin!

Kuva Federico Respini on Unsplash

Auringon noususta ja kukonkiireistä pelottamatta lähdin etsimään jotain, joka oli jo olemassa ja joka saattaa pystyä suorittamaan kausaalisen löydön taikuuden tietojen perusteella.

On olemassa "NOTEARS"-niminen algoritmi, joka väittää pystyvänsä toteuttamaan syy-selvityksen, joten kokeillaan ja katsotaan, mitä se voi tehdä…

Huomautus: isorokkotietojoukko on kirjoittajan luomaa synteettistä dataa. Katso täydelliset lähde- ja viitetiedot artikkelin lopusta löytyvästä viiteosiosta.

Kuva tekijältä

Tämä aineisto mallintaa syy-seuraus-suhteita isorokkorokotuksissa. Ajetaan NOTEARS-algoritmi sitä vastaan ​​ja katsotaan mitä se voi tehdä…

[('Reaktio?', 'Rokotus?'),
("Isorokko?", "Reaktio?"),
('Kuolema?', 'Reaktio?'),
('Kuolema?', 'Iorokko?')]

Jos visualisoimme NOTEARSin tuottamat tulokset, se näyttäisi tältä…

Kuva tekijältä

Ei näytä kovin hyvältä, vai mitä? NOTEARSin mukaan kuolema aiheuttaa isorokkoa. Ajallinen puoli kertoo meille, että isorokko tulee ensin, joten sitä ei voi aiheuttaa kuolema. Myöskään isorokko ei voi aiheuttaa reaktiota (rokote aiheuttaa reaktion) eikä reaktio todellakaan voi aiheuttaa rokotusta.

Alan asiantuntijoiden tietämyksen avulla voimme helposti todeta, että rokotuksella on kausaalinen vaikutus siihen, onko potilaalla reaktio ja kehittyykö tauti ja reaktiolla ja isorokolla on molemmilla syy-yhteys kuolemaan…

Kuva tekijältä

Olemme siis todenneet, että edes hyvin yksinkertaisessa kausaalimallissa NOTEARS-kausaalin etsintäalgoritmi ei tuota oikeita tuloksia. Lisäksi erään aikaisemman artikkelini lukija huomautti, että NOTEARS ei toimi Python 3.9:ssä ja koska olen päivittämässä, tämä on toinen suuri ongelma.

Jos haluat lukea lisää NOTEARSin sopimattomuudesta kausaalisuuteen, tässä on erinomainen akateeminen paperi - https://arxiv.org/pdf/2104.05441.pdf (Marcus Kaiser ja Maksim Sipos).

Ennen kuin luovumme täysin automatisoidusta kausaalista etsinnästä, katsotaanpa NOTEARSin vaihtoehtoa, "Lasso"-algoritmia.

Huomautus: väestönlaskentatulot / valmistuneiden tulot -tietojoukko on lisensoitu julkiseen käyttöön, katso täydelliset lähde- ja viitetiedot artikkelin lopussa olevasta viiteosiosta.

Kuva tekijältä
Kuva tekijältä

Voi kulta, Lasso on katastrofi! Se on ennustanut, että kaikki aiheuttaa kaiken muun ja että solmut aiheuttavat myös itsensä!

Viimeiset yritykseni olivat kokeilla GES-, GIES- ja LINGAM-algoritmeja, mutta nämä kaikki vaativat R-kirjastoja. En käytä R:tä, ja vaikka onnistuisinkin saamaan asetukset oikein, en koskaan pystyisi luomaan kannettavaa koodia, jota muut datatutkijat voisivat käyttää.

Saatavilla olevat kausaalien etsintäkirjastot ja -algoritmit eivät toimi, ja tämä on vahvistanut "The Book of Why" -julkaisussa ilmaistua näkemystä, eli että kausaalisuutta ei voida käännellä pelkän datan perusteella.

Tämä johtopäätös sai minut kehittämään omaa lähestymistapaani…

Kuva Amanda Jones on Unsplash

Kortit pöydälle, en ole kirjoittanut kausaalista etsintäalgoritmia. Pikemminkin algoritmini toteuttaa korrelatiivisen havainnon kierteellä (ei sanailua tarkoitettu!).

Kun olin luopunut kausaalisten havaintojen kirjastoista, tarvitsin vielä tavan visualisoida syy-yhteys aloituskohtana keskustelulle toimialueen asiantuntijoiden kanssa.

Ajattelin, että voisin laskea ominaisuuksien/solmujen väliset korrelaatiot helposti ja että tämä olisi ainakin hyvä lähtökohta.

Kehittelin ajatteluani seuraavasti – kausaaliset havaintomalleissa tunnistamme yleensä "vaikutuksen" eli tiedon, josta olemme kiinnostuneita (kuten "kohde" koneoppimisennusteissa). Isorokkoesimerkissä tämä on "Kuolema?", ja valmistuneessa ansioesimerkissä se on ansio "suurempi kiitos 50k".

Siksi jos jonkin ominaisuuden ja "vaikutuksen" välillä on korrelaatioita, kausaalisuunnan on oltava muista piirteistä vaikutukseen, koska se on "rivin lopussa".

Seuraava askeleeni oli kehittää rekursiivinen algoritmi, joka voidaan visualisoida seuraavasti…

Kuva tekijältä

Kaksoiskappaleet ja kaksisuuntaiset linkit on suljettava pois. Halusin myös pystyä sisällyttämään tai sulkemaan pois yhteyksiä (reunat) ja sulkemaan pois ominaisuuksia (solmut).

Nämä ovat 10 riviä rekursiivista Python-koodia, jotka keksin syy-selvityksen toteuttamiseksi

Ratkaisun toiminnan näyttämiseksi olen valinnut joitain tietoja hotellivarausten peruutustiedoista.

Aloitetaan lukemalla tiedot ja kurkistamalla korrelaatioihin…

Huomaa: hotellivaraustietojoukko on lisensoitu julkiseen käyttöön. Katso täydelliset lähde- ja viitetiedot artikkelin lopussa olevasta viiteosiosta.

Kuva tekijältä

Löytöalgoritmin ensimmäinen ajo sisältää iteraatioiden pitämisen 1:ssä, joten tarkastelemme vain korrelaatioita (jonka pitäisi olla kausaalista) "vaikutuksen" kanssa eli onko hotellivaraus peruutettu vai ei…

Kuva tekijältä

OK, se ei ole huono aloitus, nostetaan iteraatioiden / rekursioiden / kerrosten lukumäärä kolmeen, säädellään hieman korrelaatiokynnystä ja katsotaan mitä saadaan…

Kuva tekijältä

OK, ei myöskään paha, mutta se on vähän "kiireinen", joten seuraava vaihe on sulkea pois jotkin solmut, joiden epäilemme aiheuttavan melua (huomaa: todellisessa liiketoiminnassa puhuisimme toimialueen asiantuntijamme tässä vaiheessa).

Kuva tekijältä

Tämä alkaa näyttää paremmalta. Muista, että algoritmini on varma, että linkit "IsCancelled" -kohtaan ovat kausaalisia, koska se on "vaikutus", joten sen jälkeen ei tule mitään.

Puun muut kerrokset ovat kuitenkin vain korrelatiivisia, nuolien suunta lisättiin yksinkertaisesti sen järjestyksen perusteella, jossa algoritmi ne löysi.

Työskentelen verkkotunnuksen asiantuntijoiden kanssa (tai tässä tapauksessa oman kokemukseni hotellivarauksista!) Huomasin seuraavan:

  • Linkki "DifferentRoomAssigned" ja "LeadTime" on väärään suuntaan, koska pitkä varauksen läpimenoaika lisää todennäköisyyttä, että huonevaraus muuttuu eikä päinvastoin.
  • "BookingChanges" ja "DifferentRoomAssigned" välinen korrelaatio on kynnyksen alapuolella, mutta se voi olla merkittävä syy, joten se on sisällytettävä.

Seuraava yritys kehottaa algoritmia tekemään nämä korjaukset –

Kuva tekijältä

"Havainnoimaton hämmentäjä" on tekijä, jonka uskomme vaikuttavan kausaalimalliimme tarjoamalla linkin joidenkin solmujen välille, mutta jota ei ole mitattu, joten sitä ei ole sisällytetty kaavioon.

Kokemukseni hotelleissa käymisestä ja tietämykseni hotellitietojoukosta sai minut epäilemään, että hotellitietoihin vaikuttaa "havainnoimaton hämmentäjä".

Tiedoissa on kaksi hotellia - "kaupunki" hotelli ja "lomahotelli". Tämä saa minut hypoteesiin, että havaitsematon hämmentäjä tässä kausaalimallissa on “Syy hotellimajoitukseen”.

Hypoteesini on se lomailijat yöpyvät ensisijaisesti lomahotellissa ja liikemiehet ja kaupunkimatkailijat ensisijaisesti kaupunkihotellissa.

Lisäksi olen olettanut, että näillä kahdella ryhmällä on erilainen käyttäytyminen ja että tämä on "havainnoimaton hämmentäjä" (ei havaittu, koska tiedot eivät kuvaa "oleskelun syytä").

NOTEARS ja muut vastaavat algoritmit eivät voi ottaa huomioon "havainnoimattomia hämmennystä", mutta kehittämäni algoritmi voi ottaa ne huomioon sisällyttämällä ne nimenomaisesti seuraavasti:

Kuva tekijältä

Lopullisen iteroinnin tulos on uskottava, luettava ja ymmärrettävä visualisointi hotellitiedon kausaalisuudesta, jota tutkin ja tarkentaisin varmasti verkkoalueen asiantuntijoiden kanssa. Nämä ovat avainkohdat…

  • On "havainnoimaton hämmennys", joka on ensisijainen syy oleskeluun (loma vs. liike-/kaupunkiloma).
  • "Maalla" on kausaalinen vaikutus havaitsemattomaan hämmennykseen - joistakin maista matkustavat ovat todennäköisemmin lomalla.
  • Sama koskee "TotalGuestsia". Suuret juhlat ovat todennäköisemmin lomalla, sinkkuja työmatkoilla ja tuplakunnat kaupunkilomalla.
  • Havainnoimattomalla "oleskelun syyllä" on kausaalinen vaikutus "LeadTimeen", "HotelTypeen" ja "Talletustyyppiin".
  • "LeadTime", "DifferentRoomAssigned", "HotelType", "DepositType" ja "Reason for Stay" (U) vaikuttavat kausaalisesti "IsCanceled" -tilaan.

Kausaalinen löytö on prosessi, jossa mennään korrelatiivisten linkkien ulkopuolelle syy-yhteyksien löytämiseen (eli mihin korrelatiivisen viivan päähän nuoli kuuluu?). Tämä ei ole mahdollista tai ainakaan kohtuuttoman vaikea automatisoida algoritmeilla, kuten NOTEARS, koska vastauksia ei ole olemassa pelkästään tiedoissa.

On kuitenkin edelleen kriittinen tarve visualisoida syy-yhteys, jotta sitä voidaan tutkia alan asiantuntijoiden kanssa syy-kaavion (kutsutaan myös ohjatuksi asykliseksi kuvaajaksi tai DAG:ksi) muodostamiseksi.

Tässä artikkelissa on ehdotettu algoritmia, joka perustuu korrelatiivisen löydön lisäämiseen ja joka käyttää vain 10 riviä Python-koodia, jota voidaan käyttää toimialueen asiantuntijoiden kanssa herkkyyden (kynnyksen) toistumiseen tarkentamiseen ja linkkien (nuolien) korjaamiseen, lisäämiseen tai poistamiseen ja epäolennaisten poissulkemiseen. solmut.

Tulevissa artikkeleissa näitä kausaalikaavioita käytetään rakentamaan täysimittainen syy-koneoppimismalli, joka voi vastata monimutkaiseen "mitä jos?" tyyppisiä kysymyksiä asiakkailta ja yritysjohtajilta.

Jos pidit tästä artikkelista, harkitse…

Liittyminen Mediumiin viittauslinkilläni (Saan osan maksuista, jos kirjaudut tämän linkin kautta).

Tilaan ilmaisen sähköpostin aina, kun julkaisen uuden tarinan.

Vilkaisen nopeasti aikaisempia artikkeleitani.

Lataan ilmaisen strategisen datapohjaisen päätöksentekokehykseni.

Vierailemassa datatieteen verkkosivustollani - Data-blogi.

Auringonnousu / Kukon kukko -tiedot

Isorokkotiedot

Valmistuneiden tulot / väestönlaskennan tulotiedot

Hotellivaraustiedot

Kausaalinen löytö: Saako kukonkiiruus auringon nousemaan? Julkaistu uudelleen lähteestä https://towardsdatascience.com/causal-discovery-does-the-cockerel-crowing-cause-the-sun-to-rise-f4308453ecfa?source=rss—-7f60cf5620c9—4 https://towardsdatasciencen kautta. fi/syöte

<!-

->

Aikaleima:

Lisää aiheesta Blockchain-konsultit