Апофения или склонность ошибочно воспринимать связи и значение между несвязанными вещами. Оказывается, люди ведут себя совершенно бессмысленно, когда рассказывают случайные вещи, помимо вещей, которые не являются таковыми. На самом деле мы иногда видим закономерности там, где их нет, а другие могут сказать, что что-то случайное, но не имеют научного способа объяснить это. Чаще всего это наблюдается, когда люди думают, что номера лотереи 1 2 3 4 5 6 встречаются с меньшей вероятностью, чем 12 3 15 82 90, или что, если выпала последовательность чисел, вероятность выпадения меньше. опять таки.

Не верите мне? Тогда ответьте на вопрос ниже.

У меня есть две двоичные строки, созданные двумя процессами:

  1. 0001011000111110011111000000100101111110110111111111010111111011010000010001000100110000000001100001
  2. 1010101001011011001011100001101010101111001000101001010010100101000101011011010101011101010101010101

Если бы я сказал вам, что один был создан случайным образом, а другой - предвзятым процессом, вы можете сказать, что из чего?

Вы бы поверили мне, если бы я сказал, что есть простой способ узнать?

Как насчет того, чтобы я сказал вам, что существует простой способ различить их друг от друга и описать факты?

На самом деле я задал этот вопрос примерно 60 высокообразованным консультантам, и наиболее частым ответом была интуитивная оценка, согласно которой верхний (строка 1) кажется менее структурированным, чем нижний, поэтому строка 2 является неслучайной.

Я имею в виду, что они не ошибаются, и то, что они уловили, было свойством стабильности частоты (также еще одна ссылка здесь), но кажется немного сложным убедить кого-то, приняв решение, основанное только на опыте. Например, если они скажут, что это строка 1, а я скажу, что это не так, как мы узнаем, кто лжет или нет? Нам нужны более веские доказательства. Вот здесь и вступает в игру этот простой метод, от которого я ускользнул ранее.

Если бы вы подсчитали количество единиц и нулей в строках, вы бы обнаружили, что они имеют одинаковое количество единиц и поэтому мало что вам говорят. Однако для любого случайного процесса любая последовательность в нем (например, «11» или «101») должна иметь равную вероятность по сравнению с другой последовательностью такой же длины. Это потому, что число перед строкой не должно влиять на число после.

Если бы мне пришлось изобразить различные последовательности длиной до двух, то они выглядели бы так:

Как вы можете видеть, теперь очевидно, что не является случайным, поскольку «10» и «01» гораздо более вероятны, чем «11» и «00». Это делает строку 2 несколько детерминированной и, следовательно, предсказуемой в том смысле, что, если я знаю предыдущее значение строки, я могу с довольно хорошей точностью предсказать, какое будет следующее число. В этом случае, если у меня был 1 последний раз, у меня есть 80% шанс, что я получу 0 в следующий раз, и наоборот. Это приводит к структуризации, которую люди улавливают. Я обнаружил, что этот метод подсчета последовательностей - хороший способ проверить случайность любого генератора случайных чисел, который вы используете, и количественно измерить его случайность.

Примечание. Для всех, кто интересуется, неслучайная строка была создана мной, когда я быстро затирал клавиши указательными пальцами, поэтому 1 следует за 0 и наоборот. Другая строка была создана с использованием случайного пакета в Python.

Но почему нам должно быть до этого дело?

По сути, в Data Science мы используем множество генераторов случайных чисел в наших моделях. Модель Случайный лес получила свое название, потому что мы используем случайность для роста деревьев, а алгоритм кластеризации K-средних будет использовать случайность для установки своих начальных положений. Если алгоритм, который мы используем для получения случайности, не очень случайный, то мы можем попасть в ловушку локальных минимумов наших данных или мы не полностью исследуем пространство выборки в наших данных и пропустим решение наших вопросов.

Этот эффект отсутствия случайности является большой проблемой в криптографии, поскольку любая предсказуемость может использоваться для деконструкции вещей и дает вам информацию о том, как они зашифрованы. Например, в машине Enigma он может закодировать любую букву как другую букву, кроме себя, это эффективно снизило стойкость шифрования, поскольку пространство выборки решения было значительно уменьшено по сравнению с любой буквой.

Алгоритмы, которые мы используем в нашей работе по науке о данных для получения наших случайных чисел, называются генераторами псевдослучайных чисел (существуют и другие генераторы случайных чисел, но они выходят за рамки того, что уже давно обсуждается). Числа генерируются с использованием алгоритма внутри компьютера, а поскольку компьютеры по своей природе детерминированы, сами генераторы на самом деле не случайны. Я имею в виду, что они могут в конечном итоге повториться, или если вы используете один и тот же начальный номер для его начала, вы всегда получаете одну и ту же последовательность чисел (это то, что делает установка начального числа в коде) и в плохо спроектированных или базовых. они повторяются или застревают.

Чтобы продемонстрировать это, мы можем взглянуть на один из первых алгоритмов генерации случайных чисел (метод средних квадратов), изобретенный Джоном фон Нейманом, которому требовалось много случайных чисел для его ядерных исследований. Как это работает:

  1. Вы берете четырехзначное начальное число (или дополняете переднюю часть нулями, пока не достигнете длины четыре)
  2. Умножьте это на себя
  3. Заполните перед полученным числом нули, пока оно не станет вдвое больше исходного размера (8 цифр).
  4. Извлеките средние четыре цифры
  5. Используйте это как начальное число для генерации следующего числа (переходите к шагу 2)

Звучит здорово, правда? Как я уже сказал, некоторые генераторы могут застрять, и мы увидим это, если я использую этот алгоритм в качестве входных данных в программу случайного блуждания и сравниваю его с современным псевдослучайным генератором.

Как вы можете видеть, хотя сюжет Неймана начинается хорошо, он в конечном итоге застревает и повторяется, в то время как другой продолжается. Следовательно, алгоритм Неймана полезен только для гораздо более коротких последовательностей случайных чисел, чем современный алгоритм.

Что я хочу сказать?

  • Псевдослучайные генераторы на самом деле не случайны; однако они появляются случайным образом в тех временных масштабах, для которых мы их используем. Во многих случаях этого достаточно.
  • Мы часто используем их в работе с Data Science, даже если вы явно не используете их в своем коде.
  • Установка начального числа приведет к воспроизводимым результатам, что очень полезно для разработки алгоритмов машинного обучения, но имейте в виду, что это может быть нежелательно в производственной среде.
  • Спроектировать хороший генератор псевдослучайных чисел очень сложно! Убедитесь, что вы используете те, которые тщательно проверены людьми.

Если вы все еще со мной после этого, то я хвалю вас, и теперь вы немного знаете о важности (и сложности) генерации действительно случайных чисел.