пользовательская функция для расчета подгоночных значений для прерывистого метода Кростона в python - PullRequest
0 голосов
/ 11 сентября 2018

входные данные: -

x  0    2   0   1   0   11  0   0   0   0   2   0 6 3   0   0   0   0   0    
   7    0   0   0   0   0   0   0   3   1   0   0   1   0   1   0   0

здесь я использую простое экспоненциальное сглаживание для вычисления значений q_ses и a_ses.

вычисления: -

q     2   1    11    2    6    3    7    3    1    1    1 
a     2   2     2    5    2    1    6    8    1    3    2 
q_ses     2  1.9   2.81  2.73 3.07 3.05 3.44 3.4  3.16 2.94
a_ses     2    2      2  2.3  2.27 2.14 2.52 3.08 2.86 2.88
fitted    1  0.95  1.41  1.19 1.35 1.42 1.36 1.11 1.10 1.02

q:- non-zero elements
a:- inter-arrival time
q_ses:-alpha*at+(1-alpha)*ft
a_ses:-alpha*at+(1-alpha)*ft
fitted:-q_ses/a_ses

синтаксис: -

#x=data series
#h=numer of periods to forecast
#alpha=simple exponential smoothing parameter

def croston(x,h,alpha=np.nan):
    if isnull(alpha):
       alpha=0.1
    y= x[x!=0].reset_index()
    y['a'] = y['index'] - y['index'].shift(1)
    y.drop('index', axis=1, inplace=True)
    y= y.bfill()

    #fitteing simple exponential smoothing 

    fit_non_zero=SimpleExpSmoothing(y.iloc[:,0]).
          fit(smoothing_level=alpha,optimized=False)

    fit_inter_arrival=SimpleExpSmoothing(y.iloc[:,1]).
           fit(smoothing_level=alpha,optimized=False)
    #fitted values for non-zero and interarrival time.

    non_zero_fitted=fit_non_zero.fittedvalues
    inter_arrival_fitted=fit_inter_arrival.fittedvalues
    final_predict=non_zero_fitted/inter_arrival_fitted

    # forecast values for h periods

    forecast_q=fit_non_zero.forecast(h)
    forecast_a=fit_inter_arrival.forecast(h)
    final_forecast=forecast_q/forecast_a
    return(final_forecast,final_predict)

с использованием приведенного выше кода я толькополучение подогнанных значений только для q и значений, т. е. для 11 наблюдений, но я хочу подгонянные значения для всех наблюдений в x.

Я получил логику того, как метод Кростона производит подобранные значения, но я не могучтобы получить требуемый код для этого.

логика: - каждому ненулевому подобранному значению присваиваются как подогнанные значения для следующих нулевых элементов + следующего ненулевого элемента.

я упомянул подогнаннымзначения в расчетной части.

желаемый вывод для подогнанных значений: -

x: 0    2   0   1   0   11  0   0   0   0   2   0   6   3   0   0   0    
   0    0   7   0   0   0   0   0   0   0   3   1   0   0   1   0   1    0
fitted: NA  0   1   1   0.95    0.95    1.41    1.41    1.41    1.41    1.41     
        1.19    1.19    1.35    1.42    1.42    1.42    1.42    1.42    1.42     
        1.36    1.36    1.36    1.36    1.36    1.36    1.36    1.36    1.11     
        1.1     1.1     1.1     1.02    1.02    0.985   0.985

Я хочу получить код Python для получения вышеуказанного вывода,

Я попробовал некоторые подходы, такие как поиск нулевых позиций элементов, заменяющих значения, но в этом случае это не работает.

, пожалуйста, кто-нибудь может мне помочь решить эту проблему.

заранее спасибо.

...