Можете ли вы использовать динамическое искажение времени (DTW) или другие методы выравнивания временных рядов для данных последовательности событий?

#python #time-series

#python #временные ряды

Вопрос:

У меня есть набор данных, содержащий около 80 000 последовательностей событий.

Каждая последовательность представляет собой список событий, происходящих с шагом времени t.

 example_sequences = [['Start Event','Event 1','Event 5','Event 4]
                     ['Start Event','Event 1', 'Event 7', 'Event 4','Event 3']]
  

Длина последовательностей варьируется в пределах ~ 10-20 событий.

В качестве шага предварительной обработки я хотел бы выровнять эти последовательности перед обучением нейронной сети обнаружению аномалий (здесь я использую Python).

Мы были бы очень признательны за любые советы по библиотекам, репозиториям github, сообщениям в блогах или подобным для выравнивания последовательности событий.

Ответ №1:

Вы не можете использовать алгоритм выравнивания последовательности, такой как динамическое искажение времени, для последовательностей строк. Сначала вы должны преобразовать их в числовые последовательности. Одним из простых способов было бы сопоставить их с помощью dict.

 example_sequences = [['Start Event','Event 1','Event 5','Event 4'],
                     ['Start Event','Event 1', 'Event 7', 'Event 4','Event 3']]

m = {
    'Start Event':0,
    'Event 1':1,
    'Event 2':2,
    'Event 3':3,
    'Event 4':4,
    'Event 5':5,
    'Event 6':6,
    'Event 7':7,
}

num_sequences = [[m[item] for item in sublist] for sublist in example_sequences]
print(num_sequences)

[[0, 1, 5, 4], [0, 1, 7, 4, 3]]
  

Теперь у вас есть числовые последовательности, и вы можете использовать методы выравнивания последовательности для них.

Комментарии:

1. Возможно ли также применить к векторам с однократным горячим кодированием? Потому что здесь, я думаю, событие 0 будет ближе к 1, чем к событию 5? Что не обязательно так.

2. Я не уверен, что массивы с однократным горячим кодированием являются лучшими входными данными для DTW. Однако вы можете поэкспериментировать. В общем, вы должны обладать знаниями предметной области, чтобы оценить, как наилучшим образом перевести строки в numbers. Суть остается прежней; вы можете использовать DTW только для числовых последовательностей, но не для строковых.