attribute_change()
KeyDistribution-change attribution between two as-of windows (DoWhy-GCM): which upstream causes account for the move in a metric. Capability is partial — when the GCM method can't run, it falls back to a structured candidate-cause analysis over the approved graph, and says so.
attribute_change(metric, window_a, window_b)→ ATTRIBUTIONCallable over MCP as attribute_change(metric, window_a, window_b). REST mirror POST /v1/attribute Planned — alpha is MCP-only
The retrospective twin of simulation: win rate moved — what caused it? Distribution-change attribution between two as-of windows, over the approved graph. And because the capability is honestly marked partial, the agent knows when it's getting the GCM answer versus the structured fallback.
Over MCP, your agent invokes it on its own when the moment calls for it — just describe the situation. A Python SDK for headless runtimes is planned; this is what the call will look like.
| Param | Type | Description |
|---|---|---|
| metricREQUIRED | string | The variable that moved. |
| window_aREQUIRED | string | Baseline as-of window, e.g. "2026-03-01/2026-04-15". |
| window_bREQUIRED | string | Comparison as-of window. |

