Module: Kaisoku::Evaluator::Metrics
- Defined in:
- lib/kaisoku/evaluator/metrics.rb
Class Method Summary collapse
- .apfd(order:, fault_detectors:) ⇒ Object
- .precision(selected_ids:, relevant_ids:) ⇒ Object
- .reduction_ratio(selected_count:, total_count:) ⇒ Object
- .safety_violations(full_failures:, selected_ids:) ⇒ Object
- .selection_ratio(selected_count:, total_count:) ⇒ Object
Class Method Details
.apfd(order:, fault_detectors:) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/kaisoku/evaluator/metrics.rb', line 30 def apfd(order:, fault_detectors:) ordered_ids = order.map { |entity| entity.respond_to?(:id) ? entity.id : entity.to_s } fault_positions = fault_detectors.values.filter_map do |detectors| Array(detectors).filter_map { |id| ordered_ids.index(id.to_s) }.min&.+(1) end return 1.0 if ordered_ids.empty? || fault_positions.empty? n = ordered_ids.length.to_f m = fault_positions.length.to_f 1.0 - (fault_positions.sum / (n * m)) + (1.0 / (2.0 * n)) end |
.precision(selected_ids:, relevant_ids:) ⇒ Object
22 23 24 25 26 27 28 |
# File 'lib/kaisoku/evaluator/metrics.rb', line 22 def precision(selected_ids:, relevant_ids:) selected = selected_ids.map(&:to_s).uniq return 1.0 if selected.empty? relevant = relevant_ids.map(&:to_s).uniq (selected & relevant).length.to_f / selected.length end |
.reduction_ratio(selected_count:, total_count:) ⇒ Object
14 15 16 |
# File 'lib/kaisoku/evaluator/metrics.rb', line 14 def reduction_ratio(selected_count:, total_count:) 1.0 - selection_ratio(selected_count: selected_count, total_count: total_count) end |
.safety_violations(full_failures:, selected_ids:) ⇒ Object
18 19 20 |
# File 'lib/kaisoku/evaluator/metrics.rb', line 18 def safety_violations(full_failures:, selected_ids:) full_failures.map(&:to_s).uniq - selected_ids.map(&:to_s).uniq end |
.selection_ratio(selected_count:, total_count:) ⇒ Object
8 9 10 11 12 |
# File 'lib/kaisoku/evaluator/metrics.rb', line 8 def selection_ratio(selected_count:, total_count:) return 0.0 if total_count.to_i.zero? selected_count.to_f / total_count end |