吃不胖的派大星 2024-06-17 01:10 采纳率: 100%
浏览 8
已结题

构建ARIMA模型预测资金赎回数据

2.需求说明
本章的案例已经对资金申购数据进行了预测,而本实训需要对资金赎回数据进行预测。
首先需要对资金赎回数据进行平稳性检验和白噪声检验,然后确定p值与q值进行定阶,
最后建立ARIMA模型进行预测,并对该模型进行评价。
3.实现思路及步骤
(1)使用时序图、自相关图与单位根检验判断序列是否平稳,若不平稳则进行差分
运算。
(2)进行白噪声检验。
(3)使用BIC准则对模型进行定阶。
(4)使用ARIMA模型进行预测。
(5)将预测值与真实值进行对比,得到对比图、平均绝对误差、均方根误差及平均绝
对百分误差。

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-17 01:10
    关注

    引自免费微信小程序:皆我百晓生

    要构建ARIMA模型预测资金赎回数据,我们遵循的步骤如下:

    1. 数据准备与导入

    确保数据已清洗并转换为适合分析的格式。数据应包含日期和赎回金额。

    import pandas as pd
    import numpy as np
    from statsmodels.tsa.stattools import adfuller, acf, pacf
    from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
    from statsmodels.tsa.arima.model import ARIMA
    from sklearn.metrics import mean_absolute_error, mean_squared_error
    import matplotlib.pyplot as plt
    
    # 加载数据
    data = pd.read_csv('redemption_data.csv')  # 假设数据存储在CSV文件中
    data['Date'] = pd.to_datetime(data['Date'])
    data.set_index('Date', inplace=True)
    

    2. 平稳性检验与差分

    使用ADF测试检查序列的平稳性。如果序列非平稳,进行差分。

    def test_stationarity(timeseries):
        result = adfuller(timeseries)
        print(f'ADF Statistic: {result[0]}')
        print(f'p-value: {result[1]}')
    
    test_stationarity(data['Redemption'])
    
    # 如果p-value大于0.05,则序列非平稳,进行差分
    if result[1] > 0.05:
        data['Redemption_diff'] = data['Redemption'].diff().dropna()
        test_stationarity(data['Redemption_diff'])
    

    3. 白噪声检验

    使用Ljung-Box测试检验序列是否为白噪声。

    from statsmodels.stats.diagnostic import acorr_ljungbox
    
    lb_stat, lb_pvalue = acorr_ljungbox(data['Redemption_diff'], lags=1)
    print(f'Ljung-Box statistic: {lb_stat[0]}, p-value: {lb_pvalue[0]}')
    

    4. 模型定阶

    使用AIC或BIC准则确定ARIMA模型的参数。

    # 自相关图和偏自相关图
    plot_acf(data['Redemption_diff'].dropna())
    plot_pacf(data['Redemption_diff'].dropna())
    plt.show()
    
    # 根据图形和BIC准则选择p和q
    p = q = 1  # 基于图形初步设定
    

    5. 建立ARIMA模型

    使用选定的参数建立模型并预测。

    model = ARIMA(data['Redemption'], order=(p, 1 if 'Redemption_diff' in data.columns else 0, q))
    results = model.fit()
    print(results.summary())
    
    # 预测
    forecast = results.get_forecast(steps=30)
    mean = forecast.predicted_mean
    conf_int = forecast.conf_int()
    

    6. 模型评估

    计算预测误差并绘制结果。

    # 真实值与预测值对比
    true_values = data['Redemption'][-30:]
    mae = mean_absolute_error(true_values, mean)
    mse = mean_squared_error(true_values, mean)
    rmse = np.sqrt(mse)
    
    print(f'MAE: {mae}, MSE: {mse}, RMSE: {rmse}')
    
    # 绘制预测结果
    plt.plot(true_values, label='Actual')
    plt.plot(mean, label='Forecast')
    plt.fill_between(conf_int.index,
                     conf_int.iloc[:, 0],
                     conf_int.iloc[:, 1], color='pink')
    plt.legend()
    plt.show()
    

    以上步骤涵盖了从数据预处理到模型建立和评估的全过程,适用于资金赎回数据的预测。如果在实际操作中遇到具体问题,可能需要调整模型参数或数据预处理方法。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月11日
  • 已采纳回答 7月3日
  • 创建了问题 6月17日

悬赏问题

  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)