Git Product home page Git Product logo

probability's Introduction

Make your code work spontaneously ๐Ÿ™ƒ

Packagist Dependency Version Packagist Version

Install

composer require antikirra/probability:^2

Basic usage

There are two main strategies for using this mechanism. You can use probability function call to predictably influence the probability of activating certain events. For example, when dealing with a high number of requests per second, logging all of them can be costly. Instead, you can choose to collect only 15% (selected randomly) of the incoming traffic to monitor the system's state.

<?php

use function Antikirra\probability;

require __DIR__ . '/vendor/autoload.php';

if (probability(0.15)) {
    $logger->info($payload);
}

That's amazing! However, with this usage, we don't have guarantees of absolute stability. In other words, with a small number of iterations, it may appear that the algorithm is not working correctly. In reality, by running synthetic tests, you can see that for 1000 iterations, you may get 142, 153, or 165 positive activations. But there's no need to worry because with a truly large number of repetitions, the uniform distribution will do its job. This fact should always be kept in mind!

To achieve a balance between stable operation and a desired level of probability distribution, such as in the case of conducting A/B testing for a new feature on your website, you can use a distinguishing user attribute, such as an identifier or IP address, to set the required level of distribution and bind it to that parameter. On average, only 15% of your website's audience will see the changes. When you make subsequent function calls for the same user, it will return the same value in each subsequent iteration. This is very convenient because it allows you to avoid the need for storing and rebalancing feature rollout lists.

<?php

use function Antikirra\probability;

require __DIR__ . '/vendor/autoload.php';

if (probability(0.15, $_SERVER['REMOTE_ADDR'])) { // or probability(0.15, (string)$userId)
    $app->feature('#1337')->enable();
}

This example vividly illustrates the working principle of the mechanism, but it has a flaw in practice. The issue is that the function's parameter combinations will always return the same value, and different features will be enabled for the same users. To overcome this behavior, you will need to customize the key parameter, making it unique for each specific feature. This way, each experiment will be randomly conducted on a different group of users.

<?php

use function Antikirra\probability;

require __DIR__ . '/vendor/autoload.php';

if (probability(0.15, 'feature_#1337_for' . $_SERVER['REMOTE_ADDR'])) {
    $app->feature('#1337')->enable();
}

if (probability(0.15, 'feature_#2517_for' . $_SERVER['REMOTE_ADDR'])) {
    $app->feature('#2517')->enable();
}

Remember that significant results can only be observed with a truly large amount of data or over a prolonged period of time. Use this approach wisely and assess the risks associated with its use. If you still have doubts, conduct simple synthetic testing of this functionality to understand its mechanics.

Good Luck!

probability's People

Contributors

antikirra avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.