我有一个数据框
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-means和KNN,但是这些算法是基于这样的假设:如果我的理解正确,那么所有用户都具有相同的维度数据。谷歌搜索但徒劳。
在上述数据中,user_id A和user_id B的距离应比A-C和B-C最近,因为它们的交易时间和位置彼此更相似。
谢谢
我的观察方式取决于最终目标,您可以有一些选择。
您可以为每个用户计算以下每个交易时间之间的差额。这可以为每个用户提供一个向量,您可以在该向量上计算一些特征,例如均值和四分位数。
导致类似的交易之间以秒为单位的差异:
User_ID mean_diff_transaction median_diff_transaction ...
0 A 60 50
1 B 40 30
[如果您的头寸功能描述的是交易发生的“地点”,则可以只区分相同头寸的交易之间的区别(groupby是您的朋友)。为每个用户提供2D向量,并在每个位置进行两次交易之间的时间。然后,您的特征也可以通过位置来计算:
User_ID mean_diff_transaction_pos1 median_diff_transaction_pos1 ...
0 A 60 50
1 B 40 30
当用户在那个地方没有任何交易时,请将其设置为默认值,这取决于目标和实现该目标所使用的算法。
此表示形式使您可以使用已经使用的经典算法,例如KNN
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轴是交易次数。例如,允许您绘制每个头寸每天交易数量的曲线,以查看其随着时间的“受欢迎程度”。可以从用户的角度而非位置使用相同的方法。
如果要监视事务在时间上的时间差异,只需将此差异保留为矢量,就可以得到“某种”时间序列数据集。
取决于您要分析的内容,时间序列数据可能使您可以使用季节性分解(请参见python中的statsmodels)以及与时间序列相关的整套技术。