R|资金流入流出预测-挑战Baseline

资金流入流出预测-挑战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)

    推荐阅读