high-stakes-analytics-decision-lab
Platform-neutral analytical skill that profiles messy data, selects case-adaptive methods, and produces source-backed visual reports for high-stakes decisions
How do I install this agent skill?
npx skills add https://github.com/reason-machines/data-skills --skill high-stakes-analytics-decision-labIs this agent skill safe to install?
- Gen Agent Trust Hubpass
The skill provides a framework for high-stakes data analysis. It involves installing code from an external GitHub repository and processing user-provided datasets, which introduces potential surfaces for indirect prompt injection and relies on unverified software sources.
- Socketwarn
1 alert: gptAnomaly
- Snykwarn
Risk: MEDIUM · 1 issue
What does this agent skill do?
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, continueready_with_documented_limitations— Localized issues, visible limitsneeds_user_confirmation— Requires explicit approval for cleaning actionsblocked— 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
# Load configuration
config = load_config("config.yaml")
# Initialize workflow
workflow = AnalyticsWorkflow(config)
# Run complete evidence pipeline
results = workflow.run()
# Check quality gate outcome
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
# Load data
df = pd.read_csv("data/messy_data.csv")
# Define data contract
contract = {
"grain": "transaction_id",
"time_field": "timestamp",
"target_field": "outcome",
"expected_schema": {
"transaction_id": "string",
"timestamp": "datetime",
"amount": "numeric",
"outcome": "binary"
}
}
# Profile quality
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}")
# Get recommended actions
if quality_report.status == "needs_user_confirmation":
for action in quality_report.required_approvals:
print(f"Approve: {action.id} - {action.description}")
3. Adaptive Route Selection
from src.routing import RouteSelector
# Define question and data characteristics
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
}
# Select route
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
# Initialize predictive module
predictor = PredictiveModule(
target="churned",
horizon_days=90,
validation_strategy="temporal_holdout",
calibration_check=True,
subgroup_analysis=True
)
# Fit model
predictor.fit(df_train, timestamp_field="signup_date")
# Validate on holdout
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}")
# Check deployment gate
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}")
# Generate evidence report
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
# Define decision problem
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}
}
# Model shared uncertainty (all alternatives face same demand shock)
shared_shocks = {
"market_demand": {"distribution": "normal", "mean": 1.0, "std": 0.15},
"operational_efficiency": {"distribution": "lognormal", "mean": 1.0, "std": 0.08}
}
# Initialize prescriptive module
prescriptive = PrescriptiveModule(decision_spec, shared_shocks)
# Simulate outcomes
simulation_results = prescriptive.simulate(n_scenarios=10000)
print(f"Recommended alternative: {simulation_results.recommended}")
print(f"Expected value: ${simulation_results.expected_value:,.0f}")
print(f"5th percentile (tail risk): ${simulation_results.percentile_05:,.0f}")
print(f"Reversal conditions: {simulation_results.reversal_conditions}")
# Generate decision brief (only if evidence supports it)
if simulation_results.decision_ready:
decision_brief = prescriptive.generate_brief(
evidence_report_path="outputs/evidence_report.md",
output_path="outputs/decision_brief.md"
)
else:
print(f"No decision-ready recommendation: {simulation_results.blocking_reason}")
6. Complete End-to-End Workflow
from src.orchestration import AnalyticsWorkflow
from src.config import ProjectConfig
# Define complete configuration
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
}
)
# Run full workflow
workflow = AnalyticsWorkflow(config)
results = workflow.execute()
# Inspect results
print(f"Quality gate: {results.quality_gate.status}")
print(f"Route selected: {results.route.primary} + {results.route.additional}")
print(f"Evidence report: {results.evidence_report_path}")
print(f"Decision status: {results.decision_status}")
print(f"Reproducibility package: {results.reproducibility_package_path}")
# Review figures
for fig_id, fig_path in results.figure_map.items():
print(f"{fig_id}: {fig_path}")
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 Reportdecision/report/decision-report.md— Decision Intelligence Brieffigures/— All analytical figureschart-map.json— Figure indexreproducibility/— Code + hashes
Common Patterns
Pattern 1: Data Quality Gate → Evidence Request
# Use when data quality blocks analysis
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
}
# Stop here, do not proceed to analysis
return evidence_request
Pattern 2: Negative Validation → Do Not Deploy
# Use when predictive model fails validation
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"]
}
# Do not deploy, document negative result
return decision_brief
Pattern 3: Evidence Sufficient → No Decision Layer Needed
# Use when question is purely evidential
if question_type == "evidence_request":
# Generate evidence report only
evidence = generate_evidence_report(results)
# Do NOT force a decision brief
return {"evidence_report": evidence, "decision_brief": None}
Pattern 4: Adaptive Route Composition
# Use when multiple routes are justified
if data_characteristics.supports_multiple_routes():
route = {
"primary": "descriptive", # Always first
"additional": ["diagnostic", "predictive"], # Add if justified
"excluded": ["prescriptive"], # Not enough for action
"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
# Check grain uniqueness
print(f"Unique grain values: {df[grain_field].nunique()}")
print(f"Total rows: {len(df)}")
# If not unique, identify duplicates
dupes = df[df.duplicated(subset=[grain_field], keep=False)]
print(dupes)
# Fix contract or deduplicate explicitly
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()}")
# Predictive requires minimum sample size and events
# Typically: n > 500 AND positive_cases > 50
Calibration Failure in Predictive Route
Problem: calibration_slope < 0.8 triggers validation failure
Solution: Recalibrate or document limitation
from sklearn.calibration import CalibratedClassifierCV
# Recalibrate model
calibrated = CalibratedClassifierCV(model, method='isotonic', cv=5)
calibrated.fit(X_train, y_train)
# Or document as limitation
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
# Check if decision layer is actually justified
if not (
feasible_alternatives_exist and
constraints_defined and
decision_owner_identified and
reversal_conditions_specifiable
):
# Correctly stop at evidence layer
print("Evidence report is terminal product")
Environment Variables
# Optional: Configure output paths
export ANALYTICS_LAB_OUTPUT_DIR=/path/to/outputs
export ANALYTICS_LAB_CACHE_DIR=/path/to/cache
# Optional: Set quality thresholds
export ANALYTICS_LAB_MAX_MISSING=0.15
export ANALYTICS_LAB_MIN_SAMPLE_SIZE=500
# Optional: Enable/disable modules
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_deployare valid terminal states
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/reason-machines/data-skills/high-stakes-analytics-decision-lab">View high-stakes-analytics-decision-lab on skillZs</a>