def predict_recurse(dataset, test, model, features_to_impute=['Target_L1D', 'Target_Diff7D', 'Target_Diff14D'], last_feature='Target_L6D'): n_steps = len(test) merged_data = pd.concat([dataset[-14:], test], axis=0) all_index = merged_data.index X_test = test.drop(columns="Target") sd = -6 # Starting point for filling next value # For each step, get the predictions for i in range(n_steps-1): pred = final_model.predict(X_test)[i] # For the three features needed, compute the new value X_test.loc[all_index[sd+i], features_to_impute[0]] = pred X_test.loc[all_index[sd+i], features_to_impute[1]] = pred - merged_data.loc[all_index[sd+i-7], features_to_impute[1]] X_test.loc[all_index[sd+i], features_to_impute[2]] = pred - merged_data.loc[all_index[sd+i-14], features_to_impute[2]] # In the last iteration compute the Lag6D value if i == 5: X_test.loc[all_index[sd+i], last_feature] = pred - merged_data.loc[all_index[sd+i-6], last_feature] final_preds = final_model.predict(X_test) return final_preds