Calculate analytics portfolio realized ROI
Reconcile the analytics portfolio's realized ROI from unique finance-owned incremental benefit sources, causal-evidence weights, non-overlapping function allocations, implementation/recurring/shared costs and coherent joint scenarios, with positive-value probability and CVaR loss gates.
What it's for
Gives CTOs, CEOs and investors a defensible answer to whether the analytics portfolio paid back—without double-counting benefits or converting activity into invented ROI.
What you give it
Inputs split into evidence read from your connected systems, calibration your team owns, and numerical controls that affect precision but never the result's meaning.
| Field | Type | Role | Required |
|---|---|---|---|
| benefit_sources | array of objects (4 fields) ≥ 1 item | Evidence | Yes |
| functions | array of objects (3 fields) ≥ 1 item | Evidence | Yes |
| max_detail_rows | integer ≥ 1, ≤ 500 | Numerical control | Optional |
| maximum_tail_loss | number ≥ 0 | Your calibration | Optional |
| minimum_probability_positive_net_value | number ≥ 0, ≤ 1 | Your calibration | Optional |
| scenarios | array of objects (2 fields) | Evidence | Yes |
| shared_cost_scenarios | array of number ≥ 2 items | Evidence | Yes |
| tail_probability | number > 0, ≤ 0.5 | Your calibration | Optional |
Each benefit_sources
record
| Field | Type | Required |
|---|---|---|
| allocation_by_function | object | Yes |
| causal_evidence_weight | number (≥ 0, ≤ 1) | Yes |
| id | string (non-empty) | Yes |
| realized_incremental_value_scenarios | array of number (≥ 2 items) | Yes |
{
"benefit_sources": [
{
"allocation_by_function": {
"completion-forecast": 0.6,
"decision-policy": 0.4
},
"causal_evidence_weight": 0.8,
"id": "delay-loss-avoided",
"realized_incremental_value_scenarios": [
100,
60,
-10
]
},
{
"allocation_by_function": {
"decision-policy": 0.8
},
"causal_evidence_weight": 1,
"id": "incident-loss-avoided",
"realized_incremental_value_scenarios": [
50,
20,
0
]
}
],
"functions": [
{
"id": "completion-forecast",
"implementation_cost": 20,
"recurring_cost_scenarios": [
10,
10,
10
]
},
{
"id": "decision-policy",
"implementation_cost": 10,
"recurring_cost_scenarios": [
5,
5, Truncated for display — the full payload is 69 lines.
What you get back
This is the actual output of running the example above — computed by the same function the platform calls, not an illustration.
{
"benefit_source_diagnostics": [
{
"allocated_fraction": 1,
"causal_evidence_weight": 0.8,
"expected_evidence_adjusted_value": 52.8,
"source_id": "delay-loss-avoided",
"unallocated_fraction": 0
},
{
"allocated_fraction": 0.8,
"causal_evidence_weight": 1,
"expected_evidence_adjusted_value": 31,
"source_id": "incident-loss-avoided",
"unallocated_fraction": 0.2
}
],
"configuration": {
"maximum_tail_loss": null,
"minimum_probability_positive_net_value": 0.7,
"tail_probability": 0.1
},
"decision": "analytics_portfolio_realized_value_supported",
"failed_gates": [],
"function_attribution": [
{
"expected_allocated_benefit": 31.68,
"expected_direct_cost": 30,
"expected_direct_net_value_before_shared_cost": 1.68,
"function_id": "completion-forecast"
},
{
"expected_allocated_benefit": 45.92,
"expected_direct_cost": 15,
"expected_direct_net_value_before_shared_cost": 30.92,
"function_id": "decision-policy"
}
],
"guardrails": [
"Only finance-reconciled incremental benefit sources with a defensible causal evidence weight belong in realized ROI; commits, recommendations, usage and adoption are not monetary value.",
"Each benefit source is counted once before allocation. Unallocated value remains visible, allocations cannot exceed one, and function attribution is accounting—not causal Shapley credit or employee performance.",
"Scenario columns must describe coherent joint futures in the same currency, horizon and price basis. CVaR covers represented scenarios only and a supported portfolio result does not validate every component function."
],
"method": "evidence_weighted_unique_benefit_source_scenario_roi_v1", Truncated for display — the full payload is 60 lines.
How it works
Causal inference & experiment design — Separate what a change caused from what merely moved alongside it.
- 1 Freeze the active function perimeter, coherent finance scenarios, complete costs and a unique benefit-source ledger whose incremental values are resolved independently of engineering activity.
- 2 Apply the governed causal-evidence weight once per source, reject allocations above 100 percent, reconcile allocated and unallocated value, and calculate function-level accounting attribution.
- 3 Aggregate portfolio benefit, cost, net value, ROI, positive-value probability and weighted tail loss before applying executive value and risk gates.
Before you trust it
Every tool in the catalog ships with the conditions under which its answer is meaningful — and the conditions under which it should abstain instead of guessing.
Assumptions & guardrails
- Assignment or adoption timing, interference policy, overlap, attrition, and outcome availability match the estimand encoded by the method.
- Benefits are incremental, mature, finance-reconciled and unique; evidence weights reflect a governed causal design; scenario columns share currency, horizon and price basis; all implementation, operating and shared costs are included.
- A causal label is warranted only when design and diagnostic requirements pass; otherwise treat the result as descriptive or abstain.
- Usage, adoption, commits and recommendations are not value; allocation is financial reconciliation rather than causal credit, employee performance or proof that every component function is calibrated.
Minimum evidence
- functions: at least 1 rows/items
- benefit_sources: at least 1 rows/items
- scenarios: required and organization-defined
- shared_cost_scenarios: at least 2 rows/items
How to validate it
Preserve the assignment/adoption design and validate overlap, pre-period or placebo diagnostics, attrition, interference policy, and cluster-level uncertainty; never tune on the estimated effect.
Calibrating it to your org
Same for everyone
The mathematical kernel, validation rules, method version, and JSON output semantics are organization-independent; no tenant-trained coefficients or company benchmark is embedded in the function.
Specific to you
- finance-reconciled analytics portfolio ledger joining deployed function versions and costs to mature unique outcome sources whose causal evaluation resolves after the decision, with coherent joint uncertainty scenarios
- portfolio/cost/benefit perimeter, currency/horizon/price basis, causal evidence-weight policy, unique-source identity and allocation, shared cost, scenario law, positive-value probability, tail probability/loss and reporting authority
Calibration workflow
- 1 Define the management decision, target outcome, aggregate unit, privacy boundary, cadence, and prediction/intervention horizon for this organization.
- 2 Build a tenant-scoped historical cohort using only information available before each prediction or decision; preserve zero periods, censoring, assignment probabilities, and unresolved outcomes when the method requires them.
- 3 Estimate statistical parameters on training history, but obtain costs, utilities, risk tolerance, practical-effect thresholds, capacity, and policy constraints from accountable decision owners.
- 4 Validate on later time windows or held-out aggregate units at the deployment grain, against a simple baseline and the function-specific validation strategy.
- 5 Deploy only if the returned decision clears evidence, overlap, calibration, robustness, and guardrail checks; warning, unsupported, schema-gap, and fallback decisions are abstentions.
- 6 Monitor realized outcomes, data drift, coverage, and decision regret; recalibrate at a governed cadence or after a detected regime/definition change, never merely because a stakeholder dislikes the result.
Call it from your AI
You don't wire up 388 tools in your MCP client. The GitRevio MCP server exposes 18 tools, three of which let an agent search the catalog, read a tool's schema, and run it — so the assistant finds this one on its own.
gitrevio_capabilities_search
{ "q": "reconcile the analytics portfolios realized roi" }
→ finds "calculate_analytics_portfolio_realized_roi"
gitrevio_capability_describe
{ "capability_id": "calculate_analytics_portfolio_realized_roi" }
→ returns the input schema and agent guidance shown on this page
gitrevio_capability_run
{ "capability_id": "calculate_analytics_portfolio_realized_roi", "arguments": { ... } }
→ returns the result shown above Works in Claude Desktop, Claude Code, Cursor, Cline, Continue.dev, Goose and Aider. See the MCP server.
Related tools
Audit analytics transportability
Audit whether locally calibrated analytical functions retain decision-loss improvement across target-similar operating environments using similarity-weighted random-effects meta-analysis, between-environment variance, I-squared, sign consistency and a conservative target prediction interval.
Construct calibration shared evidence graph
Discover stable candidate relationships for shared calibration design by correlating standardized held-out loss improvement across common environments, resampling whole environments, stability-selecting practical edges, controlling sign discoveries with Benjamini-Hochberg FDR and returning connected components without claiming parameter transfer.
Audit analytical specification multiverse
Audit whether an analytical conclusion survives a prespecified multiverse of admissible windows, cohorts, metrics, and models using aligned bootstrap draws, a weighted specification curve, practical-effect support gates, and descriptive choice-influence diagnostics.
Audit analytics challenger independence
Audit whether an analytical challenger supplies genuinely independent error information: use paired temporal moving-block bootstrap bounds on error correlation, incumbent-failure catch rate and common-mode joint failure, with simultaneous Bonferroni control across every screened challenger and explicit evidence gates.
Audit analytics function calibration readiness
Gate analytical functions on paired out-of-time decision loss against a frozen baseline using temporal moving-block bootstrap, autocorrelation- and weight-adjusted effective sample size, evidence coverage, lower confidence bounds, improvement probability and recent degradation rather than declaring a model calibrated from training fit.
Audit forecast ensemble lineage integrity
Audit whether a claimed forecast ensemble is a complete, independently sealed and point-in-time evidence set rather than duplicated consensus, then score only mature uncontaminated outcomes.