y0
(diucapkan "mengapa tidak?") adalah kode Python untuk inferensi sebab akibat.
y0
memiliki bahasa khusus domain internal berfitur lengkap untuk merepresentasikan ekspresi probabilitas:
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 )
Itu juga dapat digunakan untuk memanipulasi ekspresi:
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 ))
Objek DSL dapat diubah menjadi string dengan str()
dan diurai kembali menggunakan y0.parser.parse_y0()
.
Demo lengkap DSL dapat ditemukan di Notebook Jupyter ini
y0
memiliki gagasan tentang grafik campuran berarah asiklik yang dibangun di atas networkx
yang dapat digunakan untuk memodelkan kausalitas:
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
memiliki banyak contoh pra-tertulis di y0.examples
dari Pearl, Shpitser, Bareinboim, dan lainnya.
y0
menyediakan implementasi aktual dari banyak algoritme yang belum diterapkan selama 15 tahun terakhir publikasi termasuk:
Algoritma | Referensi |
---|---|
PENGENAL | Shpitser dan Mutiara, 2006 |
IDC | Shpitser dan Mutiara, 2008 |
PENGENAL* | Shpitser dan Mutiara, 2012 |
IDC* | Shpitser dan Mutiara, 2012 |
Hasil Pengganti | Tikka dan Karvanen, 2018 |
Terapkan algoritme ke ADMG dan kueri kausal untuk menghasilkan perkiraan yang direpresentasikan dalam DSL seperti:
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 )
Rilis terbaru dapat diinstal dari PyPI dengan:
$ pip install y0
Kode dan data terbaru dapat diinstal langsung dari GitHub dengan:
$ pip install git+https://github.com/y0-causal-inference/y0.git
Kontribusi, baik mengajukan masalah, membuat permintaan penarikan, atau melakukan forking, sangat dihargai. Lihat CONTRIBUTING.md untuk informasi lebih lanjut tentang cara terlibat.
Kode dalam paket ini dilisensikan di bawah lisensi BSD-3-Clause.
Sebelum kami menerbitkan catatan lamaran pada y0
, Anda dapat mengutip perangkat lunak ini melalui catatan Zenodo kami (lihat juga lencana di atas):
@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 }
}
Proyek ini didukung oleh beberapa organisasi (dalam urutan abjad):
Pengembangan Mesin Inferensi Kausal Y0 didanai oleh hibah berikut:
Badan Pendanaan | Program | Menganugerahkan |
---|---|---|
DARPA | Mengotomatiskan Ekstraksi Pengetahuan Ilmiah (ASKE) | HR00111990009 |
Inisiatif Konvergensi Model Data PNNL | Metode Inferensi Kausal dan Pembelajaran Mesin untuk Analisis Komitmen Unit Terbatas Keamanan (SCY0) | 90001 |
DARPA | Otomatisasi Ekstraksi dan Pemodelan Pengetahuan Ilmiah (ASKEM) | HR00112220036 |
Paket ini dibuat dengan paket cookiecutter @audreyfeldroy menggunakan template cookiecutter-snekpack @cthoyt.
Bagian terakhir dari README adalah jika Anda ingin terlibat dengan memberikan kontribusi kode.
Untuk menginstal dalam mode pengembangan, gunakan yang berikut ini:
git clone git+https://github.com/y0-causal-inference/y0.git
cd y0
pip install -e .
Proyek ini menggunakan cruft
untuk menjaga agar boilerplate (yaitu, konfigurasi, pedoman kontribusi, konfigurasi dokumentasi) tetap mutakhir dengan paket cookiecutter upstream. Perbarui dengan yang berikut ini:
pip install cruft
cruft update
Info lebih lanjut tentang perintah pembaruan Cruft tersedia di sini.
Setelah mengkloning repositori dan menginstal tox
dengan pip install tox tox-uv
, pengujian unit di folder tests/
dapat dijalankan secara berulang dengan:
tox -e py
Selain itu, pengujian ini secara otomatis dijalankan kembali dengan setiap penerapan dalam Tindakan GitHub.
Dokumentasi dapat dibuat secara lokal menggunakan yang berikut ini:
git clone git+https://github.com/y0-causal-inference/y0.git
cd y0
tox -e docs
open docs/build/html/index.html
Dokumentasi secara otomatis menginstal paket serta docs
tambahan yang ditentukan di pyproject.toml
. plugin sphinx
seperti texext
dapat ditambahkan di sana. Selain itu, mereka perlu ditambahkan ke daftar extensions
di docs/source/conf.py
.
Dokumentasi dapat diterapkan ke ReadTheDocs menggunakan panduan ini. File .readthedocs.yml
YAML berisi semua konfigurasi yang Anda perlukan. Anda juga dapat menyiapkan integrasi berkelanjutan di GitHub untuk memeriksa tidak hanya apakah Sphinx dapat membuat dokumentasi di lingkungan yang terisolasi (misalnya, dengan tox -e docs-test
) tetapi juga ReadTheDocs juga dapat membuatnya.
Zenodo adalah sistem pengarsipan jangka panjang yang memberikan DOI untuk setiap rilis paket Anda.
Setelah langkah-langkah ini, Anda siap berangkat! Setelah Anda membuat "rilis" di GitHub (langkah-langkahnya ada di bawah), Anda dapat membuka https://zenodo.org/account/settings/github/repository/y0-causal-inference/y0 untuk melihat DOI untuk rilis tersebut dan tautkan ke catatan Zenodo untuk itu.
Anda hanya perlu melakukan langkah-langkah berikut satu kali.
Anda harus melakukan langkah-langkah berikut satu kali per mesin. Buat file di direktori home Anda bernama .pypirc
dan sertakan yang berikut ini:
[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>
Perhatikan bahwa karena PyPI memerlukan otentikasi berbasis token, kami menggunakan __token__
sebagai pengguna, kata demi kata. Jika Anda sudah memiliki file .pypirc
dengan bagian [distutils]
, pastikan saja ada kunci index-servers
dan pypi
ada dalam daftar terkaitnya. Informasi lebih lanjut tentang konfigurasi file .pypirc
dapat ditemukan di sini.
Setelah menginstal paket dalam mode pengembangan dan menginstal tox
dengan pip install tox tox-uv
, jalankan perintah berikut dari shell:
tox -e finish
Skrip ini melakukan hal berikut:
pyproject.toml
, CITATION.cff
, src/y0/version.py
, dan docs/source/conf.py
agar tidak memiliki akhiran -dev
build
twine
.tox -e bumpversion -- minor
setelahnya. Ini akan memicu Zenodo untuk menetapkan DOI pada rilis Anda juga.