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.
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
от Перла, Шпицера, Барейнбойма и других.
y0
предоставляет реальные реализации многих алгоритмов, которые оставались нереализованными за последние 15 лет публикаций, в том числе:
Алгоритм | Ссылка |
---|---|
ИДЕНТИФИКАТОР | Шпицер и Жемчужина, 2006 г. |
ИДЦ | Шпицер и Жемчужина, 2008 г. |
ИДЕНТИФИКАТОР* | Шпицер и Жемчужина, 2012 г. |
ИДЦ* | Шпицер и Жемчужина, 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 |
Этот пакет был создан с помощью пакета cookiecutter @audreyfeldroy с использованием шаблона cookiecutter-snekpack @cthoyt.
Последний раздел 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 можно найти здесь.
После клонирования репозитория и установки tox
с помощью pip install tox tox-uv
модульные тесты в папкеtests 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
Документация автоматически устанавливает пакет, а также дополнительную docs
, указанную в pyproject.toml
. Туда можно добавить плагины sphinx
, такие как texext
. Кроме того, их необходимо добавить в список extensions
в docs/source/conf.py
.
Документацию можно развернуть в ReadTheDocs с помощью этого руководства. YAML-файл .readthedocs.yml
содержит всю необходимую конфигурацию. Вы также можете настроить непрерывную интеграцию на 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__
в качестве пользователя. Если у вас уже есть файл .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
после этого. Это заставит Zenodo также присвоить DOI вашему релизу.