Class: PredictabilityEngine::Simulators::MonteCarloValidator
- Inherits:
-
Object
- Object
- PredictabilityEngine::Simulators::MonteCarloValidator
- Defined in:
- lib/predictability_engine/simulators/monte_carlo_validator.rb
Constant Summary collapse
- DEFAULT_VALIDATION_TRIALS =
200- MIN_COMPLETED_ITEMS =
10
Class Method Summary collapse
-
.calibration(work_items, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES, validation_trials: DEFAULT_VALIDATION_TRIALS, primary_trials: MonteCarlo::DEFAULT_TRIALS) ⇒ Object
Hindcast calibration: randomly samples historical as-of dates, runs the primary Monte Carlo at each, and checks whether the predicted percentile days covered the actual outcome.
Class Method Details
.calibration(work_items, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES, validation_trials: DEFAULT_VALIDATION_TRIALS, primary_trials: MonteCarlo::DEFAULT_TRIALS) ⇒ Object
Hindcast calibration: randomly samples historical as-of dates, runs the primary Monte Carlo at each, and checks whether the predicted percentile days covered the actual outcome. Returns coverage ratios per percentile, or nil when there is insufficient data for any valid trial.
13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/predictability_engine/simulators/monte_carlo_validator.rb', line 13 def self.calibration( work_items, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES, validation_trials: DEFAULT_VALIDATION_TRIALS, primary_trials: MonteCarlo::DEFAULT_TRIALS ) completed = work_items.select(&:completed?) dates = candidate_dates(completed, validation_trials) return nil if dates.empty? trial_results = dates.map { |d| run_trial(completed, d, percentiles, primary_trials) } aggregate_coverage(trial_results, percentiles, dates.size) end |