y0
(pronunciado "¿por qué no?") es código Python para inferencia causal.
y0
tiene un lenguaje interno específico de dominio con todas las funciones para representar expresiones de probabilidad:
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 )
También se puede utilizar para manipular expresiones:
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 ))
Los objetos DSL se pueden convertir en cadenas con str()
y analizarse nuevamente usando y0.parser.parse_y0()
.
Puede encontrar una demostración completa de DSL en este Jupyter Notebook.
y0
tiene una noción de gráficos mixtos dirigidos acíclicos construidos sobre networkx
que se pueden usar para modelar la causalidad:
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
tiene muchos ejemplos escritos previamente en y0.examples
de Pearl, Shpitser, Bareinboim y otros.
y0
proporciona implementaciones reales de muchos algoritmos que no se han implementado durante los últimos 15 años de publicaciones, entre ellos:
Algoritmo | Referencia |
---|---|
IDENTIFICACIÓN | Shpitser y Pearl, 2006 |
IDC | Shpitser y Pearl, 2008 |
IDENTIFICACIÓN* | Shpitser y Perla, 2012 |
CID* | Shpitser y Perla, 2012 |
Resultados sustitutos | Tikka y Karvanen, 2018 |
Aplicar un algoritmo a un ADMG y una consulta causal para generar un estimado representado en el DSL como:
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 )
La versión más reciente se puede instalar desde PyPI con:
$ pip install y0
El código y los datos más recientes se pueden instalar directamente desde GitHub con:
$ pip install git+https://github.com/y0-causal-inference/y0.git
Se agradecen las contribuciones, ya sea presentando un problema, realizando una solicitud de extracción o bifurcando. Consulte CONTRIBUTING.md para obtener más información sobre cómo participar.
El código de este paquete tiene la licencia BSD-3-Clause.
Antes de publicar una nota de aplicación en y0
, puede citar este software a través de nuestro registro Zenodo (consulte también la insignia arriba):
@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 }
}
Este proyecto ha sido apoyado por varias organizaciones (en orden alfabético):
El desarrollo del motor de inferencia causal Y0 ha sido financiado por las siguientes subvenciones:
Organismo financiador | Programa | Conceder |
---|---|---|
DARPA | Automatización de la extracción de conocimientos científicos (ASKE) | HR00111990009 |
Iniciativa de convergencia del modelo de datos PNNL | Métodos de inferencia causal y aprendizaje automático para el análisis del compromiso de unidad restringido por seguridad (SCY0) | 90001 |
DARPA | Automatización de la extracción y modelado del conocimiento científico (ASKEM) | HR00112220036 |
Este paquete fue creado con el paquete cookiecutter de @audreyfeldroy usando la plantilla cookiecutter-snekpack de @cthoyt.
La sección final del README es para si desea participar contribuyendo con un código.
Para instalar en modo de desarrollo, utilice lo siguiente:
git clone git+https://github.com/y0-causal-inference/y0.git
cd y0
pip install -e .
Este proyecto utiliza cruft
para mantener actualizado el texto estándar (es decir, configuración, pautas de contribución, configuración de documentación) con el paquete cookiecutter ascendente. Actualice con lo siguiente:
pip install cruft
cruft update
Más información sobre el comando de actualización de Cruft está disponible aquí.
Después de clonar el repositorio e instalar tox
con pip install tox tox-uv
, las pruebas unitarias en la carpeta tests/
se pueden ejecutar de manera reproducible con:
tox -e py
Además, estas pruebas se vuelven a ejecutar automáticamente con cada confirmación en una acción de GitHub.
La documentación se puede construir localmente usando lo siguiente:
git clone git+https://github.com/y0-causal-inference/y0.git
cd y0
tox -e docs
open docs/build/html/index.html
La documentación instala automáticamente el paquete, así como los docs
adicionales especificados en pyproject.toml
. Allí se pueden agregar complementos sphinx
como texext
. Además, deben agregarse a la lista extensions
en docs/source/conf.py
.
La documentación se puede implementar en ReadTheDocs utilizando esta guía. El archivo YAML .readthedocs.yml
contiene toda la configuración que necesitará. También puede configurar la integración continua en GitHub para comprobar no solo que Sphinx pueda crear la documentación en un entorno aislado (es decir, con tox -e docs-test
), sino también que ReadTheDocs también pueda crearla.
Zenodo es un sistema de archivo a largo plazo que asigna un DOI a cada versión de su paquete.
Después de estos pasos, ¡estás listo para comenzar! Después de realizar el "lanzamiento" en GitHub (los pasos para esto se detallan a continuación), puede navegar a https://zenodo.org/account/settings/github/repository/y0-causal-inference/y0 para ver el DOI del lanzamiento. y enlace al registro de Zenodo.
Sólo tienes que realizar los siguientes pasos una vez.
Debe realizar los siguientes pasos una vez por máquina. Cree un archivo en su directorio de inicio llamado .pypirc
e incluya lo siguiente:
[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>
Tenga en cuenta que, dado que PyPI requiere autenticación basada en token, usamos __token__
como usuario, palabra por palabra. Si ya tiene un archivo .pypirc
con una sección [distutils]
, solo asegúrese de que haya una clave index-servers
y que pypi
esté en su lista asociada. Puede encontrar más información sobre la configuración del archivo .pypirc
aquí.
Después de instalar el paquete en modo de desarrollo e instalar tox
con pip install tox tox-uv
, ejecute lo siguiente desde el shell:
tox -e finish
Este script hace lo siguiente:
pyproject.toml
, CITATION.cff
, src/y0/version.py
y docs/source/conf.py
para que no tenga el sufijo -dev
build
twine
.tox -e bumpversion -- minor
después. Esto hará que Zenodo también asigne un DOI a su versión.