y0
(ออกเสียงว่า "ทำไมไม่?") คือโค้ด Python สำหรับการอนุมานเชิงสาเหตุ
y0
มีภาษาเฉพาะโดเมนภายในที่มีคุณลักษณะครบถ้วนสำหรับการแสดงนิพจน์ความน่าจะเป็น:
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 )
นอกจากนี้ยังสามารถใช้เพื่อจัดการกับนิพจน์:
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 สามารถแปลงเป็นสตริงด้วย str()
และแยกวิเคราะห์กลับโดยใช้ y0.parser.parse_y0()
สามารถดูการสาธิต DSL ฉบับสมบูรณ์ได้ใน Jupyter Notebook นี้
y0
มีแนวคิดเกี่ยวกับกราฟผสมที่มีการกำหนดทิศทางแบบอะไซคลิกซึ่งสร้างขึ้นบน networkx
ซึ่งสามารถนำไปใช้ในการสร้างแบบจำลองเชิงสาเหตุได้:
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
มีตัวอย่างที่เขียนไว้ล่วงหน้ามากมายใน y0.examples
ตัวอย่างจาก Pearl, Shpitser, Bareinboim และอื่นๆ
y0
นำเสนอการใช้งาน จริง ของอัลกอริธึมมากมายที่ยังไม่มีการใช้งานในช่วง 15 ปีที่ผ่านมา รวมถึง:
อัลกอริทึม | อ้างอิง |
---|---|
บัตรประจำตัวประชาชน | ชปิตเซอร์และเพิร์ล, 2549 |
ไอดีซี | ชปิตเซอร์และเพิร์ล, 2551 |
บัตรประจำตัว* | Shpitser และเพิร์ล, 2012 |
ไอดีซี* | Shpitser และเพิร์ล, 2012 |
ผลลัพธ์ตัวแทน | ทิกก้าและคาร์วาเนน, 2018 |
ใช้อัลกอริทึมกับ ADMG และแบบสอบถามเชิงสาเหตุเพื่อสร้างค่าประมาณที่แสดงใน DSL เช่น:
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 )
สามารถติดตั้งรุ่นล่าสุดได้จาก PyPI ด้วย:
$ pip install y0
โค้ดและข้อมูลล่าสุดสามารถติดตั้งได้โดยตรงจาก GitHub ด้วย:
$ pip install git+https://github.com/y0-causal-inference/y0.git
การมีส่วนร่วม ไม่ว่าจะเป็นการยื่นประเด็น การขอดึงข้อมูล หรือการฟอร์กกิ้ง ล้วนได้รับการชื่นชม ดู CONTRIBUTING.md สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการมีส่วนร่วม
รหัสในแพ็คเกจนี้ได้รับอนุญาตภายใต้ใบอนุญาต BSD-3-Clause
ก่อนที่เราจะเผยแพร่บันทึกการใช้งานบน y0
คุณสามารถอ้างอิงซอฟต์แวร์นี้ผ่านบันทึก Zenodo ของเรา (ดูตราสัญลักษณ์ด้านบนด้วย):
@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 }
}
โครงการนี้ได้รับการสนับสนุนจากหลายองค์กร (เรียงตามตัวอักษร):
การพัฒนา Y0 Causal Inference Engine ได้รับทุนสนับสนุนดังต่อไปนี้:
หน่วยงานให้ทุน | โปรแกรม | ยินยอม |
---|---|---|
ดาร์ปา | การแยกความรู้ทางวิทยาศาสตร์อัตโนมัติ (ASKE) | HR00111990009 |
ความคิดริเริ่มการบรรจบกันของแบบจำลองข้อมูล PNNL | วิธีการอนุมานเชิงสาเหตุและการเรียนรู้ของเครื่องสำหรับการวิเคราะห์ข้อผูกพันต่อหน่วยความปลอดภัยที่มีข้อจำกัด (SCY0) | 90001 |
ดาร์ปา | การแยกและการสร้างแบบจำลองความรู้ทางวิทยาศาสตร์โดยอัตโนมัติ (ASKEM) | HR00112220036 |
แพ็คเกจนี้สร้างขึ้นด้วยแพ็คเกจเครื่องตัดคุกกี้ของ @audreyfeldroy โดยใช้เทมเพลต cookiecutter-snekpack ของ @cthoyt
ส่วนสุดท้ายของ README มีไว้เพื่อถ้าคุณต้องการมีส่วนร่วมโดยการร่วมสนับสนุนโค้ด
หากต้องการติดตั้งในโหมดการพัฒนา ให้ใช้สิ่งต่อไปนี้:
git clone git+https://github.com/y0-causal-inference/y0.git
cd y0
pip install -e .
โปรเจ็กต์นี้ใช้ cruft
เพื่อทำให้ต้นแบบ (เช่น การกำหนดค่า แนวทางการสนับสนุน การกำหนดค่าเอกสารประกอบ) เป็นปัจจุบันด้วยแพ็คเกจเครื่องตัดคุกกี้อัปสตรีม อัปเดตดังต่อไปนี้:
pip install cruft
cruft update
ข้อมูลเพิ่มเติมเกี่ยวกับคำสั่งอัปเดตของ Cruft มีอยู่ที่นี่
หลังจากการโคลนพื้นที่เก็บข้อมูลและติดตั้ง tox
ด้วย pip install tox tox-uv
หน่วยการทดสอบใน tests/
โฟลเดอร์สามารถรันซ้ำได้ด้วย:
tox -e py
นอกจากนี้ การทดสอบเหล่านี้จะรันซ้ำโดยอัตโนมัติทุกครั้งที่คอมมิตใน GitHub Action
เอกสารสามารถสร้างได้ภายในเครื่องโดยใช้สิ่งต่อไปนี้:
git clone git+https://github.com/y0-causal-inference/y0.git
cd y0
tox -e docs
open docs/build/html/index.html
เอกสารประกอบจะติดตั้งแพ็คเกจโดยอัตโนมัติรวมถึง docs
เพิ่มเติมที่ระบุใน pyproject.toml
สามารถเพิ่มปลั๊กอิน sphinx
งซ์เช่น texext
ได้ นอกจากนี้ จะต้องเพิ่มส่วนขยายเหล่านี้ลงในรายการ extensions
ใน docs/source/conf.py
คุณสามารถปรับใช้เอกสารประกอบกับ ReadTheDocs ได้โดยใช้คำแนะนำนี้ ไฟล์ .readthedocs.yml
YAML มีการกำหนดค่าทั้งหมดที่คุณต้องการ คุณยังสามารถตั้งค่าการบูรณาการอย่างต่อเนื่องบน GitHub เพื่อตรวจสอบว่าไม่เพียงแต่สฟิงซ์สามารถสร้างเอกสารในสภาพแวดล้อมที่แยกออกมาได้ (เช่น ด้วย tox -e docs-test
) แต่ยังรวมถึง ReadTheDocs ก็สามารถสร้างมันได้เช่นกัน
Zenodo คือระบบจัดเก็บถาวรระยะยาวที่กำหนด DOI ให้กับแพ็คเกจแต่ละรุ่นของคุณ
หลังจากขั้นตอนเหล่านี้ คุณก็พร้อมแล้ว! หลังจากที่คุณทำการ "ปล่อย" บน GitHub (ขั้นตอนสำหรับสิ่งนี้อยู่ด้านล่าง) คุณสามารถไปที่ https://zenodo.org/account/settings/github/repository/y0-causal-inference/y0 เพื่อดู DOI สำหรับการเผยแพร่ และลิงก์ไปยังบันทึกของ Zenodo
คุณต้องทำตามขั้นตอนต่อไปนี้เพียงครั้งเดียว
คุณต้องทำตามขั้นตอนต่อไปนี้หนึ่งครั้งต่อเครื่อง สร้างไฟล์ในโฮมไดเร็กตอรี่ของคุณชื่อ .pypirc
และรวมไฟล์ต่อไปนี้:
[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>
โปรดทราบว่าเนื่องจาก PyPI ต้องการการรับรองความถูกต้องด้วยโทเค็น เราจึงใช้ __token__
เป็นผู้ใช้แบบคำต่อคำ หากคุณมีไฟล์ .pypirc
ที่มีส่วน [distutils]
อยู่แล้ว เพียงตรวจสอบให้แน่ใจว่ามีคีย์ index-servers
และ pypi
นั้นอยู่ในรายการที่เกี่ยวข้อง ข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่าไฟล์ .pypirc
สามารถพบได้ที่นี่
หลังจากติดตั้งแพ็คเกจในโหมดการพัฒนาและติดตั้ง tox
ด้วย pip install tox tox-uv
ให้รันสิ่งต่อไปนี้จากเชลล์:
tox -e finish
สคริปต์นี้ทำสิ่งต่อไปนี้:
pyproject.toml
, CITATION.cff
, src/y0/version.py
และ docs/source/conf.py
เพื่อไม่ให้มีคำต่อท้าย -dev
build
twine
tox -e bumpversion -- minor
after ได้ สิ่งนี้จะกระตุ้นให้ Zenodo กำหนด DOI ให้กับรุ่นของคุณเช่นกัน