Как я могу прогнозировать трафик на основе данных предыдущих временных рядов?

18

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

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

Похоже, что это может быть похоже на финансовое моделирование, где вы имеете дело с данными временных рядов. Есть идеи?

user1132959
источник
Может быть, этот документ может быть полезным. knime.org/files/knime_bigdata_energy_timeseries_whitepaper.pdf Речь идет о моделировании временных рядов, включая сезонность. - Розария
Розария

Ответы:

17

Проблема с такими моделями, как KNN, заключается в том, что они не учитывают сезонность (зависящие от времени изменения тренда). Чтобы принять это во внимание, вы должны использовать анализ временных рядов.

Для данных подсчета, таких как ваши, вы можете использовать обобщенные линейные авторегрессивные модели скользящих средних (GLARMA). К счастью, существует пакет R, который их реализует ( glarma ).

Виньетка является хорошим ресурсом для теории позади инструмента.

Кристофер Лоуден
источник
2
Еще один очень полезный пакет для прогнозирования и анализа временных рядов - это прогноз профессора Роба Дж. Хиндмана.
Def_Os
Вы знаете, реализовано ли это уже на каком-либо другом языке? Я не совсем профессионал с Р. Я обязательно прочитаю газету, по крайней мере.
user1132959
Я не знаком с одним. Если вы хотите использовать python, вы можете использовать пакет rpy2 для вызова функции glarma, выполняя большую часть остальной части программирования на python. У большинства других языков такой разъем также есть.
Кристофер Лоуден
10

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

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

В качестве другого способа принятия этого, вы можете рассмотреть возможность начать с действительно очень базовой модели (такой как OLS) ... это часто имеет большое значение для создания разумных прогнозов.

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

Надеюсь это поможет --

Марк Т Паттерсон
источник
Да, визуализация является важным первым шагом в любом анализе.
Кристофер Лоуден
Я добавил месяц, день месяца, день недели и год как функции. Я даже пытался линейно уменьшать значение «Недавности». Я не думаю, что я пробовал OLS. Я наблюдаю временные рамки, которые могут варьироваться от пары недель до нескольких лет. Что касается визуализации, я попытался это сделать. Проблема в том, что мы хотим, чтобы программное обеспечение могло прогнозировать автоматически, без вмешательства человека, для разных клиентов.
user1132959
3

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

Обратите внимание, что рекомендуется:

  • Сезонализировать / развернуть входные данные (чтобы NN не изучал сезонность).
  • Масштабировать / нормализовать входные данные.

Поскольку то, что вы ищете, является проблемой регрессии, функции активации должны быть, linearа не sigmoidили, tanhи вы стремитесь минимизировать sum-of-squares error(как противодействие максимизации negative log-likelihoodв проблеме классификации).

Orelus
источник
Я рассматривал нейронные сети как вариант, но не знал, какие параметры я буду использовать. Я должен дать этим шанс.
user1132959
Сигмоид и Танх в порядке. Нелинейность нужна для изучения более сложных взаимодействий, и веса будут отображать их в любом диапазоне, который сеть сочтет необходимым
Ян ван дер Вегт
3

Как упомянул @Christopher Lauden выше, анализ временных рядов наиболее подходит для такого рода вещей. Однако, если вы хотите использовать более традиционный «подход машинного обучения», то, что я делал в прошлом, - это блокирование ваших данных в виде перекрывающихся окон времени в качестве функций, а затем использование их для прогнозирования следующих дней (или недель). ) движение.

Ваша функциональная матрица будет выглядеть примерно так:

t1 | t2 | ... | tN
t2 | t3 | ... | tN+1
t3 | t4 | ... | tN+2
...
tW | tW+1 | ... |tN+W

где tIдвижение в день I. Функция, которую вы прогнозируете, - это трафик на следующий день после последнего столбца. По сути, используйте окно трафика для прогнозирования трафика на следующий день.

Для этого подойдет любая модель ML.

редактировать

В ответ на вопрос «можете ли вы рассказать, как вы используете эту функциональную матрицу»:

Матрица объектов имеет значения, указывающие прошлый трафик за период времени (например, почасовой трафик за 1 неделю), и мы используем это для прогнозирования трафика на некоторый указанный период времени в будущем. Мы берем наши исторические данные и строим матрицу объектов исторического трафика и помечаем их трафиком в определенный период в будущем (например, через 2 дня после окна в функции). Используя некоторую модель регрессионного машинного обучения, мы можем взять исторические данные о трафике и попытаться построить модель, которая может предсказать, как трафик перемещался в нашем наборе исторических данных. Предполагается, что будущий трафик будет напоминать прошлый трафик.

галламин
источник
Не могли бы вы рассказать о том, как использовать эту матрицу функций? Вы пытаетесь учиться на основе изменения трафика по дням?
user1132959
Я отредактировал ответ, чтобы, надеюсь, дать больше ясности.
Галламин
2

Ну, во-первых, я бы даже не использовал такие вещи, как машинное обучение, не имея глубоких знаний. Упрощенные вещи, которые я бы сделал, если бы у меня был этот временной ряд:

  1. Напишите sql запросы, чтобы понять, в какое время у вас самый загруженный, средний и низкий трафик.
  2. Затем попытайтесь визуализировать весь временной ряд, и вы можете использовать базовые алгоритмы сопоставления с образцом, чтобы подобрать образцы.

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

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

Нишаль Hp
источник
0

Я бы посоветовал не использовать нейронную сеть или ее эквивалент, так как, я полагаю, вы получили такой хороший априор, основываясь на своем опыте работы с магазином (то есть, что, вероятно, существуют повседневные / сезонные тренды и некоторый уровень плавности) и Я представляю относительно небольшой объем данных. Лучшим вариантом IMO будет использование метода ядра, такого как гауссовский процесс или SVM.

j__
источник
0

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

Facebook недавно выпустила и открыла один из своих внутренних инструментов прогнозирования под названием Prophet https://facebookincubator.github.io/prophet/

Он доступен как в виде пакетов R & Python, так и оказывается интересным решением для тех, у кого мало опыта в области машинного обучения. Однако некоторые дополнительные знания по ML позволяют настраивать и оптимизировать выпускаемые модели.

Я рекомендую дать Пророку попытку в качестве первого шага. Быстрый выигрыш в этом решении - простота и скорость построения и тестирования модели: вы можете буквально получить прогноз спуска за считанные минуты. Он ведет себя очень хорошо на временных рядах, улавливая сезонность данных под рукой «естественно».

Под капотом это похоже на обобщенную аддитивную модель (GAM) - более подробную информацию о специальной статье: https://facebookincubator.github.io/prophet/static/prophet_paper_20170113.pdf

Александр Кортил
источник