Class: PredictabilityEngine::Simulators::MonteCarloValidator

Inherits:
Object
  • Object
show all
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

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