白噪声是时间序列预测中的一个重要概念。
如果一个时间序列是白噪声,那么它是一系列随机数,无法预测。如果预测误差序列不是白噪声,则表明可以通过改进预测模型来提高性能。
在本教程中,您将使用 Python 了解白噪声时间序列。
完成本教程后,您将了解:
- 白噪声时间序列的定义及其重要性。
- 如何检查您的时间序列是否为白噪声。
- 用于识别 Python 中白噪声的统计数据和诊断图。
开始您的项目,阅读我的新书《Python 时间序列预测》,其中包含分步教程和所有示例的Python 源代码文件。
让我们开始吧。
- 2019年9月更新:更新了使用最新API的示例。
- 2019 年 10 月更新:使白噪声的检查更清晰(感谢 Samuel Corradi)

使用 Python 的白噪声时间序列
照片由 Dan Eckert 拍摄,保留部分权利。
什么是白噪声时间序列?
时间序列可能是白噪声。
如果时间序列中的变量是独立同分布的,并且均值为零,则该时间序列是白噪声。
这意味着所有变量都具有相同的方差(sigma^2),并且每个值与序列中的所有其他值都具有零相关性。
如果序列中的变量是从高斯分布中抽取的,则该序列称为高斯白噪声。
为什么它很重要?
白噪声是时间序列分析和预测中的一个重要概念。
它因两个主要原因而重要:
- 可预测性:如果您的时间序列是白噪声,那么根据定义,它是随机的。您无法对其进行合理建模和预测。
- 模型诊断:时间序列预测模型的误差序列理想情况下应为白噪声。
模型诊断是时间序列预测中的一个重要领域。
时间序列数据预计会在潜在过程产生的信号之上包含一些白噪声分量。
例如
|
1 |
y(t) = signal(t) + noise(t) |
一旦时间序列预测模型完成预测,就可以收集和分析这些预测。误差序列理想情况下应为白噪声。
当预测误差为白噪声时,这意味着时间序列中的所有信号信息已被模型利用来做出预测。剩下的是无法建模的随机波动。
预测模型并非白噪声的迹象表明可能进一步改进预测模型。
停止以**慢速**学习时间序列预测!
参加我的免费7天电子邮件课程,了解如何入门(附带示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
您的时间序列是白噪声吗?
如果以下一个或多个条件成立,则您的时间序列可能不是白噪声:
- 均值/水平是否不为零?
- 均值/水平是否随时间变化?
- 方差是否随时间变化?
- 值是否与滞后值相关?
您可以用来检查时间序列是否为白噪声的一些工具是:
- 创建折线图。检查诸如均值、方差变化或滞后变量之间明显关系等总体特征。
- 计算汇总统计信息。将整个序列的均值和方差与序列中有意义的连续块(例如,日、月或年)的均值和方差进行比较。
- 创建自相关图。检查滞后变量之间的总体相关性。
白噪声时间序列示例
在本节中,我们将使用 Python 创建一个高斯白噪声序列并执行一些检查。
在实践中创建和审查白噪声时间序列非常有用。它将提供参考框架以及示例图和统计测试,您可以在自己的时间序列项目中进行比较,以检查它们是否为白噪声。
首先,我们可以使用random模块中的gauss()函数创建 1000 个随机高斯变量的列表。
我们将从均值(mu)为 0.0,标准差(sigma)为 1.0 的高斯分布中抽取变量。
创建后,我们可以将其包装在 Pandas Series 中以方便使用。
|
1 2 3 4 5 6 7 8 9 |
from random import gauss from random import seed from pandas import Series from pandas.plotting import autocorrelation_plot # 设定随机数生成器种子 seed(1) # 创建白噪声序列 series = [gauss(0.0, 1.0) for i in range(1000)] series = Series(series) |
接下来,我们可以计算并打印一些汇总统计信息,包括序列的均值和标准差。
|
1 2 |
# 汇总统计 print(series.describe()) |
鉴于我们在抽取随机数时定义了均值和标准差,因此不应有任何意外。
|
1 2 3 4 5 6 7 8 |
count 1000.000000 mean -0.013222 std 1.003685 min -2.961214 25% -0.684192 50% -0.010934 75% 0.703915 max 2.737260 |
我们可以看到均值接近 0.0,标准差接近 1.0。鉴于样本量较小,预期会有一定的方差。
如果我们有更多数据,将序列分成两半并计算和比较每个子序列的汇总统计信息可能会更有趣。我们预计每个子序列的均值和标准差会相似。
现在我们可以创建一些图,首先是序列的折线图。
|
1 2 3 |
# 线图 series.plot() pyplot.show() |
我们可以看到它确实看起来像是随机序列。

白噪声序列折线图
我们还可以创建直方图并确认分布是高斯分布。
|
1 2 3 |
# 直方图 series.hist() pyplot.show() |
确实,直方图显示了标志性的钟形曲线。

白噪声序列直方图
最后,我们可以创建相关图并检查与滞后变量的任何自相关。
|
1 2 3 |
# 自相关 autocorrelation_plot(series) pyplot.show() |
相关图没有显示任何明显的自相关模式。
有一些高于 95% 和 99% 置信水平的尖峰,但这是统计上的巧合。

白噪声序列相关图
为完整起见,下面提供了完整的代码列表。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
from random import gauss from random import seed from pandas import Series from pandas.plotting import autocorrelation_plot from matplotlib import pyplot # 设定随机数生成器种子 seed(1) # 创建白噪声序列 series = [gauss(0.0, 1.0) for i in range(1000)] series = Series(series) # 汇总统计 print(series.describe()) # 线图 series.plot() pyplot.show() # 直方图 series.hist() pyplot.show() # 自相关 autocorrelation_plot(series) pyplot.show() |
进一步阅读
本节列出了一些关于白噪声和白噪声时间序列的进一步阅读资源。
- 白噪声过程,第 28 页,《时间序列分析:预测与控制》。
- 第 4.2 节 白噪声,《R 入门时间序列》。
- 白噪声(维基百科)
- 高斯噪声(维基百科)
总结
在本教程中,您了解了 Python 中的白噪声时间序列。
具体来说,你学到了:
- 白噪声时间序列的定义是均值为零、方差恒定且相关性为零。
- 如果您的时间序列是白噪声,则无法预测;如果您的预测残差不是白噪声,您可能可以改进您的模型。
- 您可以用于检查时间序列是否为白噪声的统计数据和诊断图。
您对本教程有任何疑问吗?在下面的评论中提问,我会尽力回答。







在我检查白噪声之前,是否需要去除数据的趋势?谢谢。
是的,问得好!
零均值是白噪声序列的要求。但上述文章说的是相反的。请澄清。
我在文章中提到白噪声的均值为零。
你好,
我对如何计算移动平均模型的误差项有一个疑问。在大多数网站上,它被提及为 yactual-yhat 之间的差值,但如果我尝试使用误差项来找到 yhat,我该如何获得 yhat 的值,直到我预测它?
请提供关于如何计算移动平均时间序列中误差项的参考。
提前感谢,
Jagadish V.
Gradvalley.in 研究员。
在 ARIMA 中,MA 指的是对残差误差序列进行建模。在此了解更多信息:
https://machinelearning.org.cn/model-residual-errors-correct-time-series-forecasts-python/
你好!在“您的时间序列是白噪声吗?”部分,您列出了三个问题供我们检查时间序列是否为白噪声,第一个问题是“您的序列是否具有零均值?”。根据这部分的含义,如果我的数据均值为 0,那么它不是白噪声。我认为这里有一些矛盾,因为您也提到了白噪声的均值是 0。
抱歉,我不明白。您能详细说明一下吗?
亲爱的 Jason,
根据您的文章,我是否可以得出您的时间序列不是白噪声?因为均值非零,只是接近零(均值 = -0.013222),并且有些尖峰高于 95% 和 99% 的置信水平。
请帮助确认是否正确。
嗨 Laksmey…以下内容可能很有趣:
https://towardsdatascience.com/how-to-detect-random-walk-and-white-noise-in-time-series-forecasting-bdb5bbd4ef81
你好,
我正在做一个项目,我有一个事件日志,我想知道是否可以确定它是否是白噪声。所以我想知道过程活动是否可预测。如果是,我该如何做到?
提前感谢
也许可以尝试教程中列出的一些方法?
是哪个教程,先生?
嗨,Jason,
我对计量经济学和时间序列比较陌生。我有一些关于您所写内容的疑问。
您说“这意味着所有变量都具有相同的方差(sigma^2),并且每个值都与其他序列中的所有其他值具有零相关性。”
我认为不与其他自变量相关是一件好事,因为它避免了多重共线性。
另外,您说“方差是否随时间变化?”。我认为对于时间序列分析,您需要方差恒定才能实现平稳。如果我错了,请纠正我,但我认为在进行时间序列分析之前,您必须将非平稳数据转换为平稳形式(也许通过差分)?但“方差随时间变化”会不会违反平稳性?
感谢您的帮助!🙂
不,在时间序列中,我们希望变量与先前的时间步长存在相关性,这告诉我们有一些线性关系可以学习。
方差可以改变,我们必须进行幂变换使其平稳。但是当我们查看噪声时,我们正在检查是否存在任何模式。
嗨,Jason,
感谢您的帖子,非常有帮助。
我理解数据平稳是预测所必需的。这就是为什么我们需要对包含趋势或季节性的数据进行差分,使其平稳(当我们在图表中查看时,均值恒定,方差恒定)。现在,数据变成了白噪声(均值恒定,方差恒定)?但随后您又说我们无法预测白噪声序列。
所以这让我很困惑。如果我有什么误解,请纠正我。
非常感谢您的帮助!
想法是,在去除趋势和季节性后,仍然存在一些信号。如果没有,那么您的工作就完成了——您可以使用线性趋势和季节性来建模您的序列。
所以我们可以得出结论,如果我们的建模后误差序列不是白噪声,我们就需要努力改进我们的模型。
如果它是白噪声,那么我们就提取了数据集中的基本信息,并且我们的模型包含了这些信息。
正确,如果存在剩余的信号,那么我们可以对其进行建模。
嗨,Jason,
假设我们想对一个时间序列数据集进行分类。
我们是否有类似的方法(将预测残差与白噪声进行比较)来知道我们的模型可以改进?
因为对于分类,我们没有预测残差……
谢谢!
对于时间序列分类?不行。您可以使用混淆矩阵。
https://machinelearning.org.cn/confusion-matrix-machine-learning/
谢谢您的帮助!
不客气。
您写道:“如果出现以下任一情况,您的时间序列不是白噪声
– 您的序列是否具有零均值?”
这是对的吗?
谢谢!
我已经写得更清楚了,感谢您的指点!
嗨,Jason,
感谢您的帖子。非常天真的问题:我想知道是否有办法评估机器学习模型的“重要变量”,添加白噪声并测试变量的稳健性(它们是噪声还是不是)。如果有,是否有任何 R 包(带有蒙特卡洛模拟)?
不客气。
思考得很好!
是的,这几乎是置换重要性计算的基础。
https://scikit-learn.cn/stable/modules/permutation_importance.html
我认为我更喜欢您的方法,动手写代码吧!
您能否就提高数据频率给出一些见解,例如,我有 GDP 数据是年度的,我想将其频率提高到每日。您是否知道如何使用噪声来实现这一点?
也许您可以使用插值。
https://machinelearning.org.cn/resample-interpolate-time-series-data-python/
感谢您的解释。我一直在阅读有关时间序列预测的很多内容,其中大多数论文都强调预测误差必须是正态分布的。
说到预测误差,白噪声误差项怎么样?我猜白噪声不符合误差的正态分布。
最重要的是,任何时间序列预测模型的想法都是让误差项完全是白噪声?这样我们就涵盖了预测变量中的所有因素/关系,而唯一的误差就是白噪声。
Forecast function = signal + white noise
信号包含残差(可减少的误差),白噪声是不可减少的误差?
所以他们提到的误差正态性仅针对残差误差(可减少的误差)
并且不包括白噪声?
您能否确认以上内容?
问得好,白噪声是无法建模的,它被称为“不可约误差”。
您能否举一个白噪声的实际例子?这将对我有所帮助。
电视屏幕上的静电就是白噪声。
你好
谢谢您,先生,我想了解白噪声在工业中的重要性。
一般来说,这是一个需要了解的重要概念。
白噪声对纺织业等行业有什么影响?
所有时间序列都会有白噪声。
不确定问题是否合理,抱歉。
非常好的文章 Jason Brownlee,
我通过模型诊断测试检查了我的 SARIMA 模型/时间序列分析中的白噪声,它具有均值接近零、无相关性、方差恒定和正态分布的特性。
这是否意味着我的数据是白噪声,并且这个拟合模型是可接受的?
谢谢。
是的,这是一个很好的检查,并且可能是您模型拟合良好的另一证据。
“预测模型不是白噪声的迹象表明可能进一步改进预测模型。”这应该是预测误差而不是预测,对吗?
是的。
你好,
您是否知道通过近似高斯信号来生成连续白噪声?请详细说明。
是的,高斯随机数。
https://machinelearning.org.cn/how-to-generate-random-numbers-in-python/
亲爱的 Jason,
我有一个白噪声时间序列数据。如果我不能进行预测,您能否推荐其他技术来正确分析和呈现我的数据?非常感谢。
白噪声没有什么可分析的。它只是噪声。但本帖中的技术可以帮助您识别时间序列是否为白噪声。
很棒的教程!
谢谢!
感谢您的反馈和好话 Chen!
此致,
“如果分段的均值与全局均值差异很大,则该序列不是白噪声”。对吗?
如果 10-15 个分段中只有 1 或 2 个分段的均值差异很大怎么办?
嗨 Ayush…非常好的问题!在这种情况下,确定可能扭曲结果的异常值将是有益的。
https://machinelearning.org.cn/model-based-outlier-detection-and-removal-in-python/
这些项不一定 i.i.d.,但它们必须不相关。(请注意,零相关不一定意味着独立,但独立确实意味着零相关。)
感谢您的反馈 Daan de Jong!
嗨,Jason,
首先:祝贺您发表了非常有趣且有用的文章。
我的挑战
您提到分析白噪声时间序列没有意义。但是,据我所知,检查两个或多个过去时间序列之间的相关性/线性回归/互相关可能很有用,而且对于它来说是必须的,因为包括自相关在内的任何组件都可能误导分析。
您对此有何看法/经验?
提前致谢。
Nandor
嗨 Nandor…你说得对。必须识别和理解白噪声。一旦将其识别并与所需的时间序列数据区分开来,用这部分数据进行预测通常不被认为是有用的实践。
亲爱的 Jason,
根据您的文章,我是否可以得出您的时间序列不是白噪声?因为均值非零,只是接近零(均值 = -0.013222),并且有些尖峰高于 95% 和 99% 的置信水平。
请帮助确认是否正确。