时间序列中的小数据集

数据挖掘 机器学习 时间序列 优化
2022-03-02 08:29:28

我有带有时间序列索引的足球数据。30 秒间隔。因此,每场比赛 90 分钟以上 194 行。我有1500场比赛。数据框具有以下信息。

主场/客场:

• 总目标。

• 总投篮次数。

• 危险攻击总数和。

• XG(每场比赛的预期进球数)在比赛开始时给出,每个部分需要调整。

我需要建立一个时间序列模型来预测时间 t+1(比如目标得分)。

鉴于对于每个变量,该图显示了该时间后期的最高峰值,是否有任何机器学习算法可以使用如此小的数据集进行学习?

样本数据

g = pd.DataFrame({'TimeSlot':[0, 30000, 60000, 90000, 120000, 150000, 180000, 210000, 240000, 270000, 300000],
    'xG_A':[1.5]*11, 'xG_B':[1.2]*11, 'A_DAT':[0,1,2,3,4,4,5,5,6,6,7],
    'B_DAT':[0,0,1,1,2,2,2,3,3,3,4],
    'A_ST':[0,0,1,1,2,2,2,3,3,3,3], 'B_ST':[0,0,0,1,1,1,1,2,2,2,2],
    'A_GT':[0,0,0,0,0,0,1,1,1,1,2], 'B_GT':[0,0,0,1,1,1,1,1,1,1,1]})
g.set_index('TimeSlot', inplace=True)

The assumption is only one Goal/Shot can be scored/taken per Timeslot. So the same data per period will look like...

f= pd.DataFrame({'TimeSlot':[0, 30000, 60000, 90000, 120000, 150000, 180000, 210000, 240000, 270000, 300000],
    'xG_A':[1.5]*11, 'xG_B':[1.2]*11, 'A_DATP':[0,1,1,1,1,0,1,0,1,0,1],
    'B_DAP':[0,0,1,0,1,0,0,1,0,0,1],
    'A_STP':[0,0,1,0,1,0,0,1,0,0,0], 'B_STP':[0,0,0,1,0,0,0,1,0,0,0],
    'A_GTP':[0,0,0,0,0,0,1,0,0,0,1], 'B_GTP':[0,0,0,1,0,0,0,0,0,0,0]})
f.set_index('TimeSlot', inplace=True)

***ARIMA(2,1,0) with train, test = X[0:size], X[size:len(X)]
gives MSE:0.323 for g and MSE: 0.291 for f.***

问题

我应该使用哪个数据框?

如果有人从一些 python 代码开始,我将非常感激......

3个回答

这是ARIMA模型的典型应用。通过选择正确的顺序(维基百科页面中的p、qd),可以使用相对较少的数据量有效地训练该模型。

假设您的通用模型规范看起来像

HAW - 主场/客场:GT - 总进球数。ST – 总射门次数。DAT – 危险攻击总数。XG - XG

GT(t)= 函数(HAW(t),GT(t-1), GT(t-2),..., GT(t-p1), ST(t-1),ST(t-2),... , ST(t-p2),DAT(t-1),DAT(t-2),…, DAT(t-p3),XG(t)-XG(t-1))+误差

(1) 如果函数形式未知,可以使用可以从时间序列(RNN)中学习的神经网络方法,可以尝试不同的滞后长度 p1,p2,p3 来查看模型是否改进

(2) 如果函数是线性的,那么您可以应用具有滞后因变量的时间序列方法以及其他与时间相关的驱动因素

因为它是一个时间序列模型,您应该通过一阶差分来研究平稳性,测试单位根以正确识别您的模型。

您应该查看的包是 statsmodel,它有一个 ARIMAResults 类(由 user12075 标识的模型)。该文档位于statsmodels.tsa.arima_model.ARIMAResults并且这里还有一个关于其使用的线程。