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

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

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

Ответ 1

Я считаю, что термин, который вы ищете, Record Linkage -

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

Эта презентация (PDF) выглядит как приятное введение в поле. Один алгоритм, который вы можете использовать, - Fellegi-Holt - статистический метод редактирования записей.

Ответ 2

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

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

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

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

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

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

Ответ 3

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

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

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

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

Ответ 4

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