Upgrade to Pro — share decks privately, control downloads, hide ads and more …

A/B Testing Evolution

A/B Testing Evolution

Experimentation and learning are at the heart of how we work at Vinted. This talk tells the story of how we improved our A/B Testing solution.

Mindaugas Mozūras

March 12, 2015
Tweet

More Decks by Mindaugas Mozūras

Other Decks in Programming

Transcript

  1. TESTS = { pill: { lt: 1.0, us: 0.5 },

    upld: { lt: 0.5, de: 0.2 } }
  2. TESTS = { pill: { us: 1.0 }, pills: {

    us: 1.0 }, } if pill? && pills?
  3. bucket_id = SHA256(salt + id) % bucket_count return if not

    (test.buckets.include?(bucket_id)) return if not Time.now.between?(test.start_at, test.end_at) weight_id = SHA256(test.seed + id) % test.weight_sum test.variants.find do |v| v.accumulated_weight > weight_id end
  4. bucket_id = SHA256(salt + id) % bucket_count return if not

    (test.buckets.include?(bucket_id)) return if not Time.now.between?(test.start_at, test.end_at) weight_id = SHA256(test.seed + id) % test.weight_sum test.variants.find do |v| v.accumulated_weight > weight_id end
  5. bucket_id = SHA256(salt + id) % bucket_count return if not

    (test.buckets.include?(bucket_id)) return if not Time.now.between?(test.start_at, test.end_at) weight_id = SHA256(test.seed + id) % test.weight_sum test.variants.find do |v| v.accumulated_weight > weight_id end
  6. bucket_id = SHA256(salt + id) % bucket_count return if not

    (test.buckets.include?(bucket_id)) return if not Time.now.between?(test.start_at, test.end_at) weight_id = SHA256(test.seed + id) % test.weight_sum test.variants.find do |v| v.accumulated_weight > weight_id end
  7. { "id": 42, "name": "pill", "start_at": "2014-05-21T11:06:30+0300", "end_at": "2014-05-28T11:06:30+0300", "variants":

    [ { "name": "red", "chance_weight": 5 }, { "name": "blue", "chance_weight": 2 } ] },