Алгоритм обработки агрегации данных из множества подверженных ошибкам источников

Я собираю списки концертов из нескольких разных источников, ни один из которых не является полным и точным. Некоторые данные поступают от пользователей (например, on last.fm), и может быть неправильным. Другие источники данных являются высокоточными, но могут содержать не все события. Я могу использовать такие атрибуты, как дата события и город/штат, чтобы попытаться сопоставить списки из разных источников. Я хотел бы быть достаточно уверенным, что события верны. Кажется, это было бы хорошей стратегией Используйте как можно больше различных источников для проверки списков на источниках, подверженных ошибкам.

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

4 ответов


Я считаю, что термин, который вы ищете является Записать Связь -

процесс объединения двух или более записей, относящихся к одной и той же организации(например, лицо, семья, событие, сообщество, бизнес, больница или географический район)

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


вот подход, который находит его в статистике-в частности, он использует скрытую модель Маркова (http://en.wikipedia.org/wiki/Hidden_Markov_model):

1) Используйте процесс сопоставления для создания очищенного списка возможных событий. Считайте, что каждое событие помечено как "истинное" или "фиктивное", даже если метки скрыты от вас. Вы можете представить себе, что какой-то источник событий производит их, порождая их как "истинные " или" фиктивные " в соответствии с вероятностью, которая является неизвестный параметр.

2) связать неизвестные параметры с каждым источник объявлений. Они дают вероятность того, что этот источник сообщит об истинном событии, произведенном источником событий, и вероятность того, что он сообщит о фиктивном событии, произведенном источником.

3) Обратите внимание, что если бы вы могли видеть маркировку "true" или "bogus", вы могли бы легко вычислить вероятности для каждого источника. К сожалению, конечно, вы не можете увидеть эти скрытые маркировки.

4) назовем эти скрытые метки "скрытыми переменными", потому что тогда вы можете использовать http://en.wikipedia.org/wiki/Em_algorithm к hillclimb к перспективным решениям для этой проблемы, от случайных стартов.

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


один потенциальный поисковый термин - "нечеткая логика".

Я бы использовал float или double для хранения вероятности (0.0 = опровергнуто ... 1.0 = доказано) некоторых деталей событий, правильных. Когда вы столкнетесь с источниками, отрегулируйте вероятности соответствующим образом. Есть много для вас, чтобы рассмотреть:

  • попытка распознать, когда несколько источников скопированы друг от друга и уменьшить их влияние
  • придание большего веса более последним данным или данным, которые явно признает старые данные (например дали 100% надежный сайт, говоря: "концерт Х состоится 4 августа", и неизвестный блог, утверждая, "концерт х переехал с 4-го августа по 9-й", вы можете сохранить вероятность наличия такой концерт на все 100%, но есть список с датами и все вероятности, которые вы считаете уместными...)
  • осторожно, предполагая, что вещи являются дискретными; противоречивая информация может отражать несколько схожих событий, двойная тарификация, же-по фамилии исполнителей и т. д. - чем больше вы уверены, что те же самые вещи ссылаются, тем больше данных могут объединяться, чтобы усилить или отрицать друг друга
  • вы должны быть в состоянии "backtest" вашу развивающуюся логику, используя данные, связанные с набором концертов, где теперь у вас есть полное знание их фактической постановки или их отсутствие; обрабатывать данные, размещенные до различных дат отсечения до событий, чтобы увидеть, как прогнозы, которые вы получаете отражают фактические результаты, настройки и повторения (возможно, автоматически)

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


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