时间序列分析基础与Python实践

时间序列分析是统计学中的一个重要分支,它涉及按时间顺序排列的数据点。在这种类型的数据中,时间是自变量,而因变量可以是股票市场数据、公司销售数据、智能设备传感器数据或发电厂产生的电能量度等。通过对时间序列数据的分解,可以识别出趋势、季节性、周期行为和不规则波动等基本组成部分,这些组成部分将指导选择合适的时间序列模型。

时间序列的基本组成部分

季节性指的是数据中出现的周期性模式,这种模式在固定的时间间隔内重复出现。例如,如果观察一年内每个月的死亡人数记录,可以发现每年中期死亡人数会激增,这种模式每年都会出现。如果一个时间序列具有季节性,这意味着存在几乎恒定长度的重复模式。在考虑季节性的时间序列模型中,SARIMA模型是一个常用的选择。

趋势是指随着时间的推移,观测值的线性增加或减少。在时间序列建模中,通常会移除序列中存在的趋势。

周期行为与季节性不同,周期行为的峰值和谷值不会在规律的时间间隔内出现。周期行为与季节性行为的混淆可能会导致在选择时间序列预测模型时得出错误的推断。

将所有这些概念综合到一张图中,可以更直观地理解这些组成部分。

平稳性与非平稳性数据

平稳性与非平稳性并不是时间序列数据的一个组成部分,而是在现实世界中可能观察到的时间序列数据的类型。在平稳时间序列中,观测值的均值、方差和标准差随时间几乎保持恒定,而在非平稳时间序列中则不是这样。因此,作为第一步,可以检查时间序列是否是平稳的,如果不是,可以应用一些转换使其变得平稳。使时间序列数据变得平稳很重要,因为许多统计分析和建模都依赖于平稳数据。为了检查平稳性,可以进行ADF(增强迪基-富勒)测试,这将为提供更好的直觉。

代码实现

将使用包含波特兰交通系统每月乘客数量的数据集。以下是使用Python进行时间序列分解的步骤:

import pandas as pd import matplotlib.pyplot as plt # 加载数据为DataFrame df = pd.read_csv('https://raw.githubusercontent.com/josephofiowa/GA-DSI/master/example-lessons/Intro-to-forecasting/portland-oregon-average-monthly-.csv', parse_dates=['Month']) df.rename(columns={'Portland Oregon average monthly bus ridership (/100) January 1973 through June 1982, n=114': 'monthly_ridership'}, inplace=True) df.dropna(inplace=True) df = df.iloc[:114] df = df.set_index('Month') df = df['monthly_ridership'].apply(lambda x: int(x)) rid_df = pd.DataFrame(df) # 初始分析时间序列数据 rid_df['monthly_ridership'].plot() # 分解时间序列数据 from statsmodels.tsa.seasonal import seasonal_decompose # 分解时间序列 decomposition = seasonal_decompose(rid_df.monthly_ridership, freq=12) fig = plt.figure() fig = decomposition.plot() fig.set_size_inches(15, 8)

通过观察,可以确认数据中确实存在趋势和季节性。顶部的图表是每月的乘客数据,第二和第三图表分别显示了分解出的趋势和季节性。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485