Як я можу передбачити трафік на основі даних попереднього часового ряду?


18

Якщо у мене є роздрібний магазин і є спосіб виміряти кількість людей, що заходять у мій магазин щохвилини, і позначити ці дані, як я можу передбачити майбутній рух пішки?

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

Майже здається, що це може бути схожим на фінансове моделювання, де ви маєте справу з даними часових рядів. Будь-які ідеї?


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

Відповіді:


17

Проблема таких моделей, як KNN, полягає в тому, що вони не враховують сезонність (часові зміни в тенденції). Щоб врахувати це, слід використовувати аналіз часових рядів.

Для підрахунку даних, таких як ваші, ви можете використовувати узагальнені лінійні авторегресивні моделі ковзних середніх (GLARMA). На щастя, існує пакет R, який реалізує їх ( glarma ).

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


2
Ще один дуже корисний пакет для прогнозування та аналізу часових рядів прогнозує професор Роб Дж. Хайндман.
Def_Os

Чи знаєте ви, чи це вже реалізовано будь-якою іншою мовою? Я не точно професіонал з Р. Я обов'язково прочитаю газету принаймні.
користувач1132959

Я не знайомий ні з одним. Якщо ви хочете використовувати python, ви можете використовувати пакет rpy2 для виклику функції glarma, виконуючи більшу частину решти програмування в python. Більшість інших мов також має такий з'єднувач.
Крістофер Луден

10

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

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

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

Нарешті, чим більше ми дізнаємося про ваші дані, тим легше нам допоможемо генерувати пропозиції - Який часовий проміжок ви дотримуєтесь? Які функції ви зараз використовуєте? тощо.

Сподіваюся, це допомагає -


Так, візуалізація - важливий перший крок у будь-якому аналізі.
Крістофер Луден

Я додав як особливості місяць, день місяця, день тижня та рік. Я навіть спробував лінійно зменшувати значення "Останність". Я не думаю, що я пробував OLS. Я спостерігаю за часовими рамками, які можуть коливатися від декількох тижнів до декількох років. Що стосується візуалізації, то я намагався це зробити. Проблема полягає в тому, що ми хочемо, щоб програмне забезпечення могло передбачати автоматичне, без втручання людини, різних клієнтів.
користувач1132959

3

Ви можете спробувати Neural Network. Ви можете знайти 2 великі пояснення про те , як застосувати NN часових рядів тут і тут .

Зауважте, що найкращою практикою є:

  • Десезоналізувати / зменшити вхідні дані (так що NN не дізнається сезонність).
  • Повторний масштаб / Нормалізація вхідних даних.

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


Я розглядав Нейронні мережі як варіант, але не знав, які параметри я буду використовувати. Мені доведеться постріляти.
користувач1132959

Зігмоїд і Тан - це добре, нелінійність хочеться вивчити більш складні взаємодії, а ваги будуть відображати їх у будь-якому діапазоні, який мережа вважає необхідним
Ян ван дер Вегт

3

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

Ваша матриця функцій буде приблизно такою:

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

де tIрух за день I. Особливістю, яку ви будете прогнозувати, є трафік в день після останнього стовпця. По суті, використовуйте вікно руху, щоб передбачити рух на наступний день.

Будь-яка модель ML буде працювати для цього.

Редагувати

У відповідь на запитання "чи можете ви детальніше пояснити, як ви використовуєте цю матрицю функцій":

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


Не могли б ви детальніше розказати, як би ви використовували цю матрицю функцій? Ви намагаєтесь навчитися на основі зміни трафіку протягом днів?
користувач1132959

Я відредагував відповідь, щоб сподіватися надати більшу ясність.
галамін

2

Ну, по-перше, я б навіть не використовував такі речі, як машинне навчання, не маючи глибоких знань. Спрощені речі, які я робив би, якби у мене був цей часовий ряд:

  1. Напишіть запити sql, щоб зрозуміти, який саме час ви маєте найоб’ємніший, середній і низький трафік.
  2. Потім спробуйте візуалізувати весь часовий ряд, і ви можете використовувати основні алгоритми відповідності шаблонів для вибору шаблонів.

Ці дві речі допоможуть вам зрозуміти, про що вам говорить ваш набір даних. Тоді, маючи це в руці, ви, мабуть, будете в кращому стані використовувати алгоритми машинного навчання.

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


0

Я б радив не використовувати нейронну мережу або еквівалент, оскільки, я припускаю, ви отримали такий хороший результат, виходячи з вашого досвіду роботи з магазином (тобто, ймовірно, щоденні / сезонні тенденції та певний рівень плавності) і Я уявляю відносно невелику кількість даних. Кращим варіантом IMO було б застосувати метод ядра, такий як Гауссовий процес або SVM.


0

Повернення цієї теми повернеться до життя, оскільки це може бути корисним для інших, хто приїхав сюди із подібними питаннями.

Нещодавно Facebook випустив і відкрив один із своїх інструментів внутрішнього прогнозування під назвою Пророк https://facebookincubator.github.io/prophet/

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

Я рекомендую спробувати Пророку спробувати в якості першого кроку. Швидка перемога у цьому рішенні - це простота та швидкість побудови моделі та тестування: ви можете буквально отримати проекцію спуску за лічені хвилини. Він дуже добре поводиться за часовими рядами, вловлюючи сезонність даних "природно".

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.