Определить ключевые моменты в изменении частоты - PullRequest
2 голосов
/ 30 сентября 2011

У меня есть приложение, в котором я анализирую систему, в которой существует большое количество взаимодействий. И мне нужно сделать определенный выбор, основанный на частоте появления уникальных предметов в системе. Например, если у вас был этот список букв:

A, B, F, G, A, T, S, B, S, B, S, Q, Z, B, Q, S

Вот список, показывающий, как часто встречается каждая буква (вхождения):

A - 2
B - 4
F - 1
G - 1
Q - 2
T - 1
S - 4
Z - 1

Таким образом, частота вхождений как таковых (вхождения):

4 - 2
2 - 2
1 - 4

Выше приведен крошечный пример, но я прикрепил изображение, представляющее собой простой линейный график более крупной системы

series graph

На этом графике цифры внизу не очень важны. Они просто отмечают количество уникальных частот. И ось Y отмечает значение этой частоты.

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

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

Для пояснения, мой текущий алгоритм создает список пар чисел, встречающихся по частоте встречаемости. Мое использование слова «частота» никоим образом не относится к электромагнитным сигналам, а скорее к тому, как часто происходит событие. Но я подумал, что говорить «происшествия» будет более запутанным!

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

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

data for graph

Этот список, как вы можете видеть, отсортирован в порядке убывания в столбце вхождения. Это из небольшой системы с 904 уникальными объектами. Эти объекты имеют 38 уникальных показателей возникновения. Если бы вы начали с этого списка, вы могли бы сказать:

"2 entities occur 309 times"
"1 entity occurs 130 times"
etc.

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

Если вы посмотрите на список, вы увидите, где более низкие вхождения становятся более частыми. Я не думаю, что могу отсортировать по правому столбцу, потому что левый столбец - это действительно ключевые данные. Большие случаи = больше важности.

Но мне все еще нужно выяснить, как это определить.

Ответы [ 3 ]

2 голосов
/ 30 сентября 2011

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

Вы можете настроить правила «значительных изменений» для удовлетворения ваших конкретных потребностей.Это может быть так же просто, как «уклон, который больше всего увеличивается по сравнению с предыдущим», или «первый уклон, который отличается более чем на X% от скользящего среднего уклона».Или, может быть, самое большое rss различий между уклоном в контрольной точке и предыдущим и последующим.


После редактирования, я думаю, это может быть так же просто, как брать процент.Умножьте каждые X и Y и возьмите сумму по всем записям.Это общее количество наблюдаемых событий.Теперь начните снизу, если ваша таблица, и начните вычитать произведение каждой строки из общей суммы, пока не получите менее X% от первоначальной суммы.То, что у вас осталось, это «значимые» события, которые внесли наибольший вклад в общую сумму.

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

1 голос
/ 30 сентября 2011

Все, что вам нужно сделать, это уточнить это «найти точку, где эта линия начинает ломаться вверх».Опираясь на то, что вы говорите, я могу предположить и принять в качестве предварительного условия, что линия всегда тормозит вверх, и с этой точки она никогда не пойдет вниз (даже на один шаг).Это означает, что в вашем примере он вернет 33, а не 32.

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

Итак, алгоритм для решения этой проблемы будет выглядеть примерно так:

repeat
    $previousYValue = get the highest Y value
    $previousXValue = get the X value corresponding to $previousYValue
    $currentXValue = $previousXValue - 1
    $currentYValue = get the Y value for $currentXValue
until ($currentYValue > $previousYValue)
print "The line breaks upwards at point: $previousXValue with value $previuosYValue"

Надеюсь, это поможет

0 голосов
/ 07 октября 2011

Основываясь на вашем утверждении:

В конечном итоге я пытаюсь определить важность сущности на основе того, как часто она встречается в системе.Мне нужно иметь возможность пометить определенные элементы как «важные», но все элементы не могут быть важными.И метод / алгоритм, который я ищу, поможет определить, в какой момент в этом списке я перестаю считать важные элементы.

Я бы рассмотрел проблему с точки зрения вероятности и статистики вместографик функции.Используя ваши образцы данных, вероятность появления определенной буквы x - это просто число x в данных, разделенное на общее количество букв.

Несколько простых возможностей:

  • выбрать набор наиболее вероятных событий, на которые приходится 50% от общего числа событий
  • выбрать все события с вероятностью> 0,1
  • выберите n наиболее вероятных событий.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...