Y-debug-sys / Diffusion-TS

[ICLR 2024] Official Implementation of "Diffusion-TS: Interpretable Diffusion for General Time Series Generation"
MIT License
184 stars 26 forks source link

多支股票数据怎么处理 #40

Closed AngerDark01 closed 3 months ago

AngerDark01 commented 4 months ago

作者你好,我看论文里的股票数据只用了单只股票的数据。我想用多个股票数据作为训练数据,但是我看自定义的dataset里好像不支持多个股票数据作为输入。比如我有两支股票,不能把A直接拼接到B股票的后面,把他们合并成一个数据集。 并且我想问一下,你的训练硬件配置以及训练耗时。如方便告知,万分感谢。

Y-debug-sys commented 4 months ago

你好,什么是多支股票,指毫无关系的股票吗?我认为沿着最后一维度拼接是没有问题的。训练在一台3090上完成,所有数据集最长训练时间在一小时左右(repo所用股票数据集12分钟完成),推理速度可以通过减少采样步长和生成批次大小提高。

AngerDark01 commented 4 months ago

就是没什么关系的股票,我有19年-24年的市场上所有的股票数据,我想用这些数据取训练。每个股票都有至少6个特征,后期会看情况增加一些其他特征。不同的股票没法按照时间维度拼接的,在特征的维度拼接会不会太多了。我之前的做法是维护一个数据表和一个索引列表。数据表里按照股票代码和时间两个索引排序。 然后每次取batch的时候会在索引列表里取一个元素。根据索引在原来数据表里找相应数据。我在想一个问题,我的数据是用收益率表示的,收益率序列相对与价格序列相当于做了一个差分。差分之后的数据,用傅里叶变换提取趋势会不会效果打折扣。

Y-debug-sys commented 4 months ago

一切以实验为准,以之前的最高400维数据生成是没有崩溃现象的。这么多毫无关系的股票数据,是想学习一个通用的股票生成模型吗?还是多类别生成模型(即给定类别,生成对应股票)?

AngerDark01 commented 4 months ago

嗯对,想训练一个按不同行业或者不同概念分类的生成模型,不过股票标的之间也不能说是完全没有关系吧。相同行业之间的标的应该也是存在相关性的。

Y-debug-sys commented 4 months ago

好的,明白了。扩散模型的分类生成实际上是一个很成熟的技术,参考 Classifier GuidanceClassifier-Free Guidance 训练。我的建议是:给你的数据打好标签后,按照最高维度填充所有股票,给模型加入额外的标签输入(一层embeding处理后和扩散步一同嵌入即可)生成对应的数据。

AngerDark01 commented 4 months ago

好的,感谢。

AngerDark01 commented 4 months ago

你好,我还想问一下,归一化是对整个数据集做归一化,还是对窗口做归一化。

Y-debug-sys commented 4 months ago

可以分别对各个数据集做,之后再用对应的 scaler 恢复。至于实例归一化和反归一化可以直接加入模型中,相关代码见 RevIN

AngerDark01 commented 4 months ago

实例归一化加入到模型中的话,那我在创建dataset的时候,是不是不需要对数据进行归一化了。

Y-debug-sys commented 4 months ago

我认为原始成千上万的数据范围不利于梯度优化,这里的 trick 主要用于时序的偏移问题。

AngerDark01 commented 4 months ago

如果我的原始数据采用收益率的形式,也就是我的原始数据的特征都是以比例的形式。用成交率,以及高开低收相对前收盘价的收益率作为原始数据。那么是不是不需要对整个数据集进行归一化。但是还有个问题,对高开低收的收益率来说,他实际上相当于一个差分,差分之后的数据会变得平稳,那对模型后面decoder的趋势部分有什么影响。

Y-debug-sys commented 4 months ago

应该是可以的,但是以具体结果为准。如果没有显著趋势和周期性,模型会学习并减少对应成分信息。

AngerDark01 commented 4 months ago

你好,老哥,这个项目有上传到docker吗,我本地虚拟环境可以跑,但是版本和requirement.txt的对不上,在kaggle上按照requirement里面的版本下载,好像有库版本混乱的问题。

Y-debug-sys commented 4 months ago

目前没有 Docker 版本,依赖混乱是指哪些包?既然本地可以跑,试试导出本地的对应包版本到服务器吧。

AngerDark01 commented 3 months ago

你好,想问一下,你们训练股票数据的时候loss最后是多少,我看看和我的结果对比一下。

Y-debug-sys commented 3 months ago

你好,loss大小跟总扩散步数相关,也与模型所负责的生成类别数量相关,均成正比。