预测每周计数

时间:2018-08-13 05:52:27

标签: python machine-learning forecasting

我有以下每周销售数据:

date           Total_sales
2016-01-04     10
2016-01-05     72
2016-01-06     64
2016-01-07     94
2016-01-08     94
2016-01-09    158
2016-01-10     65
2016-01-11     70
2016-01-12    115
2016-01-13    126
2016-01-14    140
2016-01-15    179
2016-01-16    181
2016-01-17    123
2016-01-18     96
2016-01-19    111
2016-01-20    199
2016-01-21    184
2016-01-22    215
2016-01-23    257
2016-01-24    151
2016-01-25    114
2016-01-26    209
2016-01-27    190
2016-01-28    208
2016-01-29    218
2016-01-30    243
2016-01-31    150
2016-02-01    147
2016-02-02    173
2016-02-03    168
2016-02-04    169
2016-02-05    142
2016-02-06    188
2016-02-07    130
2016-02-08     82
2016-02-09    102
2016-02-10     89
2016-02-11     93
2016-02-12     97
2016-02-13     75
2016-02-14     39
2016-02-15     54
2016-02-16     39
2016-02-17     44
2016-02-18     44
2016-02-19     38
2016-02-20     53
2016-02-21     31
2016-02-22     24
2016-02-23     27
2016-02-24     17
2016-02-25     10
2016-02-26      8
2016-02-27     12
2016-02-28      5
2016-02-29      1

原始数据具有事务的每一行,并带有日期变量和事务的其他属性。我已按日期将其分组并在此处进行了日期计数

现在,如果我再次按周将其分组,如下所示:

df.groupby([df.transaction_date.dt.week])['transaction_date'].count()

数据如下:

1.0     557
2.0     934
3.0    1213
4.0    1332
5.0    1117
6.0     577
7.0     303
8.0     103
9.0       1

第1.0周是星期几。

现在,我要根据此数据预测每周的销售量。

任何建议,我是否应该对此数据使用基本线性回归(问题只是其单变量数据(按周计数),因此不确定此处是否可以尝试线性回归,因为此处没有IV) 。

那么有什么建议可以在如此小的数据点上进行预测吗?

2 个答案:

答案 0 :(得分:0)

由于您的时变数据很小,您可能应该选择统计模型,例如时间序列模型。 ARIMA或自回归综合移动平均值(ARIMA)模型用于查找时间序列模型与时间序列的过去值的最佳拟合。预测将分为三个步骤,如下所示:

  1. 模型识别和模型选择:确保变量是固定的,确定相关序列的季节性(必要时进行季节差分),并使用相关时间序列的自相关和部分自相关函数的图来确定确定在模型中应使用哪个(如果有)自回归或移动平均成分。

  2. 使用计算算法进行参数估计,以得出最适合所选ARIMA模型的系数。最常见的方法是使用最大似然估计或非线性最小二乘估计。

  3. 通过测试估计的模型是否符合平稳单变量过程的规范来检查模型。特别是,残差应彼此独立,并且均值和随时间变化的常数应保持不变。 (绘制残差随时间的平均值和方差并执行Ljung-Box检验,或绘制残差的自相关和部分自相关有助于识别错误指定。)如果估计不充分,我们必须返回到第一步,并尝试建立更好的模型。

参考:https://en.wikipedia.org/wiki/Autoregressive_integrated_moving_average

关于其python实现,您可以使用python中的[statmodels][1]软件包。我建议您使用两个资源,它们将为您提供有关在python中实现的完整说明。

https://www.analyticsvidhya.com/blog/2016/02/time-series-forecasting-codes-python/ https://machinelearningmastery.com/arima-for-time-series-forecasting-with-python/

除此方法外,您可能还想尝试Random Forest回归和XGBOOST,但我的建议是ARIMA,因为您的数据是时间相关的。

答案 1 :(得分:0)

如果您制作图表,您会发现自己处在波浪的尽头,因此ARIMA可能不是解决方案(因为它只能拟合多项式模型)。

您可以先使用累积数据,以消除波动,然后拟合逻辑曲线(不要与混乱的逻辑图或逻辑logit混淆)。

然后,您发现您的销售正在填补6745个单位的市场细分,其中已经出售了6137个单位。剩余608单位待售。他们将遵循递减的模式:第9周第60周,第10周第27周,第11周第12周,第12周第5周……其余的将取决于是否继续销售产品而不是填充产品的战略决策市场利基。

enter image description here