{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":29781,"databundleVersionId":2887556,"sourceType":"competition"}],"dockerImageVersionId":30786,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nfrom sklearn.preprocessing import MinMaxScaler\nimport skforecast\nfrom lightgbm import LGBMRegressor\nfrom skforecast.ForecasterAutoregMultiSeries import ForecasterAutoregMultiSeries\nimport warnings\n\nwarnings.filterwarnings('ignore')\n\n# Loading training data into a dataframe in which each column is an individual sales time series\n\ndf_train_orig = pd.read_csv(\"/kaggle/input/store-sales-time-series-forecasting/train.csv\", parse_dates=[1])\ndf_train_series = df_train_orig.pivot_table(index=['date'], columns=['store_nbr', 'family'], values='sales')\ndf_train_series.columns = df_train_series.columns.map(lambda index: f'store_{index[0]}_{index[1]}_sales')\ndf_train_series = df_train_series.asfreq(\"D\")\ndf_train_series = df_train_series.fillna(0)\n\n# Dataframe for exogenous variables\n\nexogenous = pd.DataFrame(index=df_train_series.index)\nexogenous['week_day'] = df_train_series.index.day_of_week\nexogenous['month_day'] = df_train_series.index.day\nexogenous['year_day'] = df_train_series.index.day_of_year\ndf_oil = pd.read_csv(\"/kaggle/input/store-sales-time-series-forecasting/oil.csv\", parse_dates=[0]).set_index('date').ffill()\ndf_oil.iloc[0] = 0\nexogenous['oil'] = df_oil\nexogenous['oil'].ffill(inplace=True)\n\n# Fitting parameters\n\ndf_train = df_train_series\nexogenous_train = exogenous\nitems = list(df_train.columns)\nlevels = items\nlags = 60\nsteps = 16\n\n# Model fitting\n\nforecaster = ForecasterAutoregMultiSeries(\n                    regressor=LGBMRegressor(random_state = 123, max_depth=17, num_leaves=500, learning_rate=0.03, n_estimators=400),\n                    transformer_series=MinMaxScaler(),\n                    lags=lags)\nforecaster.fit(df_train, exog=exogenous_train)\n\n# Loading test data\n\ntest_data = pd.read_csv(\"/kaggle/input/store-sales-time-series-forecasting/test.csv\", index_col=\"id\", parse_dates=[1])\n\n# Dataframe for exogenous variables (test data)\n\nexogenous_test = test_data.pivot_table(index=['date'], columns=['store_nbr', 'family'], values='onpromotion')\nexogenous_test.columns = exogenous_test.columns.map(lambda index: f'store_{index[0]}_{index[1]}_onpromotion')\nexogenous_test = exogenous_test.asfreq(\"D\")\nexogenous_test = exogenous_test.fillna(0)\nexogenous_test['week_day'] = exogenous_test.index.day_of_week\nexogenous_test['month_day'] = exogenous_test.index.day\nexogenous_test['year_day'] = exogenous_test.index.day_of_year\ndf_oil = pd.read_csv(\"/kaggle/input/store-sales-time-series-forecasting/oil.csv\", parse_dates=[0]).set_index('date').ffill()\ndf_oil.iloc[0] = 0\nexogenous_test['oil'] = df_oil\nexogenous_test['oil'].ffill(inplace=True)\nexogenous_test = exogenous_test[['week_day','month_day','year_day','oil']]\n\n# Forecasting (test data)\n\npredictions = forecaster.predict(steps=steps, exog=exogenous_test)\n\n# Reshaping test results for Kaggle submission\n\ntest_data['series_name'] = 'store_' + test_data['store_nbr'].astype(str) + '_' + test_data['family'] + '_sales'\ntest_data['sales'] = ''\nfor i in test_data.index:\n    test_data['sales'].loc[i] = predictions[test_data.loc[i].series_name].loc[(test_data.loc[i].date == predictions.index)].values\nresults = pd.DataFrame(data=test_data, index=test_data.index, columns=[\"sales\"])\nresults.to_csv(\"\\kaggle\\working\\submission.csv\")\n\n# Skforecast project website: https://skforecast.org/0.13.0/index.html","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T17:46:05.024568Z","iopub.execute_input":"2024-11-07T17:46:05.025067Z","iopub.status.idle":"2024-11-07T18:02:37.362267Z","shell.execute_reply.started":"2024-11-07T17:46:05.025024Z","shell.execute_reply":"2024-11-07T18:02:37.360520Z"}},"outputs":[],"execution_count":null}]}