{"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"},{"sourceId":12162370,"sourceType":"datasetVersion","datasetId":7659970}],"dockerImageVersionId":31040,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:45:43.189655Z","iopub.execute_input":"2025-06-14T09:45:43.190075Z","iopub.status.idle":"2025-06-14T09:45:43.204214Z","shell.execute_reply.started":"2025-06-14T09:45:43.190039Z","shell.execute_reply":"2025-06-14T09:45:43.203185Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\n\n# Load datasets\ntrain = pd.read_csv('/kaggle/input/burnout-datathon-ieeecsmuj/train.csv')\ntest = pd.read_csv('/kaggle/input/burnout-datathon-ieeecsmuj/test.csv')\nval = pd.read_csv('/kaggle/input/burnout-datathon-ieeecsmuj/val.csv')\nsample_submission = pd.read_csv('/kaggle/input/burnout-datathon-ieeecsmuj/sample_submission.csv')\n\n# Basic Overview\nprint(\"Train Shape:\", train.shape)\nprint(\"Test Shape:\", test.shape)\nprint(\"Validation Shape:\", val.shape)\n\n# First few rows\nprint(\"\\nTrain Head:\\n\", train.head())\n\n# Missing values\nprint(\"\\nMissing values in Train:\\n\", train.isnull().sum())\n\n# Data types\nprint(\"\\nData Types:\\n\", train.dtypes)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:45:43.205771Z","iopub.execute_input":"2025-06-14T09:45:43.206008Z","iopub.status.idle":"2025-06-14T09:46:00.172161Z","shell.execute_reply.started":"2025-06-14T09:45:43.205988Z","shell.execute_reply":"2025-06-14T09:46:00.171345Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#To predict the Lap_Time_Seconds for each rider in the test.csv file based on the features available.\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:46:00.173048Z","iopub.execute_input":"2025-06-14T09:46:00.173308Z","iopub.status.idle":"2025-06-14T09:46:00.177277Z","shell.execute_reply.started":"2025-06-14T09:46:00.173280Z","shell.execute_reply":"2025-06-14T09:46:00.176377Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:46:00.179026Z","iopub.execute_input":"2025-06-14T09:46:00.179285Z","iopub.status.idle":"2025-06-14T09:46:00.205967Z","shell.execute_reply.started":"2025-06-14T09:46:00.179259Z","shell.execute_reply":"2025-06-14T09:46:00.205200Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.preprocessing import LabelEncoder, StandardScaler\n\n# Load the data\ndf = pd.read_csv('/kaggle/input/burnout-datathon-ieeecsmuj/train.csv')\n\n# 🔍 2.1 Check & Fill Missing Values\n# Separate numerical and categorical columns\nnum_cols = df.select_dtypes(include=['int64', 'float64']).columns\ncat_cols = df.select_dtypes(include=['object']).columns\n\n# Fill numerical missing values with mean\nnum_imputer = SimpleImputer(strategy='mean')\ndf[num_cols] = num_imputer.fit_transform(df[num_cols])\n\n# Fill categorical missing values with most frequent (mode)\ncat_imputer = SimpleImputer(strategy='most_frequent')\ndf[cat_cols] = cat_imputer.fit_transform(df[cat_cols])\n\n# 🔡 2.2 Encode Categorical Columns\n# You can apply Label Encoding to each categorical column\nlabel_encoders = {}\nfor col in cat_cols:\n    le = LabelEncoder()\n    df[col] = le.fit_transform(df[col])\n    label_encoders[col] = le  # store the encoder in case needed later\n\n# 📏 2.3 Feature Scaling (Optional but good practice for some models)\nscaler = StandardScaler()\ndf[num_cols] = scaler.fit_transform(df[num_cols])\n\n# 🧹 2.4 Drop Irrelevant or Leakage Columns\n# Drop columns like Unique ID or anything not useful for modeling\ncols_to_drop = ['Unique ID', 'Rider_ID']  # add/remove based on EDA\ndf.drop(columns=cols_to_drop, inplace=True, errors='ignore')\n\n# ✅ Final shape of preprocessed dataset\nprint(\"Shape after preprocessing:\", df.shape)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:46:00.206736Z","iopub.execute_input":"2025-06-14T09:46:00.206982Z","iopub.status.idle":"2025-06-14T09:46:24.383428Z","shell.execute_reply.started":"2025-06-14T09:46:00.206956Z","shell.execute_reply":"2025-06-14T09:46:24.382570Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.preprocessing import LabelEncoder, StandardScaler\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import mean_squared_error\nfrom xgboost import XGBRegressor\nimport warnings\nwarnings.filterwarnings('ignore')\n\ntrain_df = pd.read_csv(\"/kaggle/input/burnout-datathon-ieeecsmuj/train.csv\")\ntest_df = pd.read_csv(\"/kaggle/input/burnout-datathon-ieeecsmuj/test.csv\")\nval_df = pd.read_csv(\"/kaggle/input/burnout-datathon-ieeecsmuj/val.csv\")\n\n#  Set target variable\ny = train_df['Lap_Time_Seconds']\nX = train_df.drop(columns=['Lap_Time_Seconds', 'Unique ID', 'Rider_ID'], errors='ignore')\n\n\nnum_features = X.select_dtypes(include=['int64', 'float64']).columns\ncat_features = X.select_dtypes(include='object').columns\n\n\nnum_imputer = SimpleImputer(strategy='mean')\nX[num_features] = num_imputer.fit_transform(X[num_features])\ntest_df[num_features] = num_imputer.transform(test_df[num_features])\nval_df[num_features] = num_imputer.transform(val_df[num_features])\n\ncat_imputer = SimpleImputer(strategy='most_frequent')\nX[cat_features] = cat_imputer.fit_transform(X[cat_features])\ntest_df[cat_features] = cat_imputer.transform(test_df[cat_features])\nval_df[cat_features] = cat_imputer.transform(val_df[cat_features])\n\n\nlabel_encoders = {}\nfor col in cat_features:\n    encoder = LabelEncoder()\n    X[col] = encoder.fit_transform(X[col])\n    test_df[col] = encoder.transform(test_df[col])\n    val_df[col] = encoder.transform(val_df[col])\n    label_encoders[col] = encoder\n\n\nscaler = StandardScaler()\nX[num_features] = scaler.fit_transform(X[num_features])\ntest_df[num_features] = scaler.transform(test_df[num_features])\nval_df[num_features] = scaler.transform(val_df[num_features])\n\nX_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.1, random_state=42)\n\n#  XGBoost Model Training\nmodel = XGBRegressor(n_estimators=500,\n                     learning_rate=0.05,\n                     max_depth=10,\n                     subsample=0.8,\n                     colsample_bytree=0.8,\n                     random_state=42,\n                     tree_method='hist')\nmodel.fit(X_train, y_train)\n\ny_pred_valid = model.predict(X_valid)\nrmse = np.sqrt(mean_squared_error(y_valid, y_pred_valid))\nprint(\"Validation RMSE:\", rmse)\n\n\ntest_predictions = model.predict(test_df.drop(columns=['Unique ID', 'Rider_ID'], errors='ignore'))\n\nsubmission = pd.DataFrame({\n    'Unique ID': test_df['Unique ID'],\n    'Lap_Time_Seconds': test_predictions\n})\nsubmission.to_csv(\"submission.csv\", index=False)\n\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:46:24.384481Z","iopub.execute_input":"2025-06-14T09:46:24.384829Z","iopub.status.idle":"2025-06-14T09:48:34.205929Z","shell.execute_reply.started":"2025-06-14T09:46:24.384801Z","shell.execute_reply":"2025-06-14T09:48:34.205101Z"}},"outputs":[],"execution_count":null}]}