Класифікація часових рядів - дуже погані результати


11

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

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

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

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

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


1
Для початку я рекомендую спробувати варіанти наступного.1. Зведені дані про використання за годинами / днями. 2. З даних ваших тренувань накладіть сюжетні графіки цих часових рядів, щоб побачити закономірності в межах двох груп. 3. Вивчіть різні часові ряди / регресійні моделі, які добре відповідають вашим даним. 4. Використовуйте модельні коефіцієнти як функції для свого класифікатора.
ramhiser

Мені подобається ваша техніка вилучення. Я спробую. Я переконався, що мої дані занадто рідкі, щоб знайти зразки, але хто знає. Дякую!
користувач1893354

Відповіді:


13

Я мав досить хороший успіх у застосуванні KNN з динамічним викривленням часу в якості метрики відстані.

Моє дослідження (pdf) свідчить про те, що цей підхід дуже важко перемогти. Нижче наведено схематичну схему з моєї реалізації питоном KNN та DTW на github . Або переглянути в зошиті IPython

KNN та DTW

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


4
Чи можете ви оновити посилання на вашу дослідницьку роботу?
тилапримера


10

Два підходи до класифікації часових рядів

Є два способи вирішення тимчасового структурованого введення для класифікаційних завдань:

  1. Виділена модель часових рядів: алгоритм машинного навчання безпосередньо включає часовий ряд. Я зараховую KNN з моделлю DTW в цій категорії.
  2. Підхід, заснований на особливостях: Тут часові ряди відображаються в іншому, можливо, нижньому розмірі, зображенні. Це означає, що алгоритм вилучення функцій обчислює такі характеристики, як середнє або максимальне значення часового ряду. Потім функції передаються як матриця функцій до "звичайного" машинного навчання, такого як нейронна мережа, випадковий ліс або підтримуюча векторна машина. Цей підхід має перевагу в кращій поясненості результатів. Далі це дозволяє нам використовувати добре розроблену теорію керованого машинного навчання.

У минулому я також успішно використовував KNN з DTW. Однак я майже завжди міг перемогти його точність з моделлю, яка використовує добре розроблені функції. Також KNN з DTW для шкали бінарних класифікацій з O (n_t · m_ {поїзд} · m_ {тест}), при цьому n_t є тривалістю часового ряду, mtrain та mtest - кількість пристроїв у поїзді та випробувальному наборі відповідно . Це означає, що розрахунки займають досить довго ..

Тому я б рекомендував застосовувати підхід, заснований на особливостях.

tsfresh обчислює величезну кількість функцій

Пакет python tsfresh обчислює величезну кількість таких функцій з pandas.DataFrame, що містить часовий ряд. Ви можете знайти його документацію на веб-сайті http://tsfresh.readthedocs.io .

введіть тут опис зображення

Можна спробувати обчислити величезну кількість функцій. Пізніше ви можете відфільтрувати функції за їх значимістю та визначити перспективних кандидатів.

Відмова: Я один з авторів tsfresh.


Велике спасибі за ваш чудовий пост. У мене дійсно невеликий часовий ряд (наприклад, 10 точок даних за часовий ряд). У такому випадку ви рекомендуєте використовувати tsfresh для мого набору даних? Дякую :)
EmJ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.