Последовательный паттерн майнинг - как подготовить данные

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

Данные выдержки (полные данные ниже):

    a           b           c           d           e           outcome
0   2005-08-16  2005-08-16  NaT         2005-08-16  2005-08-16  OUT
1   2004-07-16  2004-08-16  2004-09-16  NaT         2004-09-16  OUT
2   2005-09-16  2005-10-16  2008-01-16  2006-06-16  2006-06-16  ACTIVE
3   2002-05-16  NaT         2005-02-16  2005-03-16  2005-01-16  OUT
4   2005-06-16  2005-06-16  2005-06-16  2007-12-16  2005-06-16  WIN
...

a,b,c,d,e представлять действия с соответствующей датой в строках. колонка outcome имеет три возможных класса результатов. В последующем создается новый DataFrame, который преобразует данные в последовательности, разделенные или объединенные на основе тех же событий (во времени).

Воспроизводимый код с данными:

Код:

import pandas as pd
import numpy as np
from datetime import datetime
from datetime import timedelta

#Load Data
df = pd.read_csv('https://pastebin.com/raw/ZKw2fefi')    
df

# Select everything but outcome
cols = [col for col in df.columns if col != 'OUTCOME']
df1 = df.loc[:, cols]

# Rearrange DataFrame, merge or split
unstacked = df1.unstack().reset_index()
sequences = defaultdict(list)

for i, g in unstacked.groupby([0, 'level_1']):
    sequences[i[1]].append(','.join(g.level_0))

n_seq = len(max(sequences.values(), key=len))

for k in sequences:
    while len(sequences[k]) < n_seq:
        sequences[k].append('')

columns = ['Action{}'.format(i) for i in range(1, n_seq + 1)]
out = pd.DataFrame(list(sequences.values()), columns=columns)

# Add outcome again
final = pd.concat([out, df['OUTCOME']], axis=1)
final.head(5)

Выход 1:

    Action1   Action2   Action3   Action4   Action5  OUTCOME
0   a,b,d,e                                          OUT
1   a         b         c,e                          OUT
2   a         b         d,e       c                  WIN
3   a         e         c         d                  OUT
4   a,b,c,e   d                                      ACTIVE

Применение кодировщика меток (он создаст уникальный идентификатор для сопутствующих последовательностей!)

# Label encoder
from sklearn import preprocessing
le = preprocessing.LabelEncoder()
final = final.apply(le.fit_transform)
final.head(5)

Выход 2:

    Action1 Action2 Action3 Action4 Action5 OUTCOME
0   4       0       0       0       0       1
1   0       3       6       0       0       1
2   0       3       8       2       0       2
3   0       12      4       4       0       1
4   3       11      0       0       0       0

Вопрос:

Было бы хорошо подать эти данные в модель машинного обучения, где Action1-Action5 - это матрица функций? Я считаю, что использование уникального идентификатора не является хорошим решением. Альтернатива - преобразовать три сопутствующих элемента в три последовательности действий ({a,b,c} -> {a},{b},{c} также не имеет большого смысла, так как структура данных будет тогда подразумевайте заказ, которого там нет.

Следовательно: Каков наилучший способ взаимодействия по возможным комбинациям и какая структура данных будет наилучшей для классификатора машинного обучения, при условии, что все последовательности имеют разную длину и совместное вхождение?

0 ответов

Другие вопросы по тегам