python变化点分析(Change Point Analysis,CPA)

变化点分析(Change Point Analysis,CPA)

变化点分析(Change Point Analysis, CPA)是一种用于检测时间序列数据中统计属性发生显著变化的点的方法。这种分析方法常用于环境科学、气候变化、金融、生态水文等领域,帮助研究者识别系统状态或过程发生转变的时间及其可能原因。

核心思想:
变化点分析的目标是识别时间序列数据的一个或多个位置,在这些位置数据的均值、方差、分布或趋势等属性发生显著改变。这些变化可能是由于外部条件的改变(如气候变化、政策干预)或系统内部的变化(如生态水文循环状态的转变)引起的。

案例:
Ge et al.,2024利用变化点分析了博斯腾湖水位和面积的年际变化。CPA分析得出两个趋势变化点,将曲线变化分成三段。
在这里插入图片描述
CPA实现方法:
ruptures :这是一个专门用于变化点检测的Python库,提供了多种算法。github地址:ruptures
changefinder :这个库主要用于时间序列数据的变化点检测。
PELT (Pruned Exact Linear Time):这是一种高效的多变化点检测算法。
Bayesian Changepoint Detection :基于贝叶斯方法的变化点检测。

代码实现

这里使用ruptures库实现一个简单的示例,更多的内容可以参考其文档

import numpy as np
import matplotlib.pyplot as plt
import ruptures as rpt

# 生成示例数据
np.random.seed(42)
n_samples = 200
signal = np.concatenate([np.random.normal(0, 1, 100), np.random.normal(5, 1, 100)])

# 绘制原始数据
plt.figure(figsize=(8, 2))
plt.plot(signal, label='Original Signal')
plt.title('Original Signal with Change Points')
plt.xlabel('Time')
plt.ylabel('Value')
plt.legend()
plt.show()

# 使用Pelt算法检测变化点
model = "l2"  # 选择模型,这里使用L2范数
algo = rpt.Pelt(model=model).fit(signal)
result = algo.predict(pen=10)  # pen是惩罚参数,用于控制变化点的数量

# 绘制检测到的变化点
rpt.display(signal, result, figsize=(8, 2))

plt.title('Change Points Detected')
plt.xlabel('Time')
plt.ylabel('Value')
plt.show()

# 打印检测到的变化点
print("Detected change points:", result)

结果显示:

Detected change points: [100, 200]

原始数据
在这里插入图片描述
监测到变化点的图
在这里插入图片描述

参考文献

Ge X, Ding J, Amantai N, Xiong J and Wang J (2024) Responses of vegetation cover to hydro-climatic variations in Bosten Lake Watershed, NW China. Front. Plant Sci. 15:1323445. doi: 10.3389/fpls.2024.1323445

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彭博锐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值