Если у меня есть магазин розничной торговли, и у меня есть способ измерить, сколько людей заходит в мой магазин каждую минуту, и поставить отметку времени в этих данных, как я могу прогнозировать будущий объем трафика?
Я изучил алгоритмы машинного обучения, но не уверен, какой из них использовать. В моих тестовых данных тренд год за годом более точен по сравнению с другими вещами, которые я пробовал, такими как KNN (с тем, что я считаю разумными параметрами и функцией расстояния).
Похоже, что это может быть похоже на финансовое моделирование, где вы имеете дело с данными временных рядов. Есть идеи?
machine-learning
time-series
user1132959
источник
источник
Ответы:
Проблема с такими моделями, как KNN, заключается в том, что они не учитывают сезонность (зависящие от времени изменения тренда). Чтобы принять это во внимание, вы должны использовать анализ временных рядов.
Для данных подсчета, таких как ваши, вы можете использовать обобщенные линейные авторегрессивные модели скользящих средних (GLARMA). К счастью, существует пакет R, который их реализует ( glarma ).
Виньетка является хорошим ресурсом для теории позади инструмента.
источник
Я думаю, что ответы Кристофера выше вполне разумны. В качестве альтернативного подхода (или, возможно, просто в дополнение к совету, который он дал), я мог бы начать с небольшой визуализации данных, чтобы попытаться получить общее представление о том, что происходит.
Если вы этого еще не сделали, вы можете попробовать добавить месяц и день недели в качестве функций - если вы в конечном итоге придерживаетесь KNN, это поможет модели подобрать сезонность.
В качестве другого способа принятия этого, вы можете рассмотреть возможность начать с действительно очень базовой модели (такой как OLS) ... это часто имеет большое значение для создания разумных прогнозов.
Наконец, чем больше мы знаем о ваших данных, тем легче нам будет составлять предложения. Какие временные рамки вы соблюдаете? Какие функции вы используете в настоящее время? и т.п.
Надеюсь это поможет --
источник
Вы можете попробовать нейронную сеть. Вы можете найти 2 отличных объяснения того, как применять NN для временных рядов здесь и здесь .
Обратите внимание, что рекомендуется:
Поскольку то, что вы ищете, является проблемой регрессии, функции активации должны быть,
linear
а неsigmoid
или,tanh
и вы стремитесь минимизироватьsum-of-squares error
(как противодействие максимизацииnegative log-likelihood
в проблеме классификации).источник
Как упомянул @Christopher Lauden выше, анализ временных рядов наиболее подходит для такого рода вещей. Однако, если вы хотите использовать более традиционный «подход машинного обучения», то, что я делал в прошлом, - это блокирование ваших данных в виде перекрывающихся окон времени в качестве функций, а затем использование их для прогнозирования следующих дней (или недель). ) движение.
Ваша функциональная матрица будет выглядеть примерно так:
где
tI
движение в деньI
. Функция, которую вы прогнозируете, - это трафик на следующий день после последнего столбца. По сути, используйте окно трафика для прогнозирования трафика на следующий день.Для этого подойдет любая модель ML.
редактировать
В ответ на вопрос «можете ли вы рассказать, как вы используете эту функциональную матрицу»:
Матрица объектов имеет значения, указывающие прошлый трафик за период времени (например, почасовой трафик за 1 неделю), и мы используем это для прогнозирования трафика на некоторый указанный период времени в будущем. Мы берем наши исторические данные и строим матрицу объектов исторического трафика и помечаем их трафиком в определенный период в будущем (например, через 2 дня после окна в функции). Используя некоторую модель регрессионного машинного обучения, мы можем взять исторические данные о трафике и попытаться построить модель, которая может предсказать, как трафик перемещался в нашем наборе исторических данных. Предполагается, что будущий трафик будет напоминать прошлый трафик.
источник
Ну, во-первых, я бы даже не использовал такие вещи, как машинное обучение, не имея глубоких знаний. Упрощенные вещи, которые я бы сделал, если бы у меня был этот временной ряд:
Эти две вещи помогут вам понять, о чем говорит ваш набор данных. Тогда, с этим в руках, вы, вероятно, будете в лучшем состоянии использовать алгоритмы машинного обучения.
Кроме того, в настоящее время я работаю над созданием чего-либо для временных рядов, и использование анализа временных рядов поможет вам гораздо больше, чем машинное обучение. Например, есть алгоритмы распознавания образов, которые вы можете использовать, которые используют ежедневные данные, чтобы показать образцы, и те, которые используют до 3-6 месяцев данных, чтобы поймать образец.
источник
Я бы посоветовал не использовать нейронную сеть или ее эквивалент, так как, я полагаю, вы получили такой хороший априор, основываясь на своем опыте работы с магазином (то есть, что, вероятно, существуют повседневные / сезонные тренды и некоторый уровень плавности) и Я представляю относительно небольшой объем данных. Лучшим вариантом IMO будет использование метода ядра, такого как гауссовский процесс или SVM.
источник
Возвращение этой нити к жизни, так как это может быть полезно для других, заходящих сюда с похожими вопросами.
Facebook недавно выпустила и открыла один из своих внутренних инструментов прогнозирования под названием Prophet https://facebookincubator.github.io/prophet/
Он доступен как в виде пакетов R & Python, так и оказывается интересным решением для тех, у кого мало опыта в области машинного обучения. Однако некоторые дополнительные знания по ML позволяют настраивать и оптимизировать выпускаемые модели.
Я рекомендую дать Пророку попытку в качестве первого шага. Быстрый выигрыш в этом решении - простота и скорость построения и тестирования модели: вы можете буквально получить прогноз спуска за считанные минуты. Он ведет себя очень хорошо на временных рядах, улавливая сезонность данных под рукой «естественно».
Под капотом это похоже на обобщенную аддитивную модель (GAM) - более подробную информацию о специальной статье: https://facebookincubator.github.io/prophet/static/prophet_paper_20170113.pdf
источник