我正在尝试对金融时间序列数据进行去噪(逐秒)。我有一个很长的时间序列,但我一直在使用 100,000 次观察来测试小波去噪 (haar) 的工作情况。它没有。
无论我做什么,重建的信号最终总是几乎与原始信号相同。显然,我想保留原始信号,但我觉得这个序列只是没有被去噪——一个金融时间序列,其唯一的噪声出现在几秒钟的分辨率中?此外,即使在最小的时间尺度上,重建图和原始图的图也几乎相同。
我尝试改变母小波、时间序列长度、完成时间序列重建的模式(软与硬),显然,我已经弄乱了阈值本身。我从 sqrt(2*log(len(signal))) 的推荐/标准阈值开始,但这对我几乎没有任何作用,所以我逐渐增加它,直到我达到完全荒谬的 2*len(signal)* *2——它应该使图形变得面目全非,但基本上什么也没做。
WAVELET = "haar"
LEVEL = 2
signal = training_series
mean = signal.mean()
mean_series = [mean] * len(signal)
signal = [a - b for a, b in zip(signal, mean_series)]
coeffs = pywt.wavedec(signal, WAVELET, level=LEVEL)
sigma = mad(coeffs[-LEVEL])
threshold = sigma * np.sqrt(2*np.log(len(signal)))
coeffs[1:] = (pywt.threshold(i, value=threshold, mode="soft" ) for i in coeffs[1:])
reconstructed_signal = pywt.waverec(coeffs, WAVELET)
我预计重建的信号会与原始信号有很大不同(如平滑、去噪、更少……与原始信号相同),但事实并非如此。在最小的尺度上(想想在 100,000 秒的尺度上每 10 或 20 秒一次),有一些非常小的平滑,基本上只是忽略了大小为 0.01 的峰和谷(可能的最小变化),但它几乎可以忽略不计。
我期待一个信号,嗯,我不知道——去噪了?难道我做错了什么?