I am attempting to use XGBoost in R to train a model that predicts a fixed number of target variables using all data from previous dates, as well as the two categorical variables (Cat1
and Cat2
) for the current date as predictors. The original data is in this format:
╔═════════╦═════════╦══════════╦══════╦══════╦══════╦══════╗
║ Target1 ║ Target2 ║ Date ║ Cat1 ║ Cat2 ║ Var1 ║ Var2 ║
╠═════════╬═════════╬══════════╬══════╬══════╬══════╬══════╣
║ 1 ║ 2 ║ 01/01/20 ║ A ║ B ║ 3 ║ 4 ║
║ 5 ║ 6 ║ 02/01/20 ║ C ║ D ║ 7 ║ 8 ║
║ 8 ║ 7 ║ 03/01/20 ║ A ║ D ║ 6 ║ 5 ║
║ 4 ║ 3 ║ 04/01/20 ║ C ║ B ║ 2 ║ 1 ║
║ ║ ║ ║ ║ ║ ║ ║
╚═════════╩═════════╩══════════╩══════╩══════╩══════╩══════╝
And I conceptualise the training data looking like this for each row of the data frame, where the Train_DataFrame
column contains all data from previous dates:
╔═════════╦═════════╦══════╦══════╦═════════════════╦═════════╦══════╦══════╦══════╦══════╗
║ Target1 ║ Target2 ║ Cat1 ║ Cat2 ║ Train_DataFrame ║ ║ ║ ║ ║ ║
╠═════════╬═════════╬══════╬══════╬═════════════════╬═════════╬══════╬══════╬══════╬══════╣
║ 4 ║ 3 ║ C ║ B ║ Target1 ║ Target2 ║ Cat1 ║ Cat2 ║ Var1 ║ Var2 ║
║ ║ ║ ║ ║ 1 ║ 2 ║ A ║ B ║ 3 ║ 4 ║
║ ║ ║ ║ ║ 5 ║ 6 ║ C ║ D ║ 7 ║ 8 ║
║ ║ ║ ║ ║ 8 ║ 7 ║ A ║ D ║ 6 ║ 5 ║
║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║
╚═════════╩═════════╩══════╩══════╩═════════════════╩═════════╩══════╩══════╩══════╩══════╝
First question; is it possible to pass an entire data frame as a variable to a model?
If so, then how can this be done in a memory efficient manner, so as to avoid data duplication? I know I could have the Train_DataFrame
column contain lists of each "past" data, however, this would lead to data duplication and inefficient memory usage. Is there a way to have this column contain a sub-setting function to pass to the original data frame, for example?
Or is there a better approach to the problem that I am potentially missing?
Thanks in advance.