Sensitivity analysis¶
This section documents sensitivity analysis utilities provided by eb-optimization.
Sensitivity analysis supports evaluation of how optimization outcomes respond to changes in policy parameters, enabling assessment of robustness and identification of critical thresholds.
eb_optimization.tuning.sensitivity
¶
CWSL cost-ratio sensitivity utilities.
This module provides helpers for computing a sensitivity curve of Cost-Weighted Service Loss (CWSL) across a grid of cost ratios:
Given an overbuild cost coefficient \(c_o\) and ratio \(R\), the implied underbuild cost is:
Why this lives in eb-optimization
Computing a metric across a candidate grid of hyperparameters (like a cost ratio R) is an analysis / calibration workflow rather than a metric primitive.
- eb-metrics remains the source of truth for metric math (e.g.,
cwsl). - eb-optimization owns grid-based evaluation, diagnostics, and tuning utilities.
This module therefore contains:
- cwsl_sensitivity: array-level sweep (grid evaluation)
- compute_cwsl_sensitivity_df: DataFrame-oriented wrapper (tidy long-form output)
cwsl_sensitivity(y_true, y_pred, *, R_list=(0.5, 1.0, 2.0, 3.0), co=1.0, sample_weight=None)
¶
Evaluate CWSL across a grid of cost ratios (cost sensitivity analysis).
For each candidate ratio:
holding co fixed and setting:
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
y_true
|
ndarray | Sequence[float]
|
Realized demand values (non-negative). |
required |
y_pred
|
ndarray | Sequence[float]
|
Forecast values (non-negative). |
required |
R_list
|
Sequence[float] | ndarray | Iterable[float]
|
Candidate cost ratios to evaluate. Non-finite and non-positive values are ignored. |
(0.5, 1.0, 2.0, 3.0)
|
co
|
float | ndarray
|
Overbuild cost coefficient. Can be scalar or per-interval array. |
1.0
|
sample_weight
|
ndarray | Sequence[float] | None
|
Optional non-negative weights per interval. |
None
|
Returns:
| Type | Description |
|---|---|
dict[float, float]
|
Mapping |
Raises:
| Type | Description |
|---|---|
ValueError
|
If no valid ratios remain after filtering, if inputs are invalid, or if sample_weight contains negatives. |
compute_cwsl_sensitivity_df(df, *, actual_col='actual_qty', forecast_col='forecast_qty', R_list=(0.5, 1.0, 2.0, 3.0), co=1.0, group_cols=None, sample_weight_col=None)
¶
Compute CWSL sensitivity curves from a DataFrame.