10 самых популярных поисковых запросов за последний месяц
Использование эффективного индексации памяти / структуры данных, такой как плотно упакованные попытки (из статей в Википедии о попытках ), приблизительно определяет некоторую связь между требованиями к памяти и n - числом терминов.
Если необходимая память доступна ( предположение 1 ), вы можете вести точную ежемесячную статистику и агрегировать ее каждый месяц во все временные статистические данные.
Здесь также есть предположение, что «последний месяц» интерпретируется как фиксированное окно. Но даже если месячное окно скользит, описанная выше процедура демонстрирует принцип (скольжение можно аппроксимировать фиксированными окнами заданного размера).
Это напоминает мне циклическую базу данных, за исключением того, что некоторые статистические данные рассчитываются «за все время» (в том смысле, что не все данные сохраняются; rrd объединяет периоды времени без учета деталей путем усреднения, суммирования или выбора максимальных / минимальных значений, в данной задаче теряется информация о низкочастотных элементах, которые могут привести к ошибкам).
Предположение 1
Если мы не можем поддерживать идеальную статистику за весь месяц, тогда мы должны быть в состоянии найти определенный период P, для которого мы сможем поддерживать идеальную статистику. Например, предположим, что у нас есть идеальная статистика за некоторый период времени P, который уходит в месяц n раз.
Идеальная статистика определяет функцию f(search_term) -> search_term_occurance
.
Если мы сможем хранить n
в памяти все идеальные таблицы статистики, скользящую ежемесячную статистику можно будет рассчитать следующим образом:
- добавить статистику за последний период
- удалить статистику за самый старый период (поэтому мы должны поддерживать
n
идеальные таблицы статистики)
Однако, если мы сохраним только 10 лучших на агрегированном уровне (ежемесячно), то мы сможем отбросить много данных из полной статистики за фиксированный период. Это уже дает рабочую процедуру, которая имеет фиксированные (при условии, что верхняя граница таблицы точных статистических данных для периода P) требования к памяти.
Проблема с описанной выше процедурой заключается в том, что если мы сохраняем информацию только о 10 лучших терминах для скользящего окна (аналогично для всех времен), тогда статистика будет правильной для поисковых запросов, пик которых наступает в период, но может не увидеть статистика по поисковым запросам, которые постоянно появляются с течением времени.
Это можно компенсировать, храня информацию о более чем 10 основных терминах, например, о 100 лучших терминах, надеясь, что первые 10 будут правильными.
Я думаю, что дальнейший анализ может связать минимальное количество вхождений, необходимое для того, чтобы запись стала частью статистики (что связано с максимальной ошибкой).
(При принятии решения, какие записи должны стать частью статистики, можно также отслеживать и отслеживать тенденции; например, если линейная экстраполяция вхождений в каждый период P для каждого срока говорит вам, что этот термин станет значимым через месяц или два, вы может уже начать его отслеживание. Аналогичный принцип применяется для удаления поискового запроса из отслеживаемого пула.)
Наихудший случай для вышеизложенного - это когда у вас много почти одинаково часто встречающихся терминов, и они все время меняются (например, если отслеживается только 100 терминов, то, если первые 150 терминов встречаются одинаково часто, но лучшие 50 чаще встречаются в первый месяц и чтобы через некоторое время статистика не велась правильно).
Также может быть другой подход, который не фиксируется в размере памяти (строго говоря, ни то, ни другое не указано выше), который будет определять минимальную значимость с точки зрения вхождений / периода (день, месяц, год, за все время), для которого нужно сохранить статистика. Это может гарантировать максимальную ошибку в каждой статистике во время агрегирования (снова см. Циклический алгоритм).
what is the most frequent item in the subsequence [2; 2; 3; 3; 3; 4; 4; 4; 4; 5; 5] of your sequence?