statsmodels专栏4——深度解析:Python中的Statsmodels库时间序列分析

这篇具有很好参考价值的文章主要介绍了statsmodels专栏4——深度解析:Python中的Statsmodels库时间序列分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

时间序列分析在数据科学领域中占据着重要地位,它不仅帮助我们理解数据的趋势和模式,还能够提供对未来趋势的预测。在众多时间序列分析工具中,Python中的Statsmodels库以其强大的功能和灵活性备受青睐。本文将深入探讨Statsmodels库在时间序列分析中的应用,聚焦于移动平均模型(MA)、自回归模型(AR)以及ARIMA模型,带你领略Statsmodels的精妙之处。

写在开头

时间序列分析是一种通过对时间相关数据的观察、建模和预测来发现模式和规律的技术。在金融、气象、销售等众多领域,时间序列分析都发挥着至关重要的作用。而在这个领域,Statsmodels库以其丰富的功能和强大的性能表现得尤为突出。

1 移动平均模型(MA)

1.1 移动平均模型的基本原理

移动平均模型(Moving Average Model,简称MA模型)是一种时间序列分析中常用的模型,用于描述时间序列数据中的趋势和季节性变化。MA模型的基本原理涉及到对数据的平均值进行移动计算,以揭示数据的平滑趋势。

以下是MA模型的基本原理:

  1. 滑动平均的概念: MA模型基于滑动平均的思想,通过在时间序列上滑动一个固定大小的窗口,计算窗口内数据的平均值。这个窗口的大小决定了平均值的稳定性,较大的窗口可以平滑噪声,但可能较慢地适应趋势的变化。

  2. 平均值的表示: 在MA模型中,时间点 t 处的观测值被表示为过去几期的白噪声(随机误差项)的线性组合。具体来说,第 t 期的观测值 Y(t) 可以被表示为:

    Y ( t ) = μ + ϵ ( t ) + θ 1 ϵ ( t − 1 ) + θ 2 ϵ ( t − 2 ) + … + θ q ϵ ( t − q ) Y(t) = \mu + \epsilon(t) + \theta_1 \epsilon(t-1) + \theta_2 \epsilon(t-2) + \ldots + \theta_q \epsilon(t-q) Y(t)=μ+ϵ(t)+θ1ϵ(t1)+θ2ϵ(t2)++θqϵ(tq)

    其中, μ \mu μ 是均值, ϵ ( t ) \epsilon(t) ϵ(t) 是白噪声, θ 1 , θ 2 , … , θ q \theta_1, \theta_2, \ldots, \theta_q θ1,θ2,,θq 是MA模型的参数,而 q 是模型的阶数。

  3. 模型的阶数: MA模型的阶数 q 表示窗口的大小,即过去 q 期的观测值会对当前期的观测值产生影响。阶数的选择通常需要结合实际问题和模型拟合的效果进行调整。

  4. 模型的建模和预测: 利用过去的观测值,通过估计模型的参数,可以建立MA模型。然后,利用该模型对未来的观测值进行预测。

1.2 利用Statsmodels进行MA模型的建模和预测

Statsmodels库提供了丰富的时间序列分析工具,通过它,我们可以轻松地建立和训练移动平均模型,并进行未来数据的预测。
现在如果要分析过去几个季度每月销售额的变化,以便更好地理解销售趋势并进行未来销售的预测,我们利用Python代码进行构建:

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

# 生成模拟数据
np.random.seed(12)
date_rng = pd.date_range(start='2022-01-01', end='2022-12-31', freq='M')
sales_data = np.random.randint(50, 150, size=(len(date_rng)))

sales_df = pd.DataFrame(data={'date': date_rng, 'sales': sales_data})
sales_df.set_index('date', inplace=True)

# 利用Statsmodels建立ARIMA模型
order = (0, 0, 1)  # 设置MA阶数为1
arima_model = ARIMA(sales_df['sales'], order=order)
arima_result = arima_model.fit()

# 模型评估
print(arima_result.summary())

# 预测未来3个月的销售额
forecast_steps = 3
forecast = arima_result.get_forecast(steps=forecast_steps)

# 获取预测结果
forecast_values = forecast.predicted_mean

# 输出预测结果
print("未来3个月的销售额预测:")
print(forecast_values)

# 可视化观测值、预测值和置信区间
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.plot(sales_df['sales'], label='Observations', marker='o')
plt.plot(forecast_values, label='Forecast', linestyle='--', marker='o', color='red')
plt.fill_between(forecast.conf_int().index, forecast.conf_int()['lower sales'], forecast.conf_int()['upper sales'], color='pink', alpha=0.3, label='Confidence Interval')
plt.title('Sales Forecast with MA(1) Model - Observations vs Forecast')
plt.legend()

# 残差图
residuals = sales_df['sales'] - arima_result.fittedvalues
plt.subplot(2, 1, 2)
plt.plot(residuals, label='Residuals', linestyle='--', marker='o')
plt.axhline(0, color='red', linestyle='--', linewidth=1, label='Zero Line')
plt.title('Residuals of MA(1) Model')
plt.legend()
plt.tight_layout()
plt.show()


运行上述代码后,我们可以得到下面的结果:
statmodels库里有时间序列分析的数据码,数据分析,数据挖掘,python,开发语言,数据分析,时间序列,数据挖掘
statmodels库里有时间序列分析的数据码,数据分析,数据挖掘,python,开发语言,数据分析,时间序列,数据挖掘

从上述的模型评估结果,我们可以得到下面的信息:

  • Log Likelihood(对数似然): Log Likelihood 的值为 -54.927,该值越接近零越好,表示模型对观测数据的拟合效果越好。

  • AIC(赤池信息准则)和BIC(贝叶斯信息准则): AIC 和 BIC 分别为 115.855 和 117.309。在比较不同模型时,我们通常选择具有较小 AIC 和 BIC 值的模型,因为它们更好地平衡了模型的拟合效果和复杂性。

  • 模型系数(coef): 我们关注 ma.L1 的系数,其值为 0.8383。该系数表示过去一个期的白噪声对当前销售额的影响。系数的显著性通常通过 P-value 来判断,这里 P-value 为 0.013,小于通常选择的显著性水平(如 0.05),说明该系数是显著的。

  • 残差的方差(sigma2): sigma2 表示白噪声的方差,该值为 500.9042。较小的方差表示模型对数据的拟合较好。

  • Ljung-Box 统计量和 Jarque-Bera 统计量: 这两个统计量用于检验模型残差是否存在自相关性和非正态性。在这里,Ljung-Box 的 Q 统计量为 0.32,P-value 为 0.57,Jarque-Bera 统计量为 1.31,P-value 为 0.52。P-value 较大,表示模型的残差在统计上不显著地违反模型假设。

  • Heteroskedasticity(异方差性): H 统计量为 0.84,P-value 为 0.87。较大的 P-value 表示模型的残差在异方差性方面不显著。

综合评价:

该模型的Log Likelihood 较小,AIC 和 BIC 较大,可能存在过拟合的风险。模型的 ma.L1 系数显著,但在其他方面的统计量未完全符合理想情况。从上方的图形中可以观察出未来的趋势和季节性情况。为了更进一步分析,建议尝试其他ARIMA模型,调整阶数,以寻找更好的拟合效果。

建议和改进:

  1. 探索调整模型的阶数,包括 AR 和 MA 部分的阶数,以获得更好的拟合效果。
  2. 可以尝试其他时间序列模型,如 SARIMA(季节性ARIMA)等,以更好地考虑季节性因素。
  3. 考虑模型中可能存在的异方差性,可能需要进一步的处理。

2 自回归模型(AR)

2.1 自回归模型的概念

自回归模型(Autoregressive Model,简称AR模型)是一种用于时间序列分析的模型,它基于时间序列过去的观测值来预测未来的值。AR模型的核心思想是当前时刻的观测值与过去某些时刻的观测值之间存在一定的线性关系。

AR模型的数学表示如下:

X t = ϕ 1 X t − 1 + ϕ 2 X t − 2 + … + ϕ p X t − p + ε t X_t = \phi_1 X_{t-1} + \phi_2 X_{t-2} + \ldots + \phi_p X_{t-p} + \varepsilon_t Xt=ϕ1Xt1+ϕ2Xt2++ϕpXtp+εt

其中:

  • X t X_t Xt 是时间序列在时刻 t t t 的观测值。
  • ϕ 1 , ϕ 2 , … , ϕ p \phi_1, \phi_2, \ldots, \phi_p ϕ1,ϕ2,,ϕp 是模型的参数,代表了过去时刻观测值的权重。
  • X t − 1 , X t − 2 , … , X t − p X_{t-1}, X_{t-2}, \ldots, X_{t-p} Xt1,Xt2,,Xtp 是时间序列在过去时刻的观测值。
  • ε t \varepsilon_t εt 是白噪声,代表了模型中未被考虑的随机误差。

AR模型的阶数 p p p 表示考虑的过去观测值的数量。例如,AR(1)模型只考虑上一个时刻的观测值,而AR(2)模型考虑上两个时刻的观测值。

AR模型的特点包括:

  • 自相关性: AR模型反映了时间序列在不同时刻之间的自相关关系,即过去的观测值对当前值有影响。

  • 平稳性: AR模型在许多应用中假设时间序列是平稳的,即统计特性在时间上不发生明显变化。

  • 参数估计: 通过最小化残差平方和或最大似然估计等方法,可以估计AR模型的参数。

  • 模型诊断: 可以通过观察残差图、自相关图等进行模型的诊断和评估。。

2.2 使用Statsmodels进行AR模型的拟合和预测

Statsmodels库的ARIMA类可以方便地用于自回归模型的建模。
继续利用上方的数据进行建模分析:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm

# 生成模拟数据
np.random.seed(12)
date_rng = pd.date_range(start='2022-01-01', end='2022-12-31', freq='M')
sales_data = np.random.randint(50, 150, size=(len(date_rng)))

sales_df = pd.DataFrame(data={'date': date_rng, 'sales': sales_data})
sales_df.set_index('date', inplace=True)

# 利用Statsmodels建立AR模型
order = (2, 0, 0)  # AR(2)模型
ar_model = sm.tsa.AutoReg(sales_df['sales'], lags=order[0])
ar_result = ar_model.fit()

# 输出模型参数和统计信息
print(ar_result.summary())

# 预测未来的值
forecast_steps = 3
forecast = ar_result.predict(start=len(sales_df), end=len(sales_df)+forecast_steps-1, dynamic=False)

# 可视化
plt.plot(sales_df['sales'], label='Observations')
plt.plot(forecast, label='Forecast', linestyle='--', marker='o', color='red')
plt.title('AR Model - Observations vs Forecast')
plt.legend()
plt.show()

得到结果如下图:
statmodels库里有时间序列分析的数据码,数据分析,数据挖掘,python,开发语言,数据分析,时间序列,数据挖掘

2statmodels库里有时间序列分析的数据码,数据分析,数据挖掘,python,开发语言,数据分析,时间序列,数据挖掘
根据上方AutoReg模型的结果,我们可以得出以下结论:

  • Log Likelihood和AIC/BIC值: Log Likelihood(对数似然)和AIC/BIC(赤池信息准则/贝叶斯信息准则)是评估模型拟合好坏的指标。Log Likelihood越高,AIC和BIC越低越好。在这个例子中,Log Likelihood相对较低,而AIC和BIC相对较高,可能表明模型的拟合效果一般。

  • 系数解释: 模型的系数表示在每一个时间点上,当前销售额与前两个时间点的销售额之间的关系。在这里,sales.L1的系数为0.6029,sales.L2的系数为-0.5704。这些系数告诉我们,销售额与前两个时间点的销售额之间存在正向和负向的关联。

  • 显著性: 系数的P值表示其在模型中的显著性。在这里,const和sales.L2的P值较小,表明它们可能是显著的。

  • 残差: 模型的残差是观测值与模型预测值之间的差异。残差的标准差(S.D. of innovations)为20.577,表示模型的预测值相对于实际观测值的离散程度。

从实际应用的角度来看,该模型对于拟合这一年的销售数据的整体趋势表现得相对较好。然而,对于更准确的预测,可能需要更多的数据或者更复杂的模型。模型的有效性也取决于具体应用场景和对误差的容忍度。

3 ARIMA模型

3.1 将AR和MA结合,介绍ARIMA模型

ARIMA(AutoRegressive Integrated Moving Average)模型是一种用于时间序列分析和预测的经典统计方法。它结合了自回归(AR)和移动平均(MA)两种模型,同时具有差分(Integrated)的操作。ARIMA模型通常表示为ARIMA(p, d, q),其中:

  • p(自回归阶数):表示模型中使用的自回归项的数量。
  • d(差分阶数):表示使时间序列平稳所需的差分次数。
  • q(移动平均阶数):表示模型中使用的移动平均项的数量。

ARIMA模型的核心思想是通过对时间序列进行差分,将非平稳时间序列转化为平稳时间序列,然后利用自回归和移动平均项来捕捉数据中的结构和模式。

ARIMA模型的建模步骤通常包括:

  1. 平稳性检验: 检验时间序列是否平稳,如果不平稳,需要进行差分直到平稳。

  2. 选择ARIMA参数: 选择合适的p、d、q值,可以通过观察自相关图(ACF)和偏相关图(PACF)来进行初步选择。

  3. 建立ARIMA模型: 使用选定的p、d、q值建立ARIMA模型。

  4. 模型拟合: 利用时间序列数据对ARIMA模型进行拟合。

  5. 模型诊断: 对模型进行诊断,检查残差的自相关性和偏相关性,确保模型符合假设。

  6. 模型预测: 利用已建立的ARIMA模型进行未来时点的预测。

3.2 利用Statsmodels进行ARIMA建模和预测

通过Statsmodels库,我们可以轻松地应用ARIMA模型:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm

# 生成模拟数据
np.random.seed(123)
date_rng = pd.date_range(start='2020-01-01', end='2022-12-31', freq='M')
sales_data = np.random.randint(50, 150, size=(len(date_rng)))

sales_df = pd.DataFrame(data={'date': date_rng, 'sales': sales_data})
sales_df.set_index('date', inplace=True)

# 平稳性检验
result = sm.tsa.adfuller(sales_df['sales'])
print("ADF Statistic:", result[0])
print("p-value:", result[1])
print("Critical Values:", result[4])

# ACF 和 PACF
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))

# 自相关图
plot_acf(sales_df['sales'], lags=12, ax=ax1)
ax1.set_title('Autocorrelation Function')

# 偏相关图
plot_pacf(sales_df['sales'], lags=12, ax=ax2)
ax2.set_title('Partial Autocorrelation Function')

plt.show()

# 选择ARIMA参数
order = (1, 0, 1)

# 建立ARIMA模型
arima_model = sm.tsa.ARIMA(sales_df['sales'], order=order)
arima_result = arima_model.fit()

# 模型诊断
# 模型评估
print(arima_result.summary())
residuals = arima_result.resid
fig, ax = plt.subplots(figsize=(10, 6))
sm.graphics.tsa.plot_acf(residuals, lags=12, ax=ax)
plt.title("Autocorrelation of Residuals")
plt.show()

# 模型预测
forecast_steps = 12
forecast = arima_result.get_forecast(steps=forecast_steps)
forecast_values = forecast.predicted_mean

# 输出预测结果
print("未来12个月的销售额预测:")
print(forecast_values)



运行上述代码后,得出下面的结果:
statmodels库里有时间序列分析的数据码,数据分析,数据挖掘,python,开发语言,数据分析,时间序列,数据挖掘
statmodels库里有时间序列分析的数据码,数据分析,数据挖掘,python,开发语言,数据分析,时间序列,数据挖掘

statmodels库里有时间序列分析的数据码,数据分析,数据挖掘,python,开发语言,数据分析,时间序列,数据挖掘
从上方的结果中,我们可以得出下面的结论:

  1. AIC和BIC值:

    • AIC值:344.388
    • BIC值:350.722

    通常情况下,我们会选择AIC和BIC值较小的模型,因为它们表示了对数似然度和模型参数数量的权衡。在这个例子中,AIC和BIC的值都相对较小,表示该模型相对合适。

  2. 参数估计:

    • const(截距项)的系数为113.8213,对应的标准误差为3.603。
    • ar.L1(AR(1)项)的系数为0.2112,对应的标准误差为0.778。
    • ma.L1(MA(1)项)的系数为-0.4549,对应的标准误差为0.698。

    这些系数表示了模型中各项的影响。需要注意的是,系数的显著性和方向对于理解模型的有效性至关重要。在这个例子中,截距项的系数显著不为零,但AR(1)和MA(1)项的系数未显著。

  3. 残差分析:

    • Ljung-Box统计量(Q值)为0.00,对应的p-value为0.95。这表示在模型的残差序列中没有显著的自相关。
    • Jarque-Bera统计量(JB值)为1.70,对应的p-value为0.43。这表示在模型的残差序列中未发现显著的偏度和峰度。

残差分析是评估模型拟合效果的关键部分,因为它可以告诉我们模型是否遗漏了某些重要的信息。

总体而言,该模型的AIC和BIC较小,残差序列无明显的自相关,并且基本符合正态性的要求。然而,由于AR(1)和MA(1)项的系数未显著,可能需要进一步调整模型的阶数或考虑其他模型。模型的有效性可能会因为时间序列的特性而有所不同,因此在实际应用中可能需要进一步优化。

写在最后

通过本文的介绍,我们深入了解了Statsmodels库在时间序列分析中的三个关键模型:移动平均模型(MA)、自回归模型(AR)和ARIMA模型。Statsmodels以其强大的功能和灵活性为数据科学家和分析师提供了强大的工具,使他们能够更好地理解和预测时间序列数据。无论是预测未来销售趋势,还是分析股市波动,Statsmodels都是一个值得信赖的伙伴。希望通过这篇文章,读者对Statsmodels库在时间序列分析中的应用有了更深入的认识,为应对不同时间序列问题提供了强大的工具。文章来源地址https://www.toymoban.com/news/detail-840554.html

到了这里,关于statsmodels专栏4——深度解析:Python中的Statsmodels库时间序列分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 深度学习在组织病理学图像分析中的应用: Python实现和代码解析

    引言 组织病理学是医学的一个重要分支,它主要研究组织和细胞的形态学改变,以确定疾病的性质和发展。随着深度学习技术的进步,其在组织病理学图像分析中的应用也变得日益重要。本文旨在介绍如何使用Python和深度学习技术来处理和分析组织病理学图像。 1. 环境配置

    2024年02月12日
    浏览(9)
  • 时间序列预测模型实战案例(三)(LSTM)(Python)(深度学习)时间序列预测(包括运行代码以及代码讲解)

    时间序列预测模型实战案例(三)(LSTM)(Python)(深度学习)时间序列预测(包括运行代码以及代码讲解)

    目录 引言 LSTM的预测效果图 LSTM机制 了解LSTM的结构 忘记门 输入门 输出门 LSTM的变体 只有忘记门的LSTM单元 独立循环(IndRNN)单元 双向RNN结构(LSTM) 运行代码 代码讲解 LSTM(Long Short-Term Memory)是一种常用的循环神经网络(RNN)模型,用于处理序列数据,具有记忆长短期的能力。

    2024年02月08日
    浏览(16)
  • 《Python等级考试(1~6级)历届真题解析》专栏总目录

    《Python等级考试(1~6级)历届真题解析》专栏总目录

    ❤️ 专栏名称:《Python等级考试(1~6级)历届真题解析》 🌸 专栏介绍:中国电子学会《全国青少年软件编程等级考试》Python编程(1~6级)历届真题解析。 🚀 订阅专栏:原价 99.9,🔥 火爆订阅中 🔥,前 100 订阅 9.9。订阅后可阅读专栏内所有文章,本专栏持续更新中,欢迎

    2024年02月05日
    浏览(13)
  • 《人工智能专栏》必读150篇 | 专栏介绍 & 专栏目录 & Python与PyTorch | 机器与深度学习 | 目标检测 | YOLOv5及改进 | YOLOv8及改进 | 关键知识点 | 工具

    《人工智能专栏》必读150篇 | 专栏介绍 & 专栏目录 & Python与PyTorch | 机器与深度学习 | 目标检测 | YOLOv5及改进 | YOLOv8及改进 | 关键知识点 | 工具

    各位读者们好,本专栏最近刚推出,限于个人能力有限,不免会有诸多错误,敬请私信反馈给我,接受善意的提示,后期我会改正,谢谢,感谢。 第一步 :[ 购买点击跳转 ] 第二步 : 代码函数调用关系图(全网最详尽-重要) 因文档特殊,不能在博客正确显示,请移步以下链接

    2024年02月02日
    浏览(71)
  • Python中的ARIMA模型、SARIMA模型和SARIMAX模型对时间序列预测

    Python中的ARIMA模型、SARIMA模型和SARIMAX模型对时间序列预测

    最近我们被客户要求撰写关于时间序列预测的研究报告,包括一些图形和统计输出。  使用ARIMA模型,您可以使用序列过去的值预测时间序列。在本文中,我们从头开始构建了一个最佳ARIMA模型,并将其扩展到Seasonal ARIMA(SARIMA)和SARIMAX模型。 时间序列是在定期时间间隔内记

    2024年02月04日
    浏览(13)
  • Java中的内存溢出与内存泄漏深度解析

    目录 引言 一. 内存溢出(Memory Overflow) 1.1 堆内存溢出 1.2 栈内存溢出 1.3 内存溢出的解决策略 1.3.1 优化对象的创建和销毁 1.3.2 调整堆内存大小 1.3.3  使用内存分析工具 1.3.4 避免创建过大的对象 1.3.5 定期清理不再使用的对象 二、 内存泄漏(Memory Leak) 2.1Java内存泄漏的典

    2024年02月19日
    浏览(14)
  • OAuth 2 中的 Scope 与 Role 深度解析

    OAuth 2 :除非有“标准”、“协议”等特别说明,例如:OAuth 2 标准或 OAuth 2 协议,否则本文中的 OAuth 2 均指代的是 Spring Security OAuth2 、 Spring Authorization Server 等 OAuth 2 协议的具体实现组件或框架。 Spring Security 生态 :在本文中为了表述方便,“Spring Security 生态”指代的是 S

    2024年02月13日
    浏览(32)
  • Linux中的网络命令深度解析与CentOS实践

    Linux中的网络命令深度解析与CentOS实践 在Linux系统中,网络命令是管理和诊断网络问题的关键工具。无论是网络管理员还是系统开发者,熟练掌握这些命令都是必不可少的。本文将深入探讨Linux中常用的网络命令,并以CentOS为例,展示这些命令的具体应用。 一、ping命令 ping命

    2024年04月10日
    浏览(8)
  • Go语言中的Select:深度解析与实战案例

    select  是操作系统中的系统调用,我们以前在学校中学习操作系统课程或者在工作当中,肯定都使用过或者了解过  select 、 poll  和  epoll  等函数构建 I/O 多路复用模型提升程序的性能。Go 语言的  select  与操作系统中的  select  很相似,今天这篇文章会深度解析 Go 语言 

    2024年01月24日
    浏览(15)
  • 干货 | 深度学习在携程搜索词义解析中的应用

    干货 | 深度学习在携程搜索词义解析中的应用

    作者简介 携程旅游研发部大数据与AI研发团队,为旅游事业部提供丰富的AI技术产品和技术能力。 一、背景介绍 搜索是电商最重要的门面之一,大部分用户通过搜索来找到他们想要的商品,因此搜索是用户表达意图最直接的方式,也是转化率最高的流量来源之一。绝大部分的

    2024年02月06日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包