Я работаю над модулем оценки прототипа.Цель состоит в том, чтобы отправить правильные параметры изменения сезонности в модуль прогнозирования.
Первоначально при оценке кривой бронирования мы использовали формулу для дня года в год - тригонометрическая функция с 5 заказами (фиксированная).Это выглядит так:
doy_seasonality = np.exp(z[0]*np.sin(2*np.pi*doy/365.)+z[1]*np.cos(2*np.pi*doy/365.)
+z[2]*np.sin(4*np.pi*doy/365.)+ z[3]*np.cos(4*np.pi*doy/365.)
+z[4]*np.sin(6*np.pi*doy/365.)+ z[5]*np.cos(6*np.pi*doy/365.)
+z[6]*np.sin(8*np.pi*doy/365.)+ z[7]*np.cos(8*np.pi*doy/365.)
+ z[8]*np.sin(10*np.*pi*doy/365.)+ z[9]*np.cos(10*np.pi*doy/365.))
т.е. у нас было 5 фиксированных заказов [2, 4, 6, 8, 10]
Теперь мы нашли лучший способ получить заказы с помощью быстрого преобразования Фурье.В зависимости от ключа оценки, который мы используем в качестве входных данных для моделирования, массив заказов может иметь различное количество значений.
Например, допустим, массив заказов выглядит следующим образом:
orders = [2, 6, 10, 24]
Соответствуетдля каждого значения заказа будет два значения z (это тригонометрический параметр - одно значение для части SIN и одно значение для части COS).Например, это может выглядеть так:
z = [0.08 0.11 0.25 0.01 0.66 0.19 0.45 0.07]
. Для этого мне нужно определить цикл for с двумя параллельными итерациями:
z[0] to z[2*length(orders)-1] i.e. `z[0] to z[7]`
и orders[0] to orders[length(orders)-1] i.e. orders[0] to orders[3]
* 1021.*
в конечном итоге формула должна вычислить это:
doy_seasonality = np.exp(z[0]*np.sin(orders[0]*np.pi*doy/365.)+z[1]*np.cos(orders[0]*np.pi*doy/365.)
+z[2]*np.sin(orders[1]*np.pi*doy/365.)+ z[3]*np.cos(orders[1]*np.pi*doy/365.)
+z[4]*np.sin(orders[2]*np.pi*doy/365.)+ z[5]*np.cos(orders[2]*np.pi*doy/365.)
+z[6]*np.sin(orders[3]*np.pi*doy/365.)+ z[7]*np.cos(orders[3]*np.pi*doy/365.))
Я не могу разработать соответствующий синтаксис для этого.
doy (день года) - вектор, принимающий одинаковоинтервальные значения: 1, 2, 3 ... 364, 365