news 2026/4/16 13:06:13

【阿里云天池大赛】-资金流入流出预测通过比赛指南(实测分数>130!!!)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【阿里云天池大赛】-资金流入流出预测通过比赛指南(实测分数>130!!!)

资金流入流出预测比赛完整流程记录

目录

  • 比赛任务描述
  • 数据预处理与分析
  • ARIMA模型实现与结果
  • 周期因子模型实现与结果
  • Prophet综合优化方案
  • 模型融合策略
  • 最终结果与提交
  • 经验总结与改进方向

比赛任务描述

报名地址

https://tianchi.aliyun.com/competition/entrance/231573/infor

任务目标

本比赛任务是预测某金融产品在2014年9月1日至9月30日期间的每日申购金额(total_purchase_amt)和赎回金额(total_redeem_amt)。

数据来源

评价指标

使用均方根误差(RMSE)评估模型性能,分数越高表示预测越准确。

数据预处理与分析

数据加载

importpandasaspdimportnumpyasnp# 读取用户余额表数据user_balance=pd.read_csv('user_balance_table.csv')

数据转换与筛选

# 将report_date转换为datetime格式user_balance['report_date']=pd.to_datetime(user_balance['report_date'],format='%Y%m%d')# 筛选2014-03-01至2014-08-31的数据user_balance=user_balance[(user_balance['report_date']>='2014-03-01')&(user_balance['report_date']<='2014-08-31')]

数据聚合

按日期汇总每日的申购和赎回总金额:

# 按日期汇总total_purchase_amt和total_redeem_amtdaily_data=user_balance.groupby('report_date')[['total_purchase_amt','total_redeem_amt']].sum().reset_index()

数据可视化

绘制资金流入流出趋势图,观察数据的周期性和趋势特征:

importmatplotlib.pyplotasplt plt.figure(figsize=(15,6))plt.plot(daily_data['report_date'],daily_data['total_purchase_amt'],label='申购金额',color='blue')plt.plot(daily_data['report_date'],daily_data['total_redeem_amt'],label='赎回金额',color='red')plt.title('资金流入流出趋势图')plt.xlabel('日期')plt.ylabel('金额')plt.legend()plt.grid(True)plt.show()

通过可视化分析,我们观察到数据具有明显的周期性特征(周周期和月周期),以及一定的趋势性。

ARIMA模型实现与结果

ARIMA模型介绍

ARIMA(自回归积分移动平均)是一种常用的时间序列预测模型,由三个参数组成:

根据数据特点,我们选择ARIMA(7,1,7)模型,其中:

ARIMA模型实现

fromstatsmodels.tsa.arima.modelimportARIMA# 对申购金额建立ARIMA模型purchase_model=ARIMA(daily_data['total_purchase_amt'],order=(7,1,7))purchase_model_fit=purchase_model.fit()# 对赎回金额建立ARIMA模型redeem_model=ARIMA(daily_data['total_redeem_amt'],order=(7,1,7))redeem_model_fit=redeem_model.fit()# 预测未来30天purchase_pred=purchase_model_fit.forecast(steps=30)redeem_pred=redeem_model_fit.forecast(steps=30)

ARIMA模型结果

ARIMA模型的预测结果保存为result.csv,提交后获得了初步的预测分数。

周期因子模型实现与结果

周期因子模型思路

基于数据的周期性特征,我们考虑两种周期因子:

  1. 星期因子:周一至周日的周期性影响
  2. 日期因子:1号至31号的周期性影响

这两种因子采用乘法关系,共同影响最终预测结果。

周期因子计算

# 添加星期和日期特征daily_data['weekday']=daily_data['report_date'].dt.weekday# 0=周一, 6=周日daily_data['day_of_month']=daily_data['report_date'].dt.day# 计算星期因子weekday_stats=daily_data.groupby('weekday')[['total_purchase_amt','total_redeem_amt']].mean()weekday_avg_purchase=weekday_stats['total_purchase_amt'].mean()weekday_avg_redeem=weekday_stats['total_redeem_amt'].mean()weekday_purchase_factor=weekday_stats['total_purchase_amt']/weekday_avg_purchase weekday_redeem_factor=weekday_stats['total_redeem_amt']/weekday_avg_redeem# 计算日期因子day_stats=daily_data.groupby('day_of_month')[['total_purchase_amt','total_redeem_amt']].mean()day_avg_purchase=day_stats['total_purchase_amt'].mean()day_avg_redeem=day_stats['total_redeem_amt'].mean()day_purchase_factor=day_stats['total_purchase_amt']/day_avg_purchase day_redeem_factor=day_stats['total_redeem_amt']/day_avg_redeem

周期因子模型预测

# 生成未来30天的日期future_dates=pd.date_range(start='2014-09-01',end='2014-09-30')future_df=pd.DataFrame({'report_date':future_dates})future_df['weekday']=future_df['report_date'].dt.weekday future_df['day_of_month']=future_df['report_date'].dt.day# 应用周期因子(乘法关系)future_df['purchase_periodic_factor']=future_df['weekday'].map(weekday_purchase_factor)*future_df['day_of_month'].map(day_purchase_factor)future_df['redeem_periodic_factor']=future_df['weekday'].map(weekday_redeem_factor)*future_df['day_of_month'].map(day_redeem_factor)# 基于历史均值和周期因子进行预测historical_avg_purchase=daily_data['total_purchase_amt'].mean()historical_avg_redeem=daily_data['total_redeem_amt'].mean()future_df['total_purchase_amt']=historical_avg_purchase*future_df['purchase_periodic_factor']future_df['total_redeem_amt']=historical_avg_redeem*future_df['redeem_periodic_factor']

周期因子模型结果

周期因子模型的预测结果保存为result2.csv,提交后获得了115分的成绩。

Prophet综合优化方案

为了进一步提高预测精度,我们采用了Facebook Prophet模型进行综合优化,该模型能够更好地处理时间序列的趋势、季节性和节假日效应。

Prophet模型介绍

Prophet是Facebook开发的时间序列预测工具,具有以下特点:

Prophet模型实现

1. 数据准备
# Prophet模型需要的数据集格式:ds(日期)和y(目标值)df_purchase=daily_data[['report_date','total_purchase_amt']].rename(columns={'report_date':'ds','total_purchase_amt':'y'})df_redeem=daily_data[['report_date','total_redeem_amt']].rename(columns={'report_date':'ds','total_redeem_amt':'y'})
2. 节假日处理

考虑到2014年9月6日至8日为中秋节假期,我们添加了节假日效应:

# 定义2014年节假日(包含中秋节及前后影响)holidays=pd.DataFrame({'holiday':'mid_autumn','ds':pd.to_datetime(['2014-09-06','2014-09-07','2014-09-08']),# 中秋节及前后'lower_window':0,'upper_window':0,})
3. Prophet模型拟合
fromprophetimportProphet# 创建并拟合Prophet模型(申购)prophet_purchase=Prophet(growth='linear',seasonality_mode='multiplicative',holidays=holidays,holidays_prior_scale=5,yearly_seasonality=False,weekly_seasonality=True,daily_seasonality=False,interval_width=0.95)prophet_purchase.add_seasonality(name='monthly',period=30.5,fourier_order=3)prophet_purchase.fit(df_purchase)# 创建并拟合Prophet模型(赎回)prophet_redeem=Prophet(growth='linear',seasonality_mode='multiplicative',holidays=holidays,holidays_prior_scale=5,yearly_seasonality=False,weekly_seasonality=True,daily_seasonality=False,interval_width=0.95)prophet_redeem.add_seasonality(name='monthly',period=30.5,fourier_order=3)prophet_redeem.fit(df_redeem)
4. 特征工程增强

为了进一步提高模型性能,我们添加了滞后特征和移动平均特征:

# 添加滞后特征(前7天、14天、21天)daily_features=daily_data.copy()forlagin[7,14,21]:daily_features[f'purchase_lag_{lag}']=daily_features['total_purchase_amt'].shift(lag)daily_features[f'redeem_lag_{lag}']=daily_features['total_redeem_amt'].shift(lag)# 添加移动平均特征(7天、14天)forwindowin[7,14]:daily_features[f'purchase_ma_{window}']=daily_features['total_purchase_amt'].rolling(window=window).mean()daily_features[f'redeem_ma_{window}']=daily_features['total_redeem_amt'].rolling(window=window).mean()# 去除缺失值daily_features=daily_features.dropna()
5. 增强模型训练

使用线性回归模型结合Prophet预测和特征工程结果:

fromsklearn.linear_modelimportLinearRegression# 建立增强模型defbuild_enhanced_model(daily_features,target_col,prophet_predictions,target_prophet_col):# 合并特征和Prophet预测X=daily_features.drop(['report_date','total_purchase_amt','total_redeem_amt'],axis=1)X['prophet_prediction']=daily_features['report_date'].map(prophet_predictions.set_index('report_date')[target_prophet_col])y=daily_features[target_col]# 训练模型model=LinearRegression()model.fit(X,y)returnmodel# 建立申购和赎回的增强模型purchase_enhanced_model=build_enhanced_model(daily_features,'total_purchase_amt',prophet_predictions,'purchase_prophet')redeem_enhanced_model=build_enhanced_model(daily_features,'total_redeem_amt',prophet_predictions,'redeem_prophet')

模型融合策略

为了综合各模型的优势,我们采用了加权平均的模型融合策略:

  1. Prophet模型:权重40%,提供基线预测
  2. 增强模型:权重30%,结合了额外特征
  3. 周期因子模型:权重30%,捕捉周期性特征

融合实现

# 模型融合:加权平均# 1. Prophet模型预测prophet_preds=prophet_predictions.tail(30).set_index('report_date')# 2. 增强模型预测enhanced_purchase_preds=purchase_enhanced_model.predict(X_future_purchase)enhanced_redeem_preds=redeem_enhanced_model.predict(X_future_redeem)# 3. 周期因子调整的基线预测periodic_purchase_preds=historical_avg_purchase*periodic_preds['purchase_periodic_factor']periodic_redeem_preds=historical_avg_redeem*periodic_preds['redeem_periodic_factor']# 权重分配:Prophet(40%), 增强模型(30%), 改进周期因子(30%)final_purchase_preds=0.4*prophet_preds['purchase_prophet'].values+0.3*enhanced_purchase_preds+0.3*periodic_purchase_preds.values final_redeem_preds=0.4*prophet_preds['redeem_prophet'].values+0.3*enhanced_redeem_preds+0.3*periodic_redeem_preds.values

最终结果与提交

生成预测结果

# 生成最终预测结果final_forecast=pd.DataFrame({'report_date':future_dates.strftime('%Y%m%d').astype(int),'total_purchase_amt':final_purchase_preds,'total_redeem_amt':final_redeem_preds})# 保存结果(无表头)final_forecast.to_csv('result_optimized.csv',index=False,header=False)

结果提交

将生成的result_optimized.csv文件提交至比赛平台(https://tianchi.aliyun.com/competition/entrance/231573/submission/88),最终获得了145分的成绩,成功通过比赛。

预测结果展示

预测结果的前10天数据如下:

日期申购金额(元)赎回金额(元)
20140901330885275322102155
20140902312591938291400953
20140903320636752313180408
20140904322619932276590303
20140905266807750252040967
20140906212011998171840275
20140907207486402192871410
20140908320312554318207197
20140909322580235296540520
20140910328245020301124852

经验总结与改进方向

成功经验

  1. 数据可视化分析:通过可视化准确识别数据的周期性和趋势性特征
  2. 多种模型尝试:从简单的ARIMA模型到复杂的Prophet模型,逐步提升预测精度
  3. 特征工程增强:添加滞后特征和移动平均特征,捕捉更多数据信息
  4. 模型融合策略:综合不同模型的优势,提高预测稳定性
  5. 节假日效应处理:考虑到特殊日期对资金流动的影响

改进方向

  1. 模型参数调优:进一步优化Prophet模型的参数设置
  2. 更多特征引入:可以考虑引入外部经济数据(如利率、股市行情等)
  3. 深度学习模型尝试:使用LSTM等深度学习模型处理时间序列数据
  4. 模型融合优化:尝试更复杂的融合策略,如Stacking或Blending
  5. 异常值处理:更精细地处理数据中的异常值

通过本次比赛,我们全面掌握了时间序列预测的常用方法和技巧,从数据预处理到模型选择,再到最终的结果优化,形成了一套完整的解决方案。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 9:09:10

手把手教你部署Open-AutoGLM,阿里云环境下性能提升8倍的秘密

第一章&#xff1a;Open-AutoGLM 阿里云部署概述Open-AutoGLM 是阿里云推出的一款面向自动化生成语言模型的开源工具&#xff0c;支持在云端快速部署与扩展。其架构设计充分适配阿里云弹性计算服务&#xff08;ECS&#xff09;、容器服务&#xff08;ACK&#xff09;以及对象存…

作者头像 李华
网站建设 2026/4/16 1:28:16

如何将TensorFlow镜像部署到Kubernetes集群

如何将TensorFlow镜像部署到Kubernetes集群 在现代AI系统中&#xff0c;模型上线早已不再是“训练完导出权重、扔给后端跑个脚本”那么简单。面对线上服务的高并发、低延迟和724小时可用性要求&#xff0c;如何让一个深度学习模型真正“站得住、扛得动、升得平滑”&#xff0c;…

作者头像 李华
网站建设 2026/4/16 9:08:44

Open-AutoGLM上手机难吗?资深工程师亲授6个核心优化技巧

第一章&#xff1a;Open-AutoGLM怎么弄到手机上将 Open-AutoGLM 部署到手机上&#xff0c;可以实现本地化的大模型推理与自动化任务处理。虽然该项目主要面向桌面环境开发&#xff0c;但通过容器化和轻量化部署手段&#xff0c;也能在安卓设备上运行。准备工作 一台已获取 root…

作者头像 李华
网站建设 2026/4/16 9:09:08

【剪映小助手源码精讲】第34章:视频任务管理

第34章&#xff1a;视频任务管理 34.1 概述 视频任务管理系统是剪映小助手的核心组件&#xff0c;负责管理视频生成任务的提交、执行、状态跟踪和结果获取。该系统采用异步任务队列架构&#xff0c;支持任务的并发处理、状态监控和错误处理&#xff0c;确保视频生成过程的可靠…

作者头像 李华