DAY 56 时序数据的检验

知识点回顾:

  1. 假设检验基础知识
    1. 原假设与备择假设
    2. P值、统计量、显著水平、置信区间
  2. 白噪声
    1. 白噪声的定义
    2. 自相关性检验:ACF检验和Ljung-Box 检验
    3. 偏自相关性检验:PACF检验
  3. 平稳性
    1. 平稳性的定义
    2. 单位根检验
  4. 季节性检验
    1. ACF检验
    2. 序列分解:趋势+季节性+残差

记忆口诀:p越小,落在置信区间外,越拒绝原假设。

时序部分需要铺垫的知识非常多,相信这次应该说清楚了假设检验相关的基础知识。

作业:自行构造数据集,来检查是否符合这个要求。

创造数据,并可视化进行ACF检验

import numpy as np
from statsmodels.graphics.tsaplots import plot_acf 
from statsmodels.graphics.tsaplots import plot_pacf # 引入PACF图
from statsmodels.stats.diagnostic import acorr_ljungbox  # 引入Ljung-Box检验
from statsmodels.tsa.stattools import adfuller  # 引入ADF检验
from statsmodels.tsa.seasonal import seasonal_decompose  # 引入季节性分解
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
# 中文显示设置
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文字体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示为方块的问题# 为了让每次运行的结果都一样,设置一个随机种子(可选)
np.random.seed(42)# 定义序列的长度
num_points = 200# --- 1. 生成随机序列数据 ---# 白噪声序列
white_noise= np.random.randn(num_points)# 趋势序列(均值随时间变化,非平稳序列)
trend = np.linspace(0, 5, num_points)  # 线性趋势
trend_noise = np.random.randn(num_points)  # 随机噪声
trend_series = trend + trend_noise# 季节性序列(周期性变化)
seasonal_period = 10  # 季节周期
seasonal = np.sin(np.linspace(0, 2 * np.pi * (num_points // seasonal_period), num_points))
seasonal_noise = np.random.randn(num_points) * 0.3  # 较小的随机噪声
seasonal_series = seasonal + seasonal_noise# --- 2. 可视化序列 ---# 可视化三种序列
fig, axes = plt.subplots(3, 2, figsize=(14, 12))# 趋势序列
axes[0, 0].plot(trend_series)
axes[0, 0].set_title('趋势序列')
axes[0, 0].set_xlabel('时间')
axes[0, 0].set_ylabel('值')
axes[0, 0].axhline(y=0, color='r', linestyle='--', label='Mean (均值 ≈ 0)')
axes[0, 0].grid(True, linestyle='--', alpha=0.6)
axes[0, 0].legend()
plot_acf(trend_series, lags=30, ax=axes[0, 1])
axes[0, 1].set_title('趋势序列的ACF')# 季节性序列
axes[1, 0].plot(seasonal_series)
axes[1, 0].set_title('季节性序列')
axes[1, 0].set_xlabel('时间')
axes[1, 0].set_ylabel('值')
axes[1, 0].axhline(y=0, color='r', linestyle='--', label='Mean (均值 ≈ 0)')
axes[1, 0].grid(True, linestyle='--', alpha=0.6)
axes[1, 0].legend()
plot_acf(seasonal_series, lags=30, ax=axes[1, 1])
axes[1, 1].set_title('季节性序列的ACF')# 白噪声序列
axes[2, 0].plot(white_noise)
axes[2, 0].set_title('白噪声序列')
axes[2, 0].set_xlabel('时间')
axes[2, 0].set_ylabel('值')
axes[2, 0].axhline(y=0, color='r', linestyle='--', label='Mean (均值 ≈ 0)')
axes[2, 0].grid(True, linestyle='--', alpha=0.6)
axes[2, 0].legend()
plot_acf(white_noise, lags=30, ax=axes[2, 1])
axes[2, 1].set_title('白噪声序列的ACF')plt.tight_layout()
plt.show()    

ADF平稳性检验

# --- 使用ADF检验来判断平稳性 ---
print("开始进行trend_series序列的ADF平稳性检验...")# 执行ADF检验
# adfuller()函数会返回一个包含多个结果的元组
adf_result = adfuller(trend_series)# 提取并展示主要结果
adf_statistic = adf_result[0]
p_value = adf_result[1]
critical_values = adf_result[4]print(f"ADF统计量 (ADF Statistic): {adf_statistic:.4f}")
print(f"p值 (p-value): {p_value:.4f}")
print("临界值 (Critical Values):")
for key, value in critical_values.items():print(f'    {key}: {value:.4f}')print("\n--- 检验结论 ---")
# 根据p值进行判断
if p_value < 0.05:print(f"p-value ({p_value:.4f}) 小于 0.05,我们强烈拒绝原假设(H₀)。")print("结论:trend_series序列是平稳的 (Stationary)。")
else:print(f"p-value ({p_value:.4f}) 大于或等于 0.05,我们无法拒绝原假设(H₀)。")print("结论:trend_series序列是非平稳的 (Non-stationary)。")# 也可以通过比较ADF统计量和临界值来判断,结论是一致的
if adf_statistic < critical_values['5%']:print("\n补充判断:ADF统计量小于5%的临界值,同样表明序列是平稳的。")print('*'*60)
print("开始进行seasonal_series序列的ADF平稳性检验...")# 执行ADF检验
# adfuller()函数会返回一个包含多个结果的元组
adf_result = adfuller(seasonal_series)# 提取并展示主要结果
adf_statistic = adf_result[0]
p_value = adf_result[1]
critical_values = adf_result[4]print(f"ADF统计量 (ADF Statistic): {adf_statistic:.4f}")
print(f"p值 (p-value): {p_value:.4f}")
print("临界值 (Critical Values):")
for key, value in critical_values.items():print(f'    {key}: {value:.4f}')print("\n--- 检验结论 ---")
# 根据p值进行判断
if p_value < 0.05:print(f"p-value ({p_value:.4f}) 小于 0.05,我们强烈拒绝原假设(H₀)。")print("结论:seasonal_series序列是平稳的 (Stationary)。")
else:print(f"p-value ({p_value:.4f}) 大于或等于 0.05,我们无法拒绝原假设(H₀)。")print("结论:seasonal_series序列是非平稳的 (Non-stationary)。")# 也可以通过比较ADF统计量和临界值来判断,结论是一致的
if adf_statistic < critical_values['5%']:print("\n补充判断:ADF统计量小于5%的临界值,同样表明序列是平稳的。")print('*'*60)
print("开始进行white_noise序列的ADF平稳性检验...")# 执行ADF检验
# adfuller()函数会返回一个包含多个结果的元组
adf_result = adfuller(white_noise)# 提取并展示主要结果
adf_statistic = adf_result[0]
p_value = adf_result[1]
critical_values = adf_result[4]print(f"ADF统计量 (ADF Statistic): {adf_statistic:.4f}")
print(f"p值 (p-value): {p_value:.4f}")
print("临界值 (Critical Values):")
for key, value in critical_values.items():print(f'    {key}: {value:.4f}')print("\n--- 检验结论 ---")
# 根据p值进行判断
if p_value < 0.05:print(f"p-value ({p_value:.4f}) 小于 0.05,我们强烈拒绝原假设(H₀)。")print("结论:seasonal_series序列是平稳的 (Stationary)。")
else:print(f"p-value ({p_value:.4f}) 大于或等于 0.05,我们无法拒绝原假设(H₀)。")print("结论:seasonal_series序列是非平稳的 (Non-stationary)。")# 也可以通过比较ADF统计量和临界值来判断,结论是一致的
if adf_statistic < critical_values['5%']:print("\n补充判断:ADF统计量小于5%的临界值,同样表明序列是平稳的。")

时间序列分解

# 方法三:序列分解
print("\n--- 方法三:序列分解 ---")
# 使用statsmodels进行分解(假设为加法模型)
decomposition = seasonal_decompose(seasonal_series, model='additive', period=12)# 绘制分解图
fig = decomposition.plot()
fig.set_size_inches(14, 8)
plt.suptitle('时间序列分解图', y=1.02, fontsize=16)
plt.show()
# 观察:分解图清晰地将数据拆分成了趋势、季节性和残差。季节性部分呈现完美的年度周期,而残差看起来像随机噪声。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/86046.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86046.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/86046.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python深度学习】Day 56 时序数据的检验

知识点&#xff1a; 假设检验基础知识 原假设与备择假设P值、统计量、显著水平、置信区间 白噪声 白噪声的定义自相关性检验&#xff1a;ACF检验和Ljung-Box 检验偏自相关性检验&#xff1a;PACF检验 平稳性 平稳性的定义单位根检验 季节性检验 ACF检验序列分解&#xff1a;趋势…

搭建网站时用到的技术

jQuery AJAX FLASK框架 要再Python的虚拟环境下部署 接下来创建项目文件夹 /data/demo 进入demo目录中&#xff0c;创建虚拟环境 ​​激活虚拟环境后&#xff0c;所有操作都基于创建时使用的 Python 版本​​ virtualenv venv 成功会生成一个venv文件夹&#xff0c; 接…

Docker知识点汇总——AI教你学Docker

Docker & Docker Compose 全面知识点梳理 一、Docker 基础知识 1.1 Docker 概念 什么是容器、镜像、仓库、Docker 引擎容器与虚拟机的区别Docker 的应用场景与优势 1.2 Docker 安装与配置 各操作系统&#xff08;Linux、Windows、macOS&#xff09;上的安装方法配置加…

Agent轻松通-P1:什么是Agent?

欢迎来到啾啾的博客&#x1f431;。 记录学习点滴。分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 有很多很多不足的地方&#xff0c;欢迎评论交流&#xff0c;感谢您的阅读和评论&#x1f604;。 目录 1 引言2 基础概念3 Agent的挑战3.1 复杂度带来的…

Grafana MySQL监控大盘指标图趋势不连续分析

问题现象 通过benchmarksql对MySQL数据库做压测完发现Grafana关于该数据库的监控图趋势不连续&#xff0c;监控数据异常。 说明&#xff1a;Prometheusmysqlexpoter都通过容器运行 日志分析 检查了其他数据库节点跟主机节点趋势图均正常&#xff0c;排除 Prometheus 的问题&a…

Python实例题:基于区块链的去中心化应用平台(区块链、智能合约)

目录 Python实例题 题目 问题描述 解题思路 关键代码框架 难点分析 扩展方向 Python实例题 题目 基于区块链的去中心化应用平台&#xff08;区块链、智能合约&#xff09; 问题描述 开发一个基于区块链的去中心化应用平台&#xff0c;包含以下功能&#xff1a; 区块…

接口请求重复触发问题的排查流程:iOS抓包实战中的工具协作

有时候&#xff0c;Bug 并不体现在程序错误上&#xff0c;而是行为偏差。在一次常规功能测试中&#xff0c;我们发现移动端某个提交请求被触发了两次&#xff0c;虽然后端做了幂等处理&#xff0c;但频繁请求仍可能带来性能问题、错误日志膨胀、以及潜在副作用。 这类问题常被…

oracle 表空间与实例妙用,解决业务存储与权限处理难题

oracle 表空间与实例妙用&#xff0c;解决业务存储与权限处理难题 一、方案背景 在同一个研发数仓中&#xff0c;现使用 Oracle 数据库存储生产和质量的数据。为了满足业务发展需求&#xff0c;需要新增财务数据的存储&#xff0c;同时确保不影响现有的生产和质量数据。本方案…

迅为RK3576开发板NPU环境搭建和使用rknn-toolkit2功能演示模型转换

开发板采用核心板底板结构&#xff0c;在我们的资料里提供了底板的原理图工程以及PCB工程&#xff0c;可以实现真正意义上的裁剪、定制属于自己的产品&#xff0c;满足更多应用场合。 迅为针对RK3576开发板整理出了相应的开发流程以及开发中需要用到的资料&#xff0c;并进行详…

如何在 Python 中连接 Elasticsearch 并使用 Qwen3 来实现 RAG

今天的这篇文章是 “在本地电脑中部署阿里 Qwen3 大模型及连接到 Elasticsearch” 的续篇。我们接着上次的文章&#xff0c;继续探索如何使用 Qwen3 来实现 RAG。在本练习中&#xff0c;我们使用 Elastic Stack 9.0.1 版本。 创建 Elasticsearch API key 我们按照如下的步骤来…

Domain 层完全指南(面向 iOS 开发者)

目录 为什么需要 Domain 层清晰的三层架构核心概念&#xff1a;Entity / Value Object / Use Case / RepositorySwift 代码实战测试策略在旧项目中落地的步骤结语 1 为什么需要 Domain 层 在传统 MVC / MVVM 中&#xff0c;我们往往把业务规则写进 ViewController 或 ViewMod…

华为OD机试_2025 B卷_矩形相交的面积(Python,100分)(附详细解题思路)

题目描述 给出3组点坐标(x, y, w, h)&#xff0c;-1000<x,y<1000&#xff0c;w,h为正整数。 (x, y, w, h)表示平面直角坐标系中的一个矩形&#xff1a; x, y为矩形左上角坐标点&#xff0c;w, h向右w&#xff0c;向下h。 (x, y, w, h)表示x轴(x, xw)和y轴(y, y-h)围成…

17、Rocket MQ快速实战以及核⼼概念详解

⼀ 、MQ简介 MQ&#xff1a;MessageQueue&#xff0c;消息队列。是在互联⽹中使⽤⾮常⼴泛的—系列服务中间件。 这个词可以分两个部分来看&#xff0c; —是Message&#xff1a;消息。消息是在不同进程之间传递的数据。这些进程可以部署在同—台机器上&#xff0c;也可以 分…

设计模式之手写策略模式实现动态支付(Java实现)

首先&#xff0c;定义一个接口类 import java.util.Map;public interface PayInterface {/*** 支付方法* param amount 支付金额* param paymentInfo 支付信息&#xff08;如卡号、密码等&#xff09;* return 支付结果*/boolean pay(double amount, Map<String, String>…

Spring Boot 虚拟线程 vs WebFlux:谁更胜一筹?

Spring Boot 作为构建现代 Java 应用程序的强大框架,为开发者提供了多种处理并发和可扩展性的解决方案。其中最受关注的两种方案是 Spring Boot 虚拟线程(Java 21 引入)和 Spring Boot WebFlux(基于响应式编程)。虽然两者都致力于优化资源利用率和提升高并发处理能力,但在…

淘宝商品搜索接口|关键字获取商品列表API接入指南

在电商领域&#xff0c;淘宝作为中国最大的电子商务平台之一&#xff0c;拥有海量的商品资源。对于开发者而言&#xff0c;通过淘宝开放平台提供的 API 接口&#xff0c;能够实现与淘宝平台的深度整合&#xff0c;其中关键字搜索商品 API 接口尤为重要。它允许开发者根据特定的…

Centos 离线部署(MQTT)EMOX脚本并设置开机自启

文件结构 install_emqx.sh #!/bin/bash # Filename: install_emqx.sh # Description: EMQX离线一键部署脚本 (针对特殊目录结构)# 检查root权限 if [[ $EUID -ne 0 ]]; thenecho "请使用root权限运行此脚本&#xff01;" exit 1 fi# 定义依赖包和安装路径 DEP_RPM&…

机器学习基础:从概念到应用的全面解析

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…

【机器学习1】线性回归与逻辑回归

‌逻辑回归与线性回归的主要区别在于理论基础、应用场景和数学模型。 1 线性回归 1.1 理论基础 线性回归主要用于建模自变量与连续性因变量之间关系的统计方法&#xff0c;试图利用一条线来拟合自变量与因变量之间的线性关系。 1.2 应用场景 从应用场景来说&#xff0c;适…

小程序 顶部栏标题栏 下拉滚动 渐显白色背景

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3164fd0e6d6848efaa1e87e02c35179e.png 下拉 100px 后 变成渐变成白色 显示原理 <wd-navbar fixed safeAreaInsetTop :bordered"false":custom-style"background-color: rgba(255, 255, 255, op…