Підтримка векторної регресії для прогнозування багатоваріантних часових рядів


22

Хтось намагався прогнозувати часові ряди, використовуючи регресію вектора підтримки?

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

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

EDIT: Щоб детальніше розібратися, дозвольте спробувати пояснити на прикладі ціни на акції.

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


Чи можете ви розмістити документи, про які ви посилаєтесь?
Рам Ахулулія

1
Прогнозування часових рядів з локальною машиною підтримки векторної регресії, Родріго Фернандес, svms.org/regression/Fern.pdf Підтримка векторної регресії для прогнозування фінансових часових рядів, Вей Хао та Сонгнян Ю, springerlink.com/index/946802600u4552m8.pdf
raconteur

Відповіді:


18

У контексті векторної регресії підтримки той факт, що ваші дані є часовим рядом, в основному є актуальним з методологічної точки зору - наприклад, ви не можете виконати перехресну перевірку k-кратну кількість, і вам потрібно вжити заходів обережності під час запуску бекстейдів. / моделювання.

В основному, регресія вектора підтримки - це дискримінаційна регресія, подібно до будь-якої іншої методики дискримінаційної регресії. Ви надаєте йому набір вхідних векторів та пов'язаних з ними відповідей, і він підходить для моделі, щоб спробувати передбачити відповідь з урахуванням нового вхідного вектора. Kernel SVR, з іншого боку, застосовує одне з багатьох перетворень до вашого набору даних перед етапом навчання. Це дозволяє йому підбирати нелінійні тенденції в наборі даних, на відміну, наприклад, від лінійної регресії. Хорошим ядром для початку, ймовірно, був би Gaussian RBF - у нього буде гіперпараметр, на який можна настроїтись, тому спробуйте пару значень. І тоді, коли ви відчуєте, що відбувається, ви можете спробувати інші ядра.

З часовим рядом крок імпорту визначає, яким буде ваш "особливість вектора" ; кожен x i називається "ознакою" і може бути обчислений із теперішніх або минулих даних, і кожен y i , відповідь, буде майбутньою зміною протягом певного періоду часу, що ви намагаєтеся передбачити. Візьміть наприклад запас. У вас з часом ціни. Можливо, вашими особливостями є:.) 200MA-30MA розкид і b.) 20-денна мінливість, тому ви обчислюєте кожну x t в кожний момент часу разом з y txxiyixtyт, (скажімо) наступного тижня повернення цих запасів. Таким чином, ваш SVR дізнається, як прогнозувати повернення на наступний тиждень, грунтуючись на нинішньому розповсюдженні MA та 20-денному обсязі. (Ця стратегія не працюватиме, тому не надто хвилюйтеся;)).

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


@Jason, дякую за відповідь. Мене бентежить питання про те, як зробити старі дані менш важливими під час тренінгу, тобто як дати важливе для останніх прикладів 100 прикладів, а не останні 10 000 прикладів. Крім того, у мене є певний досвід роботи зі SVM в Python, тому я хочу використовувати це.
розбійник

Ви не можете реально використовувати всі минулі дані як вектор функції; ви повинні якось перетворити це на змістовну особливість. Наприклад, розглянемо усереднення останніх 20 значень часового ряду або поточне значення ряду, поділене на ковзну середню. Це функції, які вказують в одному простому числі імпортну характеристику набору даних. Придумайте (скажіть) 10 або більше функцій, які, на вашу думку, будуть максимально прогнозуючими. Отже, щоб зробити старі дані менш важливими, ви зробите це менш важливим при визначенні своїх особливостей (тобто використовуйте коротші ковзні середні значення).
Вільям

@ Джейсон, дозвольте спробувати пояснити на прикладі ціни на акції. Скажімо, у нас ціни акцій на N днів. Тоді для кожного дня ми могли побудувати векторний вектор, який, у простому випадку, може бути ціною попереднього дня та ціною поточного дня. Відповідь на кожен векторний елемент буде ціною наступного дня. Таким чином, враховуючи вчорашню ціну і сьогоднішню ціну, метою було б передбачити ціну наступних днів. Що я не розумію, це те, що ми маємо дані про навчання за півроку, як би ви приділили більше уваги останнім векторам функцій?
raconteur

2
О, я бачу, що ти маєш на увазі зараз. Коротка відповідь полягає в тому, що ви не можете, принаймні, не перепрофілювавши SVM, щоб зрозуміти поняття прихильності. SVM визначається з точки зору пар xy, а не впорядкованих пар xy, і тому об'єктивна функція, яку він мінімізує, є функцією зазначених пар. OTOH, ви можете запустити декілька окремих SVM, один із минулим місяцем, один із минулим роком та другий з останніми двома роками - а потім зробити середньозважене серед відповідей, які ви отримаєте назад, виходячи з ваших особистих уподобань щодо останніх vs старі дані (наприклад, 0,7 * минулий місяць + 0,2 * минулий рік + 0,1 * останні 2 роки).
Вільям

@William .. чи маєте ви якусь рекомендацію щодо того, які алгоритми машинного навчання були б найкращими для прогнозування часових рядів (та сама проблема, про яку питав рекоратор), крім SVM? Чи була б відповідь різною, якщо застосовуватись у різних доменних областях? наприклад , ціна акцій проти прогнозування ланцюжка поставок (прогнозування попиту на продукцію ми продаємо) ..
Lam

1

Моя особиста відповідь на поставлене запитання - «так». Ви можете розглядати це як професіонала чи протиправника, що існує нескінченна кількість можливостей для опису минулого. Спробуйте вибрати функції, які відповідають тому, як ви можете коротко описати комусь, що щойно зробив ринок [напр. "Ціна знаходиться на рівні 1,4 "нічого не говорить вам, якщо це не пов'язане з якимось іншим числом]. Щодо цілі СВМ, найпростішими є різниця в цінах та співвідношенні цін протягом двох днів поспіль. Оскільки вони безпосередньо відповідають долі гіпотетичної торгівлі, вони здаються хорошим вибором.

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

Справа в тому, що знижує ефективність перехресної перевірки, якщо поведінка ринку змінюється з часом. Є два можливі способи впоратися з цим. Перший - включити час як особливість (я не вважаю це дуже корисним, можливо, тому, що значення цієї функції в майбутньому все нові). Добре вмотивованою альтернативою є використання перевірки кроку вперед (що означає тестування своєї методології на розсувному вікні часу та тестування її на період безпосередньо після цього вікна. Якщо поведінка з часом змінюється, приказка, приписана Нільсу Бор " Прогнозувати дуже важко, особливо щодо майбутнього "особливо доречно. У літературі є деякі докази того, що поведінка фінансових ринків змінюється з часом, як правило, стає більш ефективною,

Удачі!


Вітаємо на нашому сайті!
kjetil b halvorsen

0

Наведено приклад квантового фінансиста для використання SVM для прогнозування фінансових серій. Її можна було легко перетворити з системи класифікації (Довга / Коротка) в систему регресії.


1
БЛАГОДОВИЙ БОГ, БУДЬ ласка, ніхто не використовує цю стратегію! Ось так починають курити Уолл Ст: початківці трюки :( Найдавніший трюк у книзі - це доопрацювання статистичної моделі за допомогою такої основної технічної аналітики, як RSI, тому новачки думають, що вони вразили золото.
Вільям

1
@Jason з оригінальної публікації "Я також хочу зробити зрозуміти, що я не думаю, що це гарна система". Однак, це хороший приклад того, як підключити векторну машину підтримки до часового ряду.
Зак
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.