{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.11","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":104857,"databundleVersionId":12651513,"sourceType":"competition"}],"dockerImageVersionId":31040,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.ensemble import RandomForestRegressor\nfrom sklearn.metrics import mean_squared_error\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-06-14T15:22:00.183320Z","iopub.execute_input":"2025-06-14T15:22:00.184446Z","iopub.status.idle":"2025-06-14T15:22:01.568201Z","shell.execute_reply.started":"2025-06-14T15:22:00.184411Z","shell.execute_reply":"2025-06-14T15:22:01.567222Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train = pd.read_csv(\"/kaggle/input/burnout-datathon-ieeecsmuj/train.csv\")\ntest = pd.read_csv(\"/kaggle/input/burnout-datathon-ieeecsmuj/test.csv\")\nsample_submission = pd.read_csv(\"/kaggle/input/burnout-datathon-ieeecsmuj/sample_submission.csv\")\n\nprint(train.head())\nprint(train.info())\nprint(train.columns)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T15:22:02.260462Z","iopub.execute_input":"2025-06-14T15:22:02.260982Z","iopub.status.idle":"2025-06-14T15:22:15.812473Z","shell.execute_reply.started":"2025-06-14T15:22:02.260955Z","shell.execute_reply":"2025-06-14T15:22:15.811535Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(sample_submission.columns)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T15:22:20.058110Z","iopub.execute_input":"2025-06-14T15:22:20.058490Z","iopub.status.idle":"2025-06-14T15:22:20.065105Z","shell.execute_reply.started":"2025-06-14T15:22:20.058465Z","shell.execute_reply":"2025-06-14T15:22:20.064024Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y = train['Lap_Time_Seconds']","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T15:22:21.261267Z","iopub.execute_input":"2025-06-14T15:22:21.261599Z","iopub.status.idle":"2025-06-14T15:22:21.267402Z","shell.execute_reply.started":"2025-06-14T15:22:21.261578Z","shell.execute_reply":"2025-06-14T15:22:21.266301Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Drop unnecessary columns\ndrop_cols = ['Lap_Time_Seconds', 'Unique ID', 'Rider_ID', 'rider_name', 'team_name', 'bike_name', 'shortname', 'circuit_name']\nX = train.drop(columns=drop_cols, errors='ignore')\nX_test = test.drop(columns=drop_cols, errors='ignore')\n\n# Combine train+test for consistent encoding\nX_all = pd.concat([X, X_test], axis=0)\n\n# One-hot encode categoricals\nX_all = pd.get_dummies(X_all)\n\n# Split back\nX = X_all.iloc[:len(train), :]\nX_test = X_all.iloc[len(train):, :]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T15:23:13.202025Z","iopub.execute_input":"2025-06-14T15:23:13.202427Z","iopub.status.idle":"2025-06-14T15:23:19.123669Z","shell.execute_reply.started":"2025-06-14T15:23:13.202399Z","shell.execute_reply":"2025-06-14T15:23:19.122656Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import lightgbm as lgb\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import mean_squared_error\nimport numpy as np\n\n# Train/val split\nX_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)\n\n# LightGBM dataset format\ntrain_data = lgb.Dataset(X_train, label=y_train)\nval_data = lgb.Dataset(X_val, label=y_val)\n\n# LightGBM parameters (fast + good accuracy)\nparams = {\n    'objective': 'regression',\n    'metric': 'rmse',\n    'verbosity': -1,\n    'boosting_type': 'gbdt',\n    'num_leaves': 31,\n    'learning_rate': 0.1,\n    'n_jobs': -1\n}\n\n# Train the model (10x faster than RF)\nmodel = lgb.train(params, train_data, valid_sets=[val_data], num_boost_round=100)\n\n# Predict\ntest_preds = model.predict(X_test)\n\n# Submission\nsubmission = pd.DataFrame({\n    \"Unique ID\": test[\"Unique ID\"],\n    \"Lap_Time_Seconds\": test_preds\n})\nsubmission.to_csv(\"/kaggle/working/solution.csv\", index=False)\nprint(\"✅ Submission saved as solution.csv\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T16:02:07.422419Z","iopub.execute_input":"2025-06-14T16:02:07.422801Z","iopub.status.idle":"2025-06-14T16:02:24.289108Z","shell.execute_reply.started":"2025-06-14T16:02:07.422778Z","shell.execute_reply":"2025-06-14T16:02:24.288035Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(submission.isnull().sum())\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T16:03:27.640439Z","iopub.execute_input":"2025-06-14T16:03:27.641300Z","iopub.status.idle":"2025-06-14T16:03:27.651313Z","shell.execute_reply.started":"2025-06-14T16:03:27.641262Z","shell.execute_reply":"2025-06-14T16:03:27.650379Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(len(submission), len(test))  # Both must be equal\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T16:03:41.245265Z","iopub.execute_input":"2025-06-14T16:03:41.245624Z","iopub.status.idle":"2025-06-14T16:03:41.250541Z","shell.execute_reply.started":"2025-06-14T16:03:41.245600Z","shell.execute_reply":"2025-06-14T16:03:41.249538Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission = submission.sort_values(\"Unique ID\").reset_index(drop=True)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T16:04:00.617281Z","iopub.execute_input":"2025-06-14T16:04:00.617610Z","iopub.status.idle":"2025-06-14T16:04:00.640844Z","shell.execute_reply.started":"2025-06-14T16:04:00.617586Z","shell.execute_reply":"2025-06-14T16:04:00.639952Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Predict on test set\ntest_preds = model.predict(X_test)\n\n# Prepare submission\nsubmission = pd.DataFrame({\n    \"Unique ID\": test[\"Unique ID\"],\n    \"Lap_Time_Seconds\": test_preds\n})\n\nsubmission.to_csv(\"/kaggle/working/submission.csv\", index=False)\nprint(\"✅ Submission saved as solution.csv\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T16:08:56.497858Z","iopub.execute_input":"2025-06-14T16:08:56.498214Z","iopub.status.idle":"2025-06-14T16:08:58.674354Z","shell.execute_reply.started":"2025-06-14T16:08:56.498190Z","shell.execute_reply":"2025-06-14T16:08:58.673254Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.preprocessing import LabelEncoder\n\nX = train.drop(columns=['Lap_Time_Seconds', 'Unique ID'])\ny = train['Lap_Time_Seconds']\n\n# Label encode all object (string) columns\nlabel_encoders = {}\nfor col in X.select_dtypes(include='object').columns:\n    le = LabelEncoder()\n    X[col] = le.fit_transform(X[col].astype(str))\n    label_encoders[col] = le\n\n# Train-test split\nfrom sklearn.model_selection import train_test_split\nX_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)\n\n# Train model\nfrom lightgbm import LGBMRegressor\nmodel = LGBMRegressor()\nmodel.fit(X_train, y_train)\n\n# Predict and evaluate\nfrom sklearn.metrics import mean_squared_error\nimport numpy as np\nval_preds = model.predict(X_val)\nrmse = np.sqrt(mean_squared_error(y_val, val_preds))\nprint(\"Validation RMSE:\", rmse)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T16:15:57.388225Z","iopub.execute_input":"2025-06-14T16:15:57.389285Z","iopub.status.idle":"2025-06-14T16:16:19.710749Z","shell.execute_reply.started":"2025-06-14T16:15:57.389256Z","shell.execute_reply":"2025-06-14T16:16:19.709824Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}