Ответ
Для A/B-тестов лучше делать сплит по пользователям, а не по чатам, так как это обеспечивает независимость наблюдений. Если сплитить по чатам, один пользователь может попасть и в тест, и в контроль, что нарушит статистическую достоверность.
Пример кода для сплита по user_id:
import hashlib
def assign_group(user_id, salt='experiment_salt'):
hash_val = int(hashlib.md5((str(user_id) + salt).encode()).hexdigest(), 16)
return 'test' if hash_val % 100 < 50 else 'control'
Исключение — если тестируем фичи, которые работают на уровне чата (например, групповые чаты), тогда можно делать сплит по chat_id, но с проверкой, что пользователи не пересекаются между группами.