news 2026/4/18 3:30:07

【阿里云天池大赛】-资金流入流出预测通过比赛指南(实测分数>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/17 13:06:30

【阿里云部署Open-AutoGLM避坑手册】:90%新手都会忽略的4个致命问题

第一章&#xff1a;Open-AutoGLM 阿里云部署概述Open-AutoGLM 是基于 AutoGLM 架构的开源自动化语言模型系统&#xff0c;支持在云端快速部署与扩展。阿里云作为国内领先的云计算平台&#xff0c;提供了从计算资源到网络安全的完整生态体系&#xff0c;为 Open-AutoGLM 的高效运…

作者头像 李华
网站建设 2026/4/15 7:48:26

使用TensorFlow镜像进行自动化测试:确保模型稳定性

使用TensorFlow镜像进行自动化测试&#xff1a;确保模型稳定性 在现代AI工程实践中&#xff0c;一个看似简单的问题却常常让团队陷入困境——为什么同一个模型&#xff0c;在开发者的机器上表现完美&#xff0c;部署到生产环境后却频频出错&#xff1f;这种“在我机器上能跑”的…

作者头像 李华
网站建设 2026/4/16 14:30:03

【课程设计/毕业设计】基于springboot的深圳市体育中心体育赛事管理赛事信息管理、参赛队伍管理、智能赛程编排、成绩实时更新、在线报名缴费【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华