Põhjuslik avastus: kas kuke kiremine põhjustab päikese tõusu?

10 rida Pythoni koodi, et automatiseerida põhjuslikku avastamist, mida peate nägema

Foto: Egor Myznik on Unsplash

Minu hiljutise uurimistöö keskmes on olnud põhjuslik järeldus mille põhjuseks on klientide sagenevad taotlused liikuda masinõppe ennustustest kaugemale ja vastata küsimusele „mis siis, kui?” tippige küsimusi, et mõjutada mõju ja tulemusi.

Üks asi, mis mind alguses huvitas, oli – “Kuidas koostatakse põhjuslikke diagramme?”. Paljudes veebinäidetes näib, et nad ärkavad ellu täielikult vormituna, ilma et oleks selgitatud, kuidas sõlmed ja lingid tuvastati.

See viis mind lugema Judea Pearli ja Dana Mackenzie raamatut Miks (mitu korda!) ja üks seisukoht on, et andmete põhjal ei saa pöördprojekteerida põhjuslikku diagrammi, mida tuntakse ka kui suunatud atsüklilist graafikut (DAG). üksi.

Andmed võivad paljastada korrelatsiooni, kuid mitte põhjuslikku seost, seega kuidas on võimalik põhjuslikku seost "avastada"?

Märkus: kõik selles artiklis olevad andmekogumid on avalikuks kasutamiseks litsentsitud, kõigi allikate ja viidete kohta vaadake artikli lõpus olevat viidete jaotist.

Enne kui sukeldume põhjuslike avastamiste juurde, kaaluge…

Meediumiga liitumine minu viitelingiga (Ma saan osa tasust, kui registreerute selle lingi kaudu).

Tasuta e-kirja tellimine iga kord, kui avaldan uue loo.

Heites kiire pilgu oma varasematele artiklitele.

Oma tasuta strateegilise andmepõhise otsustusraamistiku allalaadimine.

Minu andmeteaduse veebisaidi külastamine — Andmete ajaveeb.

Mõelge järgmise binaarse andmekogumi väärtuste arvule ...

Märkus: päikesetõusu / kuke andmekogum on autori loodud sünteetilised andmed, täieliku allika ja viiteteabe saamiseks vaadake artikli lõpus olevat viidete jaotist.

Pilt autorilt

Näeme, et kukk kireb päikese tõustes 90.25% vaatlustest, kuid kuidas me teame, kas päikesetõus paneb kukke laulma või kuke laulmine põhjustab ainuüksi andmete põhjal päikesetõusu?

Juhtumite arv, mil kukk kireb, kui päike ei tõuse või kui päike tõuseb, kuid kukk vaikib, on peaaegu identne (50,000 47,500 vs. XNUMX XNUMX), nii et põhjuslikku vastust ei saa andmemahtude võrdlemisel leida.

Üks lähenemisviis võiks olla ajalise aspekti vaatamine. Kui päike tõuseb järjekindlalt enne, kui kukk kireb, on see hea põhjus põhjuslikkuse näitajaks, aga mis siis, kui meie kukk on varakult tõusev?

Vastus on konsulteerida domeeniekspertidega. Kui saaksime astroloogist, füüsikust ja linnukasvatajast koosneva meeskonna kokku panna, jõuaksid nad järeldusele, et päike paneb kuke laulma ja mitte vastupidi!

Foto: Federico Respini on Unsplash

Päikesetõusust ja kukkede kiremisest heidutamata asusin otsima midagi, mis juba olemas oli, mis võiks andmete põhjal teostada põhjusliku avastamise maagiat.

On olemas algoritm nimega NOTEARS, mis väidetavalt suudab põhjusliku seose tuvastamist rakendada, nii et proovime ja vaatame, mida see teha saab…

Märkus: rõugete andmekogum on autori loodud sünteetilised andmed, täieliku allika ja viiteteabe saamiseks vaadake artikli lõpus olevat viidete jaotist.

Pilt autorilt

See andmestik modelleerib põhjuse ja tagajärje seoseid rõugete vastu vaktsineerimisel. Käivitame selle vastu algoritmi NOTEARS ja vaatame, mida see teha saab…

[("Reaktsioon?", "Vaktsineerimine?"),
("Rõuged?", "Reaktsioon?"),
('Surm?', 'Reaktsioon?'),
("Surm?", "Rõuged?")]

Kui peaksime NOTEARSi tulemusi visualiseerima, näeks see välja selline…

Pilt autorilt

See ei näe eriti hea välja? NOTEARSi andmetel põhjustab surm rõugeid. Ajaline aspekt ütleb meile, et rõuged on esikohal, nii et seda ei saa põhjustada surm. Samuti ei saa reaktsiooni põhjustada rõuged (vaktsiin põhjustab reaktsiooni) ja reaktsioon ei saa kindlasti põhjustada vaktsineerimist.

Valdkonnaekspertide teadmisi kasutades saame hõlpsasti kindlaks teha, et vaktsineerimisel on põhjuslik mõju sellele, kas patsiendil tekib reaktsioon ja kas tal haigus areneb, ning reaktsioonil ja rõugetel on põhjuslik seos surmaga…

Pilt autorilt

Seega oleme kindlaks teinud, et isegi väga lihtsa põhjusliku mudeli korral ei anna NOTEARSi põhjusliku avastamise algoritm õigeid tulemusi. Samuti juhtis ühe minu eelmise artikli lugeja tähelepanu sellele, et NOTEARS ei tööta Python 3.9-s ja kuna ma kavatsen uuendada, on see veel üks suur probleem.

Kui soovite rohkem lugeda NOTEARSi mittesobivuse kohta põhjusliku seose jaoks, on siin suurepärane akadeemiline artikkel - https://arxiv.org/pdf/2104.05441.pdf (Marcus Kaiser ja Maksim Sipos).

Enne kui loobume täielikult automatiseeritud põhjusliku seose avastamisest, heidame pilgu NOTEARSi alternatiivile, Lasso algoritmile –

Märkus: loenduse sissetulekute / koolilõpetajate sissetulekute andmekogum on avalikuks kasutamiseks litsentsitud, täieliku allika ja viiteteabe saamiseks vaadake artikli lõpus olevat viidete jaotist.

Pilt autorilt
Pilt autorilt

Oh kallis, Lasso on katastroof! See on ennustanud, et kõik muu põhjustab ja sõlmed põhjustavad ka ise!

Minu viimased katsed olid proovida GES-i, GIES-i ja LINGAM-i algoritme, kuid need kõik nõuavad R-teeke. Ma ei kasuta R-i ja isegi kui mul õnnestuks konfiguratsioon õigesti teha, ei saaks ma kunagi luua kaasaskantavat koodi, mida teised andmeteadlased saaksid kasutada.

Olemasolevad põhjusliku seose tuvastamise raamatukogud ja algoritmid ei tööta ja see on tugevdanud raamatus "The Book of Why" väljendatud seisukohta, st et põhjuslikku seost ei saa pöördprojekteerida ainult andmete põhjal.

See järeldus ajendas mind välja töötama oma lähenemisviisi …

Foto: Amanda Jones on Unsplash

Kaardid laual, põhjusliku avastamise algoritmi pole ma kirjutanud. Pigem rakendab minu algoritm korrelatiivset avastamist keerdkäiguga (pole mõeldud!).

Kui olin põhjusliku seose avastamise raamatukogudest loobunud, vajasin endiselt viisi, kuidas visualiseerida põhjuslikku seost domeeniekspertidega vestluse lähtepunktina.

Arvasin, et suudan hõlpsalt arvutada funktsioonide / sõlmede vahelisi seoseid ja et see oleks vähemalt hea lähtepunkt.

Arendasin oma mõtlemist järgmiselt – põhjusliku avastamise mudelites tuvastame tavaliselt “mõju” ehk meid huvitava andmefunktsiooni (nagu masinõppe prognooside “sihtmärk”). Rõugete näites on see "surm?" ja lõpetajate sissetuleku näites on see sissetulek "suurem aitäh 50 XNUMX".

Seega, kui mis tahes tunnuse ja "mõju" vahel on seos, peab põhjuslik suund olema teistest tunnustest mõjule, nagu see on "rea lõpus".

Minu järgmine samm oli rekursiivse algoritmi väljatöötamine, mida saab visualiseerida järgmiselt ...

Pilt autorilt

Duplikaadid ja kahesuunalised lingid tuleb sunniviisiliselt välistada. Samuti soovisin, et oleks võimalik selgesõnaliselt kaasata või välistada ühendusi (servi) ja selgesõnaliselt välistada funktsioone (sõlmed).

Need on 10 rida rekursiivset Pythoni koodi, mille leidsin põhjusliku avastamise rakendamiseks

Näitamaks, kuidas lahendus töötab, olen valinud mõned andmed hotellibroneeringute tühistamise andmete kohta.

Alustame andmete lugemisest ja korrelatsioonidest ...

Märkus: hotellibroneeringute andmekogum on litsentsitud avalikuks kasutamiseks. Täieliku allika ja viiteteabe saamiseks vaadake artikli lõpus olevat viidete jaotist.

Pilt autorilt

Avastamisalgoritmi esimene käitamine hõlmab iteratsioonide hoidmist 1-ni, nii et me vaatame ainult korrelatsioone (mis peaks olema põhjuslik) "mõjuga", st kas hotellibroneering tühistatakse või mitte…

Pilt autorilt

OK, see pole halb algus, suurendame iteratsioonide / rekursioonide / kihtide arvu 3-ni, kohandame veidi korrelatsiooniläve ja vaatame, mis me saame ...

Pilt autorilt

OK, see pole ka väga halb, kuid see on natuke "hõivatud", nii et järgmise sammuna tuleb välistada mõned sõlmed, mis kahtlustame, et need võivad tekitada osa müra (märkus: reaalse äri puhul räägime meie domeenieksperdid selles etapis).

Pilt autorilt

See hakkab juba parem välja nägema. Pidage meeles, et minu algoritm on kindel, et lingid "IsCancelled" on põhjuslikud, kuna see on "mõju", järelikult ei tule sellele midagi.

Teised puu kihid on aga lihtsalt korrelatiivsed, noolte suund lisati lihtsalt selle järgi, millises järjekorras algoritm need leidis.

Töötades domeeniekspertidega (või antud juhul enda kogemusega hotellibroneeringute osas!) märkasin järgmist –

  • Link "DifferentRoomAssigned" ja "LeadTime" on vales suunas, sest pikk broneeringu täitmisaeg suurendab tõenäosust, et tuba broneering muutub ja mitte vastupidi.
  • Korrelatsioon „BookingChanges” ja „DifferentRoomAssigned” vahel on alla läve, kuid see võib olla oluline põhjus, mistõttu tuleb see kaasata.

Järgmine katse juhendab algoritmi need parandused tegema –

Pilt autorilt

"Märkamatu segaja" on tegur, mis meie arvates mõjutab meie põhjuslikku mudelit, pakkudes seost mõne sõlme vahel, kuid mida ei ole mõõdetud ja seetõttu pole seda diagrammi kaasatud.

Minu kogemus hotellides käimisel ja teadmised hotellide andmestikust panid mind kahtlustama, et hotelliandmeid mõjutab "märkamatu segadus".

Andmetes on kaks hotelli — linnahotell ja kuurorthotell. See viib mind hüpoteesini, et selle põhjusliku mudeli jälgimatu segaja on „hotellis viibimise põhjus”.

Minu hüpotees on see puhkajad peatuvad peamiselt kuurorthotellis ning ärimehed ja linnamurdjad peamiselt linnahotellis.

Lisaks olen oletanud, et neil kahel rühmal on erinev käitumine ja see on "jälgimatu segaja" (jäi ei täheldatud, kuna andmed ei kajasta "viibimise põhjust").

MÄRKUSED ja muud sarnased algoritmid ei saa arvesse võtta "märkamatuid segajaid", kuid minu välja töötatud algoritm saab neid arvesse võtta, lisades need selgesõnaliselt järgmiselt ...

Pilt autorilt

Lõpliku iteratsiooni tulemuseks on usutav, loetav ja arusaadav visualiseering hotelliandmete põhjusliku seose kohta, mida ma julgen koos domeeniekspertidega uurida ja täpsustada. Need on põhipunktid…

  • Siin on "märkamatu segadus", mis on peatumise peamine põhjus (puhkus vs. äri/linnapuhkus).
  • "Riik" avaldab põhjuslikku mõju märkamatule segajale - mõnest riigist reisijad on tõenäolisemalt puhkusel.
  • Sama kehtib ka "TotalGuestsi" kohta. Suuremad seltskonnad on tõenäolisemalt puhkamas, vallalised ärireisidel ja paarilised linnapuhkusel.
  • Täheldamata jäämise põhjus avaldab põhjuslikku mõju parameetritele „LeadTime”, „HotelType” ja „DepositType”.
  • "LeadTime", "DifferentRoomAssigned", "HotelType", "DepositType" ja "Reason for Stay" (U) mõjutavad kõik "Iscanceled" põhjuslikku mõju.

Põhjuslik avastus on protsess, mille käigus minnakse kaugemale korrelatiivsetest seostest põhjuslike seoste avastamiseks (st millisele korrelatiivse joone otsale nool kuulub?). Seda ei ole võimalik või vähemalt ülemäära keeruline automatiseerida selliste algoritmidega nagu NOTEARS, sest vastuseid ei eksisteeri ainult andmetes.

Siiski on endiselt kriitiline vajadus põhjuslikku seost visualiseerida, et seda saaks koos domeeniekspertidega uurida, et koostada põhjuslik seos (mida nimetatakse ka suunatud atsükliliseks graafikuks või DAG-ks).

Selles artiklis on pakutud välja algoritm, mis põhineb korrelatiivse avastamise suurendamisel, kasutades vaid 10 rida Pythoni koodi, mida saab kasutada domeeniekspertidega, et korduvalt täpsustada tundlikkust (läve) ning parandada, lisada või eemaldada linke (nooled) ja välistada ebaolulised. sõlmed.

Tulevastes artiklites kasutatakse neid põhjuslikke diagramme täieliku põhjusliku masinõppemudeli koostamiseks, mis suudab vastata keerulisele küsimusele "mis siis, kui?" tüüpi küsimusi klientidelt ja ärijuhtidelt.

Kui teile see artikkel meeldis, kaaluge…

Meediumiga liitumine minu viitelingiga (Ma saan osa tasust, kui registreerute selle lingi kaudu).

Tasuta e-kirja tellimine iga kord, kui avaldan uue loo.

Heites kiire pilgu oma varasematele artiklitele.

Oma tasuta strateegilise andmepõhise otsustusraamistiku allalaadimine.

Minu andmeteaduse veebisaidi külastamine — Andmete ajaveeb.

Päikese tõusu / kukkede kroonuandmed

Rõugete andmed

Lõpetajate töötasu / rahvaloenduse tuluandmed

Hotellibroneeringute andmed

Põhjuslik avastus: kas kuke kiremine põhjustab päikese tõusu? Taasavaldatud allikast https://towardsdatascience.com/causal-discovery-does-the-cockerel-crowing-cause-the-sun-to-rise-f4308453ecfa?source=rss—-7f60cf5620c9—4 https://towardsdatascience'i kaudu. com/feed

<!–

->

Ajatempel:

Veel alates Blockchaini konsultandid