Большое начало, длинный хвост

Ниже представлен граф количества жителей сотни крупнейших населенных пунктов Канады (щелкните на графике, чтобы увидеть увеличенную версию):

clip_image002

Обратите внимание на огромный пик в начале этого графика: Торонто, Монреаль и Ванкувер являются довольно крупными городами по любым меркам. Затем идет резкий скачек вниз, к группе из десятка довольно крупных городских районов, включая мой родной регион Китченер-Ватерлоо-Кембридж. После чего начинается очень длинный хвост. Наиболее густонаселенные города с населением в пять миллионов человек в 200 раз крупнее 100-го города, с населением в 25 тысяч человек. Если мы расширим список городов до двухсот, то хвост этого графика будет уменьшаться еще медленнее.

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

clip_image004

Отлично, этот график гораздо легче анализировать. Все еще понятно, что у нас есть пик вначале графика, за которым следует длинных хвост, но поскольку «тонкую» часть мы сделали значительно «толще», стало гораздо проще понимать, что же в нем происходит. Использование логарифмического масштаба по вертикальной оси работает замечательно. Но если мы сделаем и горизонтальную ось логарифмической, мы получим еще более интересную картину. (Напомню, что данные на самом деле не являются непрерывными и у нас есть всего десять дискретных точек в левой половине графика, а оставшиеся девяносто находятся в правой половине). Обратите внимание, что даже, несмотря на то, что мы расположили большую часть точек в значительно меньшей области, тонкости картины становятся даже более очевидными при использовании логарифмического масштаба по обеим осям, по сравнению с использованием только одной логарифмической оси.

clip_image006

Мы получили практически прямую линию! До чего же я люблю прямые линии на графиках с логарифмическим масштабом по обеим осям! Вы знаете, что показывает исходный график? Этот график очень напоминает гиперболу. Давайте нарисуем гиперболу, которая конечно является прямой линией (с уклоном, равным -1) на графике с логарифмическим масштабом по обеим осям. На следующий график я добавил гиперболу по формуле y = 4000000 / n:

clip_image008

Невероятно! Разумная аппроксимация заключается в том, что население n-го по размеру населенного пункта Канады равняется 1 / n от населения самого большого населенного пункта.

Кроме того, в Википедии я нашел список первой сотни наиболее продаваемых книг. Если мы нарисуем этот график (в миллионах) на графике с двумя логарифмическими осями, то мы опять получим гиперболу:

clip_image010

Первые несколько точек несколько выбиваются из общей картины, частично из-за того, что записи о наиболее продаваемых книгах за последние два столетия не очень точные, а частично из-за того, что при покупке Властелина Колец, часто также покупают и Хоббита. Честно говоря, 200 миллионов копий книг Диккенса кажется очень небольшой цифрой. Оставшаяся часть данных отлично соответствует нашему длинному хвосту. Опять таки можно сказать, что количество экземпляров n -ой наиболее популярной книги, равняется 1 / n от самой популярной книги.

Вот почему я никогда не стану богатым благодаря написанию книг. «Длинный хвост» печатной индустрии невероятно длинный, даже если вы выпустите наиболее продаваемую книгу в одном конкретном году (а не за 150 лет, как я здесь привел). Очевидно, что только единицы добираются до верхней десятки в конкретном году; а если ваша книга не находится в топ 1000, тогда, скорее всего, вы будете получать меньше 1/1000 от суммы, зарабатываемой наиболее продаваемой книгой.

Наборы данных, которые после сортировки по убыванию обладают свойством, что n-й член равен 1 / n от первого члена, распределены по закону Зипфа (Zipf's Law) (*). Джордж Зипф был лингвистом, который заметил, что частота использования слов в английском языке приблизительно пропорциональна позиции в списке частот. Т.е. если наиболее используемое слово “the” встречается 70000 раз на миллион слов, второе слово “of” – встречается 35000 раз (в двое меньше), а третье слово “and” встречается 23000, после которых идет невероятно длинный список слов, которые встречаются только один раз на тысячу или сто тысяч слов. (**)

Только потому, что никто из нас не станет богатым путем написания книг, не является причиной не любить закон распределения Зипфа; у него есть и положительные моменты. Давайте рассмотрим следующий график:

clip_image012

Вы можете заметить, что кривая уменьшается немного медленнее, нежели идеальная гипербола; вершина графика не такая высокая, а хвост не такой пологий, но это все тот же график типа «большое начало, длинный хвост».

Вы замечали, что при установке новой программы, часто можно встретить флажок с надписью «помогите сделать нашу программу лучше»? И вы наверняка замечали, что при падении приложения, вы можете отправить автоматический отчет об ошибке в Microsoft? У нас есть программа, которая автоматически анализирует отчеты и пытается определить к какой «категории» нужно отнести этот отчет. График с двумя логарифмическими осями, показанный выше, показывает частотное распределение первых 100 автоматических отчетов о крахе Visual Studio (который включает как падения самой Visual Studio, так и сторонних компонентов). Поскольку этот график соответствует закону Зипфа, мы можем сосредоточить усилия по исправлению ошибок из начала графика.Значительное количество ошибок, которые привели к падению программы, являются результатом всего нескольких десятков ошибок, которые из-за этого получили наивысший приоритет.

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

(*) Конечно, Закон Зипфа уже не является законом, как и законы Бенфорда или Мура. В отличие от законов физики, не существует внешней силы, которая заставляет население городов или количество проданных книг изменяться именно таким образом. На самом деле, это скорее «Наблюдение Зипфа» или «Закон распределения Зипфа», нежели просто закон.

(**) В одном из комментариев правильно заметили, что ни один реальный набор данных на самом деле не может следовать Закону Зипфа, когда количество элементов значительно больше 100, поскольку в этом случае мы в сумме не получим 100%! На самом деле последовательность вида 1/2 + 1/3 + 1/4 + 1/5 … не сходится; она стремится к бесконечности. Доказать это легко. Очевидно, 1/4 + 1/4 + 1/8 + 1/8 + 1/8 + 1/8 + 1/16 + 1/16 + 1/16 + 1/16 + 1/16 + 1/16 + 1/16 + 1/16 + 1/32 … меньше чем 1/2 + 1/3 + 1/4 + 1/5 … Но также очевидно, что 2 * (1/4) + 4 * (1/8) + 8 * (1/16) + 16 * (1/32) … равняется … 1/2 + 1/2 + 1/2 + 1/2 … что не является сходящейся последовательностью. Наборы данных, которые соответствуют Закону Зипфа, не могут строго соответствовать форме гиперболы, просто не могут. Смысл, на самом деле, заключается в том, что Закон Зипфа дает быстрое приближение порядка величин, а не точный результат.

Оригинал статьи