Module: Ablab::AblabHelper
- Defined in:
- app/helpers/ablab/ablab_helper.rb
Instance Method Summary collapse
- #confidence(z_score, na = 'n/a') ⇒ Object
- #cr_gain(results_a, results_b, na = 'n/a') ⇒ Object
- #format_decimal(decimal, na = 'n/a') ⇒ Object
- #format_number(number, na = 'n/a') ⇒ Object
- #format_percentage(numerator, denominator, na = 'n/a') ⇒ Object
- #gains(experiment, group_name) ⇒ Object
- #significant?(results) ⇒ Boolean
- #winner(experiment) ⇒ Object
- #winner?(experiment, group_name) ⇒ Boolean
Instance Method Details
#confidence(z_score, na = 'n/a') ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'app/helpers/ablab/ablab_helper.rb', line 23 def confidence(z_score, na = 'n/a') return na if z_score.nil? || z_score.nan? z_score = z_score.abs if z_score >= 2.58 '99%' elsif z_score >= 1.96 '95%' elsif z_score >= 1.65 '90%' else 'insufficient' end end |
#cr_gain(results_a, results_b, na = 'n/a') ⇒ Object
37 38 39 40 41 42 43 |
# File 'app/helpers/ablab/ablab_helper.rb', line 37 def cr_gain(results_a, results_b, na = 'n/a') return na if results_a[:sessions] == 0 || results_b[:sessions] == 0 cr_a = results_a[:conversions].to_f / results_a[:sessions] cr_b = results_b[:conversions].to_f / results_b[:sessions] gain = cr_a - cr_b "#{gain >= 0 ? '+' : ''}#{number_to_percentage(gain * 100.0)}" end |
#format_decimal(decimal, na = 'n/a') ⇒ Object
13 14 15 16 |
# File 'app/helpers/ablab/ablab_helper.rb', line 13 def format_decimal(decimal, na = 'n/a') return na if decimal.nil? || decimal.nan? number_with_precision(decimal, precision: 3) end |
#format_number(number, na = 'n/a') ⇒ Object
8 9 10 11 |
# File 'app/helpers/ablab/ablab_helper.rb', line 8 def format_number(number, na = 'n/a') return na if number.nil? || number.try(:nan?) number_with_delimiter(number) end |
#format_percentage(numerator, denominator, na = 'n/a') ⇒ Object
3 4 5 6 |
# File 'app/helpers/ablab/ablab_helper.rb', line 3 def format_percentage(numerator, denominator, na = 'n/a') return na if denominator == 0 number_to_percentage((numerator.to_f / denominator) * 100.0) end |
#gains(experiment, group_name) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 |
# File 'app/helpers/ablab/ablab_helper.rb', line 64 def gains(experiment, group_name) result = experiment.results[group_name] return nil if result[:sessions] == 0 cr = result[:conversions].to_f / result[:sessions] experiment.results.reduce({}) do |hash, (g, r)| if r[:sessions] > 0 && g != group_name hash[g] = cr - (r[:conversions].to_f / r[:sessions]) end hash end end |
#significant?(results) ⇒ Boolean
18 19 20 21 |
# File 'app/helpers/ablab/ablab_helper.rb', line 18 def significant?(results) return false if results[:sessions] < 30 || results[:conversions] < 5 results[:z_score] && results[:z_score] >= 1.65 end |
#winner(experiment) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'app/helpers/ablab/ablab_helper.rb', line 49 def winner(experiment) @winners ||= {} return @winners[experiment.name] if @winners.has_key?(experiment.name) winner_name, winner_results = @results[experiment.name].max_by do |(_, r)| if r[:sessions] > 0 r[:conversions].to_f / r[:sessions] else -1 end end @winners[experiment.name] = nil @winners[experiment.name] = winner_name if significant?(winner_results) @winners[experiment.name] end |
#winner?(experiment, group_name) ⇒ Boolean
45 46 47 |
# File 'app/helpers/ablab/ablab_helper.rb', line 45 def winner?(experiment, group_name) winner(experiment) == group_name end |