y0
(ausgesprochen „warum nicht?“) ist Python-Code für kausale Schlussfolgerungen.
y0
verfügt über eine voll funktionsfähige interne domänenspezifische Sprache zur Darstellung von Wahrscheinlichkeitsausdrücken:
from y0 . dsl import P , A , B
# The probability of A given B
expr_1 = P ( A | B )
# The probability of A given not B
expr_2 = P ( A | ~ B )
# The joint probability of A and B
expr_3 = P ( A , B )
Es kann auch zum Bearbeiten von Ausdrücken verwendet werden:
from y0 . dsl import P , A , B , Sum
P ( A , B ). marginalize ( A ) == Sum [ A ]( P ( A , B ))
P ( A , B ). conditional ( A ) == P ( A , B ) / Sum [ A ]( P ( A , B ))
DSL-Objekte können mit str()
in Strings umgewandelt und mit y0.parser.parse_y0()
zurückgeparst werden.
Eine vollständige Demo des DSL finden Sie in diesem Jupyter Notebook
y0
hat eine Vorstellung von azyklischen gerichteten gemischten Graphen, die auf networkx
aufbauen und zur Modellierung der Kausalität verwendet werden können:
from y0 . graph import NxMixedGraph
from y0 . dsl import X , Y , Z1 , Z2
# Example from:
# J. Pearl and D. Mackenzie (2018)
# The Book of Why: The New Science of Cause and Effect.
# Basic Books, p. 240.
napkin = NxMixedGraph . from_edges (
directed = [
( Z2 , Z1 ),
( Z1 , X ),
( X , Y ),
],
undirected = [
( Z2 , X ),
( Z2 , Y ),
],
)
y0
enthält viele vorgefertigte Beispiele in y0.examples
von Pearl, Shpitser, Bareinboim und anderen.
y0
bietet tatsächliche Implementierungen vieler Algorithmen, die in den letzten 15 Veröffentlichungsjahren nicht implementiert wurden, darunter:
Algorithmus | Referenz |
---|---|
AUSWEIS | Shpitser und Pearl, 2006 |
IDC | Shpitser und Pearl, 2008 |
AUSWEIS* | Shpitser und Pearl, 2012 |
IDC* | Shpitser und Pearl, 2012 |
Ersatzergebnisse | Tikka und Karvanen, 2018 |
Wenden Sie einen Algorithmus auf eine ADMG und eine kausale Abfrage an, um einen im DSL dargestellten Schätzwert zu generieren, wie zum Beispiel:
from y0 . dsl import P , X , Y
from y0 . examples import napkin
from y0 . algorithm . identify import Identification , identify
# TODO after ID* and IDC* are done, we'll update this interface
query = Identification . from_expression ( graph = napkin , query = P ( Y @ X ))
estimand = identify ( query )
assert estimand == P ( Y @ X )
Die neueste Version kann von PyPI installiert werden mit:
$ pip install y0
Der aktuellste Code und die neuesten Daten können direkt von GitHub installiert werden mit:
$ pip install git+https://github.com/y0-causal-inference/y0.git
Beiträge, sei es das Einreichen eines Problems, das Stellen einer Pull-Anfrage oder das Forking, sind willkommen. Weitere Informationen zum Mitmachen finden Sie unter CONTRIBUTING.md.
Der Code in diesem Paket ist unter der BSD-3-Klausel-Lizenz lizenziert.
Bevor wir einen Anwendungshinweis zu y0
veröffentlichen, können Sie diese Software über unseren Zenodo-Datensatz zitieren (siehe auch das Abzeichen oben):
@software { y0 ,
author = { Charles Tapley Hoyt and
Jeremy Zucker and
Marc-Antoine Parent } ,
title = { y0-causal-inference/y0 } ,
month = jun,
year = 2021 ,
publisher = { Zenodo } ,
version = { v0.1.0 } ,
doi = { 10.5281/zenodo.4950768 } ,
url = { https://doi.org/10.5281/zenodo.4950768 }
}
Dieses Projekt wurde von mehreren Organisationen unterstützt (in alphabetischer Reihenfolge):
Die Entwicklung der Y0 Causal Inference Engine wurde durch folgende Zuschüsse finanziert:
Fördereinrichtung | Programm | Gewähren |
---|---|---|
DARPA | Automatisierung der wissenschaftlichen Wissensextraktion (ASKE) | HR00111990009 |
PNNL-Datenmodell-Konvergenzinitiative | Kausale Inferenz und Methoden des maschinellen Lernens zur Analyse des sicherheitsbeschränkten Unit-Commitments (SCY0) | 90001 |
DARPA | Automatisierung der Extraktion und Modellierung wissenschaftlichen Wissens (ASKEM) | HR00112220036 |
Dieses Paket wurde mit dem Cookiecutter-Paket von @audreyfeldroy unter Verwendung der cookiecutter-snekpack-Vorlage von @cthoyt erstellt.
Der letzte Abschnitt der README-Datei ist für diejenigen gedacht, die sich durch einen Codebeitrag engagieren möchten.
Um im Entwicklungsmodus zu installieren, verwenden Sie Folgendes:
git clone git+https://github.com/y0-causal-inference/y0.git
cd y0
pip install -e .
Dieses Projekt verwendet cruft
, um die Boilerplate (z. B. Konfiguration, Beitragsrichtlinien, Dokumentationskonfiguration) mit dem Upstream-Cookiecutter-Paket auf dem neuesten Stand zu halten. Aktualisieren Sie mit Folgendem:
pip install cruft
cruft update
Weitere Informationen zum Update-Befehl von Cruft finden Sie hier.
Nach dem Klonen des Repositorys und der Installation tox
mit pip install tox tox-uv
können die Unit-Tests im Ordner tests/
reproduzierbar ausgeführt werden mit:
tox -e py
Darüber hinaus werden diese Tests bei jedem Commit in einer GitHub-Aktion automatisch erneut ausgeführt.
Die Dokumentation kann wie folgt lokal erstellt werden:
git clone git+https://github.com/y0-causal-inference/y0.git
cd y0
tox -e docs
open docs/build/html/index.html
Die Dokumentation installiert automatisch das Paket sowie die in pyproject.toml
angegebenen zusätzlichen docs
. Dort können sphinx
Plugins wie texext
hinzugefügt werden. Darüber hinaus müssen sie zur extensions
in docs/source/conf.py
hinzugefügt werden.
Die Dokumentation kann mithilfe dieses Handbuchs in ReadTheDocs bereitgestellt werden. Die YAML-Datei .readthedocs.yml
enthält die gesamte Konfiguration, die Sie benötigen. Sie können auch eine kontinuierliche Integration auf GitHub einrichten, um nicht nur zu überprüfen, ob Sphinx die Dokumentation in einer isolierten Umgebung erstellen kann (z. B. mit tox -e docs-test
), sondern auch, dass ReadTheDocs sie ebenfalls erstellen kann.
Zenodo ist ein Langzeitarchivierungssystem, das jeder Veröffentlichung Ihres Pakets einen DOI zuweist.
Nach diesen Schritten kann es losgehen! Nachdem Sie „Release“ auf GitHub vorgenommen haben (die Schritte hierfür finden Sie unten), können Sie zu https://zenodo.org/account/settings/github/repository/y0-causal-inference/y0 navigieren, um den DOI für die Veröffentlichung anzuzeigen und Link zum Zenodo-Datensatz dafür.
Die folgenden Schritte müssen Sie nur einmal durchführen.
Die folgenden Schritte müssen Sie einmal pro Maschine durchführen. Erstellen Sie in Ihrem Home-Verzeichnis eine Datei mit dem Namen .pypirc
und fügen Sie Folgendes ein:
[distutils]
index-servers =
pypi
testpypi
[pypi]
username = __token__
password = <the API token you just got>
# This block is optional in case you want to be able to make test releases to the Test PyPI server
[testpypi]
repository = https://test.pypi.org/legacy/
username = __token__
password = <an API token from test PyPI>
Beachten Sie, dass wir __token__
wörtlich als Benutzer verwenden, da PyPI eine tokenbasierte Authentifizierung erfordert. Wenn Sie bereits über eine .pypirc
Datei mit einem Abschnitt [distutils]
verfügen, stellen Sie einfach sicher, dass ein index-servers
vorhanden ist und dass pypi
in der zugehörigen Liste enthalten ist. Weitere Informationen zur Konfiguration der .pypirc
Datei finden Sie hier.
Nachdem Sie das Paket im Entwicklungsmodus installiert und tox
mit pip install tox tox-uv
installiert haben, führen Sie Folgendes in der Shell aus:
tox -e finish
Dieses Skript führt Folgendes aus:
pyproject.toml
, CITATION.cff
, src/y0/version.py
und docs/source/conf.py
so zu ändern, dass sie nicht das Suffix -dev
hatbuild
sowohl in ein TAR-Archiv als auch in ein Wheeltwine
auf PyPI hoch.tox -e bumpversion -- minor
verwenden. Dadurch wird Zenodo veranlasst, auch Ihrer Veröffentlichung einen DOI zuzuweisen.