{"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":"nvidiaTeslaT4","dataSources":[{"sourceId":82611,"databundleVersionId":9553358,"sourceType":"competition"}],"dockerImageVersionId":30786,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"<a id=\"1\"></a>\n# <p style=\"background-image: url(https://imgs.search.brave.com/3Ovn1cnTnO_EYyqycPskakTHq9aZV-W7gNUuAUWqeco/rs:fit:860:0:0:0/g:ce/aHR0cHM6Ly93YWxs/cGFwZXJjYXZlLmNv/bS93cC93cDI3MjY3/MDYuanBn);font-family:camtasia;font-size:120%;color:#ffffff;text-align:center;border-radius:20px 50px; padding:10px\"> BrisT1D-AutoGlucon Ensemble [Baseline]</p>","metadata":{}},{"cell_type":"code","source":"import pandas as pd\ntrain=pd.read_csv('/kaggle/input/brist1d/train.csv')\ntest=pd.read_csv('/kaggle/input/brist1d/test.csv')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T18:20:05.365391Z","iopub.execute_input":"2024-10-19T18:20:05.365794Z","iopub.status.idle":"2024-10-19T18:20:19.712791Z","shell.execute_reply.started":"2024-10-19T18:20:05.365736Z","shell.execute_reply":"2024-10-19T18:20:19.711782Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T18:20:19.714940Z","iopub.execute_input":"2024-10-19T18:20:19.715765Z","iopub.status.idle":"2024-10-19T18:20:19.751501Z","shell.execute_reply.started":"2024-10-19T18:20:19.715716Z","shell.execute_reply":"2024-10-19T18:20:19.750596Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(\"Train shape:\",train.shape)\nprint(\"Test shape:\",test.shape)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T18:20:19.752537Z","iopub.execute_input":"2024-10-19T18:20:19.752815Z","iopub.status.idle":"2024-10-19T18:20:19.757879Z","shell.execute_reply.started":"2024-10-19T18:20:19.752784Z","shell.execute_reply":"2024-10-19T18:20:19.756814Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"numeric_cols = [col for col in train.columns if train[col].dtype in ['float64', 'int64']]\ntrain_numeric = train[numeric_cols]\nprint(train_numeric.describe())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T18:20:19.759124Z","iopub.execute_input":"2024-10-19T18:20:19.759771Z","iopub.status.idle":"2024-10-19T18:20:23.176218Z","shell.execute_reply.started":"2024-10-19T18:20:19.759722Z","shell.execute_reply":"2024-10-19T18:20:23.175315Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"<a id=\"1\"></a>\n# <p style=\"background-image: url(https://imgs.search.brave.com/3Ovn1cnTnO_EYyqycPskakTHq9aZV-W7gNUuAUWqeco/rs:fit:860:0:0:0/g:ce/aHR0cHM6Ly93YWxs/cGFwZXJjYXZlLmNv/bS93cC93cDI3MjY3/MDYuanBn);font-family:camtasia;font-size:120%;color:#ffffff;text-align:center;border-radius:20px 50px; padding:10px\"> Exploring %ge of missing rows</p>","metadata":{}},{"cell_type":"code","source":"import numpy as np\nfrom prettytable import PrettyTable\ntable = PrettyTable()\n\ntarget = 'bg+1:00'\ntable.field_names = ['Feature', 'Data Type', 'Train Missing %', 'Test Missing %']\nfor column in train.columns:\n    data_type = str(train[column].dtype)\n    non_null_count_train= np.round(100-train[column].count()/train.shape[0]*100,1)\n    if column!=target:\n        non_null_count_test = np.round(100-test[column].count()/test.shape[0]*100,1)\n    else:\n        non_null_count_test=\"NA\"\n    table.add_row([column, data_type, non_null_count_train,non_null_count_test])\nprint(table)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T18:20:23.178649Z","iopub.execute_input":"2024-10-19T18:20:23.178950Z","iopub.status.idle":"2024-10-19T18:20:23.966432Z","shell.execute_reply.started":"2024-10-19T18:20:23.178918Z","shell.execute_reply":"2024-10-19T18:20:23.965516Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train['time'] = pd.to_datetime(train['time'], format='%H:%M:%S')\ntest['time'] = pd.to_datetime(test['time'], format='%H:%M:%S')\n\ntrain['hour'] = train['time'].dt.hour\ntrain['minute'] = train['time'].dt.minute\ntest['hour'] = test['time'].dt.hour\ntest['minute'] = test['time'].dt.minute\n\ntrain.drop('time', axis=1, inplace=True)\ntest.drop('time', axis=1, inplace=True)\n\n# Though this step is not required","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T18:20:23.967610Z","iopub.execute_input":"2024-10-19T18:20:23.967901Z","iopub.status.idle":"2024-10-19T18:20:24.341309Z","shell.execute_reply.started":"2024-10-19T18:20:23.967869Z","shell.execute_reply":"2024-10-19T18:20:24.340104Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"%%capture\n!pip install ray==2.10.0\n!pip install autogluon.tabular\n!pip install -U ipywidgets","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T18:20:24.342953Z","iopub.execute_input":"2024-10-19T18:20:24.343258Z","iopub.status.idle":"2024-10-19T18:21:31.747390Z","shell.execute_reply.started":"2024-10-19T18:20:24.343225Z","shell.execute_reply":"2024-10-19T18:21:31.746242Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"<a id=\"1\"></a>\n# <p style=\"background-image: url(https://imgs.search.brave.com/3Ovn1cnTnO_EYyqycPskakTHq9aZV-W7gNUuAUWqeco/rs:fit:860:0:0:0/g:ce/aHR0cHM6Ly93YWxs/cGFwZXJjYXZlLmNv/bS93cC93cDI3MjY3/MDYuanBn);font-family:camtasia;font-size:120%;color:#ffffff;text-align:center;border-radius:20px 50px; padding:10px\"> Loading AutoGlucon</p>","metadata":{}},{"cell_type":"code","source":"from autogluon.tabular import TabularDataset, TabularPredictor\n\nimport pandas as pd\nfrom autogluon.tabular import TabularPredictor\n\npredictor = TabularPredictor(\n    label='bg+1:00',\n    eval_metric='rmse',  \n    problem_type='regression'  \n).fit(\n    train_data=train,\n    num_gpus=1,\n    presets='best_quality',\n    time_limit=2000,\n    verbosity=2,\n    num_bag_folds=5, num_bag_sets=1, num_stack_levels=3,\n    hyperparameters = {'NN_TORCH': {'num_epochs': 10}, 'GBM': {'num_boost_round': 20}},\n)\n\nresults = predictor.fit_summary()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T19:02:00.168286Z","iopub.execute_input":"2024-10-19T19:02:00.168683Z","iopub.status.idle":"2024-10-19T19:32:54.856072Z","shell.execute_reply.started":"2024-10-19T19:02:00.168645Z","shell.execute_reply":"2024-10-19T19:32:54.854958Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"predictor.leaderboard(extra_info=True)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"pred_features=predictor.features()\ntest_features = test.columns.tolist()\n\nmissing_features = set(test_features) - set(pred_features)\n\nprint(\"Missing features in predictor:\", missing_features)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T20:40:29.366913Z","iopub.execute_input":"2024-10-19T20:40:29.367946Z","iopub.status.idle":"2024-10-19T20:40:29.374322Z","shell.execute_reply.started":"2024-10-19T20:40:29.367881Z","shell.execute_reply":"2024-10-19T20:40:29.373173Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"##### basically our model used all features, which is very unusual but anyways","metadata":{}},{"cell_type":"code","source":"predictor.model_best","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T19:42:06.485071Z","iopub.execute_input":"2024-10-19T19:42:06.485493Z","iopub.status.idle":"2024-10-19T19:42:06.491884Z","shell.execute_reply.started":"2024-10-19T19:42:06.485453Z","shell.execute_reply":"2024-10-19T19:42:06.491016Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"predictor.model_names()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T19:41:45.364964Z","iopub.execute_input":"2024-10-19T19:41:45.365715Z","iopub.status.idle":"2024-10-19T19:41:45.371721Z","shell.execute_reply.started":"2024-10-19T19:41:45.365674Z","shell.execute_reply":"2024-10-19T19:41:45.370845Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y_pred = predictor.predict(test)\n\nsub = pd.read_csv('/kaggle/input/brist1d/sample_submission.csv')\nsub['bg+1:00'] = y_pred\nsub.to_csv('submission3.csv', index=False)\nprint(sub.head())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T19:33:10.850065Z","iopub.execute_input":"2024-10-19T19:33:10.850887Z","iopub.status.idle":"2024-10-19T19:33:21.124293Z","shell.execute_reply.started":"2024-10-19T19:33:10.850848Z","shell.execute_reply":"2024-10-19T19:33:21.123352Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sub2['bg+1:00'] = y_pred\nsub2.to_csv('LightGBM_BAG_L1.csv', index=False)\nprint(sub2.head())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T19:45:54.167152Z","iopub.execute_input":"2024-10-19T19:45:54.167701Z","iopub.status.idle":"2024-10-19T19:45:54.573723Z","shell.execute_reply.started":"2024-10-19T19:45:54.167660Z","shell.execute_reply":"2024-10-19T19:45:54.572597Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y_pred1 = predictor.predict(test, model='NeuralNetTorch_BAG_L1')\ny_pred2 = predictor.predict(test, model='NeuralNetTorch_BAG_L2')\ny_pred3 = predictor.predict(test, model='NeuralNetTorch_BAG_L3')\ny_pred4 = predictor.predict(test, model='LightGBM_BAG_L1')\ny_pred5 = predictor.predict(test, model='LightGBM_BAG_L2')\ny_pred6 = predictor.predict(test, model='LightGBM_BAG_L3')\ny_pred7 = predictor.predict(test, model='LightGBM_BAG_L4')\ny_pred8 = predictor.predict(test, model='WeightedEnsemble_L2')\ny_pred9 = predictor.predict(test, model='WeightedEnsemble_L3')\ny_pred10 = predictor.predict(test, model='WeightedEnsemble_L4')\ny_pred11 = predictor.predict(test, model='WeightedEnsemble_L5')\n\nsample_submission = pd.read_csv('/kaggle/input/brist1d/sample_submission.csv')\n\nsub1 = sample_submission.copy()\nsub1['bg+1:00'] = y_pred1\nsub1.to_csv('NeuralNetTorch_BAG_L1.csv', index=False)\n\nsub2 = sample_submission.copy()\nsub2['bg+1:00'] = y_pred2\nsub2.to_csv('NeuralNetTorch_BAG_L2.csv', index=False)\n\nsub3 = sample_submission.copy()\nsub3['bg+1:00'] = y_pred3\nsub3.to_csv('NeuralNetTorch_BAG_L3.csv', index=False)\n\nsub4 = sample_submission.copy()\nsub4['bg+1:00'] = y_pred4\nsub4.to_csv('LightGBM_BAG_1L1.csv', index=False)\n\nsub5 = sample_submission.copy()\nsub5['bg+1:00'] = y_pred5\nsub5.to_csv('LightGBM_BAG_L2.csv', index=False)\n\nsub6 = sample_submission.copy()\nsub6['bg+1:00'] = y_pred6\nsub6.to_csv('LightGBM_BAG_L3.csv', index=False)\n\nsub7 = sample_submission.copy()\nsub7['bg+1:00'] = y_pred7\nsub7.to_csv('LightGBM_BAG_L4.csv', index=False)\n\nsub8 = sample_submission.copy()\nsub8['bg+1:00'] = y_pred8\nsub8.to_csv('WeightedEnsemble_L2.csv', index=False)\n\nsub9 = sample_submission.copy()\nsub9['bg+1:00'] = y_pred9\nsub9.to_csv('WeightedEnsemble_L3.csv', index=False)\n\nsub10 = sample_submission.copy()\nsub10['bg+1:00'] = y_pred10\nsub10.to_csv('WeightedEnsemble_L4.csv', index=False)\n\nsub11 = sample_submission.copy()\nsub11['bg+1:00'] = y_pred11\nsub11.to_csv('WeightedEnsemble_L5.csv', index=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T20:03:42.768594Z","iopub.execute_input":"2024-10-19T20:03:42.769404Z","iopub.status.idle":"2024-10-19T20:04:53.648480Z","shell.execute_reply.started":"2024-10-19T20:03:42.769363Z","shell.execute_reply":"2024-10-19T20:04:53.647603Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"<a id=\"1\"></a>\n# <p style=\"background-image: url(https://imgs.search.brave.com/3Ovn1cnTnO_EYyqycPskakTHq9aZV-W7gNUuAUWqeco/rs:fit:860:0:0:0/g:ce/aHR0cHM6Ly93YWxs/cGFwZXJjYXZlLmNv/bS93cC93cDI3MjY3/MDYuanBn);font-family:camtasia;font-size:120%;color:#ffffff;text-align:center;border-radius:20px 50px; padding:10px\"> Creating an ensemble outta all models</p>","metadata":{}},{"cell_type":"code","source":"sub1 = pd.read_csv('NeuralNetTorch_BAG_L1.csv')\nsub2 = pd.read_csv('NeuralNetTorch_BAG_L2.csv')\nsub3 = pd.read_csv('NeuralNetTorch_BAG_L3.csv')\nsub4 = pd.read_csv('LightGBM_BAG_1L1.csv')\nsub5 = pd.read_csv('LightGBM_BAG_L2.csv')\nsub6 = pd.read_csv('LightGBM_BAG_L3.csv')\nsub7 = pd.read_csv('LightGBM_BAG_L4.csv')\nsub8 = pd.read_csv('WeightedEnsemble_L2.csv')\nsub9 = pd.read_csv('WeightedEnsemble_L3.csv')\nsub10 = pd.read_csv('WeightedEnsemble_L4.csv')\nsub11 = pd.read_csv('WeightedEnsemble_L5.csv')\n\n\npredictions = [\n    sub1['bg+1:00'],\n    sub2['bg+1:00'],\n    sub3['bg+1:00'],\n    sub4['bg+1:00'],\n    sub5['bg+1:00'],\n    sub6['bg+1:00'],\n    sub7['bg+1:00'],\n    sub8['bg+1:00'],\n    sub9['bg+1:00'],\n    sub10['bg+1:00'],\n    sub11['bg+1:00']\n]\n\naverage_predictions = sum(predictions) / len(predictions)\n\nfinal_submission = sub1.copy()\nfinal_submission['bg+1:00'] = average_predictions\n\nfinal_submission.to_csv('bagging_ensemble_submission.csv', index=False)\nprint(\"Bagging ensemble created and saved as 'bagging_ensemble_submission.csv'\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T20:08:46.110347Z","iopub.execute_input":"2024-10-19T20:08:46.110753Z","iopub.status.idle":"2024-10-19T20:08:46.169544Z","shell.execute_reply.started":"2024-10-19T20:08:46.110715Z","shell.execute_reply":"2024-10-19T20:08:46.168593Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"predictions_stack = np.column_stack(predictions)\n\nmedian_predictions = np.median(predictions_stack, axis=1)\n\nfinal_submission = sub1.copy()\nfinal_submission['bg+1:00'] = median_predictions\n\nfinal_submission.to_csv('voting_ensemble_submission.csv', index=False)\nprint(\"Voting ensemble created and saved as 'voting_ensemble_submission.csv'\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T20:11:11.446895Z","iopub.execute_input":"2024-10-19T20:11:11.447308Z","iopub.status.idle":"2024-10-19T20:11:11.466367Z","shell.execute_reply.started":"2024-10-19T20:11:11.447255Z","shell.execute_reply":"2024-10-19T20:11:11.465320Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"'''\n# Example training predictions (this should be generated on your validation fold for the same models)\n# For demonstration purposes, we'll use the test set predictions as a proxy, but you should use your out-of-fold validation predictions\ntrain_predictions_stack = test_predictions_stack  # Replace this with actual validation predictions\ntrain_labels = np.random.rand(train_predictions_stack.shape[0])  # Replace this with actual labels from your training/validation data\n\n# Train the meta-model (Linear Regression)\nmeta_model = LinearRegression()\nmeta_model.fit(train_predictions_stack, train_labels)\n\n# Predict the test set using the meta-model (stacking)\nstacked_predictions = meta_model.predict(test_predictions_stack)\n\n# Create the final submission file with the stacked predictions\nfinal_submission = sub1.copy()  # Use any of the subs as a template\nfinal_submission['bg+1:00'] = stacked_predictions\n\nfinal_submission.to_csv('stacked_ensemble_submission.csv', index=False)\n\nprint(\"Stacked ensemble created and saved as 'stacked_ensemble_submission.csv'\")\n'''","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"'''\nfrom sklearn.linear_model import LinearRegression\nfrom sklearn.ensemble import RandomForestRegressor\n\ntrain_labels = np.random.rand(level_1_predictions_stack.shape[0])\nmeta_model_1 = LinearRegression()\nmeta_model_1.fit(level_1_predictions_stack, train_labels)\n\nlevel_2_train_predictions = meta_model_1.predict(level_1_predictions_stack)\n\nlevel_2_predictions_stack = np.column_stack([level_2_train_predictions, level_1_predictions_stack.mean(axis=1)])\n\nmeta_model_2 = RandomForestRegressor(n_estimators=100)\nmeta_model_2.fit(level_2_predictions_stack, train_labels)\n\nlevel_1_test_predictions = meta_model_1.predict(level_1_predictions_stack)\nlevel_2_test_predictions_stack = np.column_stack([level_1_test_predictions, level_1_predictions_stack.mean(axis=1)])\n\nfinal_stacked_predictions = meta_model_2.predict(level_2_test_predictions_stack)\n\nfinal_submission = sub1.copy()\nfinal_submission['bg+1:00'] = final_stacked_predictions\n\nfinal_submission.to_csv('multi_level_stacked_ensemble_submission.csv', index=False)\n\nprint(\"Multi-level stacked ensemble created and saved as 'multi_level_stacked_ensemble_submission.csv'\")\n'''","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}