Итак, во-первых, я думаю, что эти 2 строки вы делаете совершенно неправильно:
y_pred=reg.predict(bank_matrix[['LDO.MI']][lookback:])
Residuals.append(bank_matrix[['EXO.MI']][lookback:].to_numpy()-y_pred)
Вы в основном пытаетесь запустить линейную регрессию для всех точек, начиная с 1 до 20, затем с 2 по 21, с 3 по 22и т. д. Затем вы пытаетесь согласовать эту регрессию с данными, полученными в результате наблюдения 20 и далее. Таким образом, вы получаете модель, например, от 5 до 24, и на ее основе вы прогнозируете наблюдения 20 до конца и берете разницу между этим прогнозом и фактическими данными (учтите, что bank_matrix[['EXO.MI']][lookback:].to_numpy()
не изменяется во время цикла for
).
Полагаю, здесь было бы больше смысла:
y_pred=reg.predict(bank_matrix[['LDO.MI']][i-lookback+1:i])
Residuals.append(bank_matrix[['EXO.MI']][i-lookback+1:i].to_numpy()-y_pred)
Таким образом, вы бы приняли ошибку модели или:
y_pred=reg.predict(bank_matrix[['LDO.MI']][i:])
Residuals.append(bank_matrix[['EXO.MI']][i:].to_numpy()-y_pred)
Итак, вы попытаетесьПодходящий прогноз на основе текущего промежутка времени для данных, поступающих вперед.
Теперь первый вариант будет создавать списки из 19 элементов в строке, а другой - список 430, уменьшаясь на 1 в строке до 1в последнем ряду. Поскольку это невязки, то есть у вас есть линия с уклоном и хеджирование 1 за данный промежуток времени, но затем у вас есть количество наблюдений в этом диапазоне, дающее каждый другой результат. Таким образом, в зависимости от того, как вы хотите выразить это - вы можете сделать это суммой квадратных остатков или, может быть, взять среднее значение остатка - вы можете сделать его одним числом, только применив к нему дальнейшие преобразования.
Надеюсь, это поможет...