当前位置: 首页 > news >正文

打卡day58

太阳黑子数量 (Sunspots)

  • 数据描述: 每年观测到的太阳黑子数量。
  • 无明显趋势: 长期来看,数据没有持续的上升或下降趋势。
  • 强周期性 (Cyclical): 数据呈现非常明显的周期性波动,大约每11年一个周期。注意,这与“季节性”不同,季节性周期是固定的(如12个月),而这里的周期长度是近似的。
  • 相对平稳: 经过检验,数据通常被认为是平稳或近似平稳的。

非常适合用来理解ARMA模型。由于数据本身比较平稳,不需要差分,可以专注于用ACF和PACF图来确定 p 和 q 的值。

加载数据及预处理

import pandas as pd
from statsmodels.datasets import sunspots# 加载数据
data = sunspots.load_pandas().data
data['YEAR'] = pd.to_datetime(data['YEAR'], format='%Y')
data.set_index('YEAR', inplace=True)
data = data['SUNACTIVITY']  # 假设列名为'SUNACTIVITY'# 检查缺失值
print("缺失值数量:", data.isnull().sum())

数据可视化

import matplotlib.pyplot as pltplt.figure(figsize=(10, 6))
data.plot(title='Sunspots Activity Over Time')
plt.xlabel('Year')
plt.ylabel('Sunspot Count')
plt.show()

平稳性检验

from statsmodels.tsa.stattools import adfuller# ADF检验
def adf_test(series):result = adfuller(series)print(f'ADF Statistic: {result[0]}')print(f'p-value: {result[1]}')if result[1] <= 0.05:print("序列平稳")else:print("序列非平稳")adf_test(data)# 若非平稳,进行差分
data_diff = data.diff().dropna()
adf_test(data_diff)  # 重复直到平稳,确定d值

确定ARIMA参数 (p, d, q)

from statsmodels.graphics.tsaplots import plot_acf, plot_pacf# 绘制差分后的ACF和PACF
plot_acf(data_diff, lags=20)
plot_pacf(data_diff, lags=20)
plt.show()# 自动选择参数(需安装pmdarima)
from pmdarima import auto_arima
model = auto_arima(data, seasonal=False, trace=True)
print(f'Best ARIMA Order: {model.order}')  # 输出(p, d, q)

拟合ARIMA模型

from statsmodels.tsa.arima.model import ARIMA# 手动设置参数示例:ARIMA(2,1,2)
model = ARIMA(data, order=(2,1,2))
results = model.fit()
print(results.summary())

模型诊断

# 残差检查
residuals = results.resid# 残差ACF/PACF
plot_acf(residuals, lags=20)
plot_pacf(residuals, lags=20)
plt.show()# Ljung-Box检验(残差是否为白噪声)
from statsmodels.stats.diagnostic import acorr_ljungbox
lb_test = acorr_ljungbox(residuals, lags=20)
print(lb_test)

预测未来值

# 预测未来5年
forecast_steps = 5
forecast = results.get_forecast(steps=forecast_steps)
forecast_mean = forecast.predicted_mean
conf_int = forecast.conf_int()# 可视化结果
plt.figure(figsize=(10,6))
plt.plot(data, label='Observed')
plt.plot(results.fittedvalues, color='red', label='Fitted')
plt.plot(forecast_mean.index, forecast_mean, color='green', label='Forecast')
plt.fill_between(conf_int.index, conf_int.iloc[:,0], conf_int.iloc[:,1], color='pink', alpha=0.3)
plt.title('Sunspots Forecast with ARIMA')
plt.legend()
plt.show()

模型评估

# 计算均方根误差(需划分训练集/测试集)
from sklearn.metrics import mean_squared_error
import numpy as nptrain_size = int(len(data) * 0.8)
train, test = data[:train_size], data[train_size:]
model = ARIMA(train, order=(2,1,2)).fit()
forecast = model.get_forecast(steps=len(test))
rmse = np.sqrt(mean_squared_error(test, forecast.predicted_mean))
print(f'RMSE: {rmse}')
http://www.lryc.cn/news/578102.html

相关文章:

  • 逻辑门电路Multisim电路仿真汇总——硬件工程师笔记
  • 设计模式(六)
  • 深入拆解AOP的Java技术栈:注解、反射与设计模式的完美融合
  • [springboot系列] 探秘JUnit 5: Java单元测试利器
  • xilinx axi datamover IP使用demo
  • 网络协议之网络探测协议ICMP及其应用ping,traceroute
  • Prompt 精通之路(七)- 你的终极 AI 宝典:Prompt 精通之路系列汇总
  • python+uniapp基于微信小程序蜀味道江湖餐饮管理系统nodejs+java
  • Java开发新变革!飞算JavaAI深度剖析与实战指南
  • 计算机是如何⼯作的
  • 【Java EE初阶】计算机是如何⼯作的
  • Android 中 使用 ProgressBar 实现进度显示
  • vue中表尾合计
  • 车载Tier1 supplier梳理
  • Android阴影效果的艺术与实现:从入门到精通
  • Linux 安装使用教程
  • C++ 第四阶段 STL 容器 - 第五讲:详解 std::set 与 std::unordered_set
  • 【甲方安全建设】SDL基线建设及审计评估
  • Linux习题
  • 机器学习,支持向量机svm和决策树xgboost介绍
  • 【读代码】TradingAgents:基于多智能体LLM的金融交易框架深度解析
  • 大模型的开发应用(十六):Agent 与 LangGraph基础
  • Waiting for another flutter command to release the startup lock...解决方法
  • 9.6 视觉专家模块+1536超清解析!智谱CogVLM-9B多模态模型中文场景实战评测,性能炸裂吊打LLaVA
  • Python 机器学习实战:泰坦尼克号生还者预测 (从数据探索到模型构建)
  • Spring Security 鉴权与授权详解(前后端分离项目)
  • java后端http接口流式输出到前端
  • 使用OpenSSL接口读取pem编码格式文件中的证书
  • Redis初识第七期---ZSet的命令和应用场景
  • VRR(可变刷新率)和QMS(快速媒体切换)