Probability distribution fitting skill for calibrating uncertainty models from historical data or expert judgment
The Risk Distribution Fitter skill provides capabilities for calibrating probability distributions from historical data or expert judgment. It supports both data-driven fitting using statistical methods and expert elicitation protocols for subjective probability assessment.
# Fit distributions to historical data
fitting_config = {
"data": [/* historical observations */],
"candidate_distributions": [
"normal", "lognormal", "gamma", "weibull",
"exponential", "beta", "triangular"
],
"fitting_method": "mle",
"selection_criterion": "AIC"
}
# 3-point estimate (PERT)
expert_estimate = {
"method": "PERT",
"minimum": 50000,
"most_likely": 75000,
"maximum": 120000,
"confidence_level": 0.90 # optional: confidence that true value is within range
}
# 5-point estimate (for more precision)
detailed_estimate = {
"method": "5_point",
"P10": 45000,
"P25": 60000,
"P50": 75000,
"P75": 95000,
"P90": 115000
}
| Distribution | Use Case | Parameters |
|---|---|---|
| Normal | Symmetric, unbounded | mean, std |
| Lognormal | Right-skewed, positive | mu, sigma |
| Triangular | Bounded with mode | min, mode, max |
| PERT | Bounded, weighted mode | min, mode, max |
| Uniform | Equal probability | min, max |
| Beta | Bounded, flexible shape | alpha, beta |
| Gamma | Positive, right-skewed | shape, scale |
| Weibull | Reliability/time | shape, scale |
| Exponential | Memoryless | rate |
{
"fitting_mode": "data_driven|expert_elicitation",
"data_driven_config": {
"data": ["number"],
"candidate_distributions": ["string"],
"fitting_method": "mle|mom|bayesian",
"selection_criterion": "AIC|BIC|likelihood"
},
"expert_elicitation_config": {
"method": "3_point|5_point|PERT|direct",
"estimates": "object",
"confidence_level": "number"
},
"options": {
"gof_tests": ["KS", "AD", "chi_square"],
"visualize": "boolean",
"compare_all": "boolean"
}
}
{
"best_fit": {
"distribution": "string",
"parameters": "object",
"gof_statistics": {
"test_name": {
"statistic": "number",
"p_value": "number"
}
},
"selection_score": "number"
},
"all_fits": [
{
"distribution": "string",
"parameters": "object",
"scores": "object"
}
],
"summary": {
"mean": "number",
"std": "number",
"percentiles": "object"
},
"visualization_path": "string",
"recommendations": ["string"]
}