我正在与克罗斯顿的方法作斗争,我正在间歇性需求数据集上应用该方法。 我使用的库如下:https://pypi.org/project/croston//
我使用的数据集由6年的间歇性需求数据组成:Erratic and intermittent demand datasets。间歇性需求模式显示为红色。从图中可以看出,无需切换的间隔是需求周期。根据Syntetos、Boylan和Croston(2005),区间的平均长度为15,平均需求长度为3,因此ADI为5,这使其成为间歇性需求序列。我使用的代码如下:
Crost1 = croston.fit_croston(intermittent_time_series['D'],1,'original')
Croston = pd.DataFrame(np.concatenate([Crost1['croston_fittedvalues'],Crost1['croston_forecast']]))
Croston.index = pd.to_datetime(Croston.index, unit='D')
intermittent_time_series['Croston'] = Croston
我得到的输出看起来很奇怪。它正确地拟合了前几个(零需求)观测值,但在这些观测值之后,它给出的值都在1左右。我不知道我做错了什么。当然,我希望更好地估计间歇性需求
为了提高拟合度,我研究了论坛的解决方案,但没有找到任何解决方案。我还尝试切换方法('original'/'sba'/'sbj'/'tsb'),并查看了源代码。不幸的是,我没有想出一个解决办法
提前感谢,, 达安
编辑
我不知道如何通过interwebz共享数据帧,但我可以共享用于创建需求的代码:
def intermittent_demand(demand_period,interval,stop):
Dt = []
while stop < years*days:
temp = round(interval + np.random.normal(0,5,size=None))
if stop + temp > years*days:
Dt = Dt + (years*days - stop) * [0]
stop = years*days
else:
Dt = Dt + temp * [0]
stop = stop + temp
temp = round(demand_period + np.random.normal(0,1.2,size=None))
if stop + temp > years*days:
Dt = Dt + (years*days - stop) * [0]
stop = years*days
else:
Dt = Dt + temp * [1]
stop = stop + temp
for day in range(years*days):
if Dt[day] == 1:
Dt[day] = math.ceil(a_intermittent + error_inter[day])
return Dt
for day in range (days*years):
intermittent_time_series = intermittent_demand(demand_period,interval,stop)
其中,天=365,年=6,需求周期=3,间隔=15,停止=0,间歇=4,错误=np.random.normal(平均值,2dev,天years)
目前没有回答
相关问题 更多 >
编程相关推荐