y0
(「Why not?」と発音します) は、因果推論用の 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 | シュピッツァーとパール、2006 |
IDC | シュピッツァーとパール、2008 |
ID* | シュピッツァーとパール、2012 |
IDC* | シュピッツァーとパール、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 因果推論エンジンの開発は、次の助成金によって資金提供されています。
資金提供団体 | プログラム | 付与 |
---|---|---|
DARPA | 科学知識抽出の自動化 (ASKE) | HR00111990009 |
PNNL データ モデル コンバージェンス イニシアチブ | セキュリティ制約のあるユニットコミットメント (SCY0) を分析するための因果推論および機械学習手法 | 90001 |
DARPA | 科学知識の抽出とモデリングの自動化 (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 アクションのコミットごとに自動的に再実行されます。
ドキュメントは以下を使用してローカルに構築できます。
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 レコードへのリンク。
次の手順は 1 回だけ実行する必要があります。
次の手順はマシンごとに 1 回実行する必要があります。ホーム ディレクトリに.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 を割り当てるようになります。