Краткий ответ - вы должны запускать обратные преобразования в обратном порядке, что в вашем случае означает:
- Обратное преобразование дифференцирования
- Обратное преобразование журнала
Как конвертировать разностные прогнозы обратно описано, например, здесь (у него есть флаг R , но кода нет, и идея такая же, даже для Python). В своем посте вы вычисляете экспоненту, но сначала вы должны обратить обратное дифференцирование, прежде чем делать это.
Вы можете попробовать это:
energy_log_diff_rev = []
v_prev = v_0
for v in df['energy_log_diff']:
v_prev += v
energy_log_diff_rev.append(v_prev)
Или, если вы предпочитаете pandas
way , вы можете попробовать это (только для разницы первого порядка):
energy_log_diff_rev = df['energy_log_diff'].expanding(min_periods=0).sum() + v_0
Обратите внимание на значение v_0
, которое является исходным значением (после преобразования журнала до разницы), оно описано в ссылке выше.
Затем, после этого шага, вы можете сделать экспоненту (обратную по логу):
energy_orig = np.exp(energy_log_diff_rev)
Примечания / Вопросы:
- Вы упоминаете отстающие значения на 365, но смещаете данные на 1. Означает ли это, что у вас есть годовые данные? Или вы хотели бы сделать это -
df['energy_log_diff'] = df['energy_log'] - df['energy_log'].shift(365)
вместо этого (в случае ежедневной детализации данных)? - Вы хотите получить обратный временной ряд из прогнозов, верно? Или я что-то упустил? В таком случае вы будете делать обратные преобразования для прогноза, а не для данных, которые я использовал выше для объяснения.