Перестановка (permutation)

Перестановка (permutation) — это математический термин, который обозначает упорядоченное изменение порядка элементов в наборе или последовательности. Точнее говоря, перестановка — это размещение элементов в определенном порядке, при котором каждый элемент встречается ровно один раз.

Простым примером перестановки может служить перестановка букв в слове. Рассмотрим слово «ABC». В данном случае у нас есть 3 буквы — A, B и C. Существует 6 возможных перестановок этих букв:

  1. ABC
  2. ACB
  3. BAC
  4. BCA
  5. CAB
  6. CBA

Каждая перестановка представляет собой новый упорядоченный набор букв.

Обозначение для количества перестановок из n элементов называется «факториал» и обозначается как «n!» (читается как «эн-факториал»). Факториал числа n определяется как произведение всех положительных целых чисел от 1 до n. Например:

  • 3! = 3 * 2 * 1 = 6
  • 4! = 4 * 3 * 2 * 1 = 24
  • 5! = 5 * 4 * 3 * 2 * 1 = 120

Таким образом, в примере с «ABC», количество перестановок равно 3! = 6.

Когда имеется множество из n элементов, а мы хотим выбрать k элементов и упорядочить их, такая перестановка называется «размещением» (arrangement). Обозначение для количества размещений из n элементов по k элементов обычно записывается как «A(n, k)» и равно «n! / (n — k)!».

Если же нам не требуется упорядочивать элементы, то используется комбинация (combination), а не перестановка. Комбинация не учитывает порядок элементов, поэтому перестановка является более «строгим» понятием, чем комбинация.

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

В аналитике данных, перестановки могут быть полезны для решения различных задач, таких как тестирование гипотез, A/B-тестирование и построение моделей машинного обучения. Один из часто встречающихся примеров — это перестановочный тест (permutation test), который используется для проверки статистических гипотез.

В перестановочном тесте, мы можем сравнивать две или более группы данных для проверки, есть ли между ними статистически значимые различия. Этот тест не предполагает определенного распределения данных, что делает его универсальным и надежным методом.

Давайте рассмотрим пример сравнения средних значений двух групп данных с помощью перестановочного теста на языке Python. Для этого нам понадобится библиотека numpy, которая предоставляет функции для работы с массивами и математическими вычислениями, и библиотека scipy, которая содержит функции для статистического анализа.

Предположим, у нас есть две группы данных: group1 и group2, и мы хотим проверить, есть ли статистически значимая разница между их средними значениями.


import numpy as np
from scipy import stats

# Пример данных для двух групп
group1 = np.array([15, 20, 18, 22, 19, 25, 16, 17])
group2 = np.array([12, 14, 16, 11, 20, 18, 19, 17])

# Вычисляем наблюдаемую разницу между средними значениями
observed_difference = np.mean(group1) - np.mean(group2)

# Объединяем данные двух групп в один массив
all_data = np.concatenate((group1, group2))

# Количество перестановок
num_permutations = 1000

# Инициализируем массив для хранения перестановочных разниц
permutation_differences = np.zeros(num_permutations)

# Проводим перестановочный тест
for i in range(num_permutations):
# Перемешиваем данные случайным образом
permuted_data = np.random.permutation(all_data)

# Разделяем данные на две группы (аналогичного размера)
permuted_group1 = permuted_data[:len(group1)]
permuted_group2 = permuted_data[len(group1):]

# Вычисляем разницу между средними значениями для каждой перестановки
permutation_difference = np.mean(permuted_group1) - np.mean(permuted_group2)
permutation_differences[i] = permutation_difference

# Вычисляем p-значение
p_value = np.sum(permutation_differences >= observed_difference) / num_permutations

# Выводим результаты
print("Наблюдаемая разница средних значений:", observed_difference)
print("p-значение:", p_value)

В результате выполнения кода мы получим наблюдаемую разницу средних значений между двумя группами данных и p-значение, которое указывает на вероятность получения такой же или еще более значимой разницы между группами случайным образом, при условии, что нулевая гипотеза верна (нулевая гипотеза гласит, что разница между группами отсутствует). Если p-значение меньше выбранного уровня значимости (например, 0.05), мы можем отклонить нулевую гипотезу и сделать вывод о наличии статистически значимой разницы между группами данных.