Class: TrailGuide::Calculators::Calculator
- Inherits:
-
Object
- Object
- TrailGuide::Calculators::Calculator
- Defined in:
- lib/trail_guide/calculators/calculator.rb
Instance Attribute Summary collapse
-
#choice ⇒ Object
readonly
Returns the value of attribute choice.
-
#experiment ⇒ Object
readonly
Returns the value of attribute experiment.
-
#goal ⇒ Object
readonly
Returns the value of attribute goal.
-
#probability ⇒ Object
readonly
Returns the value of attribute probability.
Instance Method Summary collapse
- #base ⇒ Object
- #best ⇒ Object
- #calculate! ⇒ Object
-
#initialize(experiment, probability = TrailGuide::Calculators::DEFAULT_PROBABILITY, base: :default, goal: nil, against: nil) ⇒ Calculator
constructor
A new instance of Calculator.
- #variants ⇒ Object
- #variants_with_conversion ⇒ Object
- #worst ⇒ Object
Constructor Details
#initialize(experiment, probability = TrailGuide::Calculators::DEFAULT_PROBABILITY, base: :default, goal: nil, against: nil) ⇒ Calculator
Returns a new instance of Calculator.
9 10 11 12 13 14 15 |
# File 'lib/trail_guide/calculators/calculator.rb', line 9 def initialize(experiment, probability=TrailGuide::Calculators::DEFAULT_PROBABILITY, base: :default, goal: nil, against: nil) @experiment = experiment @probability = probability @base_type = base @goal = goal @against = against end |
Instance Attribute Details
#choice ⇒ Object (readonly)
Returns the value of attribute choice.
7 8 9 |
# File 'lib/trail_guide/calculators/calculator.rb', line 7 def choice @choice end |
#experiment ⇒ Object (readonly)
Returns the value of attribute experiment.
7 8 9 |
# File 'lib/trail_guide/calculators/calculator.rb', line 7 def experiment @experiment end |
#goal ⇒ Object (readonly)
Returns the value of attribute goal.
7 8 9 |
# File 'lib/trail_guide/calculators/calculator.rb', line 7 def goal @goal end |
#probability ⇒ Object (readonly)
Returns the value of attribute probability.
7 8 9 |
# File 'lib/trail_guide/calculators/calculator.rb', line 7 def probability @probability end |
Instance Method Details
#base ⇒ Object
34 35 36 37 38 39 40 41 42 43 |
# File 'lib/trail_guide/calculators/calculator.rb', line 34 def base @base ||= case @base_type when :control # use the control as the "base" variants.find { |variant| variant.control } else # use the second-best converting as the "base" (default behavior) variants[-2] end end |
#best ⇒ Object
45 46 47 |
# File 'lib/trail_guide/calculators/calculator.rb', line 45 def best @best ||= variants_with_conversion.last end |
#calculate! ⇒ Object
53 54 55 |
# File 'lib/trail_guide/calculators/calculator.rb', line 53 def calculate! raise NotImplementedError, "You must define a calculate! method on your calculator class" end |
#variants ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/trail_guide/calculators/calculator.rb', line 17 def variants @variants ||= experiment.variants.map do |variant| superset = @against ? variant.converted(@against) : variant.participants converts = variant.converted(goal) measure = (converts.to_f / superset.to_f) rescue 0 measure = 0 if measure.nan? Struct.new(:name, :control, :superset, :subset, :measure, :difference, :probability, :significance, :z_score) .new(variant.name, variant.control?, superset, converts, measure, 0, 0, nil, nil) end.sort_by { |v| v.measure } end |
#variants_with_conversion ⇒ Object
30 31 32 |
# File 'lib/trail_guide/calculators/calculator.rb', line 30 def variants_with_conversion @variants_with_conversion ||= variants.select { |variant| variant.measure > 0.0 } end |
#worst ⇒ Object
49 50 51 |
# File 'lib/trail_guide/calculators/calculator.rb', line 49 def worst @worst ||= variants_with_conversion.first end |