Class: RailsErrorDashboard::Services::StatisticalClassifier

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_error_dashboard/services/statistical_classifier.rb

Overview

Pure algorithm: Classification methods for statistical values

No database access — accepts values, returns classification symbols. Groups related threshold-based classification logic in one place.

Examples:

StatisticalClassifier.correlation_strength(0.85) # => :strong
StatisticalClassifier.trend_direction(25.0)      # => :increasing_significantly
StatisticalClassifier.spike_severity(6.0)        # => :high

Class Method Summary collapse

Class Method Details

.correlation_strength(correlation) ⇒ Symbol

Classify correlation coefficient into strength categories

Parameters:

  • correlation (Float)

    Pearson correlation coefficient (-1.0 to 1.0)

Returns:

  • (Symbol)

    :strong, :moderate, or :weak



18
19
20
21
22
23
24
25
26
27
# File 'lib/rails_error_dashboard/services/statistical_classifier.rb', line 18

def self.correlation_strength(correlation)
  abs_corr = correlation.abs
  if abs_corr >= 0.8
    :strong
  elsif abs_corr >= 0.5
    :moderate
  else
    :weak
  end
end

.spike_severity(multiplier) ⇒ Symbol

Classify error spike severity based on multiplier over average

Parameters:

  • multiplier (Float)

    Ratio of current count to average

Returns:

  • (Symbol)

    :normal, :elevated, :high, or :critical



50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/rails_error_dashboard/services/statistical_classifier.rb', line 50

def self.spike_severity(multiplier)
  case multiplier
  when 0...2
    :normal
  when 2...5
    :elevated
  when 5...10
    :high
  else
    :critical
  end
end

.trend_direction(change_percentage) ⇒ Symbol

Classify percentage change into trend direction

Parameters:

  • change_percentage (Float)

    Percentage change between periods

Returns:

  • (Symbol)

    :increasing_significantly, :increasing, :stable, :decreasing, or :decreasing_significantly



33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/rails_error_dashboard/services/statistical_classifier.rb', line 33

def self.trend_direction(change_percentage)
  if change_percentage > 20
    :increasing_significantly
  elsif change_percentage > 5
    :increasing
  elsif change_percentage < -20
    :decreasing_significantly
  elsif change_percentage < -5
    :decreasing
  else
    :stable
  end
end