{"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\n\n# ✅ Use the correct dataset folder path\ntrain = pd.read_csv('/kaggle/input/burnout-datathon-ieeecsmuj/train.csv')\ntest = pd.read_csv('/kaggle/input/burnout-datathon-ieeecsmuj/test.csv')\nsample = pd.read_csv('/kaggle/input/burnout-datathon-ieeecsmuj/sample_submission.csv')\n\n# Show the first few rows\ntrain.head()\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T08:14:29.176556Z","iopub.execute_input":"2025-06-14T08:14:29.176973Z","iopub.status.idle":"2025-06-14T08:14:44.722521Z","shell.execute_reply.started":"2025-06-14T08:14:29.176946Z","shell.execute_reply":"2025-06-14T08:14:44.721305Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Libraries\nimport pandas as pd\nimport numpy as np\nimport xgboost as xgb\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import mean_squared_error\nimport matplotlib.pyplot as plt\n\n# Load dataset\ntrain = pd.read_csv('/kaggle/input/burnout-datathon-ieeecsmuj/train.csv')\ntest = pd.read_csv('/kaggle/input/burnout-datathon-ieeecsmuj/test.csv')\nsample = pd.read_csv('/kaggle/input/burnout-datathon-ieeecsmuj/sample_submission.csv')\n\n# Target column\ntarget = 'Lap_Time_Seconds'\ny = train[target]\ny_log = np.log1p(y)  # Log-transform target to reduce RMSE sensitivity\n\n# Columns for Frequency Encoding (instead of dropping)\nfreq_cols = ['rider_name', 'team_name', 'bike_name', 'shortname', 'circuit_name', 'rider', 'team', 'bike', 'Session', 'weather', 'track']\n\n# Frequency Encoding function\ndef frequency_encoding(df_train, df_test, cols):\n    for col in cols:\n        freq = df_train[col].value_counts() / len(df_train)\n        df_train[col + \"_freq\"] = df_train[col].map(freq)\n        df_test[col + \"_freq\"] = df_test[col].map(freq)\n    return df_train, df_test\n\ntrain, test = frequency_encoding(train, test, freq_cols)\n\n# Drop original high-cardinality categorical columns + 'Unique ID'\ncols_to_drop = ['Unique ID'] + freq_cols\nX = train.drop(columns=[target] + cols_to_drop, errors='ignore')\nX_test = test.drop(columns=cols_to_drop, errors='ignore')\n\n# One-hot encoding remaining categorical columns\nX = pd.get_dummies(X)\nX_test = pd.get_dummies(X_test)\n\n# Align test with train columns\nX, X_test = X.align(X_test, join='left', axis=1, fill_value=0)\n\n# Train-validation split\nX_train, X_val, y_train, y_val = train_test_split(X, y_log, test_size=0.2, random_state=42)\n\n# Improved XGBoost hyperparameters (further tunable)\nmodel = xgb.XGBRegressor(\n    n_estimators=1000,\n    learning_rate=0.03,\n    max_depth=9,\n    subsample=0.9,\n    colsample_bytree=0.9,\n    random_state=42,\n    tree_method='hist'\n)\n\n# Train\nmodel.fit(X_train, y_train)\n\n# Predict on validation (inverse transform)\nval_preds_log = model.predict(X_val)\nval_preds = np.expm1(val_preds_log)\ny_val_actual = np.expm1(y_val)\n\n# RMSE\nrmse = mean_squared_error(y_val_actual, val_preds, squared=False)\nprint(\"Validation RMSE:\", rmse)\n\n# Predict on test set\ntest_preds_log = model.predict(X_test)\ntest_preds = np.expm1(test_preds_log)\n\n# Final submission\nsubmission = sample.copy()\nsubmission['Lap_Time_Seconds'] = test_preds\nsubmission.to_csv('solution.csv', index=False)\n\nprint(\"Total predictions:\", submission.shape[0])\nsubmission.head(10)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T08:14:48.516736Z","iopub.execute_input":"2025-06-14T08:14:48.517156Z","iopub.status.idle":"2025-06-14T08:18:44.750038Z","shell.execute_reply.started":"2025-06-14T08:14:48.517128Z","shell.execute_reply":"2025-06-14T08:18:44.748955Z"}},"outputs":[],"execution_count":null}]}