10 regels Python-code om causale ontdekkingen te automatiseren die u moet zien
De focus van mijn recente onderzoek lag causale gevolgtrekking gedreven door de toenemende verzoeken die ik krijg van klanten om verder te gaan dan voorspellingen van machine learning en het beantwoorden van โwat-als?โ type vragen om de impact en resultaten te stimuleren.
Een van de dingen die mij aanvankelijk intrigeerden was: โHoe worden causale diagrammen opgebouwd?โ. In veel van de online voorbeelden lijken ze volledig gevormd tot leven te komen, zonder uitleg over hoe de knooppunten en verbindingen werden geรฏdentificeerd.
Dit bracht mij ertoe om โThe Book of Whyโ van Judea Pearl en Dana Mackenzie te lezen (meerdere keren!) en een standpunt dat naar voren werd gebracht is dat je geen causaal diagram, ook bekend als een Directed Acyclic Graph (DAG), kunt reverse engineeren op basis van de gegevens alleen.
Gegevens kunnen correlatie aan het licht brengen, maar geen causaliteit. Hoe is het dan mogelijk om causaliteit te โontdekkenโ?
Let op: alle datasets in dit artikel zijn gelicentieerd voor openbaar gebruik. Zie de referentiesectie aan het einde van het artikel voor alle bronnen en referenties.
Voordat we in causaal onderzoek duiken, overweeg alstublieft โฆ
Lid worden van Medium met mijn verwijzingslink (Ik ontvang een deel van de kosten als je je aanmeldt via deze link).
Abonneer u op een gratis e-mail wanneer ik een nieuw verhaal publiceer.
Kijk snel naar mijn eerdere artikelen.
Mijn gratis strategische datagestuurde besluitvormingskader downloaden.
Mijn data science-website bezoeken โ De datablog.
Beschouw het aantal waarden uit de volgende binaire gegevensset โฆ
Opmerking: de dataset voor zonsopgang / haan is synthetische gegevens die door de auteur zijn gemaakt. Zie de sectie met referenties aan het einde van het artikel voor de volledige bron- en referentiedetails.
In 90.25% van de waarnemingen kunnen we zien dat de haan kraait als de zon opkomt, maar hoe weten we op basis van alleen de gegevens of de opkomst van de zon ervoor zorgt dat de haan kraait of dat het kraaien van de haan ervoor zorgt dat de zon opkomt?
Het aantal gevallen waarin de haan kraait als de zon niet opkomt of wanneer de zon opkomt maar de haan stil blijft, is vrijwel identiek (50,000 versus 47,500), dus het causale antwoord kan niet worden gevonden door de relatieve hoeveelheden gegevens te vergelijken.
Eรฉn benadering zou kunnen zijn om naar het temporele aspect te kijken. Als de zon consequent opkomt voordat de haan kraait, zal dat een goede indicator zijn voor de causaliteit, maar wat als onze haan een vroege vogel is?
Het antwoord is om de domeinexperts te raadplegen. Als we een team zouden kunnen samenstellen met een astroloog, een natuurkundige en een pluimveehouder, zouden ze tot de conclusie komen dat de zon de haan doet kraaien en niet andersom!
Niet afgeschrikt door opkomende zon en kraaiende hanen ging ik op zoek naar iets dat al bestond en dat op basis van de gegevens de magie van causale ontdekking zou kunnen bewerkstelligen.
Er is een algoritme met de naam โNOTEARSโ dat beweert causale ontdekkingen te kunnen implementeren, dus laten we het eens proberen en kijken wat het kan doen โฆ
Let op: de pokkendataset bestaat uit synthetische gegevens die door de auteur zijn gemaakt. Zie de referentiesectie aan het einde van het artikel voor de volledige bron- en referentiedetails.
Deze dataset modelleert de oorzaak-gevolgrelaties bij pokkenvaccinaties. Laten we het NOTEARS-algoritme er eens tegenaan gooien en kijken wat het kan doen...
[('Reactie?', 'Vaccinatie?'),
('Pokken?', 'Reactie?'),
('Dood?', 'Reactie?'),
('Dood?', 'Pokken?')]
Als we de resultaten van NOTEARS zouden visualiseren, zou het er als volgt uitzien โฆ
Het ziet er niet erg goed uit, hรจ? Volgens NOTEARS veroorzaakt de dood pokken. Het temporele aspect vertelt ons dat pokken op de eerste plaats komen en dus niet door de dood kunnen worden veroorzaakt. Ook kunnen pokken de reactie niet veroorzaken (het vaccin veroorzaakt de reactie) en de reactie kan zeker niet de vaccinatie veroorzaken.
Met behulp van de kennis van domeinexperts kunnen we gemakkelijk vaststellen dat de vaccinatie een causaal effect heeft op de vraag of de patiรซnt een reactie krijgt en of hij of zij de ziekte blijft ontwikkelen, en dat de reactie en de pokken beide een causaal verband hebben met de dood โฆ
We hebben dus vastgesteld dat zelfs in een heel eenvoudig causaal model het NOTEARS-algoritme voor causale ontdekking geen correcte resultaten oplevert. Ook wees een lezer van een van mijn eerdere artikelen erop dat NOTEARS niet werkt in Python 3.9 en aangezien ik op het punt sta te upgraden, is dit een ander groot probleem.
Als je meer wilt lezen over de ongeschiktheid van NOTEARS voor causaliteit, dan is hier een uitstekend academisch artikel: https://arxiv.org/pdf/2104.05441.pdf (Marcus Kaiser en Maksim Sipos).
Voordat we de volledig geautomatiseerde causale ontdekking opgeven, kijken we eerst naar een alternatief voor NOTEARS, het โLassoโ-algoritme:
Let op: de dataset van het censusinkomen / de inkomsten van afgestudeerden is gelicentieerd voor openbaar gebruik. Zie het gedeelte met referenties aan het einde van het artikel voor de volledige bron- en referentiegegevens.
Oh jee, Lasso is een ramp! Het heeft voorspeld dat alles al het andere veroorzaakt en dat de knooppunten zichzelf ook veroorzaken!
Mijn laatste pogingen waren het uitproberen van de GES-, GIES- en LINGAM-algoritmen, maar deze vereisen allemaal R-bibliotheken. Ik gebruik R niet en zelfs als het me zou lukken om de configuratie goed te krijgen, zou ik nooit draagbare code kunnen maken die andere datawetenschappers zouden kunnen gebruiken.
De causale ontdekkingsbibliotheken en algoritmen die beschikbaar zijn, werken niet en dit heeft de visie versterkt die verwoord wordt in โThe Book of Whyโ, dat wil zeggen dat causaliteit niet kan worden teruggedraaid op basis van alleen data.
Deze conclusie heeft ertoe geleid dat ik mijn eigen aanpak heb ontwikkeldโฆ
Kaarten op tafel, ik heb geen causaal ontdekkingsalgoritme geschreven. Mijn algoritme implementeert eerder correlatieve ontdekking met een twist (geen woordspeling bedoeld!).
Toen ik de causale ontdekkingsbibliotheken had opgegeven, had ik nog steeds een manier nodig om causaliteit te visualiseren als startpunt voor het gesprek met domeinexperts.
Ik redeneerde dat ik de correlaties tussen de features/nodes makkelijk kon berekenen en dat dit in ieder geval een goed uitgangspunt zou zijn.
Ik heb mijn manier van denken als volgt ontwikkeld: in modellen voor causale ontdekking identificeren we meestal het โeffectโ, dat wil zeggen het gegevenskenmerk waarin we geรฏnteresseerd zijn (zoals het โdoelโ in voorspellingen van machinaal leren). In het pokkenvoorbeeld is dit โDood?โ, en in het voorbeeld van het inkomen van afgestudeerden is dit het inkomen โgroterBedankt50kโ.
Als er dus correlaties zijn tussen een kenmerk en het โeffectโ, moet de causale richting van de andere kenmerken naar het effect lopen, aangezien deze zich aan het โeinde van de lijnโ bevindt.
Mijn volgende stap was het ontwikkelen van een recursief algoritme dat als volgt kan worden gevisualiseerd โฆ
Duplicaten en bidirectionele links moeten met geweld worden uitgesloten. Ik wilde ook verbindingen (randen) expliciet kunnen opnemen of uitsluiten en functies (knooppunten) expliciet kunnen uitsluiten.
Dit zijn de tien regels recursieve Python-code die ik heb bedacht om causale ontdekking te implementeren
Om te laten zien hoe de oplossing werkt, heb ik een aantal gegevens over de annuleringsgegevens van hotelboekingen geselecteerd.
Laten we beginnen met het inlezen van de gegevens en een kijkje nemen naar de correlaties โฆ
Let op: de dataset voor hotelboekingen is gelicentieerd voor openbaar gebruik. Zie de referentiesectie aan het einde van het artikel voor de volledige bron- en referentiegegevens.
De eerste run van het ontdekkingsalgoritme houdt in dat de iteraties beperkt blijven tot 1, dus we kijken alleen naar de correlaties (die causaal zouden moeten zijn) met het โeffectโ, dat wil zeggen of de hotelboeking wordt geannuleerd of niet โฆ
Okรฉ, dat is geen slecht begin, laten we het aantal iteraties/recursies/lagen verhogen naar 3, de correlatiedrempel een beetje aanpassen en kijken wat we krijgen โฆ
Okรฉ, ook niet zo erg, maar het is een beetje โdrukโ, dus de volgende stap is het uitsluiten van enkele van de knooppunten waarvan we vermoeden dat ze een deel van de ruis veroorzaken (let op: in een echte businesscase zouden we praten met onze domeinexperts in dit stadium).
Dit begint er beter uit te zien. Onthoud dat het my-algoritme ervan overtuigd is dat links naar โIsCancelledโ causaal zijn, omdat dit het โeffectโ is, en er dus niets achter komt.
De andere lagen van de boom zijn echter slechts correlatief; de richting van de pijlen is eenvoudigweg toegevoegd op basis van de volgorde waarin het algoritme ze heeft gevonden.
Door samen te werken met de domeinexperts (of in dit geval mijn eigen ervaring met hotelboekingen!) merkte ik het volgende op:
- De koppeling van โDifferentRoomAssignedโ naar โLeadTimeโ gaat de verkeerde kant op, omdat een lange boekingsdoorlooptijd de kans vergroot dat de kamerboeking verandert en niet andersom.
- De correlatie tussen โBookingChangesโ en โDifferentRoomAssignedโ ligt onder de drempelwaarde, maar kan een significant causaal verband hebben en moet daarom worden opgenomen.
De volgende poging instrueert het algoritme om deze correcties aan te brengen:
Een โniet-waargenomen confounderโ is een factor waarvan we denken dat deze van invloed is op ons causale model door een verband te leggen tussen sommige knooppunten, maar die niet is gemeten en daarom niet in het diagram is opgenomen.
Mijn ervaring met het bezoeken van hotels en mijn kennis van de hoteldataset deden mij vermoeden dat er sprake is van een โniet-waargenomen confounderโ die de hotelgegevens beรฏnvloedt.
Er zijn twee hotels in de gegevens: een โstadshotelโ en een โresorthotelโ. Dit bracht mij tot de hypothese dat de niet-waargenomen confounder in dit causale model de โreden voor hotelovernachtingโ.
Mijn hypothese is dat vakantiegangers verblijven vooral in het resorthotel en zakenmensen en stadsbezoekers verblijven vooral in het stadshotel.
Verder heb ik de hypothese opgesteld dat deze twee groepen verschillend gedrag vertonen en dat dit de โniet-geobserveerde confounderโ is (niet-geobserveerd omdat de gegevens de โreden voor het verblijfโ niet weergeven).
NOTEARS en andere soortgelijke algoritmen kunnen geen rekening houden met โniet-waargenomen confoundersโ, maar het algoritme dat ik heb ontwikkeld kan er wel rekening mee houden door ze als volgt expliciet op te nemen โฆ
Het resultaat van de laatste iteratie is een plausibele, leesbare en begrijpelijke visualisatie van de causaliteit in de hotelgegevens die ik graag samen met de domeinexperts zou onderzoeken en verfijnen. Dit zijn de belangrijkste puntenโฆ
- Er is een โonopgemerkte confounderโ die de voornaamste reden voor het verblijf is (vakantie vs. zakenreis/stedentrip).
- Het โlandโ heeft een causaal effect op de niet-waargenomen confounder: degenen die vanuit bepaalde landen reizen, hebben een grotere kans op vakantie.
- Hetzelfde geldt voor โTotalGuestsโ. Grote gezelschappen zijn vaker op vakantie, alleenstaanden op zakenreis en dubbelgangers op stedentrips.
- De niet-waargenomen โreden voor verblijfโ heeft een causaal effect op โLeadTimeโ, โHotelTypeโ en โDepositTypeโ.
- โLeadTimeโ, โDifferentRoomAssignedโ, โHotelTypeโ, โDepositTypeโ en โReason for Stayโ (U) hebben allemaal een causaal effect op โIsCanceledโ.
Causale ontdekking is het proces van verder gaan dan correlatieve verbanden en het ontdekken van causale verbanden (dwz aan welk uiteinde van een correlatieve lijn hoort de pijl?). Dit is niet mogelijk, of op zijn minst onbetaalbaar, te automatiseren met algoritmen als NOTEARS, omdat de antwoorden niet alleen in de data bestaan.
Er is echter nog steeds een cruciale behoefte om causaliteit te visualiseren, zodat deze kan worden onderzocht met domeinexperts om een โโcausaal diagram op te bouwen (ook wel een Directed Acyclic Graph of DAG genoemd).
In dit artikel wordt een algoritme voorgesteld dat gebaseerd is op het vergroten van correlatieve ontdekking, waarbij gebruik wordt gemaakt van slechts 10 regels Python-code. Dit algoritme kan door domeinexperts worden gebruikt om herhaaldelijk de gevoeligheid (drempel) te verfijnen en de links (pijlen) te corrigeren, toe te voegen of te verwijderen en irrelevante uit te sluiten. knooppunten.
In toekomstige artikelen zullen deze causale diagrammen worden gebruikt om een โโvolledig causaal machine learning-model te bouwen dat complexe โwat als?โ typ vragen van klanten en bedrijfsleiders.
Als je dit artikel leuk vond, overweeg dan โฆ
Lid worden van Medium met mijn verwijzingslink (Ik ontvang een deel van de kosten als je je aanmeldt via deze link).
Abonneer u op een gratis e-mail wanneer ik een nieuw verhaal publiceer.
Kijk snel naar mijn eerdere artikelen.
Mijn gratis strategische datagestuurde besluitvormingskader downloaden.
Mijn data science-website bezoeken โ De datablog.
Gegevens over opkomende zon / kraaiende haan
Gegevens over pokken
Inkomstengegevens van afgestudeerden / volkstelling
Hotelboekingsgegevens
Causale ontdekking: zorgt het kraaien van de haan ervoor dat de zon opkomt? Heruitgegeven vanaf bron https://towardsdatascience.com/causal-discovery-does-the-cockerel-crowing-cause-the-sun-to-rise-f4308453ecfa?source=rssโ-7f60cf5620c9โ4 via https://towardsdatascience. com/feed
<!โ
->
- Bitcoin
- bizbouwermike
- blockchain
- blockchain-naleving
- blockchain-conferentie
- Blockchain-adviseurs
- coinbase
- vindingrijk
- Overeenstemming
- cryptoconferentie
- crypto mijnbouw
- cryptogeld
- gedecentraliseerde
- Defi
- Digitale activa
- ethereum
- machine learning
- niet-vervangbare token
- Plato
- plato ai
- Plato gegevensintelligentie
- Platoblockchain
- PlatoData
- platogamen
- Veelhoek
- Bewijs van het belang
- W3
- zephyrnet