📢 转载信息
原文链接:https://www.kdnuggets.com/time-series-and-trend-analysis-challenge-inspired-by-real-world-datasets
原文作者:Nate Rosidi
作者图片 | Canva
# 引言
时间序列数据无处不在。股价每日跳动。气温不断变化。网站流量会激增和崩溃。大多数人绘制一条线,然后就停止了。
但一条图表无法告诉你的是:趋势是在加速?减速?还是即将完全反转?
在本文中,我们将使用三种互补的技术来分析真实的通胀预期:移动平均线、同比变化和布林带。
作者图片
每种方法都会对相同的数据回答不同的问题。移动平均线揭示趋势方向,同比变化突出动量变化,而布林带则揭示极端波动的时期。
我们将使用这些技术来分析2020年10月至2025年10月的5年通胀数据趋势。
# 了解我们的数据集:解码10年期盈亏平衡通胀率
要理解我们的数据集,我们首先需要了解其构建的指标:10年期盈亏平衡通胀率(T10YIE)。
T10YIE代表市场对未来十年的通胀预期。简单的计算方法是:用普通国债收益率减去抗通胀国债收益率。
// 这意味着什么?
如果T10YIE = 2.5%,则市场预期未来10年的平均年通胀率为2.5%。数值越高意味着通胀预期越强。数值越低则意味着通胀预期较弱或存在通缩担忧。
// 为什么经济学家和美联储像看猎鹰一样关注这个利率
美联储密切关注这一指标。盈亏平衡利率的上升表明通胀担忧可能会促使美联储加息。急剧下降则可能预示着经济衰退的担忧或通货紧缩的压力。
// 我们的数据一览:5年的通胀预期(2020-2025年)
现在我们将使用这个数据集。
截图 | FRED
点击“下载”将文件保存到您的计算机。
如果您有兴趣探索类似的真实世界数据集并练习数据分析和可视化,请查看StrataScratch。这是一个用于访问金融、技术和公共数据源中使用的真实数据集的平台。
// 熟悉数据:结构、来源和汇总统计数据
以下是有关我们数据集的一些信息:
- 来源:圣路易斯联邦储备银行经济数据(FRED)。
- 时间范围:2020年10月 - 2025年10月(5年)。
- 频率:每日观测。
- 总观测次数:1,305个数据点。
- 范围:1.64% 至 3.02%。
- 平均值:2.33%。
让我们读取这个数据集并查看前几行。代码如下:
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns df= pd.read_csv("T10YIE.csv") df.head()
输出如下:
这是一个简单的数据集,只包含两列:observation_date(观测日期)和 T10YIE(10年期盈亏平衡通胀率)。
# 趋势分析:三种技术,洞察时间序列
我们将从移动平均线技术开始。
// 技术1:移动平均线
移动平均线可以平滑短期波动,揭示潜在趋势。例如,取30天移动平均线。它计算过去30天的平均值。结果是过滤掉每日噪音的一条更平滑的线。
金融市场是混乱的。每日利率会因新闻头条而飙升。它们会因财报而下跌。地缘政治事件会让它们横向波动。移动平均线可以穿透所有这些干扰,向您展示混乱之下实际的趋势方向。
类型:
- 短期MA(30天):捕捉近期变化。
- 长期MA(90天):显示更广泛的趋势方向。
- 交叉:当短期MA向上穿过长期MA时 = 上升趋势信号。
代码如下:
df['T10YIE'] = df['T10YIE'].ffill() df['MA_30'] = df['T10YIE'].rolling(window=30).mean() df['MA_90'] = df['T10YIE'].rolling(window=90).mean() plt.figure(figsize=(15, 7)) plt.plot(df.index, df['T10YIE'], label='每日利率', alpha=0.4, linewidth=0.8, color='gray') plt.plot(df.index, df['MA_30'], label='30日MA', linewidth=2, color='blue') plt.plot(df.index, df['MA_90'], label='90日MA', linewidth=2, color='red') plt.axvspan(0, 200, color='palegreen', alpha=0.3, label='第一阶段:复苏') plt.axvspan(200, 500, color='lightcoral', alpha=0.3, label='第二阶段:波动') plt.axvspan(500, 1000, color='lightblue', alpha=0.3, label='第三阶段:下跌') plt.axvspan(1000, df.index[-1], color='plum', alpha=0.3, label='第四阶段:稳定') plt.title('盈亏平衡通胀率及高亮阶段', fontsize=14, fontweight='bold') plt.ylabel('通胀率 (%)') plt.xlabel('日期') plt.grid(True, alpha=0.3) plt.legend(loc='upper right') plt.tight_layout() plt.show()
输出如下:
// 结果与解读
移动平均线揭示了五年通胀预期的不同模式。
第一阶段:急剧复苏(第0-200天)
两条平均线均从1.7%急剧攀升至2.4%。30日MA攀升速度更快。该时期捕捉了新冠疫情后的经济重启。大规模的财政刺激推动通胀预期向上。
第二阶段:高波动期(第200-500天)
每日利率在第400天左右飙升至3.0%。30日MA达到2.9%。这与2022年通胀激增相吻合。供应链中断发生。俄罗斯入侵乌克兰。能源价格爆炸式上涨。
第三阶段:下跌期(第500-1000天)
30日MA急剧向下趋势,接近第1000天时降至2.2%。美联储在2022年和2023年大幅加息。随着政策奏效,通胀预期降温。
第四阶段:近期稳定期(第1000-1300天)
30日MA徘徊在2.3%至2.4%左右。波动极小。市场表现出信心,认为通胀已接近美联储2%的目标。加息暂停。
关键见解
30日MA提早捕捉到了每一个转折点。当它在2021年初急剧上升时,通胀飙升随之而来。当它在2022年中期下降时,降温开始出现。目前的稳定表明市场认为通胀冲击已经过去。
// 技术2:同比变化
同比(YoY)变化将当前值与一年前的同一天进行比较。它回答了:“通胀预期比12个月前是更高还是更低?”
这消除了季节性噪音,显示出纯粹的方向动量。正值=同比预期上升。负值=同比预期下降。零=趋势持平。
计算同比变化的公式如下,其中 $V_t$ 是当前值,$V_{t-365}$ 是距一年前的同一天(约252个交易日)的值:
$$
\text{YoY Change} = V_t - V_{t-365}
$$
在代码中,它看起来像这样:
import pandas as pd import matplotlib.pyplot as plt df['T10YIE'] = df['T10YIE'].ffill() # 基于交易日(每年约252天)计算差值 df['YoY_Change'] = df['T10YIE'].diff(252) fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(14, 10), sharex=True) ax1.plot(df.index, df['T10YIE'], color='blue', linewidth=1) ax1.set_ylabel('通胀率 (%)') ax1.set_title('盈亏平衡通胀率(原始)', fontsize=12, fontweight='bold') ax1.grid(True, alpha=0.3) ax2.plot(df.index, df['YoY_Change'], color='darkred', linewidth=1.5) ax2.axhline(y=0, color='black', linestyle='--', linewidth=1.5, alpha=0.7) ax2.fill_between(df.index, df['YoY_Change'], 0, where=(df['YoY_Change'] > 0), color='green', alpha=0.3, label='YoY上升') ax2.fill_between(df.index, df['YoY_Change'], 0, where=(df['YoY_Change'] <= 0), color='red', alpha=0.3, label='YoY下降') ax2.set_ylabel('YoY 变化 (%)') ax2.set_xlabel('日期') ax2.set_title('通胀预期的同比变化', fontsize=12, fontweight='bold') ax2.grid(True, alpha=0.3) # 第一个绿色区域(第250-500天) ax1.axvspan(250, 500, color='palegreen', alpha=0.4, label='第一个绿色区域') ax2.axvspan(250, 500, color='palegreen', alpha=0.4) # 红色区域(第500-1000天) ax1.axvspan(500, 1000, color='lightcoral', alpha=0.4, label='红色区域') ax2.axvspan(500, 1000, color='lightcoral', alpha=0.4) # 第二个绿色区域(第1000-1300天) ax1.axvspan(1000, df.index[-1], color='mediumaquamarine', alpha=0.4, label='第二个绿色区域') ax2.axvspan(1000, df.index[-1], color='mediumaquamarine', alpha=0.4) ax1.legend(loc='upper left') ax2.legend(loc='upper left') plt.tight_layout() plt.show()
输出如下:
// 结果与解读
同比变化图将通胀预期划分为绿色和红色区域。绿色表示加速,红色表示减速。这揭示了原始利率图表完全错过的动量变化。
第一个绿色区域(第250-500天)
通胀预期快速上升。同比变化达到峰值+1.0%。这个时期是2021年至2022年。供应链崩溃。刺激资金涌入经济。俄罗斯入侵乌克兰。能源价格爆炸式上涨。
红色区域(第500-1000天)
预期急剧下降。同比变化降至-0.75%。美联储在2022年和2023年大幅加息。市场相信通胀会降温。他们是对的。
第二个绿色区域(第1000-1300天)
温和的正向变化回归。在+0.1%和+0.3%之间波动。预期停止下降,开始稳定在高于前一年的水平。这表明正在恢复正常,而不是恐慌。
未来信号
最近的绿色区域与2022年的激增相比规模较小。YoY变化低于+0.25%?预期保持锚定。持续高于+0.5%?这将预示着值得关注的新一轮通胀担忧。
// 技术3:布林带(波动包络线)
布林带使用标准差在移动平均线周围创建上限和下限。在波动时期,带会扩张;在平静时期,带会收缩。
它显示了通胀预期何时“正常”(带内)与“极端”(带外)。当利率触及上限时,它异常高。当触及下限时,它异常低。
结构:
- 中轨:20日移动平均线。
- 上轨:中轨 + (2 × 标准差)。
- 下轨:中轨 - (2 × 标准差)。
创建的范围意味着95%的数据应该落在界限内。这可以正式表示为:
$$
\text{Upper} = \mu_{20} + (2 \times \sigma_{20})
$$
$$
\text{Lower} = \mu_{20} - (2 \times \sigma_{20})
$$
代码如下:
df['T10YIE'] = df['T10YIE'].ffill() window = 20 df['BB_Middle'] = df['T10YIE'].rolling(window=window).mean() df['BB_Std'] = df['T10YIE'].rolling(window=window).std() df['BB_Upper'] = df['BB_Middle'] + (2 * df['BB_Std']) df['BB_Lower'] = df['BB_Middle'] - (2 * df['BB_Std']) plt.figure(figsize=(15, 7)) plt.plot(df.index, df['T10YIE'], label='每日利率', color='black', linewidth=0.8) plt.plot(df.index, df['BB_Middle'], label='20日MA', color='blue', linewidth=1.5) plt.plot(df.index, df['BB_Upper'], label='上轨', color='red', linewidth=1, linestyle='--') plt.plot(df.index, df['BB_Lower'], label='下轨', color='green', linewidth=1, linestyle='--') plt.fill_between(df.index, df['BB_Upper'], df['BB_Lower'], alpha=0.1, color='gray') plt.axvspan(350, 450, color='gold', alpha=0.3, label='带扩张(波动率↑)') plt.axvspan(800, 1200, color='lightblue', alpha=0.3, label='带收缩(波动率↓)') plt.axvspan(190, 210, color='lightcoral', alpha=0.5, label='上轨突破(约第200天)') plt.axvspan(390, 410, color='lightcoral', alpha=0.5, label='上轨突破(约第400天)') plt.axvspan(1040, 1060, color='palegreen', alpha=0.5, label='下轨触及(约第1050天)') plt.title('盈亏平衡通胀率及布林带与关键事件', fontsize=14, fontweight='bold') plt.ylabel('通胀率 (%)') plt.xlabel('日期') plt.grid(True, alpha=0.3) plt.legend(loc='upper left') plt.tight_layout() plt.show()
输出如下:
// 结果与解读
布林带确定了通胀预期何时处于极端状态与正常状态。
带扩张(第350-450天)
随着日利率反复突破上轨,达到3.0%,界限急剧扩大。该时期捕捉了2022年通胀恐慌和俄乌战争期间市场波动达到顶峰的时期。
上轨突破
多次触及上轨(第200天、第400天)表明市场恐慌,预期跳出正常范围。每次突破都预示着通胀担忧正在加速。
带收缩(第800-1200天)
随着利率保持在界限内,波动性显着缩小,因为美联储加息奏效,市场达成共识。
下轨触及(第1050天)
利率短暂触及下轨2.05%,表明在2023年末衰退担忧期间存在异常悲观情绪。
未来信号
当前的窄带和稳定的利率(2.35%)表明市场行为正常。如果出现新的上轨突破,超过2.5%,将预示着新的通胀担忧。
# 不同的技术,不同的故事
趋势分析并非旨在预测未来;而是理解数据在告诉你什么。2020年至2025年的10年期盈亏平衡通胀率使用每种技术揭示了不同的模式。
即使像俄罗斯入侵乌克兰或能源危机这样的全球事件影响了所有分析,每种技术对它们影响的解释也不同。移动平均线可能会显示渐进的趋势转变,同比变化可能会突出急剧的动量摆动,而布林带可能会将同一时期视为波动性的激增。
这就是为什么选择趋势分析技术很重要;它决定了你如何看待数据中的故事。同样的事件,根据你使用的分析视角,可能看起来像是复苏、不稳定或正常化。
# 结论
真正的教训不是哪种技术最好;而是知道何时使用哪一种。这三种方法可用于股票价格、网站流量、销售数据或任何随时间变化的指标。模式就在那里。你只需要正确的工具来看到它们。
换句话说,数据很少只用一种声音说话。你选择的方法决定了你听到的信息。这就是为什么趋势分析既关乎解释,也关乎计算。
🚀 想要体验更好更全面的AI调用?
欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。
评论区