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

构建AI智能体:十四、从“计算”到“洞察”:AI大模型如何让时间序列数据“开口说话”

一、我需要学习“时间序列”吗

        今天主题是“时间序列模型”,在开始之前我们先讨论一下学习大模型需要了解时间序列吗,首先要看我们的目标,学习大模型也必须也要有自己的目标。

应用型工程师:

        如果想成为一名应用大模型的专业工程师,比如构建一个智能聊天客服机器人、开发一个文档总结工具、创建一个代码生成助手,那么,不需要深入研究时间序列模型,此时你的核心技能应该是:

强化提示词工程:如何设计问题才能从大模型得到最佳答案;

数据处理:如何准备和清洗用于微调的文本数据;   

        但了解后会更强大,理解时间序列能让你看到一个更广阔的世界,如果你的项目正好需要分析和预测时间数据(比如分析用户活跃度的趋势、预测产品未来销量),或者给大模型喂数据时,经常需要构造具有时间上下文的信息,如果你有时间序列的思维,你会更清楚如何构建这些数据。基于此,对于应用者,时间序列不是入门门槛,但它是一个能让你从“会用”到“用好”、“用精”的关键进阶技能。

核心算法研究者:

        如果你的目标是深入大模型的原理,甚至参与训练和创造新的大模型,那么时间序列的知识就变得至关重要。

  • 大模型处理的就是“序列”:大模型的根本任务是处理序列信息,无论是文本序列、代码序列,还是图像切块后的序列。理解ARIMA、RNN、LSTM如何捕捉序列中的依赖关系,会让你更深刻地理解Transformer为什么这么设计。

  • 多模态趋势:大模型不仅仅是语言模型,而是多模态模型。这意味着它们要统一处理文本、图像、音频、视频等各种数据。音频和视频本质上是时间序列!音频是声波随时间的变化,视频是图像帧随时间的变化。要让大模型真正理解和生成流畅的语音和视频,就必须拥有强大的时间序列建模能力。

  • 前沿探索:一个非常前沿的方向就是让大模型直接处理数值时间序列数据(比如股票价格、传感器数据)。研究人员正在尝试将时间序列数据像文本一样进行“分词”,然后训练大模型来理解和预测它们。如果你不懂时间序列,根本无法进入这个领域。

二、什么是时间序列

        时间序列数据是按时间顺序索引的一系列数据点。它最大的特点是数据点之间存在依赖关系,即“时间上下文”至关重要。这与传统的独立同分布数据截然不同。从每日的股票收盘价、每小时的气温变化,到每分钟的网站点击流,时间序列无处不在。分析它的目的主要有两个:描述历史规律(如季节性波动)和预测未来值(如预测明日销售额)。

用一句话概括:时间序列模型,就是一个“看过去、猜未来”的数学工具。它的核心工作就是:从历史数据中找出规律,然后用这个规律来预测未来会发生什么。

一个简单的例子:卖冰淇淋的小店,想象一下,你开了一家冰淇淋店。

  • 你的“历史数据”是:过去几年,每天卖了多少冰淇淋。

  • 数据里的“规律”是

    1. 趋势:生意越来越好,每年都比前一年多卖一些。(长期向上)

    2. 季节性每年夏天卖的都比冬天多得多;每个周末卖的都比周一到周五多。(周期性波动)

    3. 突发噪音:突然有一天卖得特别差,因为那天下暴雨了。(无法预测的偶然事件)

  • 你现在遇到的“问题”是:下个月我该进多少货?进多了会化掉,进少了又没钱赚。

这时,时间序列模型就可以登场了!它会做两件事:

  1. 分析历史:模型会像一位精明的老师傅,仔细研究你过去几年的销售记录,把上面提到的“趋势”和“季节性”(夏天/周末)这些稳定规律都总结出来。

  2. 预测未来:老师傅根据总结出的规律,再看看下个月的日历(有多少个周末?天气是不是夏天?),然后告诉你:“老板,根据以往经验,下个月大概能卖5000盒冰淇淋,你就按这个量进货吧!”

        当然,它没法预测“下暴雨”这种偶然事件,但它能帮你做出一个基于历史数据的最优猜测,这远比你自己凭感觉瞎猜要准确得多!

三、时间序列的核心概念与预处理

  • 组成成分

    • 趋势:数据长期变化的总体方向(上升、下降或平稳)。

    • 季节性:在固定周期(如一天、一年)内重复出现的规律波动。

    • 周期性:非固定频率的波动(如经济周期)。

    • 残差:去除趋势、季节性和周期后剩下的随机“噪音”。

  • 平稳性:一个平稳的时间序列其统计特性(如均值、方差)不随时间变化。这是ARIMA等许多模型的基本要求。Augmented Dickey-Fuller (ADF) 检验是一种常用的统计检验方法,其原假设是“序列非平稳”。如果p值小于显著性水平(如0.05),则拒绝原假设,认为序列平稳。

  • 预处理差分(用当前值减去前一时刻的值)是消除趋势和季节性的最强有力工具,常用于将非平稳序列转换为平稳序列。

四、时间序列模型家族

1. 平滑法

平滑法适合做短期预测,概念简单。Holt-Winters 模型通过三种成分(水平、趋势、季节)的平滑方程,能有效地处理具有趋势和季节性的数据。

    示例:使用Holt-Winters模型进行季节性分解与预测

    目标:分析一段具有明显趋势和季节性的模拟月度销售数据,并进行预测。

    # 导入必要的库
    import pandas as pd  # 用于数据处理和操作
    import numpy as np   # 用于数值计算和数组操作
    import matplotlib.pyplot as plt  # 用于数据可视化
    from statsmodels.tsa.holtwinters import ExponentialSmoothing  # 导入Holt-Winters模型
    from statsmodels.tsa.seasonal import seasonal_decompose  # 导入季节性分解工具
    # 1. 创建模拟数据(包含趋势 + 季节性 + 随机噪声)
    # 生成100个月度日期范围,从2018-01-01开始
    dates = pd.date_range(start='2018-01-01', periods=100, freq='M')
    # 创建线性趋势成分:从50逐渐增加到150
    trend = np.linspace(50, 150, 100)
    # 创建季节性成分:使用正弦函数模拟周期性变化(4个完整周期)
    seasonality = 10 * np.sin(np.linspace(0, 4*np.pi, 100))
    # 创建随机噪声成分:均值为0,标准差为5的正态分布随机数
    noise = np.random.normal(0, 5, 100)
    # 将三个成分相加形成最终的时间序列
    sales = trend + seasonality + noise
    # 将数据转换为Pandas Series对象,并指定日期索引
    ts = pd.Series(sales, index=dates)
    # 2. 可视化 & 季节性分解
    # 使用加法模型对时间序列进行分解,得到趋势、季节性和残差成分
    result = seasonal_decompose(ts, model='additive')
    # 绘制分解后的各个成分图表
    result.plot()
    # 显示图形
    plt.show()
    # 3. 拟合Holt-Winters模型(使用加法趋势和加法季节性)
    # 创建指数平滑模型,指定趋势和季节性类型为加法模型,季节性周期为12个月
    model = ExponentialSmoothing(ts, trend='add',      # 加法趋势seasonal='add',   # 加法季节性seasonal_periods=12)  # 一年12个月为一个季节性周期
    # 使用数据拟合模型
    model_fit = model.fit()
    # 4. 进行未来12步(一年)预测
    # 使用拟合好的模型预测未来12个时间点的值
    forecast = model_fit.forecast(12)
    # 5. 绘图展示历史数据和预测结果
    # 创建一个新的图形,设置图形大小
    plt.figure(figsize=(10, 6))
    # 绘制历史数据曲线,添加标签
    plt.plot(ts, label='Historical Data')
    # 绘制预测数据曲线,使用红色并添加标签
    plt.plot(forecast, label='Forecast', color='red')
    # 添加图例
    plt.legend()
    # 添加标题
    plt.title('ETS Model Forecast')
    # 显示图形
    plt.show()

    代码分解:

    1. 数据生成部分

      • trend:线性趋势,模拟数据的长期变化方向

      • seasonality: 季节性成分,使用正弦函数模拟周期性波动

      • noise:随机噪声,模拟现实世界中的不可预测因素

      • 我们创建了一个包含三种成分的模拟时间序列:

    2. 季节性分解

      • 趋势(Trend):数据的长期方向

      • 季节性(Seasonal):固定周期的重复模式

      • 残差(Residual):去除趋势和季节性后的随机波动

      • seasonal_decompose 函数将时间序列分解为三个组成部分:

    3. Holt-Winters模型

      • 使用指数平滑方法,特别适合具有趋势和季节性的时间序列

      • trend='add' 和 seasonal='add' 指定使用加法模型(而不是乘法模型)

      • seasonal_periods=12 指定季节性周期为12个月(一年)

    4. 预测与可视化

      • 使用拟合好的模型预测未来12个月的值

      • 将历史数据和预测结果绘制在同一图表中,便于比较

            这段代码完整展示了如何使用Holt-Winters模型进行时间序列分析和预测,从数据生成到模型拟合再到结果可视化的全过程。

    图片

    根据销量数据进行预测:

    图片

    那么,Holt-Winters模型中的Trend、Seasonal、Resid该怎么理解呢?

    通过直观的分析冰淇淋销量的示例来了解,假设你有一家冰淇淋店,过去三年的每日销量就是你的时间序列数据。Holt-Winters模型就像一个精明的老师傅,他会把销量分解成三个部分来看:

    1. Trend - 趋势:代表“大方向”的“战略家”

    • 它是数据在较长时期内表现出来的总体运动方向。它忽略了短期的波动,只看大局。

    • 在冰淇淋例子中:

      • 上升趋势:因为你的店口碑很好,附近小区入住的人也越来越多了,所以整体上,生意一年比一年好。今年的平均销量比去年高,明年的平均销量预计又会比今年高。这个“逐年变好”的大方向,就是上升趋势

      • 下降趋势:如果对面新开了一家更大的竞争对手,导致你的顾客流失,销量可能呈现下降趋势

      • 平稳趋势:如果市场稳定,销量每年都差不多,那就是平稳趋势(没有明显趋势)。

    • 一句话理解Trend: “我们的生意从长期来看,是在变好、变差,还是维持原样?”

    2. Seasonal - 季节性:代表“周期性规律”的“节律大师”

    • 它是在固定周期内重复出现的、规律性的波动。这个周期是已知且固定的。

    • 在冰淇淋例子中:

      • 年度季节性:毫无疑问,每年夏天的销量都会达到顶峰,而每年冬天的销量都会跌入谷底。这个规律年年如此,非常稳定。

      • 每周季节性:即使在夏天,每周的周末销量也会比工作日更高。

    • 季节性成分就是把这些固定的、可预测的周期性规律量化出来。 模型会学习到:“哦,在7月份,销量通常会比年平均水平高出200%;而在1月份,销量通常会比年平均水平低60%。”

    • 一句话理解Seasonal: “在一年四季、一周七天里,我们的销量有哪些雷打不动的规律?”

    3. Resid - 残差:代表“随机噪音”的“意外事件”

    • 它是在你剥离了趋势季节性这两个主要规律后,剩下的、无法被解释的部分。它完全是随机的、不可预测的“噪音”。

    • 在冰淇淋例子中:

      • 本来模型预测今天能卖100个冰淇淋(基于“上升趋势”和“夏天”这个季节性)。

      • 但是,今天突然下了一场暴雨,导致实际只卖了30个。

      • 又或者,今天突然有个公司跑来团建,一口气买了200个,导致销量远超预测。

      • 这场暴雨和这个团建订单,就是残差。模型无法提前预测这种突发性的单一事件。

    • 一句话理解Resid: “在剔除了所有长期规律和周期规律后,剩下的纯粹运气和意外成分。” 一个理想的模型,其残差应该是完全随机的,没有任何模式可言。如果残差还有模式,说明有规律没被模型捕捉到。

    总结与联想

    成分

    角色

    冰淇淋例子

    关键特点

    Trend (趋势)

    战略家

    生意逐年变好

    看长期大方向

    Seasonal (季节性)

    节律大师

    夏天旺,冬天淡;周末好,周中差

    固定的周期规律

    Resid (残差)

    意外事件

    某天突然下暴雨或来了个大订单

    完全随机,无法预测

    所以,Holt-Winters模型就是在做一件事:
    从历史数据中,把这“三重人格”——趋势、季节性、残差——一一剥离出来。然后,它把“趋势”和“季节性”这两个有规律的成分投射到未来,从而得到对未来的预测。 而“残差”部分,因为无法预测,就被丢弃了。

    2. ARIMA模型

    ARIMA模型这是经典方法中的核心和难点。

    • AR (AutoRegressive - 自回归): “我认为,未来的数据和过去的数据有关系。” 比如,过去几天卖得好,明天可能也会卖得好。他会用一个公式来描述“过去7天”对“明天”的影响有多大。

    • I (Integrated - 积分): 这是个“稳定器”。他发现如果数据一直上升(有趋势),就很难预测。所以他先把数据做差分处理。

      • 差分:今天销量 - 昨天销量 = 一个增长值。这样就把“上升趋势”转换成了“在零附近波动”的稳定数据,就好预测多了。

    • MA (Moving Average - 移动平均): “我觉得,未来的数据和过去的预测误差也有关系。” 比如,我昨天预测卖了100个,结果只卖了90个,差了10个。这个“误差”信息对修正明天的预测也有帮助。

    所以,ARIMA就是一个既考虑过去的数据,又考虑过去的误差,还先把数据变稳定的综合型侦探。他的升级版叫SARIMA,额外擅长处理季节性问题(比如冰淇淋夏天的销量规律)。

    ARIMA模型就是三者的结合,记为 ARIMA(p, d, q)。SARIMA 在此基础上增加了对季节性的建模参数 (P, D, Q, S),其中S是季节周期。

    示例:通过ARIMA模型对时间序列进行建模和预测

    # 使用ARMA模型进行时间序列预测
    import pandas as pd  # 数据处理库
    import matplotlib.pyplot as plt  # 绘图库
    import statsmodels.api as sm  # 统计模型库
    # 使用新的ARIMA模块替代已弃用的ARMA(ARIMA(p,0,q)等价于ARMA(p,q))
    from statsmodels.tsa.arima.model import ARIMA  # ARIMA模型
    from statsmodels.graphics.api import qqplot  # Q-Q图绘制工具
    # 创建时间序列数据(这里是一组示例数据)
    data = [3821, 4236, 3758, 6783, 4664, 2589, 2538, 3542, 4626, 5886, 6233, 4199, 3561, 2335, 5636, 3524, 
    4327, 6064, 3912, 1356, 4305, 4379, 4592, 4233, 4281, 1613, 1233, 4514, 3431, 2159, 2322, 4239, 4733, 
    2268, 5397, 5821, 6115, 6631, 6474, 4134, 2728, 5753, 7130, 7860, 6991, 7499, 5301, 2808, 6755, 6658, 
    6944, 6372, 8380, 7366, 6352, 8333, 8281, 11548, 10823, 13642, 9973, 6723, 13416, 12205, 13942, 9590, 
    11693, 9276, 6519, 6863, 8237, 10122, 8646, 9749, 5346, 4836, 9806, 7502, 9387, 11078, 9832, 6886, 4285, 
    8351, 9725, 11844, 12387, 10666, 7072, 6429]
    # 将数据转换为Pandas Series对象,便于时间序列分析
    data = pd.Series(data)
    # 为数据创建时间索引(从1901年到1990年,共90个年份)
    data_index = sm.tsa.datetools.dates_from_range('1901','1990')
    #print(data_index)  # 可以打印查看生成的时间索引
    # 将时间索引分配给数据
    data.index = pd.Index(data_index)
    # 绘制原始数据图,设置图形大小
    data.plot(figsize=(12,8))
    plt.title('Original Time Series Data (1901-1990)')  # 添加标题
    plt.ylabel('Value')  # 添加y轴标签
    plt.xlabel('Year')  # 添加x轴标签
    plt.show()  # 显示图形
    # 创建ARIMA模型,使用order=(7,0,0)表示ARMA(7,0)模型
    # 参数说明:p=7(自回归阶数), d=0(差分阶数), q=0(移动平均阶数)
    arma = ARIMA(data, order=(7,0,0)).fit()  # 拟合模型
    # 打印模型的AIC值(赤池信息准则,用于模型选择,越小越好)
    print('AIC: %0.4lf' %arma.aic)
    # 使用拟合好的模型进行预测
    # 预测时间范围:从1990年到2000年(共11个时间点)
    predict_y = arma.predict(start='1990', end='2000')
    # 绘制预测结果
    fig, ax = plt.subplots(figsize=(12, 8))  # 创建图形和坐标轴
    ax = data.loc['1901':].plot(ax=ax)  # 绘制1901年至今的原始数据
    predict_y.plot(ax=ax)  # 在同一坐标轴上绘制预测值
    plt.title('ARMA(7,0) Model Forecast')  # 添加标题
    plt.ylabel('Value')  # 添加y轴标签
    plt.xlabel('Year')  # 添加x轴标签
    plt.legend(['Actual Data', 'Forecast'])  # 添加图例
    plt.show()  # 显示图形

    代码说明:

    1. ARMA模型简介

      • ARMA(自回归移动平均)模型是时间序列分析中的经典模型,由AR(自回归)和MA(移动平均)两部分组成

      • ARIMA(p,0,q)等价于ARMA(p,q),其中d=0表示不需要进行差分处理

    2. 模型参数选择

      • 代码中使用order=(7,0,0)表示AR(7)模型(只有自回归部分,没有移动平均部分)

      • 在实际应用中,通常需要通过ACF和PACF图或信息准则(如AIC)来确定最佳的p和q值

    3. 模型评估

      • AIC(Akaike Information Criterion)用于模型选择,值越小表示模型拟合越好

      • 在实际分析中,还应检查残差是否符合白噪声假设(可以使用QQ图或Ljung-Box检验)

    4. 预测可视化

      • 代码将原始数据与预测结果绘制在同一图表中,便于直观比较

      • 预测区间从1990年到2000年,展示了模型对未来值的预测能力

            这段代码展示了如何使用ARMA模型进行时间序列分析和预测的基本流程,包括数据准备、模型拟合、评估和预测可视化。

    模型训练:

    图片

    结果展示:

    图片

      AIC: 1616.0337  

      注意:声明使用ARIMA模型(其中I(0)表示不使用差分,因此实际上是ARMA模型)对时间序列进行建模和预测;

      重点:

              示例中的模型的参数order=(7,0,0)是怎么定义的,为什么是(7,0,0),而不是其他呢,这里的AIC值就起到了关键的作用,我们把参数值调整为(7,0,7) 试试,首先看看预测结果产生了明显的偏差,同时AIC值也明显变大;AIC相对更小,误差则会更小;

      AIC: 1633.3992

      图片

      示例:沪市指数预测(最优参数训练)

      使用ARMA工具对沪市指数进行预测:

      第一步,数据加载&探索

              按照不同的时间尺度(天,月,季度,年)可以将数据压缩,得到不同尺度的数据,然后做可视化呈现。

      df_month = df.resample('M').mean()

      第二步,模型选择&训练,在给定范围内,选择最优的超参数

              创建ARMA时间序列模型。我们并不知道p和q取什么值时,可以给它们设置一个区间范围,比如都是range(0,5),然后计算不同模型的AIC数值,选择最小的AIC数值对应的那个ARMA模型

      •第三步,模型预测,可视化呈现

              用这个最优的ARMA模型预测未来3个月的沪市指数走势,并将结果做可视化呈现。

      # 沪市指数走势预测,使用时间序列ARMA模型
      import numpy as np  # 数值计算库
      import pandas as pd  # 数据处理库
      import matplotlib.pyplot as plt  # 绘图库
      from statsmodels.tsa.arima_model import ARIMA  # ARIMA模型(传统接口)
      import statsmodels.api as sm  # 统计模型库
      import warnings  # 警告处理
      from itertools import product  # 用于生成参数组合
      from datetime import datetime, timedelta  # 日期时间处理
      import calendar  # 日历功能
      # 忽略警告信息
      warnings.filterwarnings('ignore')
      # 设置matplotlib中文字体显示
      plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
      plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
      # 数据加载
      df = pd.read_csv('./shanghai_index_1990_12_19_to_2020_03_12.csv')
      # 只保留时间戳和价格两列
      df = df[['Timestamp', 'Price']]
      # 将时间列转换为datetime类型,并设置为索引
      df.Timestamp = pd.to_datetime(df.Timestamp)
      df.index = df.Timestamp
      # 数据探索
      # print(df.head())
      # 按照不同时间粒度重新采样:月、季度、年
      df_month = df.resample('M').mean()  # 按月重采样并取均值
      df_Q = df.resample('Q-DEC').mean()  # 按季度重采样并取均值(季度末为12月)
      df_year = df.resample('A-DEC').mean()  # 按年重采样并取均值(年末为12月)
      # print(df_month)
      # 设置ARIMA模型参数范围
      ps = range(0, 5)  # 自回归阶数(p)的取值范围
      qs = range(0, 5)  # 移动平均阶数(q)的取值范围
      ds = range(1, 2)  # 差分阶数(d)的取值范围,这里固定为1阶差分
      # 生成所有可能的参数组合
      parameters = product(ps, ds, qs)
      parameters_list = list(parameters)
      print('parameters_list:', parameters_list)
      # 寻找最优ARIMA模型参数,即AIC值最小的模型
      results = []  # 存储所有参数组合及其对应的AIC值
      best_aic = float("inf")  # 初始化最佳AIC为正无穷
      # 遍历所有参数组合
      for param in parameters_list:try:# 使用SARIMAX模型(包含季节因素的ARIMA扩展)model = sm.tsa.statespace.SARIMAX(df_month.Price,  # 时间序列数据order=(param[0], param[1], param[2]),  # (p, d, q)参数# seasonal_order=(4, 1, 2, 12),  # 季节性参数(P, D, Q, S),此处被注释掉enforce_stationarity=False,  # 不强制要求平稳性enforce_invertibility=False  # 不强制要求可逆性).fit()except ValueError:print('参数错误:', param)continueaic = model.aic  # 获取模型的AIC值# 如果当前模型的AIC更小,则更新最佳模型if aic < best_aic:best_model = modelbest_aic = aicbest_param = paramresults.append([param, model.aic])  # 保存当前参数和AIC
      # 输出最优模型摘要信息
      print('最优模型: ')
      print(best_model.summary())
      # 准备预测未来数据
      df_month2 = df_month[['Price']]  # 只保留价格列
      future_month = 3  # 预测未来3个月
      # 获取最后一个月的时间
      last_month = pd.to_datetime(df_month2.index[len(df_month2)-1])
      date_list = []  # 存储预测的日期
      # 生成未来3个月的日期
      for i in range(future_month):# 计算下个月有多少天year = last_month.yearmonth = last_month.monthif month == 12:  # 如果是12月,则下个月是明年1月month = 1year = year + 1else:month = month + 1# 获取下个月的天数next_month_days = calendar.monthrange(year, month)[1]# 计算下个月的日期last_month = last_month + timedelta(days=next_month_days)date_list.append(last_month)
      # print('date_list=', date_list)
      # 创建未来3个月的空DataFrame,用于存储预测结果
      future = pd.DataFrame(index=date_list, columns=df_month.columns)
      # 将未来日期合并到原始数据中
      df_month2 = pd.concat([df_month2, future])
      # 使用最优模型进行预测
      # get_prediction方法返回预测区间,我们使用predicted_mean获取点预测值
      df_month2['forecast'] = best_model.get_prediction(start=0,  # 从第一个数据点开始end=len(df_month2)  # 到最后一个数据点(包括未来预测点)
      ).predicted_mean
      # 绘制沪市指数预测结果
      plt.figure(figsize=(30, 7))  # 设置图形大小
      # 绘制实际指数曲线
      df_month2.Price.plot(label='实际指数')
      # 绘制预测指数曲线(红色虚线)
      df_month2.forecast.plot(color='r', ls='--', label='预测指数')
      plt.legend()  # 显示图例
      plt.title('沪市指数(月)')  # 设置标题
      plt.xlabel('时间')  # 设置x轴标签
      plt.ylabel('指数')  # 设置y轴标签
      plt.show()  # 显示图形

      经过训练后的参数预测出的结果展示:

      图片

      先看看预定参数:

      图片

              先给定AIC一个基础值,然后循环每组参数,每次循环得出的AIC和初始AIC比较,将小的AIC值更新并记录,到下次循环时继续比较,得出最低的AIC值为止,即可得出最优参数值;

      最优模型:                                 SARIMAX Results
      ==============================================================================
      Dep. Variable:                  Price   No. Observations:                  352
      Model:               SARIMAX(1, 1, 4)   Log Likelihood               -2249.762
      Date:                Tue, 26 Aug 2025   AIC                           4511.524
      Time:                        20:25:53   BIC                           4534.603
      Sample:                    12-31-1990   HQIC                          4520.714- 03-31-2020
      Covariance Type:                  opg
      ==============================================================================coef    std err          z      P>|z|      [0.025      0.975]
      ------------------------------------------------------------------------------
      ar.L1          0.5618      0.163      3.454      0.001       0.243       0.881
      ma.L1         -0.2268      0.164     -1.381      0.167      -0.549       0.095
      ma.L2         -0.0453      0.058     -0.783      0.434      -0.159       0.068
      ma.L3         -0.1573      0.044     -3.539      0.000      -0.244      -0.070
      ma.L4          0.2199      0.031      7.150      0.000       0.160       0.280
      sigma2        2.6e+04    941.086     27.632      0.000    2.42e+04    2.78e+04
      ===================================================================================
      Ljung-Box (L1) (Q):                   0.01   Jarque-Bera (JB):              1129.88
      Prob(Q):                              0.94   Prob(JB):                         0.00
      Heteroskedasticity (H):               2.27   Skew:                            -0.85
      Prob(H) (two-sided):                  0.00   Kurtosis:                        11.69
      ===================================================================================

      五、总结

      时间序列的主要三大用途:

      • 预测未来,预测明天股票的涨跌,预测下个月产品的销量,预测下一小时电力的需求。

      • 发现规律,理解数据背后的故事,分析过去十年的气温数据,看全球变暖的趋势到底有多严重;分析用户访问APP的数据,发现每周五晚上是流量高峰。

      • 检测异常,实时监控工厂机器的振动数据,一旦发现异常波动,就在它坏掉之前报警;监控你的信用卡消费记录,一旦出现一笔在国外的异常大额消费(不符合你平时的消费习惯和地点),立刻冻结卡片防止盗刷。

              总而言之,时间序列模型就是一个强大的“数据分析师”,它专门处理这种与时间紧密相关的数据,帮助我们从过去中学习,从而更科学地应对未来。 它的目标就是让我们的决策从“凭感觉”变成“凭数据”。

      http://www.dtcms.com/a/351695.html

      相关文章:

    • version GLIBCXX_3.4.30‘ not found (required by cmake)
    • JVM线上调优参数配置指南
    • 今日分享:C++ string 类模拟实现
    • 深度学习之第四课卷积神经网络CNN(一)
    • 不卡顿、不掉线!稳定可靠的体育赛事直播系统源码解析
    • 【Chrome】更新后白屏无法显示问题
    • 【力扣】面试经典150题总结04-区间/栈
    • python 自学笔记13 numpy数组规整
    • 智能驾驶机器学习知识总结
    • 越过千万生死线,鸿蒙直面商业化考验
    • ME_INFORECORD_MAINTAIN_MULTI,创建采购单信息记录,报错ME 816 系统错误(方法PROCESS_CONDITION中错误)
    • Feign 调用为服务报 `HardCodedTarget(type=xxxClient, name=xxxfile, url=http://file)`异常
    • 关于C#中运算符的简单说明
    • 为什么的中小企业很难承受“大型系统”的成本
    • 【RAGFlow代码详解-10】文本处理和查询处理
    • 深度学习(五):正则化:约束模型的复杂度
    • 什么样的 IP 能穿越周期,持续被用户买单?​
    • 深入解析交换机端口安全:Sticky MAC的工作原理与应用实践
    • 自动化测试概念与 Web 自动化实战(基于 Selenium)
    • 第一篇:MySQL安装部署全攻略
    • 计算机毕业设计 java 养老院管理系统 基于 Java 的养老院管理平台 Java 开发的养老服务系统
    • Linux云计算运维简明教程02 应用运维
    • 视频合成素材视频-多合一功能-青柠剪吧
    • 智能手机使用(2015-2019)
    • 基于MATLAB的运动模糊图像修复方法研究(LW+源码+讲解+部署)
    • vue2+elementui 表格单元格增加背景色,根据每列数据的大小 颜色依次变浅显示
    • 科研笔记:SCI论文中的功能性图表
    • 【技术教程】如何将文档编辑器集成到用 .Net 编写的网络应用程序中
    • VScode,设置自动保存
    • 支持向量机学习