Я работаю над проблемой классификации временных рядов, когда вводом являются данные об использовании голоса во временных рядах (в секундах) за первые 21 день использования учетной записи мобильного телефона. Соответствующей целевой переменной является ли эта учетная запись отменена в диапазоне 35-45 дней. Так что это проблема бинарной классификации.
Я получаю очень плохие результаты от всех методов, которые я пробовал до сих пор (в разной степени). Сначала я попробовал классификацию k-NN (с различными модификациями) и получил очень плохие результаты. Это привело меня к извлечению признаков из временного ряда - то есть среднего значения, дисперсии, максимума, минимума, дней с полным нулем, дней с полным нулевым трейлингом, разницы между первым полусредним и вторым полусредним и т. Д. дни с нулями и общее количество дней с трейлингом (с использованием нескольких алгоритмов классификации). Это показало лучшее, но выступление было не очень хорошим.
Моя следующая стратегия состояла в том, чтобы пересмотреть негативные примеры в моем тренировочном наборе, так как их было очень мало. Это привело к более правильному прогнозу отмены, но за счет большего количества ложных срабатываний.
Я начинаю думать, что, возможно, сами данные использования временных рядов просто не очень предсказуемы (хотя здравый смысл говорит, что так и должно быть). Возможно, есть какая-то скрытая переменная, которую я не рассматриваю. Просмотр данных также показывает странное поведение. то есть некоторые примеры показывают очень небольшое или уменьшающееся использование (или иногда вообще ничего) и не отменяют, а некоторые показывают увеличение использования, которое отменяет. Возможно, это противоречивое поведение не создает четкой границы решения для классификатора.
Другим возможным источником ошибки является тот факт, что многие обучающие примеры очень редки (например, много дней с использованием 0). Одна идея, которую я еще не попробовал, - это разбить временные ряды на сегменты и создать некоторые функции таким образом, но я не возлагаю больших надежд.
источник
Ответы:
Я довольно успешно применял KNN с динамическим искажением времени в качестве метрики расстояния.
Мое исследование (pdf) показывает, что этот подход очень трудно победить. Ниже приведена схема из моей реализации на Python KNN и DTW на github . Или просмотреть в IPython Notebook
Если вы обучаете массиву данных очень большого размера, я предлагаю выполнить иерархическую кластеризацию матрицы расстояний. Затем выполните выборку из желаемых кластеров, чтобы получить меньший набор данных для обучения. Это
hclust
обеспечит наличие у вас временных рядов, которые представляют широкий диапазон характеристик временных рядов в ваших данных.источник
Два подхода к классификации временных рядов
Есть два способа справиться с временным структурированным вводом для задач классификации:
В прошлом я также успешно развертывал KNN с DTW. Тем не менее, я почти всегда был в состоянии превзойти его точность с моделью, которая использует хорошо разработанные функции. Кроме того, KNN с DTW для двоичных классификаций масштабируется с O (n_t · m_ {train} · m_ {test}), где n_t - длина временного ряда, mtrain и mtest - количество устройств в наборе train и test соответственно. , Это означает, что расчеты занимают довольно много времени ..
Поэтому я бы порекомендовал использовать функциональный подход.
Цфреш рассчитывает огромное количество функций
Пакет python tsfresh вычисляет огромное количество таких функций из pandas.DataFrame, содержащей временные ряды. Вы можете найти его документацию на http://tsfresh.readthedocs.io .
Вы можете попробовать это, чтобы рассчитать огромное количество функций. Позже вы сможете отфильтровать функции по их значимости и выявить перспективных кандидатов.
Отказ от ответственности: я один из авторов tsfresh.
источник