y0
(تُنطق "لماذا لا؟") هو كود بايثون للاستدلال السببي.
يحتوي 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
تطبيقات فعلية للعديد من الخوارزميات التي ظلت غير منفذة على مدار الخمسة عشر عامًا الماضية من المنشورات بما في ذلك:
خوارزمية | مرجع |
---|---|
بطاقة تعريف | شبيتسر وبيرل، 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
لإبقاء النموذج المعياري (على سبيل المثال، التكوين، وإرشادات المساهمة، وتكوين الوثائق) محدثًا مع حزمة ملفات تعريف الارتباط الأولية. التحديث بما يلي:
pip install cruft
cruft update
يتوفر المزيد من المعلومات حول أمر التحديث الخاص بـ Cruft هنا.
بعد استنساخ المستودع وتثبيت tox
باستخدام pip install tox tox-uv
، يمكن تشغيل اختبارات الوحدة في مجلد 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 باستخدام هذا الدليل. يحتوي ملف .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__
كمستخدم حرفيًا. إذا كان لديك بالفعل ملف .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 لإصدارك أيضًا.