Как кластеризовать несколько данных даты и времени, чтобы обнаружить шаблоны - PullRequest
0 голосов
/ 12 марта 2020

У меня есть фрейм данных

usd_id   trade_datetime   position
  A     2019/01/01 08:01     1
  A     2019/01/01 08:03     1
  B     2019/01/01 08:03     1
  A     2019/01/01 08:03     1
  C     2019/01/01 08:10     2
  C     2019/01/01 08:10     2
  A     2019/01/01 08:20     2

для каждого user_id, можно сделать n торговых записей. Можно ли кластеризовать эти торговые шаблоны для идентификации похожих пользователей? если да, как выполнять обработку данных?

Я изучил K-средних и KNN раньше, но эти алгоритмы основаны на предположении, что все пользователи имеют одинаковые данные измерений, если мое понимание верно. Погуглили, но напрасно.

В приведенных выше данных user_id A и user_id B должны иметь ближайшее расстояние, чем A- C и B- C, поскольку их время и позиция транзакции больше похожи друг на друга .

Спасибо

1 Ответ

0 голосов
/ 12 марта 2020

Как я вижу, у вас есть несколько вариантов в зависимости от вашей конечной цели.

1. Формат двухмерный:

Для каждого пользователя можно рассчитать разницу между каждым последующим временем транзакции. Это может дать вам вектор для каждого пользователя, для которого вы можете вычислить некоторую особенность, например среднее и квартили.

В результате получается что-то вроде разницы между транзакциями в секундах:

    User_ID    mean_diff_transaction  median_diff_transaction   ...
0      A                 60                      50
1      B                 40                      30

Если ваша функция позиции - это что-то, описывающее «где» была транзакция, вы могли бы различать транзакции только одной и той же позиции ( groupby ваш друг здесь). Предоставление вам двухмерного вектора для каждого пользователя со временем между транзакциями в каждой позиции. Тогда ваши функции также могут быть вычислены по позиции:

    User_ID    mean_diff_transaction_pos1  median_diff_transaction_pos1   ...
0      A                   60                        50
1      B                   40                        30

Если у пользователя нет транзакций в этом месте, установите для него значение по умолчанию, которое будет зависеть от цели и алгоритма, который вы будете использовать чтобы достичь этой цели.

Это представление позволит вам использовать алгоритм classi c, который вы уже использовали, например, KNN

2. Сохранение трехмерных данных (с точки зрения векторного пользователя):

    User_ID      transaction_time       position      
0     A        2019/01/01 00:00:00          1         
1     B        2019/01/01 00:00:00          1          
2     A        2019/01/01 01:00:00          1          
3     B        2019/01/01 01:00:00          2         

Вы можете рассматривать эти данные как график, где ось X - это время (например, отметка каждый день) ) и номер оси Y транзакции. Позволяет вам построить график количества транзакций в день для каждой позиции, чтобы увидеть, например, их «популярность» с течением времени. Тот же подход может быть применен с точки зрения пользователя вместо позиции.

Если вы хотите отслеживать разницу во времени между транзакциями во времени, просто сохраните эту разницу как вектор, что приведет к «виду» набора данных временных рядов.

В зависимости от того, что вы пытаетесь анализировать, данные временных рядов могут позволить вам использовать такие вещи, как сезонная декомпозиция (см. statsmodels в python) и целый ансамбль техник, связанных с временными рядами.

...