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
Pearl, Shpitser, Bareinboim 등의 y0.examples
에 미리 작성된 많은 예제가 있습니다.
y0
다음을 포함하여 지난 15년간 출판물에서 구현되지 않은 채로 남아 있던 많은 알고리즘의 실제 구현을 제공합니다.
연산 | 참조 |
---|---|
ID | Shpitser 및 진주, 2006 |
IDC | Shpitser 및 진주, 2008 |
ID* | Shpitser와 진주, 2012 |
IDC* | 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 인과 추론 엔진의 개발은 다음 보조금으로 자금을 조달했습니다.
자금 조달 기관 | 프로그램 | 승인하다 |
---|---|---|
다르파 | 과학 지식 추출 자동화(ASKE) | HR00111990009 |
PNNL 데이터 모델 융합 이니셔티브 | 보안 제약 단위 약속(SCY0) 분석을 위한 인과 추론 및 기계 학습 방법 | 90001 |
다르파 | 과학 지식 추출 및 모델링 자동화(ASKEM) | HR00112220036 |
이 패키지는 @cthoyt의 cookiecutter-snekpack 템플릿을 사용하여 @audreyfeldroy의 cookiecutter 패키지로 생성되었습니다.
README의 마지막 섹션은 코드 기여를 통해 참여하려는 경우를 위한 것입니다.
개발 모드로 설치하려면 다음을 사용하십시오.
git clone git+https://github.com/y0-causal-inference/y0.git
cd y0
pip install -e .
이 프로젝트는 cruft
사용하여 상용구(예: 구성, 기여 지침, 문서 구성)를 업스트림 cookiecutter 패키지로 최신 상태로 유지합니다. 다음으로 업데이트하십시오.
pip install cruft
cruft update
Cruft의 업데이트 명령에 대한 자세한 내용은 여기에서 확인할 수 있습니다.
저장소를 복제하고 pip install tox tox-uv
로 tox
설치한 후 다음을 사용하여 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
문서는 패키지와 pyproject.toml
에 지정된 추가 docs
자동으로 설치합니다. texext
와 같은 sphinx
플러그인을 여기에 추가할 수 있습니다. 또한 docs/source/conf.py
의 extensions
목록에 추가해야 합니다.
이 가이드를 사용하여 문서를 ReadTheDocs에 배포할 수 있습니다. .readthedocs.yml
YAML 파일에는 필요한 모든 구성이 포함되어 있습니다. 또한 GitHub에서 지속적인 통합을 설정하여 Sphinx가 격리된 환경(예: 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__
사용자로 그대로 사용합니다. [distutils]
섹션이 포함된 .pypirc
파일이 이미 있는 경우 index-servers
키가 있고 해당 pypi
관련 목록에 있는지 확인하세요. .pypirc
파일 구성에 대한 자세한 내용은 여기에서 확인할 수 있습니다.
개발 모드에서 패키지를 설치하고 pip install tox tox-uv
로 tox
설치한 후 셸에서 다음을 실행합니다.
tox -e finish
이 스크립트는 다음을 수행합니다.
pyproject.toml
, CITATION.cff
, src/y0/version.py
및 docs/source/conf.py
의 버전 번호에 -dev
접미사가 없도록 전환합니다.build
사용하여 tar 아카이브와 휠 모두에 코드를 패키징합니다.twine
사용하여 PyPI에 업로드합니다.tox -e bumpversion -- minor
이후에 사용할 수 있습니다. 그러면 Zenodo가 귀하의 릴리스에도 DOI를 할당하게 됩니다.