class TrailGuide::Calculators::Calculator

Attributes

choice[R]
experiment[R]
goal[R]
probability[R]

Public Class Methods

new(experiment, probability=TrailGuide::Calculators::DEFAULT_PROBABILITY, base: :default, goal: nil, against: nil) click to toggle source
# 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

Public Instance Methods

base() click to toggle source
# 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() click to toggle source
# File lib/trail_guide/calculators/calculator.rb, line 45
def best
  @best ||= variants_with_conversion.last
end
calculate!() click to toggle source
# 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() click to toggle source
# 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() click to toggle source
# 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() click to toggle source
# File lib/trail_guide/calculators/calculator.rb, line 49
def worst
  @worst ||= variants_with_conversion.first
end