Y-debug-sys / Diffusion-TS

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

输出的总是测试集 #33

Closed halblaine closed 2 months ago

halblaine commented 3 months ago
  1. 作者您好!首先感谢您为学术界做出的贡献!其次我在测试模型的时候遇到如下问题

--name test --config_file ./Config/stocks.yaml --gpu 0 --sample 1 --milestone 10 --mode infill --missing_ratio 0.1

  1. 此处stocks数据集维度为 [3686,6],正如您在下图的redme中所言,Testing Dataset的维度为 [(3686-window+1)×proportion,window,6],Diffusion-TS在执行上述的插补任务时,接受的输入是测试集而非原stocks数据集,模型的输出是测试集维度。 image

  2. 能否使Diffusion-TS在执行上述插补任务时,接受原stocks数据集 [3686,6] 作为输入, 输出 [3686×(1+missing_ratio),6] 的数据。在执行预测任务时则输出 [3686+pred_len,6]

  3. 最后我非常感谢您开发和维护这个项目,它对我的学习产生了积极影响。我期待着您的回复。谢谢!

Y-debug-sys commented 3 months ago

你好,如果我没理解错的话, [3686+pred_len,6] 是想要使用整个训练集作为历史信息然后预测?那么[3686×(1+missing_ratio),6] 是什么意思?如果训练集是无缺失的,填充目标是什么?

halblaine commented 2 months ago

您好,感谢您如此及时地回复!我之前表述地不够清楚,我更正如下:

  1. [3686+pred_len,6] 是想要使用整个原stocks数据集(而非训练集)作为历史信息然后预测,训练集应该是 [(3686-window+1)×proportion,window,6]。测试集应该是 [(3686-window+1)×(1-proportion),window,6]。比如您在您的stocks.yaml中配置如下 image 其中window=24,proportion=0.9,那么您在real_datasets.py中使用train, inference = self.__getsamples(self.data, proportion, seed)分割出[(3686-24+1)×0.9,24,6]即[3296,24,6]作为训练集, [(3686-24+1)×(1-0.9),24,6]即 [366,24,6]作为测试集。问题是能否对原stocks数据集[3686,6]做预测生成 [3686+pred_len,6] 呢?

  2. [3686×(1+missing_ratio),6] 是想要使用整个观测值(原stocks数据集,[3686,6])作为条件信息然后进行插补,填充目标实际上是未知的。Diffsuion-TS的插补任务是将观测值按缺失率分离为条件信息和填充目标,并根据条件信息对填充目标插补。比如missing_ratio=0.2时, [366,24,6]作为测试集(同1),先被MASK,再被插补。其中MASK部分即为填充目标,是已知的,插补后输出的数据量仍然是 [366,24,6]。问题是在实际应用中,有历史股票数据集[3686,6],其中某些时刻的数据采集缺失了,已知缺失率是20%,缺失地位置可以人为地确定,或模型自动确定(这个无所谓),关键在于经过插补,能得到[3686×(1+20%),6]数据量地输出。

  3. 我自己目前的想法是在原stocks数据集[3686,6]上利用Diffusion-TS的forward过程解决上述两个问题,奈何能力有限,水平一般,特此向作者请教思路!

Y-debug-sys commented 2 months ago

你好,我认为是思路是可行的,对于所述的两种情况: