天池比赛-资金流入流出预测-挑战Baseline--第一次乱来的预测过程

比赛地址在此:点击打开链接

起因:继上次将30天后的利率预测完了之后,就要开始进行对申购和赎回总量进行预测了,这次用spark来探探底。由于是第一次参加竞赛,不知道怎么弄,请大神指点指点。

需要的工具库:

1.pyspark

2.pandas

提示:本文下的代码都是基于pyspark的ml库
思路:因为实在是不知道怎么预测,所以索性将每日近3万用户的申购总量和赎回总量累加起来,得到每天总的申购和赎回总量,我就暂时不管每个用户了。然后,对利率不再细分,把利率表的10个属性都视为特征量,把它们包含在一个特征向量内,其他的什么消费量暂时不管。然后分两个模型,一个用来预测申购,另一个则是赎回。
第一步:形成可以训练的数据集。

 1.形成特征向量

def init_data(row_data):
    drop_name = list(row_data.columns[2:-10])
    drop_data = row_data.drop(columns=drop_name)
    data = spark.createDataFrame(drop_data)
    vecAssembler=VectorAssembler(inputCols=['mfd_daily_yield','mfd_7daily_yield','Interest_O_N','Interest_1_W','Interest_2_W','Interest_1_M','Interest_3_M','Interest_6_M','Interest_9_M','Interest_1_Y'],outputCol='features')
    return vecAssembler.transform(data)
 解释一下,row_data是含有全部属性的数据集,为pandas的DataFrame对象,因此需要删除掉一些没用到的属性,只留下利率属性和总申购赎回量。因此函数init_data的第一行就取出要删除的字段名称,然后用drop删除。然后就用VectorAssembler来将某些列合并成一个列,新的列名称就为features,即为特征向量。

 2.分割数据集,8份训练,2份练习

在这里我们直接用ramdomSplit函数即可实现。

 train_data,test_data=pre_data.randomSplit([0.8,0.2])

第二步:训练数据,拟合模型

在这里我用决策树回归试试水先,在spark的机器学习库中有提供决策树的算法实现。因此可以直接使用。

def train(train_data):
    dt=DecisionTreeRegressor(labelCol='yBalance')
    model=dt.fit(train_data)
    return model

DecisionTreeRegressor即为决策树算法,它有featuresCol,labelCol,impurity,maxBins,maxDepth,numTree等等的参数可以设置。我们使用默认属性先。我们先预测申购量,因此指定了label列名为tBalance。然后进行拟合,返回模型。 

第三步:用模型预测测试集,并评估模型 
def evaluateModel(model,data):
    predict_data=model.transform(data)
    evaluator = RegressionEvaluator(labelCol='yBalance')
    return evaluator.evaluate(predict_data) 

 代码解释,这里重要的是RegressionEvaluator这个类,它是用来对回归模型进行评估的,它将prediction列和label列。用指定metricName来计算评估参量。可选的metricName有r2,mae(绝对平方差),rmse(均方根差)。这里我选择了r2,即确定系数。



结果为0.97.这里补充一下r2的知识。在讲确定系数之前,我们先介绍另外两个参数SSR和SST,因为确定系数是根据他们两个确定的.

SSR即为预测数据与原始数据均值之差的平方和。SST即为原始数据均值之差的平方和。而R2就是等于SSR和SST的比值。确定系数正常范围在[0,1]之间,越接近1,表明方程

的变量对y的解释能力越强。

额,我这里的结果是0.97,可以说是离1非常接近了,但是有点不相信,感觉是我哪里出了问题,不然不可能那么高的确定系数的。

然后我就了rmse作为metricName,结果显示,631200481 。不用说了....我这次预测是失败了。

总结:总结一下这次预测失败出在哪里。

 1.特征向量没有选对

 2.算法参数没有设置好

总而言之,再接再砺吧。

你可能感兴趣的:(天池比赛-资金流入流出预测-挑战Baseline--第一次乱来的预测过程)