Первое, на что нужно обратить внимание, это то, что это может быть аппроксимировано локальной проблемой.То есть слово «тренд» действительно зависит только от последних данных.Таким образом, мы сразу можем усечь наши данные до самых последних N
дней, где N
- это некоторое экспериментально определенное оптимальное значение.Это значительно сокращает объем данных, на которые мы должны смотреть.
Фактически, статья NPR предлагает это.
Тогда вам нужно как-то взглянуть на рост,И это именно то, что захватывает производная.Первое, что нужно сделать, это нормализовать данные.Разделите все ваши точки данных на значение первой точки данных.Это делает так, чтобы большой рост редкого слова не заглушался относительно небольшим ростом популярного слова.
Для первой производной сделайте что-то вроде этого:
d[i] = (data[i] - data[i+k])/k
для некоторого экспериментально определенного значения k
(которое, в данном случае, является числом дней).Аналогично, вторая производная может быть выражена как:
d2[i] = (data[i] - 2*data[i+k] + data[i+2k])/(2k)
Более высокие производные также могут быть выражены следующим образом.Затем вам нужно назначить какую-то систему взвешивания для этих производных.Это чисто экспериментальная процедура, которая действительно зависит от того, что вы хотите считать «трендовым».Например, вы можете дать ускорение роста вдвое меньше веса, чем скорость.Еще одна вещь, на которую стоит обратить внимание, это то, что вы должны изо всех сил удалять шум из ваших данных, потому что производные очень чувствительны к шуму.Вы делаете это, тщательно выбирая свое значение для k
, а также отбрасывая слова с очень низкими частотами.
Я также заметил, что вы умножаете на лог-сумму частот.Я предполагаю, что это должно придать росту популярности популярных слов больший вес (поскольку более популярные слова с меньшей вероятностью будут развиваться в первую очередь).Стандартный способ измерить популярность слова - посмотреть на частоту обратного документа (IDF).
Я бы разделил на IDF слова, чтобы дать рост популярностислова больше веса.
IDF[word] = log(D/(df[word))
где D
- общее количество документов (например, для Twitter это будет общее количество твитов), а df[word]
- количество документов, содержащих word
(например, количество твитов, содержащих слово).
Высокий IDF соответствует непопулярному слову, тогда как низкий IDF соответствует популярному слову.