• 记一次时间序列算法的自回归预测--AR&Autoreg


    背景

    最近公司给客户要做一些数据的预测,但是客户不清楚哪些做起来比较符合他们的,于是在经过与业务方的沟通,瞄准了两个方面的数据

    1.工程数据:对工程数据做评估,然后做预警,这个想法是好的,但是由于这方面数据第一是不全,而且数据的准确程度有一些偏差,于是放弃了

    2.财务数据:财务数据是个非常好的方向,首先财务数据是很准确的,而且规律性比较明显。

    所以最终选了了财务数据分析这个角度。

    注:本文中接下来做的所有数据都是虚拟数据,上面说的财务数据只是再说如何分析这个业务方向。

    简介

    基于以上我大概先说一下这个预测的方向:

    由于博主是以做java和spark(scala)为主的人,所以对python用的比较少,过程中有不对的地方请大家批评指正。我们将向刚入行的小白开发者介绍如何使用Python实现AR(自回归)预测模型。AR模型是一种在时间序列预测中常用的模型,它基于过去的观测值来预测未来的值

    我们将按照以下步骤进行操作

    步骤描述
    1导入所需的库
    2加载时间序列数据
    3拆分数据集为训练集和测试集
    4训练AR模型
    5使用AR模型预测未来值
    6评估模型性能
    7可视化预测结果

    代码实现:

    导入所需的库

    首先,我们需要导入一些必要的库,包括pandas用于数据处理和statsmodels用于建立AR模型。

    1. from statsmodels.tsa.ar_model import AR
    2. import pandas as pd
    3. import matplotlib.pyplot as plt
    4. from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
    5. from pandas import Series,DataFrame

    加载时间序列数据

    1. def data_process():
    2. #接受csv格式数据,根据情况修改为自己的地址
    3. df = pd.read_csv(r"C:\Users\123\Downloads\funsbymonth.csv")
    4. fans = df['fans'].values
    5. data=pd.Series(fans)
    6. df['date'] = pd.to_datetime(df['date'])
    7. data_index = df['date'].values
    8. data.index =pd.Index(data_index)
    9. #data.plot(figsize=(12,8))
    10. #plt.show()
    11. return data,fans
    12. #数据处理
    13. data,fans = data_process()

    这块我封装了一个方法,仅供参考

    数据我也提供一下,可以供大家学习使用,需要的自取

    1. date,fans
    2. 2021-6-30,12
    3. 2021-7-31,52
    4. 2021-8-31,58
    5. 2021-9-30,82
    6. 2021-10-31,65
    7. 2021-11-30,66
    8. 2021-12-31,16
    9. 2022-1-31,23
    10. 2022-2-28,54
    11. 2022-3-31,61
    12. 2022-4-30,78
    13. 2022-5-31,64
    14. 2022-6-30,56
    15. 2022-7-31,18
    16. 2022-8-31,16
    17. 2022-9-30,60
    18. 2022-10-31,75
    19. 2022-11-30,90
    20. 2022-12-31,63
    21. 2023-1-31,69
    22. 2023-2-28,15
    23. 2023-3-31,10
    24. 2023-4-30,60
    25. 2023-5-31,62
    26. 2023-6-30,78
    27. 2023-7-31,71

     拆分数据集

    在建立AR模型之前,我们需要将数据集拆分为训练集和测试集。一般情况下,我们将大部分数据用于训练模型,少部分数据用于测试模型的预测效果。这里我们假设将前80%的数据用于训练,后20%的数据用于测试。

    1. train_data = data.iloc[:int(0.8*len(data))]
    2. test_data = data.iloc[int(0.8*len(data)):]

    训练AR模型并预测

    接下来,我们可以使用训练集的数据来训练AR模型。在这里,我们使用statsmodels库来构建AR模型。

    1. def model_fit3(data,start,end,starTime):
    2. ar = AR(data).fit()
    3. arpredict_y3 =ar.predict(start=start, end=end ,dynamic = False)
    4. fig, ax = plt.subplots(figsize=(12, 8))
    5. ax = data.ix[starTime:].plot(ax=ax)
    6. arpredict_y3.plot(ax=ax)
    7. plt.show()
    8. return arpredict_y3
    9. start = 10
    10. end = len(fans)+3
    11. starTime = '2022-1-31'
    12. arpredict_y = model_fit3(data,start,end,starTime)

    可视化结果

    https://blog.51cto.com/u_16175449/6933670

    https://blog.51cto.com/u_16175427/6815175

    https://bbs.csdn.net/topics/392418314

    https://blog.csdn.net/weixin_44034053/article/details/94359052

    https://blog.51cto.com/u_13389043/6230021

    https://blog.51cto.com/u_13389043/6230021

    这里我在提供一种模型:自回归模型 AutoReg

    上代码看看,数据集还是上面的数据集

    1. import pandas as pd
    2. from statsmodels.tsa.ar_model import AutoReg
    3. import matplotlib.pyplot as plt
    4. def data_process():
    5. #接受csv格式数据,根据情况修改为自己的地址
    6. df = pd.read_csv(r"C:\Users\allen_sun\Downloads\funsbymonth.csv")
    7. fans = df['fans'].values
    8. data=pd.Series(fans)
    9. df['date'] = pd.to_datetime(df['date'])
    10. data_index = df['date'].values
    11. data.index =pd.Index(data_index)
    12. #data.plot(figsize=(12,8))
    13. #plt.show()
    14. return data,fans
    15. #数据处理
    16. data,fans = data_process()
    17. train_data = data.iloc[:int(0.8*len(data))]
    18. test_data = data.iloc[int(0.8*len(data)):]
    19. #模型训练
    20. order = 9 # AR模型的阶数为2
    21. model = AutoReg(train_data, lags=order)
    22. model_fit = model.fit()
    23. #模型预测
    24. predictions = model_fit.predict(start=len(train_data), end=len(data)-1)
    25. #模型评估
    26. from sklearn.metrics import mean_squared_error, mean_absolute_error
    27. #均方误差(MSE),结果越小越好
    28. mse = mean_squared_error(test_data, predictions)
    29. #平均绝对误差(MAE), 结果越小越好
    30. mae = mean_absolute_error(test_data, predictions)
    31. mse
    32. mae
    33. #print(predictions)
    34. #预测起止点
    35. start = 10
    36. #预测长度,此长度表示向后预测4个阶段
    37. end = len(fans)+3
    38. order = 9 # AR模型的阶数为2
    39. model = AutoReg(train_data, lags=order)
    40. model_fit = model.fit()
    41. arpredict_y3 =model_fit.predict(start=start, end=end ,dynamic = False)
    42. fig, ax = plt.subplots(figsize=(12, 8))
    43. #python自带的绘制曲线开始日期
    44. starTime = '2022-1-31'
    45. ax = data.ix[starTime:].plot(ax=ax)
    46. arpredict_y3.plot(ax=ax)
    47. plt.show()

    评估项中的参数:

    1.均方误差(MSE),结果越小越好。

    2.误差均方根(RMSE),结果越小越好。

    3.平均绝对误差(MAE),结果越小越好。

    4.平均绝对百分误差(MAPE),结果越小越好。

    效果:(也还行)

     https://blog.csdn.net/qq_40206371/article/details/121103377

  • 相关阅读:
    R语言 数据的关系探索
    CMAC(GBT 15852.1)和OMAC(RFC4493/NIST SP800-38B)的java实现和测试
    上海亚商投顾:三大指数小幅下跌 两市成交金额创年内新低
    createjs新手教程-前端向(一)
    融云 Flutter SDK,跨平台开发的真香之选
    kubernetes介绍与资源管理
    连接mysql报错 :Host ‘xxx.xx.x.x‘ is not allowed to connect to this MySQL server
    【EI会议征稿】2024年智慧城市与信息系统国际学术会议 (ICSCIS 2024)
    允许Widget接受拖拽的数据
    Meta 推出新型多模态 AI 模型“变色龙”(Chameleon),挑战 GPT-4o,引领多模态革命
  • 原文地址:https://blog.csdn.net/Alex_81D/article/details/132710764