Сниппет для сэмплинга пользователей или A/B тестирования (Java) · My Notes

Допустим, у нас есть стабильный идентификатор пользователя userId. С помощью этой функции мы превращаем строковый идентификатор в псевдослучайное число:

int userNumber = stringIdToSamplingMillis(userId);

Теперь мы можем использовать это число так:

if (userNumber < 50) ... // Пользователь попал в 5% тестовую выборку
if (userNumber < 500) ... // Пользователь попал в категорию A
else ... // Пользователь попал в категорию B

Функция:

    // Генерирует по строке псевдослучайное число от 0 до 999 включительно.
    private static int stringIdToSamplingMillis(final String str) {
        // Используем MD5 в качестве генератора псевдослучайного числа на базе строки
        final MessageDigest hasher = MessageDigest.getInstance("MD5");
        final byte[] data = str.getBytes();
        hasher.update(data, 0, data.length);
        // Получим MD5 в виде длинного целого числа
        final BigInteger bigInt = (new BigInteger(hasher.digest())).abs();
        // Получим хвост длинного целого в виде обычного int-а [0..999]
        return bigInt.mod(BigInteger.valueOf(1000)).intValue();
    }



Comments:

No Comments for this post yet...

Leave a comment:

Your email address will not be displayed on this site.
Your URL will not be displayed on this site. Comments containing URL's of non-personal pages may be removed.
Confirmation Code:
Human Confirmation Code (Captcha)

HTML tags and "<", ">" symbols are not allowed. Links will not be converted to hyperlinks. Any commercials are removed and reported as abuse.

Archives

                                                                                                                                                                                                                                                                   


© Sergey A. Galin, 1998-2021 sageshome.net/blog/