Сегодня я хочу рассказать о теме, которая редко затрагивается в курсах по статистике, но порой встречается на практике. Она может сломать основания всех ваших привычных методов и даже ваш мозг. Имя этой теме – power laws или “степенные законы”. В этой статье я расскажу, что это такое, покажу примеры реальных данных и расскажу, что делать, если в ваших данных встретился степенной закон. Я постарался сделать текст читаемым для широкого круга людей и не нагружать его формулами.

Gemini_Generated_Image_5jnt6g5jnt6g5jnt.png
Так выглядит применение привычных статистических инструментов к особенным данным

Я давно хотел рассказать о степенных законах, но триггером послужила вот эта статья от Бластим о том, нужно ли проверять данные на нормальность для применения статистических тестов. Статья сама по себе отличная. Но меня в ней зацепил этот момент:

Это не так
Это не так

Для применения статистических тестов, да и вообще по жизни часто нужно оценить среднее и дисперсию распределения данных. Даже в научных статьях часто пишут “среднее ± стандартное отклонение” (последнее есть корень из дисперсии). Центральная предельная теорема гарантирует, что это можно сделать для очень широкого класса распределений – всего-то дисперсия и матожидания должны существовать и быть конечными. Иногда в учебниках приводится пример распределений, для которых это не соблюдается: например, вышеупомянутое распределение Коши. Но дальше этого как правило дело не идёт. Предполагается, что распределения, которые вы встретите на практике, – “хорошие”, только было бы достаточно наблюдений в данных.

Необязательная заметка про распределение Коши. Вот как его можно получить: встанем у прямой реки и поставим пушку на один берег. Будем стрелять на другой берег из пушки, случайно выбирая угол её поворота из равномерного распределения, а затем измерять, в какую точку прилетело ядро. У распределения координат ядер не существует ни матожидания, ни дисперсии. Так происходит, потому что при выстреле почти параллельно берегу, ядро может улететь бесконечно далеко. Физика полёта здесь, конечно, сильно упрощена, но такие распределения встречаются в настоящей физике

А теперь представьте, что вы изучаете данные по доходу людей. И внезапно оказывается, что 1% самых богатых людей обладают до четверти всего богатства. А 10% самых богатых людей получают столько же, сколько 50% самых бедных:

В среднем выходит, что люди едят голубцы
В среднем выходит, что люди едят голубцы

Не будем рассуждать о социальной справедливости, а подумаем, что произойдёт со статистическими методами, если мы применим их к таким данным. Всего один богач, попавший в статистику, сильно сместит оценки параметров распределения. И на каждого богача найдётся ещё более богатый, вполне вероятно – в разы. Если вы будете извлекать случайные выборки из популяции и считать по ним среднее и дисперсию, вы с удивлением обнаружите, что результаты получаются сильно разными от выборки к выборке.

Вы решили отдохнуть от несправедливости этого мира и посмотреть на Солнце. Но пытливый статистический ум не может просто наслаждаться светом звезды и начинает делать наблюдения. Рассчитав распределение площадей солнечных вспышек, вы внезапно обнаруживаете, что оно похоже на распределение доходов людей! Очень много вспышек – совсем маленькие, но есть небольшое число сколько угодно больших вспышек. Если построить график распределения, это будет выглядеть так:

Заметьте, что обе шкалы логарифмические. Вспышка в 10 раз большего размера встретится в десятки (а в этом конкретном случае – даже в сотни) раз реже. Но всегда есть очень маленький шанс встретить очень большую вспышку, которая испортит вам всю статистику.

Вы начинаете замечать подобные распределения повсюду. Им описывается масса звёзд при их образовании, население городов, размеры лесов, отдача от венчурных инвестиций, средний чек клиентов вашей компании и количество статей об определённых генах. Даже в статьях о новомодных больших языковых моделях вы видите уже знакомую линию в лог-лог шкале:

По вертикальной оси – функция ошибок модели (лосс). Чем больше модель – тем лучше она становится. Нужно только влить в 10 раз больше денег, чтобы сделать следующий шаг
По вертикальной оси – функция ошибок модели (лосс). Чем больше модель – тем лучше она становится. Нужно только влить в 10 раз больше денег, чтобы сделать следующий шаг

Знание о подобных распределениях проникло даже в популярную культуру под названием “Правила 20/80” или закона Парето. 20% усилий приносят 80% результата – ровно про этот эффект. Сюда же относится эффект “чёрного лебедя” – небольшая вероятность встретить сколь угодно необычный выброс. На Википедии и вот в этой легендарной статье есть большие списки, где ещё встречаются подобные распределения. Имя им – “power laws” или “степенной закон”. Надеюсь, я убедил вас, что встретиться с ними на практике более, чем реально. Давайте же разбираться, что это вообще такое и что с ними делать.

Что такое степенной закон?

За всеми эффектами сверху скрывается простая формула:

f(x) = с x^{-\alpha}

f – это плотность распределения, c – константа нормализации, а \alpha – параметр распределения. Если внимательно посмотреть на уравнение, становится понятно, почему оно рисует линию на лог-лог графике: логарифм переносит альфу в множитель и log(f(x)) линейно зависит от log(x). Вот как выглядит комплементарная функция распределения для степенных распределений с разным значением \alpha:

По вертикальной оси показана комплементарная функция рспределения (CCDF) – какова вероятность встретить наблюдение больше порога, отложенного на горизонтальной оси. Очень высока вероятность встретить маленькие наблюдения, но даже для очень больших наблюдений вероятность не равна нулю.
По вертикальной оси показана комплементарная функция рспределения (CCDF) – какова вероятность встретить наблюдение больше порога, отложенного на горизонтальной оси. Очень высока вероятность встретить маленькие наблюдения, но даже для очень больших наблюдений вероятность не равна нулю.

Казалось бы, такая нестрашная штука: даже у нормального распределения формула выглядит более громоздкой. Но за неприметным видом скрывается настоящее чудовище. Матожидание у этого распределения существует лишь при \alpha > 2, а дисперсия – при \alpha > 3. Не буду распугивать читателей формулами: если кто-то захочет, проверьте это утверждение самостоятельно – для этого нужно взять простой интеграл.

Редко ли встречаются распределения именно с такими неприятными значениями параметра? Вовсе нет. Можете вернуться к графикам выше: у площади солнечным вспышек параметр равнялся 2.6 – дисперсия не определена! А у закона масштабирования языковых моделей параметр и вовсе крошечный. Другой пример из жизни: у распределения богатства в России параметр оценивался в 1.9 – не определено даже матожидание.

Как у распределения может не быть матожидания и дисперсии?

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

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

Этот и следующий графики сгенерированы мной. Код можно найти в репозитории.
Этот и следующий графики сгенерированы мной. Код можно найти в репозитории.

Здесь отчётливо видно, что значит неопределённость матожидания и дисперсии. В разных выборках мы получаем совершенно разные результаты. Обратите внимание на логарифмическую шкалу на всех графиках: наши оценки отличаются от выборки к выборке на порядки. Лишь когда параметры существуют, наши оценки сходятся к ним – тем лучше, чем больше выборка.

Однако странности степенного закона на этом не заканчиваются. Обратите внимание на график слева снизу для распределения с \alpha = 3.5. У него существует дисперсия, так что же за хаос происходит с выборочной дисперсией?

Тут вот какое дело: для оценки выборочной дисперсии нам нужно рассчитать матожидание квадрата случайной величины. Оставим читателю в качестве упражнения доказательство того, что еслиX \sim Powerlaw(\alpha), то:

X^2 \sim Powerlaw\big(\frac{\alpha+1}{2}\big)

То есть распределение квадрата случайной величины со степенным законом – тоже степенной закон, но с другим, меньшим значением параметра \alpha. Для \alpha = 3.5, квадрат X будет иметь распределение с параметром 2.25. А у такого распределения не определена дисперсия! Это приводит к странному эффекту: дисперсия существует, но её выборочная оценка – ужасна.

Но что-то пошло не так
Но что-то пошло не так

Зато мы можем понять настоящую дисперсию аналитически, через расчёт значения параметра \alpha. График показывает, что такой расчёт будет сильно лучше выборочной дисперсии:

Что это значит на практике?

Один из самых частых подходов к анализу данных – посчитать средние и сравнить их с чем-нибудь (например, между группами). Но если в ваших данных встречается степенной закон, это может не иметь смысла:

  • Матожидание может не существовать: среднее не может его приблизить, потому что приближать нечего

  • Даже если матожидание определено, может не существовать дисперсии. Это не позволит применять T-критерий Стьюдента, как и многие другие параметрические методы

  • Даже если дисперсия существует, её выборочная оценка может быть ужасна. Применение статистических критериев "в лоб" вновь становится затруднительным

  • Запись “среднее ± отклонение” может быть некорректна: из-за несоблюдений центральной предельной теоремы данные не описываются этими параметрами

Что же в таком случае делать? Изменить подход к анализу. Вместо привычного сравнения средних, имеет смысл анализировать значение параметра \alpha. Его значение несёт ценную информацию: можно понять, где стоит ожидать выбросы и какого они будут порядка. Например, степенные законы масштабирования больших языковых моделей дали учёным из OpenAI понять, что имеет смысл вкладываться во всё большие модели: их качество будет предсказуемо расти. Это привело к появлению всё более мощных GPT-моделей и инструментов вокруг них.

Наличие в данных степенного закона, особенно с маленькими альфами, может полностью поменять ваш подход к ним. Вместо “типичного представителя” имеет смысл думать о выбросах – “чёрных лебедях”. Если ваши данные – это доход от клиентов, может быть лучше сменить стратегию на то, чтобы сосредоточиться на небольшом количестве клиентов с огромным чеком, вместо большой массы малоплатящих клиентов. Если ваши данные – это частота землетрясений в регионе, степенной закон говорит, что однажды непременно случатся очень сильные землетрясения: готовы ли вы к ним?

Сила землетрясений тоже подвергается степенному закону
Сила землетрясений тоже подвергается степенному закону

Если охота сравнить несколько групп, можно сравнивать альфы между ними. Например, в анализе распределений богатства смотрели на динамику параметра по годам и сравнивали его между странами:

Альфа в России – значительно меньше, чем в Китае, что означает большее количество выбросов. Впрочем, степенной закон не всегда хорошо описывал данные
Альфа в России – значительно меньше, чем в Китае, что означает большее количество выбросов. Впрочем, степенной закон не всегда хорошо описывал данные

Кроме того, наличие степенного закона даёт вам подсказку о том, как работает процесс, генерирующий данные (вот хороший обзор). Часто это означает, что процесс имеет мультипликативную природу. Например, люди богатеют не постепенно, а скачками на несколько порядков. Такие подсказки особенно полезны для науки. Вот здесь, например, из константы степенного закона выводят закон эволюционной биологии.

Подводя итог, степенные законы – не проблема, ломающая все ваши методы, а особенность, к которой нужно подходить с правильными инструментами. Надеюсь, эта статья закрывает дыру в курсах по статистике и теперь вы воодушевитесь, а не испугаетесь, когда увидите линию на лог-лог графике распределения.

Заметки на полях

В конце оставлю несколько технических заметок для самых любознательных.

Не всё, что крякает как степенной закон, является степенным законом

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

Распределение элементов музыки Моцарта. Логнормальное распределение неплохо описывает данные, а степенной закон приходится разбивать на два участка
Распределение элементов музыки Моцарта. Логнормальное распределение неплохо описывает данные, а степенной закон приходится разбивать на два участка

Законы действуют не везде

Очень часто на графике распределения видно заветную линию на большей части распределения, но не в начале и конце. Там часто видно “дребезжание”: точки распределены более хаотично, чем предсказывает закон, или просто другое распределение данных. В таком случае степенной закон применяется только к части распределения. Это тоже можно сделать автоматически, просто к параметру альфа добавляются рамки применения закона: x_{min} или x_{max}:

Слева: количество последователей религий и сект, справа: количество цитирований научных статей. Заметьте, что линия степенного закона применяется лишь для части данных, где она хорошо описывает распределение. Источник
Слева: количество последователей религий и сект, справа: количество цитирований научных статей. Заметьте, что линия степенного закона применяется лишь для части данных, где она хорошо описывает распределение. Источник

На этом у меня всё. Если есть интерес, пишите в комментариях: буду рад погрузиться в большие детали и рассказать, как степенные законы встречались на практике мне. За мою не самую долгую карьеру биоинформатика это уже происходило дважды.

Комментарии (0)