X-12-ARIMA:季节性调整(Seasonal Adjustment)的强大工具,介绍数学原理

news2025/1/18 9:17:38

X-12-ARIMA:季节性调整的强大工具

在经济学、金融学以及各类统计数据分析中,季节性调整(Seasonal Adjustment)是一个至关重要的步骤。许多经济指标,如GDP、失业率和零售销售数据等,往往会受到季节性因素的影响,这些因素使得数据在不同时间周期内呈现周期性的波动。为了更准确地反映经济趋势,通常需要对这些数据进行季节性调整。而X-12-ARIMA模型就是一个被广泛应用的季节性调整工具。

本文将详细介绍X-12-ARIMA模型的基本原理、数学公式及其如何进行季节性调整,并展示其在实际应用中的重要性和操作过程。

1. 什么是X-12-ARIMA?

X-12-ARIMA是由美国普查局(U.S. Census Bureau)开发的一个季节性调整工具,广泛应用于经济统计数据的处理,尤其是在处理具有季节性波动的时间序列数据时。该模型结合了ARIMA模型的季节性调整功能,能够自动识别并去除时间序列中的季节性波动,从而获得更为准确的趋势数据。

X-12-ARIMA的核心思想是通过对时间序列进行差分、回归、平滑等多重处理,将时间序列中的季节性成分(例如每年、每季度、每月等)与趋势成分分离,进而得到去除了季节性影响的时间序列。

2. X-12-ARIMA的工作原理

X-12-ARIMA的工作原理可以概括为几个关键步骤:差分、季节性成分分离、回归分析以及趋势的估计。它的具体流程如下:

2.1 初步预处理

首先,对原始时间序列进行差分(differencing),以使其变得平稳。如果数据存在季节性波动,X-12-ARIMA会使用季节性差分(Seasonal Differencing)来去除季节性影响。这样,数据中的季节性效应被分离,剩下的是趋势和噪声成分。

2.2 季节性调整

X-12-ARIMA通过估计时间序列中的季节性因素来进行调整。它首先使用移动平均法(Moving Average)平滑数据,以去除季节性成分。然后,模型通过递归算法逐步识别季节性成分并进行调整。

2.3 ARIMA模型的应用

在进行季节性调整之后,X-12-ARIMA会进一步应用ARIMA模型进行趋势分析。通过选择合适的ARIMA模型(通常包括AR、I、MA成分),X-12-ARIMA能够精确地描述数据的变化模式,并最终获得平滑后的数据。

3. 数学公式与模型框架

X-12-ARIMA的数学框架基于时间序列的分解模型。假设时间序列 ( Y t Y_t Yt ) 可以表示为季节性成分、趋势成分和噪声成分的加和:

Y t = T t + S t + E t Y_t = T_t + S_t + E_t Yt=Tt+St+Et
其中:

  • ( T t T_t Tt ) 为趋势成分,表示时间序列的长期趋势。
  • ( S t S_t St ) 为季节性成分,表示周期性的季节性波动。
  • ( E t E_t Et ) 为误差成分,表示不可预见的噪声。
3.1 季节性差分

季节性差分是X-12-ARIMA用于去除季节性成分的一种重要技术。通过对时间序列进行季节性差分,可以消除周期性的波动,使得数据更加平稳。季节性差分的数学公式为:

Δ S t = Y t − Y t − m \Delta S_t = Y_t - Y_{t-m} ΔSt=YtYtm
其中,( m m m) 是季节周期(例如,对于月度数据,( m = 12 m=12 m=12 )),( Δ S t \Delta S_t ΔSt ) 是季节性差分后的数据。

3.2 平滑处理

为了识别季节性成分,X-12-ARIMA使用平滑技术对数据进行处理。常用的平滑方法是加权移动平均(Weighted Moving Average),其基本公式为:

S t = 1 m ∑ i = 1 m Y t − i S_t = \frac{1}{m} \sum_{i=1}^{m} Y_{t-i} St=m1i=1mYti
其中,( S t S_t St ) 是平滑后的季节性成分,( m m m ) 是季节周期,( Y t − i Y_{t-i} Yti ) 是时间序列的原始数据。

3.3 ARIMA模型的季节性调整

在进行季节性差分和平滑处理后,X-12-ARIMA还会使用ARIMA模型来拟合去除季节性影响后的数据。ARIMA模型的形式为:

Y t = μ + ϕ 1 Y t − 1 + ϕ 2 Y t − 2 + ⋯ + ϕ p Y t − p + ϵ t Y_t = \mu + \phi_1 Y_{t-1} + \phi_2 Y_{t-2} + \dots + \phi_p Y_{t-p} + \epsilon_t Yt=μ+ϕ1Yt1+ϕ2Yt2++ϕpYtp+ϵt
其中,( μ \mu μ ) 为常数项,( ϕ 1 , ϕ 2 , … , ϕ p \phi_1, \phi_2, \dots, \phi_p ϕ1,ϕ2,,ϕp ) 为自回归系数,( ϵ t \epsilon_t ϵt ) 为误差项。可以参考笔者的另一篇博客:时间序列分析ARIMA(AutoRegressive Integrated Moving Average,自回归积分滑动平均)模型:中英双语

4. X-12-ARIMA的应用实例

假设我们有一组每月的零售销售数据,其中存在明显的季节性波动。使用X-12-ARIMA进行季节性调整后,我们可以得到去除季节性波动后的数据,从而更清晰地观察到销售趋势。例如,假设某个月份的零售销售数据为:

Y t = 120 , 150 , 140 , 130 , 180 , 160 , 170 , 190 , 210 , 180 , 200 , 220 Y_t = 120, 150, 140, 130, 180, 160, 170, 190, 210, 180, 200, 220 Yt=120,150,140,130,180,160,170,190,210,180,200,220

通过季节性差分和季节性调整,X-12-ARIMA可以将数据调整为去除了季节性因素的趋势数据,从而使我们能够更准确地评估零售市场的长期趋势。 这里的例子的具体解析请看下文。

5. 总结

X-12-ARIMA模型是一种强大的季节性调整工具,通过对时间序列数据进行差分、平滑、ARIMA建模等多步处理,能够有效地去除季节性成分,揭示数据中的长期趋势。它被广泛应用于经济学、金融学等领域,对于提高数据的准确性和预测的可靠性具有重要作用。

应用X-12-ARIMA进行季节性调整:零售销售数据示例

在这个示例中,我们将使用X-12-ARIMA方法对一组假设的每月零售销售数据进行季节性调整。数据包含了明显的季节性波动,而我们希望通过季节性调整来剔除这些波动,从而更清晰地观察零售市场的长期趋势。

1. 数据准备

假设我们的零售销售数据如下,表示的是每月的销售量(单位:单位数):

Y t = [ 120 , 150 , 140 , 130 , 180 , 160 , 170 , 190 , 210 , 180 , 200 , 220 ] Y_t = [120, 150, 140, 130, 180, 160, 170, 190, 210, 180, 200, 220] Yt=[120,150,140,130,180,160,170,190,210,180,200,220]

数据中显然存在季节性波动。例如,冬季和假期月份(如12月)通常会有较高的销售额,而春季和秋季的销售额较低。

2. 数据分析与季节性调整步骤

在进行季节性调整时,我们首先需要识别和去除季节性波动。X-12-ARIMA通常采用以下步骤:

  1. 季节性差分:通过季节性差分去除季节性波动。例如,假设我们的数据是月度数据,季节性周期为12个月。季节性差分的公式为:
    Δ Y t = Y t − Y t − 12 \Delta Y_t = Y_t - Y_{t-12} ΔYt=YtYt12
    其中,( Δ Y t \Delta Y_t ΔYt) 是季节性差分后的数据,( Y t Y_t Yt) 是原始数据,( Y t − 12 Y_{t-12} Yt12) 是前12个月的数据。

  2. 移动平均平滑:利用移动平均对数据进行平滑处理,去除季节性波动。

  3. 应用ARIMA模型:对经过差分和平滑后的数据应用ARIMA模型,从而获取去季节性的趋势成分。

3. Python代码实现

我们可以使用Python中的statsmodels库来应用季节性差分、平滑处理,并使用ARIMA模型对数据进行季节性调整。statsmodels库提供了强大的时间序列分析功能,包括季节性调整和ARIMA建模。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.tsa.arima.model import ARIMA

# 假设的零售销售数据,增加了额外的12个月数据
data = [120, 150, 140, 130, 180, 160, 170, 190, 210, 180, 200, 220, 
        125, 155, 145, 135, 185, 165, 175, 195, 215, 185, 205, 225]

# 转换为pandas的Series
months = pd.date_range(start='2023-01-01', periods=len(data), freq='M')
sales_data = pd.Series(data, index=months)

# 步骤1:季节性差分 (12个月的季节性差分)
seasonal_diff = sales_data - sales_data.shift(12)

# 步骤2:季节性调整 - 使用季节性分解方法 (移动平均平滑)
decomposition = seasonal_decompose(sales_data, model='additive', period=12)
seasonal_adjusted = sales_data - decomposition.seasonal

# 绘制季节性调整前后的对比图
plt.figure(figsize=(10, 6))
plt.subplot(2, 1, 1)
plt.plot(sales_data, label='Original Data', color='blue')
plt.title('Original Retail Sales Data')
plt.legend()

plt.subplot(2, 1, 2)
plt.plot(seasonal_adjusted, label='Seasonally Adjusted Data', color='green')
plt.title('Seasonally Adjusted Retail Sales Data')
plt.legend()

plt.tight_layout()
plt.show()

# 步骤3:使用ARIMA模型对季节性调整后的数据进行建模
# 假设我们选择ARIMA(1, 0, 1)模型进行建模
model = ARIMA(seasonal_adjusted, order=(1, 0, 1))
model_fit = model.fit()

# 预测未来几个月的趋势
forecast = model_fit.forecast(steps=6)

# 打印预测结果
print("Forecasted Trend (Next 6 months):")
print(forecast)

4. 代码解释
  1. 数据处理

    • 我们首先将零售销售数据转换为pandasSeries类型,并设置月份为索引。
  2. 季节性差分

    • seasonal_diff是季节性差分后的数据,通过从当前月的数据中减去12个月前的数据来去除季节性波动。
  3. 季节性分解

    • seasonal_decompose用于对时间序列进行季节性分解。它返回的数据包括季节性成分、趋势成分和残差成分。通过从原始数据中减去季节性成分,我们得到了季节性调整后的数据。
  4. ARIMA建模

    • 使用ARIMA模型对季节性调整后的数据进行建模。此处我们选择了ARIMA(1, 0, 1)模型,其中“1”表示使用一个自回归项,另一个“1”表示使用一个滑动平均项。
  5. 预测

    • 我们利用拟合的ARIMA模型对未来6个月的数据进行预测,得到的是去除季节性因素后的长期趋势。
5. 结果分析

通过上述代码,我们可以观察到季节性调整前后的数据对比图,并且通过ARIMA模型获得未来的销售趋势预测。通过季节性调整后的数据,我们可以更清晰地观察到零售销售的长期趋势,而不受季节性波动的影响。

Output
在这里插入图片描述

Forecasted Trend (Next 6 months):
2025-01-31    178.323722
2025-02-28    178.304536
2025-03-31    178.285424
2025-04-30    178.266385
2025-05-31    178.247419
2025-06-30    178.228527
Freq: ME, Name: predicted_mean, dtype: float64
6. 总结

通过使用X-12-ARIMA进行季节性调整,我们能够有效地去除时间序列数据中的季节性波动,从而得到更准确的长期趋势。这对于经济分析、销售预测等领域具有重要意义。通过Python实现X-12-ARIMA的季节性调整过程,我们不仅能提高数据分析的准确性,还能为未来的决策提供更有价值的参考。

Shift方法解析

在 pandas 中,shift() 是一个非常有用的方法,用于对时间序列数据进行位移。具体来说,shift(12) 表示将数据向前或向后移动12个单位。

shift() 方法的作用
  • shift(n):将数据向前或向后移动 n 个位置。n 可以是正数或负数。
    • 正数(例如 12):将数据向后移动,意味着每个数据点将替换为它之前 12 个时间单位的数据值。
    • 负数(例如 -12):将数据向前移动,意味着每个数据点将替换为它之后 12 个时间单位的数据值。
shift(12)

seasonal_diff = sales_data - sales_data.shift(12) 这一行代码中,sales_data.shift(12) 将原始销售数据向后移动12个月,得到了前12个月的数据。然后,我们通过从当前月份的数据中减去对应月份(12个月前)的数据,来得到季节性差分(seasonal difference)。

举例说明:

假设我们有如下的销售数据(简化为每季度的数据):

月份销售额
1100
2120
3130
4110
5150
6160

如果我们对这个数据应用 shift(3)

sales_data = pd.Series([100, 120, 130, 110, 150, 160])
shifted_data = sales_data.shift(3)
print(shifted_data)

结果将是:

月份销售额移动后销售额(shifted)
1100NaN
2120NaN
3130NaN
4110100
5150120
6160130
  • shift(3) 表示将数据向后移动 3 个位置,因此前 3 个值变为 NaN(因为没有数据可以替代)。
  • 第 4 个月的原始数据 110 将与第 1 个月的数据进行比较(110 - 100),依此类推。

在案例中,shift(12) 会把数据向后移动 12 个月,这样每个月的销售数据就与 12 个月前的数据进行比较,从而得到季节性差分(即去除季节性波动)。

后记

2025年1月17日15点37分于上海, 在GPT4o大模型辅助下完成。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

.netframwork模拟启动webapi服务并编写对应api接口

在.NET Framework环境中模拟启动Web服务,可以使用几种不同的方法。一个常见的选择是利用HttpListener类来创建一个简单的HTTP服务器,或者使用Owin/Katana库来自托管ASP.NET Web API或MVC应用。下面简要介绍Owin/Katana示例代码。这种方法更加灵活&#x…

网络安全构成要素

一、防火墙 组织机构内部的网络与互联网相连时,为了避免域内受到非法访问的威胁,往往会设置防火墙。 使用NAT(NAPT)的情况下,由于限定了可以从外部访问的地址,因此也能起到防火墙的作用。 二、IDS入侵检…

免费送源码:Java+ssm+MySQL 基于PHP在线考试系统的设计与实现 计算机毕业设计原创定制

摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对在线考试等问题,对如何通过计算…

html中鼠标位置信息

pageX:鼠标距离页面的最左边的距离,包括滚动条的长度。clientX:鼠标距离浏览器视口的左距离,不包括滚动条。offsetX:鼠标到事件源左边的距离。movementX:鼠标这次触发的事件的位置相对于上一次触发事件的位…

光谱相机的光谱分辨率可以达到多少?

多光谱相机 多光谱相机的光谱分辨率相对较低,波段数一般在 10 到 20 个左右,光谱分辨率通常在几十纳米到几百纳米之间,如常见的多光谱相机光谱分辨率为 100nm 左右。 高光谱相机 一般的高光谱相机光谱分辨率可达 2.5nm 到 10nm 左右&#x…

RAG 切块Chunk技术总结与自定义分块实现思路

TrustRAG项目地址🌟:https://github.com/gomate-community/TrustRAG 可配置的模块化RAG框架 切块简介 在RAG(Retrieval-Augmented Generation)任务中,Chunk切分是一个关键步骤,尤其是在处理结构复杂的PDF文…

Java基础——概念和常识(语言特点、JVM、JDK、JRE、AOT/JIT等介绍)

我是一个计算机专业研0的学生卡蒙Camel🐫🐫🐫(刚保研) 记录每天学习过程(主要学习Java、python、人工智能),总结知识点(内容来自:自我总结网上借鉴&#xff0…

Low-Level 大一统:如何使用Diffusion Models完成视频超分、去雨、去雾、降噪等所有Low-Level 任务?

Diffusion Models专栏文章汇总:入门与实战 前言:视频在传输过程中常常因为各种因素(如恶劣天气、噪声、压缩和传感器分辨率限制)而出现质量下降,这会严重影响计算机视觉任务(如目标检测和视频监控&#xff…

矩阵碰一碰发视频源码技术开发全解析,支持OEM

在当今数字化内容传播迅速发展的时代,矩阵碰一碰发视频功能以其便捷、高效的特点,为用户分享视频提供了全新的体验。本文将深入探讨矩阵碰一碰发视频源码的技术开发过程,从原理到实现,为开发者提供全面的技术指引。 一、技术原理 …

测试工程师的linux 命令学习(持续更新中)

1.ls """1.ls""" ls -l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出 ls -l等同于 ll第一列共10位,第1位表示文档类型,d表示目录,-表示普通文件,l表示链接文件。…

HJ34 图片整理(Java版)

一、试题地址 图片整理_牛客题霸_牛客网 二、试题描述 描述 对于给定的由大小写字母和数字组成的字符串,请按照 ASCIIASCII 码值将其从小到大排序。 如果您需要了解更多关于 ASCIIASCII 码的知识,请参考下表。 输入描述: 在一行上输入一…

web开发工具之:三、JWT的理论知识,java的支持,封装的工具类可以直接使用

文章目录 前言一、JWT的理论知识1. 什么是 JWT(JSON Web Token)?2. **JWT 的组成**3. **JWT 的特点**4. **JWT 的使用场景**5. **JWT 的生命周期**6. **JWT 的优点**7. **JWT 的注意事项**5. **JWT 示例**总结 二、java的springboot支持1. po…

电路笔记(信号):Python 滤波器设计分析工具pyfda

目录 滤波器设置(3步实现滤波器设计)数据分析与使用pyfda功能界面数字滤波器数学表示线性相位线性相位的定义线性相位的特性 冲击响应quartus数据加载 CG 滤波器设置(3步实现滤波器设计) pip install pyfda #安装python依赖,详见https://pyfda.readthedocs.io/en/la…

【15】Word:互联网发展状况❗

目录 题目​ NO2 NO3 NO4 NO5 NO6 NO7.8.9 NO7 NO8 NO9 NO10 题目 NO2 布局→页面设置→纸张:A4→页边距:上下左右→版式:页眉/页脚页码范围:多页:对称页边距→内侧/外侧→装订线 NO3 首先为文档应用内置…

Web前端开发技术之HTMLCSS知识点总结

学习路线 一、新闻网界面1. 代码示例2. 效果展示3. 知识点总结3.1 HTML标签和字符实体3.2 超链接、颜色描述与标题元素3.3 关于图片和视频标签:3.4 CSS引入方式3.5 CSS选择器优先级 二、flex布局1. 代码示例2. 效果展示3. 知识点总结3.1 span标签和flex容器的区别3.…

BUUCTF Web

[极客大挑战 2019]LoveSQL union注入 是sql注入类型 输入1 发现不是数字型注入,那就是字符型注入。判断字段数,输入order by 4 #发现错误,就存在三个字段数 判断回显点:1 union select 1,2,3 # 判断回显点为2,3 判断数据库名 …

Kinova仿生机械臂Gen3搭载BOTA 力矩传感器SeneOne:彰显机器人触觉 AI 与六维力传感的融合力量

随着工业4.0时代的到来,自动化和智能化成为制造业的趋势。机器人作为实现这一趋势的重要工具,其性能和智能水平直接影响到生产效率和产品质量。然而,传统的机器人系统在应对复杂任务时往往缺乏足够的灵活性和适应性。为了解决这一问题&#x…

【数据库】MySQL数据库SQL语句汇总

目录 1.SQL 通用语法 2.SQL 分类 2.1.DDL 2.2.DML 2.3.DQL 2.4.DCL 3.DDL 3.1.数据库操作 3.1.1.查询 3.1.2.创建 3.1.3.删除 3.1.4.使用 3.2.表操作 3.2.1.查询 3.2.2.创建 3.2.3.数据类型 3.2.3.1.数值类型 3.2.3.2.字符串类型 3.2.3.3.日期时间类型 3.2…

《汽车与驾驶维修》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答: 问:《汽车与驾驶维修》是不是核心期刊? 答:不是,是知网收录的第二批认定学术期刊。 问:《汽车与驾驶维修》级别? 答:省级。主管单位:中国机械工业联合会…

鸿蒙UI(ArkUI-方舟UI框架)-开发布局

文章目录 开发布局1、布局概述1)布局结构2)布局元素组成3)如何选择布局4)布局位置5)对子元素的约束 2、构建布局1)线性布局 (Row/Column)概述布局子元素在排列方向上的间距布局子元素在交叉轴上的对齐方式(…