资金流入流出预测-挑战Baseline
想法仅供参考
本次数据仅使用了其中的每日进出总额
思路:依据每日进出总额进行分析,首先会发现在2014年2月份及以前波动较大,考虑只选择后面的数据进行分析
很明显,这些数据符合时间序列相关模型
1,通过点线图可能明显地看出其周期性变化趋势(这也是由于业务关系导致的),明显存在一个星期周期性(一个星期为1个 周期);同时可能还存在另一个周期(一个自然月天数为一个周期)
2,通过计算周期系数;(本文为非标准计算方法,标准方式请参考统计学相关教材)
3,选择基数(本人选的是均值)
4,添加随机扰动项(本人未添加)
5,通过乘法加成计算最终值
6,模型优化:考虑9月底接近国庆长假,最后几天的值可能会有较大的变动(可适当进行调整,本人未处理)
7,本段代码跑出的数据在挑战baseline第一赛季得分135.5分,可以排名前十;在资金流入流出预测的第一赛季也是处于前五的分数
8,思路补充,由于9月8日中秋放假时间是6-8日,且8日为周一,理论上来说节假日余额宝会顺延确认份额(待验证)
rm(list=ls())
for (i in 1:5) gc()library(data.table)
library(plyr)#用户信息表user_money<-fread("D:/Documents/yue/Purchase&Redemption Data/user_balance_table.csv",data.table = FALSE)#设置日期参数
riqi<-unique(user_money$report_date)
riqi<-riqi[order(riqi)]
user_money$month<-0
user_money$day<-0
user_money$month<-user_money[,2]%/%100
user_money$day<-user_money[,2]%%100user_money$report_date<-as.character(user_money$report_date)
user_money$report_date<-as.Date(user_money$report_date,format="%Y%m%d")
user_money$week<-weekdays(user_money$report_date)
user_money$week<-as.numeric(factor(user_money$week,levels = c("星期一","星期二","星期三","星期四","星期五","星期六","星期日"),labels = c(1:7)))#统计每天的申购,赎回总额
gm<-tapply(user_money$total_purchase_amt,user_money$report_date,sum)
sh<-tapply(user_money$total_redeem_amt,user_money$report_date,sum)shenggou<-as.numeric(as.character(gm))
shuhui<-as.numeric(as.character(sh))shuju<-data.frame(riqi,shenggou,shuhui)#日期处理
shuju$mon<-0
shuju$day<-0
shuju$mon<-shuju[,1]%/%100
shuju$day<-shuju[,1]%%100shuju$riqi<-as.character(shuju$riqi)
shuju$riqi<-as.Date(shuju$riqi,format="%Y%m%d")
shuju$week<-weekdays(shuju$riqi)shuju$week<-as.numeric(factor(shuju$week,levels = c("星期一","星期二","星期三","星期四","星期五","星期六","星期日"),labels = c(1:7)))
#截取数据,由于前一半数据波动太大了
#shu4<-shuju
shu4<-shuju[shuju$mon>=201403,]
shu4.week.sg<-tapply(shu4$shenggou,shu4$week,mean)
shu4.mon.sg<-tapply(shu4$shenggou,shu4$mon,mean)
shu4.day.sg<-tapply(shu4$shenggou,shu4$day,mean)shu4.week.sh<-tapply(shu4$shuhui,shu4$week,mean)
shu4.mon.sh<-tapply(shu4$shuhui,shu4$mon,mean)
shu4.day.sh<-tapply(shu4$shuhui,shu4$day,mean)mean4.sg<-mean(shu4$shenggou)
mean4.sh<-mean(shu4$shuhui)#计算周期性星期类指数(非标准计算方法,仅供参考)
week.shenggou.rate<-as.numeric(as.character(shu4.week.sg))/mean4.sg
week.shuhui.rate<-as.numeric(as.character(shu4.week.sh))/mean4.shdays<-1:30
shu4.sg<-as.numeric(as.character(shu4.day.sg))[1:30]
shu4.sh<-as.numeric(as.character(shu4.day.sh))[1:30]
da<-data.frame(days,shu4.sg,shu4.sh)
names.da<-names(da)#用来记录每个日次含有几个星期-到星期日
da[,4:10]<-0
names(da)<-c(names.da,c(1:7))
da$rate_day_sg<-0
da$rate_day_sh<-0
for(i in 1:30){
for(j in 1:7){da[i,(j+3)]<-nrow(shu4[shu4$week==j & shu4$day==i,])}}#计算星期对日期的影响
for(i in 1:30){
da[i,11]<-sum(week.shenggou.rate*da[i,c(4:10)])/sum(da[i,c(4:10)])
da[i,12]<-sum(week.shuhui.rate*da[i,c(4:10)])/sum(da[i,c(4:10)])
}#结果
day<-20140901:20140930
dsg<-da$shu4.sg/da$rate_day_sg*week.shenggou.rate
dsh<-da$shu4.sh/da$rate_day_sh*week.shuhui.ratexx<-data.frame(day,dsg,dsh)
推荐阅读
- python|snowflake 数据库_Snowflake数据分析教程
- 数据分析|数据分析 - 基础原理 之 第三章(数据质量管理 - 第一节:数据质量评估)
- 亿信华辰讲述如何做好客商主数据管理
- hive|Hive之数仓的分层及建模理论
- 数据可视化|数字化转型大趋势下,如何通过数据分析助力
- python|用 Pandas 做 ETL,不要太快
- 大数据|为什么要做数仓分层,不做行吗()
- 大数据|【系列】数据团队价值实现路径02
- 如何利用结构化思维写好分析报告()