6. 模型选择与构建

6.1 目标

  1. 选择适合时间序列数据分析和预测的模型,确保模型能捕捉气温的长期趋势和季节性变化。
  2. 进行多维度数据分析,探索气温变化的趋势和波动。
  3. 详细介绍所选算法的核心原理、逻辑及公式推理。

6.2 模型选择

候选模型

  1. ARIMA (AutoRegressive Integrated Moving Average)
    • 适用性:经典时间序列模型,适合捕捉长期趋势和季节性波动。
    • 局限性:对非线性关系的建模能力有限。
  2. SARIMA (Seasonal ARIMA)
    • 适用性:在 ARIMA 基础上加入季节性因素,适合分析气温的周期性波动。
  3. Prophet
    • 适用性:由 Facebook 开发,适合捕捉时间序列的趋势和节假日效应,易于调参。
  4. LSTM (Long Short-Term Memory)
    • 适用性:一种深度学习模型,适合处理非线性时间序列,捕捉长期依赖关系。
    • 局限性:对小数据集可能过拟合,训练时间较长。

模型选择理由

我们选择 SARIMA(Seasonal ARIMA)作为核心模型,理由如下:

  • 数据集中存在 长期趋势 和季节性波动,SARIMA 能很好地捕捉这些特征。
  • 相较于简单的 ARIMA,SARIMA 能显式建模季节性因素,适合气温这种周期性时间序列。
  • 相比深度学习模型(如 LSTM),SARIMA 对小数据集更加稳健且易于解释。

6.3 SARIMA 模型原理

SARIMA 是一种扩展的 ARIMA 模型,适合处理包含季节性成分的时间序列数据。

1. 基本原理

SARIMA 模型公式为:

图片[1]-6. 模型选择与构建-大赛人网
图片[2]-6. 模型选择与构建-大赛人网

3. 白噪声:

  • 序列中的随机波动,无法通过模型解释。

3. 模型适用性

适用场景:数据具有趋势性和周期性,例如气温变化。

优点:

  • 能显式建模季节性因素。
  • 参数可解释性强。

局限性:

  • 对非线性关系表现较弱。
  • 需要对参数进行网格搜索优化。

6.4 多维度数据分析

数据趋势与季节性分解

我们对 LandAverageTemperature 和 LandAndOceanAverageTemperature 进行趋势和季节性分解,分析长期变化和周期性波动。

from statsmodels.tsa.seasonal import seasonal_decompose

# 对 LandAverageTemperature 进行趋势和季节性分解
result_land = seasonal_decompose(data_features['LandAverageTemperature'], model='additive', period=12)

# 对 LandAndOceanAverageTemperature 进行趋势和季节性分解
result_ocean = seasonal_decompose(data_features['LandAndOceanAverageTemperature'], model='additive', period=12)

# 可视化分解结果
result_land.plot()
plt.suptitle('Decomposition of Land Average Temperature', fontsize=16)
plt.show()

result_ocean.plot()
plt.suptitle('Decomposition of Land and Ocean Average Temperature', fontsize=16)
plt.show()
图片[3]-6. 模型选择与构建-大赛人网
图片[4]-6. 模型选择与构建-大赛人网

6.5 SARIMA 模型构建与优化

参数选择

  1. 使用 ADF (Augmented Dickey-Fuller) Test 确定差分阶数 dd 和 DD。
  2. 使用 ACF (Autocorrelation Function) 和PACF (Partial Autocorrelation Function) 确定 p,q,P,Q。
from statsmodels.tsa.stattools import adfuller, acf, pacf

# ADF 检验
adf_result = adfuller(data_features['LandAverageTemperature'].dropna())
print("ADF 检验结果:", adf_result)

# 绘制 ACF 和 PACF 图
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

plt.figure(figsize=(12, 6))
plt.subplot(121)
plot_acf(data_features['LandAverageTemperature'].dropna(), lags=40, ax=plt.gca())
plt.title('ACF - LandAverageTemperature')

plt.subplot(122)
plot_pacf(data_features['LandAverageTemperature'].dropna(), lags=40, ax=plt.gca())
plt.title('PACF - LandAverageTemperature')
plt.show()
图片[5]-6. 模型选择与构建-大赛人网

模型训练

from statsmodels.tsa.statespace.sarimax import SARIMAX

# SARIMA 模型训练
model = SARIMAX(data_features['LandAverageTemperature'], 
                order=(1, 1, 1), 
                seasonal_order=(1, 1, 1, 12))
sarima_result = model.fit()

# 模型结果总结
print(sarima_result.summary())

6.6 小结

  1. 选择模型:SARIMA 模型适合分析气温的长期趋势和季节性波动。
  2. 模型原理:通过差分消除非平稳性,结合季节性和非季节性成分建模。
  3. 多维度分析:分解数据的趋势、季节性和残差,深入理解气温变化模式。
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容