Прогнозирование при помощи Google Trends и модели Хольта-Винтерса

Сегодня наткнулся в сети на очень интересную метод о прогнозировании результатов в Google trends.

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

Итак, возьмем сезонный запрос типа «средства от простуды» («cold+remedies» — потому как анализ строится по US выдаче).

Качаем данные из GoogleTrends, разбиваем данные по периодам, в данном случае это 52 недели и строим график зависимости запросов от времени.

Вот код, если кому-то интересно

search_index <- c(48, 40, 34, 43, 31, 39, 46, 26, 33, 34, 28, 25, 25, 23, 22, 25, 25, 25, 19, 16, 14, 16, 19, 17, 18, 16, 21, 19, 19, 19, 15, 21, 28, 30, 15, 21, 30, 39, 44, 50, 34, 37, 38, 38, 30, 42, 39, 42, 42, 57, 58, 80, 65, 40, 56, 52, 54, 55, 57, 57, 50, 50, 35, 36, 33, 35, 33, 32, 28, 33, 19, 27, 26, 18, 20, 21, 19, 20, 19, 27, 19, 22, 26, 21, 24, 22, 21, 41, 34, 38, 45, 33, 36, 35, 46, 45, 39, 49, 53, 59, 48, 54, 57, 79, 57, 51, 40, 43, 39, 49, 45, 48, 24, 34, 33, 33, 35, 26, 25, 24, 27, 26, 24, 26, 37, 17, 21, 20, 21, 20, 21, 21, 22, 14, 15, 14, 15, 22, 24, 31, 34, 42, 46, 45, 50, 41, 38, 34, 42, 44, 51, 49, 48, 44, 54, 60, 69, 50, 45, 43, 45, 51, 43, 47, 43, 45, 26, 29, 30, 34, 32, 32, 33, 26, 21, 21, 27, 27, 24, 22, 23, 22, 17, 19, 22, 22, 22, 23, 23, 25, 27, 32, 33, 37, 34, 35, 38, 46, 35, 46, 50, 43, 59, 60, 54, 50, 64, 69, 77, 50, 57, 56, 62, 56, 59, 60, 43, 54, 39, 41, 40, 26, 29, 27, 27, 23, 25, 22, 27, 31, 17, 19, 25, 20, 20, 21, 20, 20, 17, 21, 23, 19, 29, 26, 40, 46, 49, 39, 54, 50, 51, 51, 46, 53, 61, 69, 65, 62, 68, 69, 77, 68, 53, 60, 65, 62, 67, 63, 63, 49, 41, 52, 50, 41, 55, 44, 33, 38, 32, 30, 32, 36, 38, 35, 40, 34, 30, 34, 38, 31, 33, 32, 39, 33, 38, 47, 52, 53, 68, 59, 65, 63, 63, 65, 61, 59, 51, 56, 67, 61, 63, 71, 93, 78, 72, 54, 63, 69, 66, 60, 61, 66, 59, 56, 50, 41, 40, 42, 30, 40, 39, 34, 36, 36, 39, 26, 36, 28, 31, 42, 27, 30, 33, 27, 31, 35, 39, 41, 50, 57, 51, 58, 63, 49, 53, 51, 65, 63, 59, 58, 69, 74, 68, 81, 92, 100, 80, 81, 84, 79, 81, 74, 71, 67, 63, 59, 54, 58, 49, 56, 46, 50, 46, 44, 43, 48, 52, 43, 38, 40, 35, 40, 35, 34, 42, 37, 42, 44, 42, 46, 57, 61, 81, 66, 70, 55, 66, 64, 65, 64, 66, 64, 66, 75, 74, 89, 100, 93, 72, 74, 76, 69, 73, 70, 67, 63, 60, 56, 46, 47, 46, 56, 47, 44, 43, 42, 45, 42, 44, 41, 40, 39, 37, 36, 34, 38, 31, 35, 40, 40, 46, 48, 52, 59, 64, 70, 62, 73, 66, 68, 69, 72, 82, 77)
# convert to time series, weekly frequency
search_index <- ts(search_index, frequency = 52, start = c(2004,1))

plot(search_index, main = "Google searches for 'cold remedies', 2004 to present")

googetrendsearch

Далее весь массив преобразуется в объект Хольта-Винтерса без каких либо хитростей (т.е. как есть), просто для того чтобы оценить правильность направления размышлений.

Код преобразования

search_fit <- HoltWinters(search_index)
 
plot(search_fit)

Которая строит вот такую замечательную кривую с 52мя коэффициентами

filteringgoogletrendfit

Которая как видим практически идеально описывает первоначальную кривую полученную от Гуглтрендса.

Теперь загружаем функцию экстраполяции forecast.HoltWinters с учетом следующего года

library(forecast)
 
search_forecast <- forecast.HoltWinters(search_fit, h=52)
 
plot(search_forecast)

и получаем

googletrendsdonefit

Где синяя это есть сама функция прогноза, а оранжевая (80%) и желтая (95%) являются доверительными интервалами.

Так что если озадачиться прогнозом на какие либо запросы в Гугле, то вполне можно заняться.

А вообще, с этим нужно вплотную разбираться и экспериментировать чтобы писать такие матмодели.

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *