# causasv
[](https://github.com/kent-tokyo/causasv/actions/workflows/ci.yml)
[](https://github.com/kent-tokyo/causasv/security/code-scanning)
[](https://crates.io/crates/causasv)
[](https://pypi.org/project/causasv/)
[](https://docs.rs/causasv)
[](LICENSE-MIT)
RustとPythonで使える、因果構造を考慮した非対称Shapley値(ASV)の計算ライブラリです。
`causasv`は、利用者が用意した因果DAGと値関数からASVを計算します。ASVは位相順序だけを使って限界寄与を平均するため、原因が子孫より後に追加される順序を除外できます。
因果グラフの学習、モデル訓練、データからの因果推論は行いません。グラフを別途用意でき、その前提を利用者側で説明できる場合に使います。
## インストール
Python向けには、Linux x86_64・macOS universal2・Windows x86_64用のwheelを公開しています。
```bash
pip install causasv
```
Rust:
```toml
[dependencies]
causasv = "0.8"
```
Rust 1.85以降、Python 3.9以降に対応します。
## ASVの定義
DAG `G`の位相順序全体を`Π(G)`、順序`π`で特徴量`i`より前に現れる集合を`pre(i, π)`とします。
```text
通常のShapley値はすべての順列を平均します。ASVは、与えられたDAGと整合する順列だけを使います。値関数が加法的なら両者は一致しますが、相互作用が順序に依存する場合は異なります。具体例は[SHAPとの比較](docs/comparison_shap.md)を参照してください。
## Rustの基本例
```rust
use causasv::{AsvExplainer, Dag, SamplingConfig};
fn main() -> Result<(), causasv::CausasvError> {
let mut dag = Dag::new();
let education = dag.add_node("education");
let income = dag.add_node("income");
let risk = dag.add_node("risk_score");
dag.add_edge(education, income)?;
dag.add_edge(income, risk)?;
let result = AsvExplainer::new(dag).auto(
|coalition| Ok(coalition.len() as f64),
SamplingConfig::new(10_000).with_seed(42),
)?;
println!("{:?}", result.values);
Ok(())
}
```
`auto()`は実行可能なら厳密法を選び、難しい場合はシード付き重要度サンプリングへ切り替えます。近似結果の標準誤差や収束情報も必要なら`auto_quality()`を使います。
## Pythonの基本例
Pythonでは`explain_quality()`を推奨します。まず厳密法を試し、適用できない場合は不確実性情報付きの適応型近似を返します。
```python
from causasv import ASVExplainer, CausalDAG, explain_quality
dag = CausalDAG.from_edges([
("education", "income"),
("income", "risk_score"),
])
result = explain_quality(
ASVExplainer(dag),
value_fn=lambda features: my_model_score(features),
seed=42,
ci=0.95,
)
print(result["values"])
print(result["selected_method"])
print(result["stderr"])
print(result["ci_low"], result["ci_high"])
```
コールバックには、連合に含まれる特徴量名をソートした`list[str]`が渡されます。モデル評価が重い場合は、`value_fn`の代わりに`value_fn_batch`を渡すと、複数の連合をまとめて評価できます。
## 計算方法の選び方
特定の方式を検証する場合を除き、`auto()`または`auto_quality()`を使ってください。
| `exact` | 総当たりの参照実装 | 実用上はおおむね`n <= 8` |
| `exact_tree` | 有根木向け厳密DP | 木の形状に応じた予算、ビットマスク上限`n <= 64` |
| `exact_dag` | 密な順序イデアルDP | `n <= 20` |
| `exact_dag_sparse` | 疎な順序イデアルDP | 既定は`n <= 28`、設定変更で63まで |
| `uniform_sparse` | 位相順序の一様サンプリング | `n <= 63` |
| `approx` | 重要度サンプリング近似 | ノード数上限なし |
厳密計算が可能かどうかは、ノード数だけでなくグラフ構造、状態数、メモリにも左右されます。正式な上限と自動選択規則は[正しさと計算方式](docs/correctness.md#exact-method-bounds)にまとめています。
近似結果を使うときは、次を確認してください。
- 再現性が必要ならシードを固定する
- 標準誤差、信頼区間、収束状況、フォールバック理由を確認する
- 重要度サンプリングでは`ess_ratio`を確認する
- 順位を意思決定に使う場合は複数シードで再計算する
`explain_safe()`は主要な確認を自動化します。`explain_stability()`はシード間の順位安定性を返します。
## 主な機能
- DAG検証、位相ソート、位相順序列挙
- 総当たり、有根木、一般DAG、疎DAG向けの厳密ASV
- 固定標本、適応型、一様、並列、バッチ型の近似ASV
- シード再現性、ESS、標準誤差、信頼区間、フォールバック診断
- Rust APIとPython API
- CPDAG表現と整合するDAG拡張
- d-convex hullとstrong d-convex hullによるグラフ縮約
- 表形式モデルとDAG感度分析のPythonヘルパー
グラフ縮約も利用者が用意したグラフを対象とします。因果発見や効果推定は行いません。前提条件と独立実装の記録は[strong d-convex hull](docs/strong_d_convex_hulls.md)にあります。
## ドキュメント
- [正しさと計算方式の上限](docs/correctness.md)
- [Criterionベンチマーク](docs/benchmarks.md)
- [Pythonの標準ベンチマークコーパス](docs/benchmark_corpus.md)
- [ASVとSHAPの比較](docs/comparison_shap.md)
- [strong d-convex hullの前提](docs/strong_d_convex_hulls.md)
- [quietset不安定性連携](docs/integrations/quietset_label_instability.md)
- [Rust API](https://docs.rs/causasv)
計測値が示すのは、記載されたバージョン、ハードウェア、グラフ、値関数での結果です。一般的な速度や帰属品質を保証するものではありません。
## 現在の制限
- 因果グラフと値関数は利用者が用意する必要があります。
- `exact_tree`はノード数が少なくても、分岐が多く組合せコストが`ExactTreeConfig`の予算を超える木を拒否します。
- 密・疎の厳密法にはビットマスク由来のノード数上限があります。重要度サンプリングは65ノード以上で大規模連合用バックエンドへ切り替わります。
- CPDAG検証は構造と整合拡張の存在を確認しますが、すべての有向辺が真の同値類で必須かどうかまでは証明しません。
- グラフ縮約の保証には、ライブラリ側では検証できない分布・グラフ上の前提があります。
## ステータス
実験的 — v0.8.9。v1.0までに公開APIが変わる可能性があります。
小規模グラフでは総当たり実装を、最適化された方式の正しさを確認する基準として使っています。変更履歴は[CHANGELOG.md](CHANGELOG.md)を参照してください。
## Python拡張のビルド
```bash
python -m venv .venv
source .venv/bin/activate
pip install maturin pytest
cd py
maturin develop --features python
python -m pytest
```
## 引用
プロジェクトの引用情報は[CITATION.cff](CITATION.cff)にあります。ASV設計は*Beyond Shapley: Efficient Computation of Asymmetric Shapley Values*を参考にしています。
グラフ縮約モジュールは、Deng、Sun、Li、Liuによる“Estimate Collapsibility of Causal Effects in Completed Partial DAGs via Strong d-Convex Hulls,” arXiv:2606.08941 (2026)の数学的定義を独立に実装しています。詳細は[引用と適用範囲](docs/strong_d_convex_hulls.md)を参照してください。
## ライセンス
[Apache-2.0](LICENSE-APACHE)または[MIT](LICENSE-MIT)のどちらかを選択できます。