| name | high-stakes-analytics-decision-lab |
| description | Platform-neutral analytical skill that profiles messy data, selects case-adaptive methods, and produces source-backed visual reports for high-stakes decisions |
| triggers | ["analyze this dataset and build an evidence-based report","run a high-stakes decision analysis with data quality gates","create an evidence intelligence report from this data","perform adaptive analytics with diagnostic predictive or prescriptive routing","validate this data and choose the right analytical method","generate a decision intelligence brief with uncertainty bounds","profile data quality and route to appropriate analysis method","build a reproducible evidence report with data lineage"] |
High-Stakes Analytics & Decision Lab
Skill by ara.so — Data Skills collection.
A platform-neutral, evidence-constrained analytical system that transforms ambiguous questions into reproducible evidence products. It profiles data quality, selects case-adaptive analytical methods (descriptive, diagnostic, predictive, prescriptive), and produces source-backed reports with explicit uncertainty and claim boundaries.
What It Does
Instead of forcing every dataset through fixed pipelines, this system:
- Gates data quality before analysis (detects missing, duplicates, leakage, grain mismatches)
- Routes adaptively to descriptive, diagnostic, predictive, or prescriptive methods based on question + data
- Produces two-layer outputs: Evidence Intelligence Report (always) + Decision Intelligence Brief (conditional)
- Preserves lineage with hashed sources, reproducible transforms, and claim boundaries
- Handles shared uncertainty across alternatives (common market, time, operational shocks)
Installation
Quick Install (NPX)
npx skills add limingrui679-design/high-stakes-analytics-decision-lab -g
Manual Python Install
git clone https://github.com/limingrui679-design/high-stakes-analytics-decision-lab.git
cd high-stakes-analytics-decision-lab
pip install -r requirements.txt
Docker
docker build -t high-stakes-lab .
docker run -v $(pwd)/data:/data -v $(pwd)/outputs:/outputs high-stakes-lab
Core Architecture
The system follows a fixed evidence spine with adaptive routing:
Question → Data Contract → Quality Gate → Adaptive Route → Evidence Report → Decision Brief (conditional)
Four Quality Gate Outcomes
ready — No material issues, continue
ready_with_documented_limitations — Localized issues, visible limits
needs_user_confirmation — Requires explicit approval for cleaning actions
blocked — Critical failure, stop and request corrected data
Four Analytical Routes
- Descriptive — What is happening? (baseline, trends, distributions)
- Diagnostic — Why? (drivers, decomposition, competing explanations)
- Predictive — What next? (forecasts, validation, calibration, drift)
- Prescriptive — What action? (alternatives, constraints, tail risk, sensitivity)
Project Structure
high-stakes-analytics-decision-lab/
├── src/
│ ├── data_quality/ # Quality profiling & gates
│ ├── routing/ # Adaptive method selection
│ ├── methods/ # Analytical modules (descriptive, diagnostic, etc.)
│ ├── reporting/ # Evidence & decision report generation
│ └── orchestration/ # End-to-end workflow
├── examples/
│ └── real-data-cases/ # 10 complete projects with data + outputs
├── references/
│ ├── data-quality-gate.md # Quality gate contract
│ ├── method-routing.md # Route selection rules
│ └── method-modules.md # Executable boundaries
└── requirements.txt
Configuration
Create a config.yaml for your analysis:
project:
name: "customer-churn-analysis"
question: "Which customers are at risk of churning in next 90 days?"
decision_owner: "Head of Retention"
evidence_contract:
source: "data/customer_events.csv"
grain: "customer_id"
time_field: "event_date"
target_field: "churned"
horizon_days: 90
data_quality:
missing_threshold: 0.15
duplicate_check: true
leakage_detection: true
privacy_scan: true
routing:
force_descriptive: true
enable_diagnostic: true
enable_predictive: true
enable_prescriptive: false
outputs:
evidence_report: "outputs/evidence_report.md"
decision_brief: "outputs/decision_brief.md"
figures_dir: "outputs/figures/"
reproducibility_package: "outputs/reproducibility.zip"
Usage Examples
1. Basic Evidence Analysis
from src.orchestration import AnalyticsWorkflow
from src.config import load_config
config = load_config("config.yaml")
workflow = AnalyticsWorkflow(config)
results = workflow.run()
print(f"Quality gate: {results.quality_gate.status}")
print(f"Adaptive route: {results.selected_route}")
print(f"Evidence report: {results.evidence_report_path}")
print(f"Decision brief: {results.decision_brief_path}")
2. Data Quality Profiling Only
from src.data_quality import DataQualityGate
import pandas as pd
df = pd.read_csv("data/messy_data.csv")
contract = {
"grain": "transaction_id",
"time_field": "timestamp",
"target_field": "outcome",
"expected_schema": {
"transaction_id": "string",
"timestamp": "datetime",
"amount": "numeric",
"outcome": "binary"
}
}
gate = DataQualityGate(df, contract)
quality_report = gate.profile()
print(f"Status: {quality_report.status}")
print(f"Missing rate: {quality_report.missing_rate}")
print(f"Duplicates: {quality_report.duplicate_count}")
print(f"Leakage detected: {quality_report.has_leakage}")
print(f"Privacy issues: {quality_report.privacy_warnings}")
if quality_report.status == "needs_user_confirmation":
for action in quality_report.required_approvals:
print(f"Approve: {action.id} - ")
3. Adaptive Route Selection
from src.routing import RouteSelector
question_spec = {
"type": "predictive",
"estimand": "probability of outcome",
"population": "active customers",
"horizon": "90 days"
}
data_characteristics = {
"n_rows": 15000,
"n_features": 42,
"target_prevalence": 0.08,
"has_time_series": True,
"has_identifiable_pii": False
}
selector = RouteSelector()
route = selector.select(question_spec, data_characteristics)
print(f"Primary route: {route.primary}")
print(f"Additional modules: {route.additional}")
print(f"Methods: {route.selected_methods}")
print(f"Validation strategy: {route.validation}")
4. Predictive Route with Validation
from src.methods.predictive import PredictiveModule
from src.reporting import EvidenceReportGenerator
predictor = PredictiveModule(
target="churned",
horizon_days=90,
validation_strategy="temporal_holdout",
calibration_check=True,
subgroup_analysis=True
)
predictor.fit(df_train, timestamp_field="signup_date")
validation_results = predictor.validate(df_test)
print(f"AUC: {validation_results.auc:.3f}")
print(f"Calibration slope: {validation_results.calibration_slope:.3f}")
print(f"Brier score: {validation_results.brier:.3f}")
print(f"Worst subgroup AUC: {validation_results.min_subgroup_auc:.3f}")
if validation_results.deployment_status == "do_not_deploy":
print(f"BLOCKED: {validation_results.blocking_reason}")
else:
print(f"Validated for deployment with boundaries: {validation_results.boundaries}")
report_gen = EvidenceReportGenerator()
evidence_report = report_gen.generate(
data_quality=quality_report,
route=route,
validation=validation_results,
output_path="outputs/evidence_report.md"
)
5. Prescriptive Route with Shared Shocks
from src.methods.prescriptive import PrescriptiveModule
decision_spec = {
"owner": "VP Operations",
"alternatives": [
{"id": "status_quo", "cost": 0, "capacity": 100},
{"id": "expand_10pct", "cost": 50000, "capacity": 110},
{"id": "expand_25pct", "cost": 120000, "capacity": 125}
],
"criteria": ["expected_revenue", "capacity_utilization", "downside_risk"],
"constraints": {"max_cost": 100000, "min_capacity": 105}
}
shared_shocks = {
"market_demand": {"distribution": "normal", "mean": 1.0, "std": 0.15},
"operational_efficiency": {"distribution": "lognormal", "mean": 1.0, "std": 0.08}
}
prescriptive = PrescriptiveModule(decision_spec, shared_shocks)
simulation_results = prescriptive.simulate(n_scenarios=)
()
()
()
()
simulation_results.decision_ready:
decision_brief = prescriptive.generate_brief(
evidence_report_path=,
output_path=
)
:
()
6. Complete End-to-End Workflow
from src.orchestration import AnalyticsWorkflow
from src.config import ProjectConfig
config = ProjectConfig(
question="Should we launch the new pricing tier?",
data_source="data/user_behavior.parquet",
evidence_contract={
"grain": "user_id",
"time_field": "activity_date",
"population": "active_monthly_users",
"estimand": "incremental_revenue",
"horizon_days": 180
},
quality_gates={
"max_missing": 0.10,
"detect_leakage": True,
"privacy_level": "high"
},
routing={
"always_descriptive": True,
"enable_diagnostic": True,
"enable_predictive": True,
"enable_prescriptive": True
},
outputs={
"base_dir": "outputs/pricing_decision",
"generate_reproducibility_package": True
}
)
workflow = AnalyticsWorkflow(config)
results = workflow.execute()
print(f"Quality gate: {results.quality_gate.status}")
print(f"Route selected: {results.route.primary} + {results.route.additional}")
()
()
()
fig_id, fig_path results.figure_map.items():
()
CLI Usage
Profile Data Quality
python -m src.cli profile \
--data data/messy_data.csv \
--grain customer_id \
--time-field signup_date \
--output outputs/quality_report.json
Run Complete Analysis
python -m src.cli analyze \
--config config.yaml \
--output-dir outputs/
Generate Evidence Report Only
python -m src.cli evidence \
--data data/clean_data.parquet \
--config config.yaml \
--route descriptive,predictive \
--output outputs/evidence_report.md
Add Decision Layer
python -m src.cli decision \
--evidence-report outputs/evidence_report.md \
--decision-config decision.yaml \
--output outputs/decision_brief.md
Real Examples
The repository includes 10 complete real-data projects in examples/real-data-cases/projects/:
- population-health-survival — Heart failure risk (299 patients, descriptive → predictive → prescriptive)
- behavioral-reading-experiment — Pseudoword reading (57 paired participants, descriptive → inferential)
- census-income-ai — Income model validation (48,842 records, descriptive → predictive)
- bike-demand-operations — Demand forecasting + allocation (17,379 system-hours)
Each includes:
- Raw data snapshot (hashed)
- Data quality report
- Configuration
- Runnable code
- Machine-readable results (JSON/CSV)
- Evidence Intelligence Report (Markdown)
- All figures (SVG/PNG)
- Decision Intelligence Brief (Markdown)
Run a Real Example
cd examples/real-data-cases/projects/census-income-ai
python run.py --config config.yaml
Outputs will be in outputs/:
report.md — Evidence Intelligence Report
decision/report/decision-report.md — Decision Intelligence Brief
figures/ — All analytical figures
chart-map.json — Figure index
reproducibility/ — Code + hashes
Common Patterns
Pattern 1: Data Quality Gate → Evidence Request
gate = DataQualityGate(df, contract)
report = gate.profile()
if report.status == "blocked":
evidence_request = {
"status": "evidence_request",
"reason": report.blocking_reason,
"required_corrections": report.required_corrections,
"resubmit_with": report.corrected_contract
}
return evidence_request
Pattern 2: Negative Validation → Do Not Deploy
predictor.fit(df_train)
validation = predictor.validate(df_test)
if validation.deployment_status == "do_not_deploy":
decision_brief = {
"status": "negative_validation",
"evidence": validation.evidence_report_link,
"blocking_issue": validation.blocking_reason,
"alternatives": ["collect_more_data", "revise_estimand", "stop"]
}
return decision_brief
Pattern 3: Evidence Sufficient → No Decision Layer Needed
if question_type == "evidence_request":
evidence = generate_evidence_report(results)
return {"evidence_report": evidence, "decision_brief": None}
Pattern 4: Adaptive Route Composition
if data_characteristics.supports_multiple_routes():
route = {
"primary": "descriptive",
"additional": ["diagnostic", "predictive"],
"excluded": ["prescriptive"],
"reason": "Insufficient alternatives and constraint data"
}
Troubleshooting
Data Quality Gate Blocks Analysis
Problem: status: "blocked" with reason: "grain_violation"
Solution: Ensure your data contract matches actual data structure
print(f"Unique grain values: {df[grain_field].nunique()}")
print(f"Total rows: {len(df)}")
dupes = df[df.duplicated(subset=[grain_field], keep=False)]
print(dupes)
Missing Field Errors
Problem: KeyError: 'target_field'
Solution: Verify all contract fields exist
contract_fields = [contract["grain"], contract["time_field"], contract["target_field"]]
missing = [f for f in contract_fields if f not in df.columns]
if missing:
print(f"Missing fields: {missing}")
print(f"Available columns: {df.columns.tolist()}")
Route Selection Returns "descriptive_only"
Problem: Expected predictive route but got descriptive only
Solution: Check data volume and target prevalence
print(f"Rows: {len(df)}")
print(f"Target prevalence: {df[target].mean():.3f}")
print(f"Positive cases: {df[target].sum()}")
Calibration Failure in Predictive Route
Problem: calibration_slope < 0.8 triggers validation failure
Solution: Recalibrate or document limitation
from sklearn.calibration import CalibratedClassifierCV
calibrated = CalibratedClassifierCV(model, method='isotonic', cv=5)
calibrated.fit(X_train, y_train)
limitation = {
"issue": "poor_calibration",
"metric": f"slope={calibration_slope:.2f}",
"boundary": "Use for ranking only, not absolute probabilities"
}
Decision Brief Generation Fails
Problem: decision_status: "no_decision_ready"
Solution: This is often correct — not every analysis should produce a decision
if not (
feasible_alternatives_exist and
constraints_defined and
decision_owner_identified and
reversal_conditions_specifiable
):
print("Evidence report is terminal product")
Environment Variables
export ANALYTICS_LAB_OUTPUT_DIR=/path/to/outputs
export ANALYTICS_LAB_CACHE_DIR=/path/to/cache
export ANALYTICS_LAB_MAX_MISSING=0.15
export ANALYTICS_LAB_MIN_SAMPLE_SIZE=500
export ANALYTICS_LAB_ENABLE_PRESCRIPTIVE=false
export ANALYTICS_LAB_GENERATE_REPRODUCIBILITY=true
References
- Data Quality Gate:
references/data-quality-gate.md — Complete quality contract
- Method Routing:
references/method-routing.md — Route selection rules
- Method Modules:
references/method-modules.md — Executable boundaries
- Evidence Contract: See
examples/real-data-cases/ for complete project structures
Key Principles
- Evidence before decision — Always produce Evidence Intelligence Report; Decision Brief is conditional
- Gate before analysis — Data quality must pass explicit thresholds
- Route adaptively — Select methods based on question + data, not templates
- Preserve lineage — Hash sources, version transforms, link claims to figures
- Bound claims — Every prediction/recommendation has explicit limitations and reversal conditions
- Stop correctly — Evidence request, negative validation, and
do_not_deploy are valid terminal states