{"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":12165941,"sourceType":"datasetVersion","datasetId":7662352}],"dockerImageVersionId":31040,"isInternetEnabled":false,"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},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom sklearn.preprocessing import LabelEncoder\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.ensemble import HistGradientBoostingRegressor\nfrom sklearn.metrics import mean_squared_error\n\n# Load data\n\ntrain = pd.read_csv(\"/kaggle/input/data123/train.csv\")\ntest = pd.read_csv(\"/kaggle/input/data123/test.csv\")\nsample_submission = pd.read_csv(\"/kaggle/input/data123/sample_submission.csv\")\n\n# Clean & preprocess\ndrop_cols = ['Unique_ID', 'Rider_name', 'Team_name', 'Bike_name', 'Circuit_name']\ntrain.drop(columns=drop_cols, inplace=True, errors='ignore')\ntest.drop(columns=drop_cols, inplace=True, errors='ignore')\n\n# Handle invalid numeric entries (e.g., +3s, DNF, DSQ)\nfor col in train.columns:\n    if train[col].dtype == 'object':\n        # Clean strings like \"+3s\", \"DNF\", etc.\n        train[col] = train[col].replace(\n            ['DNF', 'DNS', 'DSQ', 'DNQ', '+3s', '+5s', '+10s'],\n            np.nan\n        )\n        test[col] = test[col].replace(\n            ['DNF', 'DNS', 'DSQ', 'DNQ', '+3s', '+5s', '+10s'],\n            np.nan\n        )\n\n# Convert all remaining object types via LabelEncoding\nfor col in train.columns:\n    if train[col].dtype == 'object':\n        le = LabelEncoder()\n        combined = pd.concat([train[col], test[col]], axis=0).astype(str)\n        le.fit(combined)\n        train[col] = le.transform(train[col].astype(str))\n        test[col] = le.transform(test[col].astype(str))\n\n# Fill missing values with median (robust against outliers)\ntrain = train.fillna(train.median(numeric_only=True))\ntest = test.fillna(train.median(numeric_only=True))  # use train median to prevent data leakage\n\n# Split features and target\nX = train.drop('Lap_Time_Seconds', axis=1)\ny = train['Lap_Time_Seconds']\n\n# Split data for validation\nX_train, X_val, y_train, y_val = train_test_split(\n    X, y, test_size=0.2, random_state=42\n)\n\n# Train model with early stopping\nmodel = HistGradientBoostingRegressor(\n    max_iter=300,\n    learning_rate=0.07,\n    max_leaf_nodes=40,\n    early_stopping=True,\n    validation_fraction=0.1,\n    n_iter_no_change=20,\n    verbose=1,\n    random_state=42\n)\n\nmodel.fit(X_train, y_train)\n\n# Evaluate\nval_preds = model.predict(X_val)\nrmse = np.sqrt(mean_squared_error(y_val, val_preds))\nprint(f\"✅ Validation RMSE: {rmse:.4f}\")\n\n# Final test predictions\ntest_preds = model.predict(test)\n\n# Create final submission\nsubmission = sample_submission.copy()\nsubmission['Lap_Time_Seconds'] = test_preds\nsubmission.to_csv('RevengeofDANA_output.csv', index=False)\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T16:02:28.150512Z","iopub.execute_input":"2025-06-14T16:02:28.150839Z","iopub.status.idle":"2025-06-14T16:03:51.530178Z","shell.execute_reply.started":"2025-06-14T16:02:28.150815Z","shell.execute_reply":"2025-06-14T16:03:51.528973Z"}},"outputs":[{"name":"stdout","text":"Binning 0.485 GB of training data: 2.517 s\nBinning 0.054 GB of validation data: 0.201 s\nFitting gradient boosted rounds:\n[1/300] 1 tree, 40 leaves, max depth = 12, train loss: 66.38728, val loss: 66.47535, in 0.126s\n[2/300] 1 tree, 40 leaves, max depth = 12, train loss: 66.33331, val loss: 66.42527, in 0.100s\n[3/300] 1 tree, 40 leaves, max depth = 12, train loss: 66.27072, val loss: 66.36500, in 0.146s\n[4/300] 1 tree, 40 leaves, max depth = 10, train loss: 66.21260, val loss: 66.31049, in 0.153s\n[5/300] 1 tree, 40 leaves, max depth = 14, train loss: 66.15274, val loss: 66.25275, in 0.184s\n[6/300] 1 tree, 40 leaves, max depth = 12, train loss: 66.10242, val loss: 66.20190, in 0.117s\n[7/300] 1 tree, 40 leaves, max depth = 14, train loss: 66.04640, val loss: 66.14991, in 0.126s\n[8/300] 1 tree, 40 leaves, max depth = 12, train loss: 65.98616, val loss: 66.09348, in 0.128s\n[9/300] 1 tree, 40 leaves, max depth = 11, train loss: 65.93168, val loss: 66.04020, in 0.096s\n[10/300] 1 tree, 40 leaves, max depth = 15, train loss: 65.87866, val loss: 65.98750, in 0.157s\n[11/300] 1 tree, 40 leaves, max depth = 13, train loss: 65.82322, val loss: 65.93393, in 0.122s\n[12/300] 1 tree, 40 leaves, max depth = 12, train loss: 65.77517, val loss: 65.88959, in 0.089s\n[13/300] 1 tree, 40 leaves, max depth = 12, train loss: 65.72738, val loss: 65.84144, in 0.088s\n[14/300] 1 tree, 40 leaves, max depth = 13, train loss: 65.66981, val loss: 65.78886, in 0.159s\n[15/300] 1 tree, 40 leaves, max depth = 17, train loss: 65.61778, val loss: 65.73755, in 0.134s\n[16/300] 1 tree, 40 leaves, max depth = 11, train loss: 65.57277, val loss: 65.69374, in 0.093s\n[17/300] 1 tree, 40 leaves, max depth = 15, train loss: 65.51116, val loss: 65.63552, in 0.155s\n[18/300] 1 tree, 40 leaves, max depth = 12, train loss: 65.46887, val loss: 65.59317, in 0.081s\n[19/300] 1 tree, 40 leaves, max depth = 13, train loss: 65.41438, val loss: 65.54274, in 0.126s\n[20/300] 1 tree, 40 leaves, max depth = 17, train loss: 65.36099, val loss: 65.49122, in 0.121s\n[21/300] 1 tree, 40 leaves, max depth = 11, train loss: 65.31407, val loss: 65.44883, in 0.107s\n[22/300] 1 tree, 40 leaves, max depth = 14, train loss: 65.27222, val loss: 65.40807, in 0.089s\n[23/300] 1 tree, 40 leaves, max depth = 11, train loss: 65.22207, val loss: 65.35693, in 0.097s\n[24/300] 1 tree, 40 leaves, max depth = 10, train loss: 65.18324, val loss: 65.32220, in 0.085s\n[25/300] 1 tree, 40 leaves, max depth = 15, train loss: 65.13916, val loss: 65.28159, in 0.087s\n[26/300] 1 tree, 40 leaves, max depth = 9, train loss: 65.08695, val loss: 65.23195, in 0.135s\n[27/300] 1 tree, 40 leaves, max depth = 14, train loss: 65.04720, val loss: 65.19381, in 0.074s\n[28/300] 1 tree, 40 leaves, max depth = 11, train loss: 64.99527, val loss: 65.14541, in 0.130s\n[29/300] 1 tree, 40 leaves, max depth = 13, train loss: 64.94731, val loss: 65.09565, in 0.087s\n[30/300] 1 tree, 40 leaves, max depth = 17, train loss: 64.90190, val loss: 65.05363, in 0.108s\n[31/300] 1 tree, 40 leaves, max depth = 10, train loss: 64.85031, val loss: 64.99948, in 0.093s\n[32/300] 1 tree, 40 leaves, max depth = 11, train loss: 64.81760, val loss: 64.96747, in 0.082s\n[33/300] 1 tree, 40 leaves, max depth = 11, train loss: 64.77038, val loss: 64.92019, in 0.092s\n[34/300] 1 tree, 40 leaves, max depth = 9, train loss: 64.73596, val loss: 64.88426, in 0.091s\n[35/300] 1 tree, 40 leaves, max depth = 13, train loss: 64.68925, val loss: 64.84282, in 0.121s\n[36/300] 1 tree, 40 leaves, max depth = 12, train loss: 64.65540, val loss: 64.80864, in 0.073s\n[37/300] 1 tree, 40 leaves, max depth = 14, train loss: 64.61499, val loss: 64.76657, in 0.085s\n[38/300] 1 tree, 40 leaves, max depth = 15, train loss: 64.56334, val loss: 64.71765, in 0.124s\n[39/300] 1 tree, 40 leaves, max depth = 11, train loss: 64.51433, val loss: 64.67163, in 0.134s\n[40/300] 1 tree, 40 leaves, max depth = 12, train loss: 64.47959, val loss: 64.63876, in 0.077s\n[41/300] 1 tree, 40 leaves, max depth = 13, train loss: 64.43396, val loss: 64.59362, in 0.083s\n[42/300] 1 tree, 40 leaves, max depth = 12, train loss: 64.39934, val loss: 64.55984, in 0.079s\n[43/300] 1 tree, 40 leaves, max depth = 15, train loss: 64.34872, val loss: 64.50994, in 0.094s\n[44/300] 1 tree, 40 leaves, max depth = 11, train loss: 64.31654, val loss: 64.47951, in 0.092s\n[45/300] 1 tree, 40 leaves, max depth = 13, train loss: 64.27906, val loss: 64.44340, in 0.080s\n[46/300] 1 tree, 40 leaves, max depth = 13, train loss: 64.22677, val loss: 64.39039, in 0.120s\n[47/300] 1 tree, 40 leaves, max depth = 12, train loss: 64.17897, val loss: 64.34450, in 0.124s\n[48/300] 1 tree, 40 leaves, max depth = 13, train loss: 64.14424, val loss: 64.31033, in 0.076s\n[49/300] 1 tree, 40 leaves, max depth = 10, train loss: 64.09616, val loss: 64.26476, in 0.085s\n[50/300] 1 tree, 40 leaves, max depth = 10, train loss: 64.04796, val loss: 64.21721, in 0.090s\n[51/300] 1 tree, 40 leaves, max depth = 12, train loss: 64.00184, val loss: 64.17192, in 0.141s\n[52/300] 1 tree, 40 leaves, max depth = 11, train loss: 63.95340, val loss: 64.12488, in 0.100s\n[53/300] 1 tree, 40 leaves, max depth = 11, train loss: 63.92691, val loss: 64.09908, in 0.072s\n[54/300] 1 tree, 40 leaves, max depth = 15, train loss: 63.87888, val loss: 64.05261, in 0.099s\n[55/300] 1 tree, 40 leaves, max depth = 13, train loss: 63.84992, val loss: 64.02526, in 0.088s\n[56/300] 1 tree, 40 leaves, max depth = 14, train loss: 63.79490, val loss: 63.97102, in 0.095s\n[57/300] 1 tree, 40 leaves, max depth = 12, train loss: 63.75542, val loss: 63.93211, in 0.105s\n[58/300] 1 tree, 40 leaves, max depth = 11, train loss: 63.72092, val loss: 63.89622, in 0.074s\n[59/300] 1 tree, 40 leaves, max depth = 12, train loss: 63.67051, val loss: 63.84645, in 0.105s\n[60/300] 1 tree, 40 leaves, max depth = 12, train loss: 63.62543, val loss: 63.80394, in 0.093s\n[61/300] 1 tree, 40 leaves, max depth = 15, train loss: 63.57936, val loss: 63.75771, in 0.085s\n[62/300] 1 tree, 40 leaves, max depth = 12, train loss: 63.54232, val loss: 63.72303, in 0.079s\n[63/300] 1 tree, 40 leaves, max depth = 14, train loss: 63.49958, val loss: 63.67897, in 0.085s\n[64/300] 1 tree, 40 leaves, max depth = 12, train loss: 63.45057, val loss: 63.63386, in 0.106s\n[65/300] 1 tree, 40 leaves, max depth = 13, train loss: 63.41081, val loss: 63.59543, in 0.092s\n[66/300] 1 tree, 40 leaves, max depth = 11, train loss: 63.38101, val loss: 63.56608, in 0.071s\n[67/300] 1 tree, 40 leaves, max depth = 14, train loss: 63.33781, val loss: 63.52380, in 0.086s\n[68/300] 1 tree, 40 leaves, max depth = 13, train loss: 63.30731, val loss: 63.49293, in 0.073s\n[69/300] 1 tree, 40 leaves, max depth = 13, train loss: 63.26332, val loss: 63.44720, in 0.094s\n[70/300] 1 tree, 40 leaves, max depth = 12, train loss: 63.21805, val loss: 63.40186, in 0.142s\n[71/300] 1 tree, 40 leaves, max depth = 13, train loss: 63.17388, val loss: 63.35915, in 0.148s\n[72/300] 1 tree, 40 leaves, max depth = 15, train loss: 63.13040, val loss: 63.31578, in 0.097s\n[73/300] 1 tree, 40 leaves, max depth = 11, train loss: 63.08621, val loss: 63.27423, in 0.087s\n[74/300] 1 tree, 40 leaves, max depth = 11, train loss: 63.03812, val loss: 63.23050, in 0.102s\n[75/300] 1 tree, 40 leaves, max depth = 13, train loss: 62.99203, val loss: 63.18633, in 0.121s\n[76/300] 1 tree, 40 leaves, max depth = 15, train loss: 62.93741, val loss: 63.13395, in 0.154s\n[77/300] 1 tree, 40 leaves, max depth = 12, train loss: 62.90154, val loss: 63.10133, in 0.083s\n[78/300] 1 tree, 40 leaves, max depth = 13, train loss: 62.86299, val loss: 63.06425, in 0.169s\n[79/300] 1 tree, 40 leaves, max depth = 11, train loss: 62.82016, val loss: 63.02317, in 0.099s\n[80/300] 1 tree, 40 leaves, max depth = 14, train loss: 62.78993, val loss: 62.99434, in 0.076s\n[81/300] 1 tree, 40 leaves, max depth = 12, train loss: 62.75515, val loss: 62.96098, in 0.089s\n[82/300] 1 tree, 40 leaves, max depth = 10, train loss: 62.71191, val loss: 62.91996, in 0.086s\n[83/300] 1 tree, 40 leaves, max depth = 10, train loss: 62.68333, val loss: 62.89092, in 0.077s\n[84/300] 1 tree, 40 leaves, max depth = 10, train loss: 62.65786, val loss: 62.86441, in 0.087s\n[85/300] 1 tree, 40 leaves, max depth = 12, train loss: 62.62456, val loss: 62.83292, in 0.079s\n[86/300] 1 tree, 40 leaves, max depth = 11, train loss: 62.58389, val loss: 62.79143, in 0.092s\n[87/300] 1 tree, 40 leaves, max depth = 12, train loss: 62.54398, val loss: 62.75394, in 0.091s\n[88/300] 1 tree, 40 leaves, max depth = 16, train loss: 62.50206, val loss: 62.71555, in 0.128s\n[89/300] 1 tree, 40 leaves, max depth = 12, train loss: 62.45660, val loss: 62.67311, in 0.145s\n[90/300] 1 tree, 40 leaves, max depth = 10, train loss: 62.41560, val loss: 62.63600, in 0.095s\n[91/300] 1 tree, 40 leaves, max depth = 13, train loss: 62.36718, val loss: 62.58746, in 0.109s\n[92/300] 1 tree, 40 leaves, max depth = 14, train loss: 62.34337, val loss: 62.56414, in 0.066s\n[93/300] 1 tree, 40 leaves, max depth = 13, train loss: 62.30675, val loss: 62.52759, in 0.084s\n[94/300] 1 tree, 40 leaves, max depth = 15, train loss: 62.26024, val loss: 62.48470, in 0.100s\n[95/300] 1 tree, 40 leaves, max depth = 14, train loss: 62.21408, val loss: 62.43887, in 0.098s\n[96/300] 1 tree, 40 leaves, max depth = 12, train loss: 62.16762, val loss: 62.39614, in 0.106s\n[97/300] 1 tree, 40 leaves, max depth = 10, train loss: 62.12389, val loss: 62.35478, in 0.112s\n[98/300] 1 tree, 40 leaves, max depth = 14, train loss: 62.08566, val loss: 62.31730, in 0.083s\n[99/300] 1 tree, 40 leaves, max depth = 12, train loss: 62.04274, val loss: 62.27683, in 0.099s\n[100/300] 1 tree, 40 leaves, max depth = 14, train loss: 61.99844, val loss: 62.23171, in 0.097s\n[101/300] 1 tree, 40 leaves, max depth = 14, train loss: 61.95670, val loss: 62.18825, in 0.090s\n[102/300] 1 tree, 40 leaves, max depth = 12, train loss: 61.91292, val loss: 62.15055, in 0.118s\n[103/300] 1 tree, 40 leaves, max depth = 13, train loss: 61.88024, val loss: 62.11743, in 0.076s\n[104/300] 1 tree, 40 leaves, max depth = 12, train loss: 61.83661, val loss: 62.07707, in 0.111s\n[105/300] 1 tree, 40 leaves, max depth = 11, train loss: 61.79116, val loss: 62.03324, in 0.109s\n[106/300] 1 tree, 40 leaves, max depth = 15, train loss: 61.76473, val loss: 62.00638, in 0.073s\n[107/300] 1 tree, 40 leaves, max depth = 14, train loss: 61.72635, val loss: 61.96890, in 0.092s\n[108/300] 1 tree, 40 leaves, max depth = 11, train loss: 61.68735, val loss: 61.92959, in 0.108s\n[109/300] 1 tree, 40 leaves, max depth = 11, train loss: 61.64474, val loss: 61.88899, in 0.094s\n[110/300] 1 tree, 40 leaves, max depth = 12, train loss: 61.60164, val loss: 61.84680, in 0.142s\n[111/300] 1 tree, 40 leaves, max depth = 11, train loss: 61.56348, val loss: 61.81069, in 0.093s\n[112/300] 1 tree, 40 leaves, max depth = 11, train loss: 61.51751, val loss: 61.76761, in 0.102s\n[113/300] 1 tree, 40 leaves, max depth = 12, train loss: 61.49693, val loss: 61.74736, in 0.067s\n[114/300] 1 tree, 40 leaves, max depth = 10, train loss: 61.44422, val loss: 61.69638, in 0.114s\n[115/300] 1 tree, 40 leaves, max depth = 18, train loss: 61.40651, val loss: 61.65851, in 0.087s\n[116/300] 1 tree, 40 leaves, max depth = 12, train loss: 61.37973, val loss: 61.63097, in 0.070s\n[117/300] 1 tree, 40 leaves, max depth = 16, train loss: 61.34141, val loss: 61.59221, in 0.087s\n[118/300] 1 tree, 40 leaves, max depth = 14, train loss: 61.30385, val loss: 61.55777, in 0.086s\n[119/300] 1 tree, 40 leaves, max depth = 14, train loss: 61.26188, val loss: 61.51916, in 0.091s\n[120/300] 1 tree, 40 leaves, max depth = 15, train loss: 61.22141, val loss: 61.47670, in 0.095s\n[121/300] 1 tree, 40 leaves, max depth = 14, train loss: 61.17527, val loss: 61.42803, in 0.124s\n[122/300] 1 tree, 40 leaves, max depth = 13, train loss: 61.13027, val loss: 61.38423, in 0.096s\n[123/300] 1 tree, 40 leaves, max depth = 10, train loss: 61.09550, val loss: 61.35100, in 0.084s\n[124/300] 1 tree, 40 leaves, max depth = 10, train loss: 61.06717, val loss: 61.32284, in 0.094s\n[125/300] 1 tree, 40 leaves, max depth = 13, train loss: 61.02349, val loss: 61.28166, in 0.098s\n[126/300] 1 tree, 40 leaves, max depth = 14, train loss: 60.97837, val loss: 61.24067, in 0.250s\n[127/300] 1 tree, 40 leaves, max depth = 11, train loss: 60.94033, val loss: 61.20382, in 0.363s\n[128/300] 1 tree, 40 leaves, max depth = 10, train loss: 60.90945, val loss: 61.17436, in 0.231s\n[129/300] 1 tree, 40 leaves, max depth = 16, train loss: 60.88428, val loss: 61.15031, in 1.070s\n[130/300] 1 tree, 40 leaves, max depth = 13, train loss: 60.86714, val loss: 61.13360, in 0.073s\n[131/300] 1 tree, 40 leaves, max depth = 12, train loss: 60.82077, val loss: 61.09160, in 0.102s\n[132/300] 1 tree, 40 leaves, max depth = 11, train loss: 60.78297, val loss: 61.05548, in 0.098s\n[133/300] 1 tree, 40 leaves, max depth = 14, train loss: 60.74069, val loss: 61.01585, in 0.113s\n[134/300] 1 tree, 40 leaves, max depth = 11, train loss: 60.69994, val loss: 60.97762, in 0.109s\n[135/300] 1 tree, 40 leaves, max depth = 12, train loss: 60.65885, val loss: 60.93953, in 0.094s\n[136/300] 1 tree, 40 leaves, max depth = 13, train loss: 60.61893, val loss: 60.90327, in 0.095s\n[137/300] 1 tree, 40 leaves, max depth = 12, train loss: 60.58423, val loss: 60.86893, in 0.089s\n[138/300] 1 tree, 40 leaves, max depth = 13, train loss: 60.54241, val loss: 60.82771, in 0.100s\n[139/300] 1 tree, 40 leaves, max depth = 10, train loss: 60.50209, val loss: 60.78848, in 0.089s\n[140/300] 1 tree, 40 leaves, max depth = 16, train loss: 60.46165, val loss: 60.75105, in 0.088s\n[141/300] 1 tree, 40 leaves, max depth = 10, train loss: 60.43337, val loss: 60.72374, in 0.082s\n[142/300] 1 tree, 40 leaves, max depth = 12, train loss: 60.39562, val loss: 60.68705, in 0.095s\n[143/300] 1 tree, 40 leaves, max depth = 12, train loss: 60.37292, val loss: 60.66336, in 0.070s\n[144/300] 1 tree, 40 leaves, max depth = 13, train loss: 60.33398, val loss: 60.62581, in 0.089s\n[145/300] 1 tree, 40 leaves, max depth = 12, train loss: 60.31839, val loss: 60.60930, in 0.070s\n[146/300] 1 tree, 40 leaves, max depth = 13, train loss: 60.27674, val loss: 60.56997, in 0.089s\n[147/300] 1 tree, 40 leaves, max depth = 13, train loss: 60.23105, val loss: 60.52519, in 0.093s\n[148/300] 1 tree, 40 leaves, max depth = 13, train loss: 60.18730, val loss: 60.48201, in 0.101s\n[149/300] 1 tree, 40 leaves, max depth = 10, train loss: 60.14703, val loss: 60.44393, in 0.083s\n[150/300] 1 tree, 40 leaves, max depth = 9, train loss: 60.10939, val loss: 60.40811, in 0.115s\n[151/300] 1 tree, 40 leaves, max depth = 13, train loss: 60.06122, val loss: 60.35941, in 0.107s\n[152/300] 1 tree, 40 leaves, max depth = 14, train loss: 60.01564, val loss: 60.31166, in 0.116s\n[153/300] 1 tree, 40 leaves, max depth = 13, train loss: 59.98120, val loss: 60.27978, in 0.087s\n[154/300] 1 tree, 40 leaves, max depth = 10, train loss: 59.95050, val loss: 60.25082, in 0.083s\n[155/300] 1 tree, 40 leaves, max depth = 14, train loss: 59.90392, val loss: 60.20691, in 0.111s\n[156/300] 1 tree, 40 leaves, max depth = 14, train loss: 59.86166, val loss: 60.16550, in 0.093s\n[157/300] 1 tree, 40 leaves, max depth = 12, train loss: 59.82409, val loss: 60.12803, in 0.096s\n[158/300] 1 tree, 40 leaves, max depth = 11, train loss: 59.78015, val loss: 60.08469, in 0.112s\n[159/300] 1 tree, 40 leaves, max depth = 14, train loss: 59.73820, val loss: 60.04275, in 0.100s\n[160/300] 1 tree, 40 leaves, max depth = 15, train loss: 59.70487, val loss: 60.01223, in 0.084s\n[161/300] 1 tree, 40 leaves, max depth = 13, train loss: 59.65994, val loss: 59.96633, in 0.111s\n[162/300] 1 tree, 40 leaves, max depth = 11, train loss: 59.62983, val loss: 59.93895, in 0.084s\n[163/300] 1 tree, 40 leaves, max depth = 10, train loss: 59.59895, val loss: 59.90952, in 0.078s\n[164/300] 1 tree, 40 leaves, max depth = 13, train loss: 59.56402, val loss: 59.87553, in 0.093s\n[165/300] 1 tree, 40 leaves, max depth = 11, train loss: 59.51678, val loss: 59.82964, in 0.105s\n[166/300] 1 tree, 40 leaves, max depth = 13, train loss: 59.47939, val loss: 59.79289, in 0.176s\n[167/300] 1 tree, 40 leaves, max depth = 10, train loss: 59.44906, val loss: 59.76057, in 0.074s\n[168/300] 1 tree, 40 leaves, max depth = 9, train loss: 59.41620, val loss: 59.72779, in 0.091s\n[169/300] 1 tree, 40 leaves, max depth = 11, train loss: 59.39693, val loss: 59.70682, in 0.072s\n[170/300] 1 tree, 40 leaves, max depth = 15, train loss: 59.36070, val loss: 59.67255, in 0.090s\n[171/300] 1 tree, 40 leaves, max depth = 10, train loss: 59.32307, val loss: 59.63557, in 0.119s\n[172/300] 1 tree, 40 leaves, max depth = 14, train loss: 59.28388, val loss: 59.59673, in 0.107s\n[173/300] 1 tree, 40 leaves, max depth = 12, train loss: 59.24854, val loss: 59.55863, in 0.100s\n[174/300] 1 tree, 40 leaves, max depth = 12, train loss: 59.22711, val loss: 59.53777, in 0.076s\n[175/300] 1 tree, 40 leaves, max depth = 10, train loss: 59.18817, val loss: 59.49967, in 0.109s\n[176/300] 1 tree, 40 leaves, max depth = 12, train loss: 59.14550, val loss: 59.45876, in 0.112s\n[177/300] 1 tree, 40 leaves, max depth = 18, train loss: 59.11300, val loss: 59.42838, in 0.091s\n[178/300] 1 tree, 40 leaves, max depth = 12, train loss: 59.08090, val loss: 59.39821, in 0.089s\n[179/300] 1 tree, 40 leaves, max depth = 11, train loss: 59.04766, val loss: 59.36686, in 0.083s\n[180/300] 1 tree, 40 leaves, max depth = 13, train loss: 59.01513, val loss: 59.33480, in 0.082s\n[181/300] 1 tree, 40 leaves, max depth = 12, train loss: 58.97161, val loss: 59.29015, in 0.125s\n[182/300] 1 tree, 40 leaves, max depth = 11, train loss: 58.93682, val loss: 59.25603, in 0.094s\n[183/300] 1 tree, 40 leaves, max depth = 12, train loss: 58.89895, val loss: 59.21753, in 0.094s\n[184/300] 1 tree, 40 leaves, max depth = 13, train loss: 58.86545, val loss: 59.18258, in 0.085s\n[185/300] 1 tree, 40 leaves, max depth = 12, train loss: 58.83082, val loss: 59.14941, in 0.102s\n[186/300] 1 tree, 40 leaves, max depth = 9, train loss: 58.80818, val loss: 59.12638, in 0.075s\n[187/300] 1 tree, 40 leaves, max depth = 13, train loss: 58.77551, val loss: 59.09430, in 0.077s\n[188/300] 1 tree, 40 leaves, max depth = 9, train loss: 58.73762, val loss: 59.05508, in 0.101s\n[189/300] 1 tree, 40 leaves, max depth = 14, train loss: 58.70246, val loss: 59.02111, in 0.105s\n[190/300] 1 tree, 40 leaves, max depth = 17, train loss: 58.66123, val loss: 58.98108, in 0.095s\n[191/300] 1 tree, 40 leaves, max depth = 9, train loss: 58.62356, val loss: 58.94559, in 0.104s\n[192/300] 1 tree, 40 leaves, max depth = 12, train loss: 58.58864, val loss: 58.91078, in 0.098s\n[193/300] 1 tree, 40 leaves, max depth = 13, train loss: 58.55191, val loss: 58.87277, in 0.100s\n[194/300] 1 tree, 40 leaves, max depth = 14, train loss: 58.51741, val loss: 58.83819, in 0.089s\n[195/300] 1 tree, 40 leaves, max depth = 13, train loss: 58.47883, val loss: 58.80272, in 0.110s\n[196/300] 1 tree, 40 leaves, max depth = 12, train loss: 58.45030, val loss: 58.77249, in 0.085s\n[197/300] 1 tree, 40 leaves, max depth = 11, train loss: 58.40914, val loss: 58.73154, in 0.109s\n[198/300] 1 tree, 40 leaves, max depth = 12, train loss: 58.38830, val loss: 58.71042, in 0.071s\n[199/300] 1 tree, 40 leaves, max depth = 12, train loss: 58.35182, val loss: 58.67225, in 0.094s\n[200/300] 1 tree, 40 leaves, max depth = 11, train loss: 58.33477, val loss: 58.65513, in 0.076s\n[201/300] 1 tree, 40 leaves, max depth = 12, train loss: 58.30407, val loss: 58.62658, in 0.078s\n[202/300] 1 tree, 40 leaves, max depth = 17, train loss: 58.26700, val loss: 58.58980, in 0.096s\n[203/300] 1 tree, 40 leaves, max depth = 12, train loss: 58.23606, val loss: 58.55991, in 0.086s\n[204/300] 1 tree, 40 leaves, max depth = 11, train loss: 58.20192, val loss: 58.52789, in 0.087s\n[205/300] 1 tree, 40 leaves, max depth = 14, train loss: 58.15653, val loss: 58.48192, in 0.107s\n[206/300] 1 tree, 40 leaves, max depth = 11, train loss: 58.11659, val loss: 58.44552, in 0.126s\n[207/300] 1 tree, 40 leaves, max depth = 11, train loss: 58.08700, val loss: 58.41787, in 0.077s\n[208/300] 1 tree, 40 leaves, max depth = 13, train loss: 58.06083, val loss: 58.39445, in 0.074s\n[209/300] 1 tree, 40 leaves, max depth = 15, train loss: 58.02066, val loss: 58.35458, in 0.093s\n[210/300] 1 tree, 40 leaves, max depth = 14, train loss: 57.98606, val loss: 58.31811, in 0.104s\n[211/300] 1 tree, 40 leaves, max depth = 11, train loss: 57.93947, val loss: 58.27380, in 0.097s\n[212/300] 1 tree, 40 leaves, max depth = 14, train loss: 57.89910, val loss: 58.23781, in 0.092s\n[213/300] 1 tree, 40 leaves, max depth = 9, train loss: 57.87938, val loss: 58.21631, in 0.072s\n[214/300] 1 tree, 40 leaves, max depth = 13, train loss: 57.84720, val loss: 58.18517, in 0.093s\n[215/300] 1 tree, 40 leaves, max depth = 13, train loss: 57.81103, val loss: 58.15005, in 0.095s\n[216/300] 1 tree, 40 leaves, max depth = 14, train loss: 57.76599, val loss: 58.11013, in 0.123s\n[217/300] 1 tree, 40 leaves, max depth = 11, train loss: 57.73501, val loss: 58.08279, in 0.110s\n[218/300] 1 tree, 40 leaves, max depth = 15, train loss: 57.69919, val loss: 58.04608, in 0.084s\n[219/300] 1 tree, 40 leaves, max depth = 10, train loss: 57.66454, val loss: 58.01144, in 0.090s\n[220/300] 1 tree, 40 leaves, max depth = 16, train loss: 57.62869, val loss: 57.97582, in 0.098s\n[221/300] 1 tree, 40 leaves, max depth = 12, train loss: 57.59392, val loss: 57.94211, in 0.104s\n[222/300] 1 tree, 40 leaves, max depth = 12, train loss: 57.56497, val loss: 57.91404, in 0.087s\n[223/300] 1 tree, 40 leaves, max depth = 17, train loss: 57.51971, val loss: 57.87032, in 0.122s\n[224/300] 1 tree, 40 leaves, max depth = 11, train loss: 57.49198, val loss: 57.84260, in 0.078s\n[225/300] 1 tree, 40 leaves, max depth = 13, train loss: 57.45450, val loss: 57.80570, in 0.097s\n[226/300] 1 tree, 40 leaves, max depth = 12, train loss: 57.41488, val loss: 57.76867, in 0.105s\n[227/300] 1 tree, 40 leaves, max depth = 12, train loss: 57.37413, val loss: 57.72698, in 0.117s\n[228/300] 1 tree, 40 leaves, max depth = 18, train loss: 57.34104, val loss: 57.69308, in 0.084s\n[229/300] 1 tree, 40 leaves, max depth = 12, train loss: 57.31417, val loss: 57.66789, in 0.081s\n[230/300] 1 tree, 40 leaves, max depth = 11, train loss: 57.28472, val loss: 57.63879, in 0.094s\n[231/300] 1 tree, 40 leaves, max depth = 14, train loss: 57.25249, val loss: 57.60661, in 0.085s\n[232/300] 1 tree, 40 leaves, max depth = 12, train loss: 57.20842, val loss: 57.56687, in 0.112s\n[233/300] 1 tree, 40 leaves, max depth = 12, train loss: 57.17081, val loss: 57.53073, in 0.111s\n[234/300] 1 tree, 40 leaves, max depth = 14, train loss: 57.13046, val loss: 57.49404, in 0.098s\n[235/300] 1 tree, 40 leaves, max depth = 13, train loss: 57.10138, val loss: 57.46621, in 0.086s\n[236/300] 1 tree, 40 leaves, max depth = 12, train loss: 57.06345, val loss: 57.43041, in 0.099s\n[237/300] 1 tree, 40 leaves, max depth = 15, train loss: 57.02145, val loss: 57.39006, in 0.132s\n[238/300] 1 tree, 40 leaves, max depth = 12, train loss: 56.98317, val loss: 57.35493, in 0.120s\n[239/300] 1 tree, 40 leaves, max depth = 12, train loss: 56.95698, val loss: 57.32896, in 0.077s\n[240/300] 1 tree, 40 leaves, max depth = 16, train loss: 56.92479, val loss: 57.29864, in 0.091s\n[241/300] 1 tree, 40 leaves, max depth = 17, train loss: 56.89244, val loss: 57.26903, in 0.090s\n[242/300] 1 tree, 40 leaves, max depth = 12, train loss: 56.85218, val loss: 57.22997, in 0.125s\n[243/300] 1 tree, 40 leaves, max depth = 10, train loss: 56.83360, val loss: 57.21059, in 0.071s\n[244/300] 1 tree, 40 leaves, max depth = 12, train loss: 56.79297, val loss: 57.17322, in 0.099s\n[245/300] 1 tree, 40 leaves, max depth = 12, train loss: 56.75348, val loss: 57.13328, in 0.108s\n[246/300] 1 tree, 40 leaves, max depth = 11, train loss: 56.71614, val loss: 57.09775, in 0.116s\n[247/300] 1 tree, 40 leaves, max depth = 15, train loss: 56.67888, val loss: 57.06080, in 0.100s\n[248/300] 1 tree, 40 leaves, max depth = 12, train loss: 56.64632, val loss: 57.02766, in 0.085s\n[249/300] 1 tree, 40 leaves, max depth = 11, train loss: 56.62363, val loss: 57.00650, in 0.075s\n[250/300] 1 tree, 40 leaves, max depth = 14, train loss: 56.58834, val loss: 56.96771, in 0.083s\n[251/300] 1 tree, 40 leaves, max depth = 14, train loss: 56.54997, val loss: 56.93078, in 0.120s\n[252/300] 1 tree, 40 leaves, max depth = 11, train loss: 56.51479, val loss: 56.89605, in 0.115s\n[253/300] 1 tree, 40 leaves, max depth = 11, train loss: 56.47689, val loss: 56.85902, in 0.123s\n[254/300] 1 tree, 40 leaves, max depth = 12, train loss: 56.43993, val loss: 56.82339, in 0.088s\n[255/300] 1 tree, 40 leaves, max depth = 13, train loss: 56.39084, val loss: 56.77506, in 0.122s\n[256/300] 1 tree, 40 leaves, max depth = 11, train loss: 56.35617, val loss: 56.74266, in 0.106s\n[257/300] 1 tree, 40 leaves, max depth = 17, train loss: 56.31562, val loss: 56.70388, in 0.106s\n[258/300] 1 tree, 40 leaves, max depth = 11, train loss: 56.27896, val loss: 56.66918, in 0.086s\n[259/300] 1 tree, 40 leaves, max depth = 15, train loss: 56.24860, val loss: 56.64055, in 0.083s\n[260/300] 1 tree, 40 leaves, max depth = 13, train loss: 56.21091, val loss: 56.60463, in 0.100s\n[261/300] 1 tree, 40 leaves, max depth = 11, train loss: 56.17491, val loss: 56.56808, in 0.130s\n[262/300] 1 tree, 40 leaves, max depth = 11, train loss: 56.14163, val loss: 56.53660, in 0.093s\n[263/300] 1 tree, 40 leaves, max depth = 11, train loss: 56.10577, val loss: 56.49940, in 0.094s\n[264/300] 1 tree, 40 leaves, max depth = 15, train loss: 56.06688, val loss: 56.46135, in 0.097s\n[265/300] 1 tree, 40 leaves, max depth = 12, train loss: 56.04362, val loss: 56.43791, in 0.078s\n[266/300] 1 tree, 40 leaves, max depth = 15, train loss: 56.00120, val loss: 56.39646, in 0.140s\n[267/300] 1 tree, 40 leaves, max depth = 10, train loss: 55.97470, val loss: 56.36922, in 0.090s\n[268/300] 1 tree, 40 leaves, max depth = 13, train loss: 55.94167, val loss: 56.33421, in 0.165s\n[269/300] 1 tree, 40 leaves, max depth = 11, train loss: 55.90590, val loss: 56.29612, in 0.105s\n[270/300] 1 tree, 40 leaves, max depth = 13, train loss: 55.86590, val loss: 56.25709, in 0.105s\n[271/300] 1 tree, 40 leaves, max depth = 15, train loss: 55.83024, val loss: 56.22038, in 0.101s\n[272/300] 1 tree, 40 leaves, max depth = 12, train loss: 55.80099, val loss: 56.19185, in 0.079s\n[273/300] 1 tree, 40 leaves, max depth = 12, train loss: 55.76532, val loss: 56.15500, in 0.109s\n[274/300] 1 tree, 40 leaves, max depth = 12, train loss: 55.75067, val loss: 56.14064, in 0.075s\n[275/300] 1 tree, 40 leaves, max depth = 12, train loss: 55.71945, val loss: 56.11291, in 0.105s\n[276/300] 1 tree, 40 leaves, max depth = 16, train loss: 55.68189, val loss: 56.07456, in 0.103s\n[277/300] 1 tree, 40 leaves, max depth = 17, train loss: 55.64673, val loss: 56.03966, in 0.122s\n[278/300] 1 tree, 40 leaves, max depth = 13, train loss: 55.61076, val loss: 56.00592, in 0.109s\n[279/300] 1 tree, 40 leaves, max depth = 14, train loss: 55.57280, val loss: 55.96942, in 0.114s\n[280/300] 1 tree, 40 leaves, max depth = 12, train loss: 55.55718, val loss: 55.95271, in 0.071s\n[281/300] 1 tree, 40 leaves, max depth = 15, train loss: 55.52307, val loss: 55.91928, in 0.101s\n[282/300] 1 tree, 40 leaves, max depth = 16, train loss: 55.49476, val loss: 55.89196, in 0.096s\n[283/300] 1 tree, 40 leaves, max depth = 14, train loss: 55.46459, val loss: 55.86392, in 0.090s\n[284/300] 1 tree, 40 leaves, max depth = 12, train loss: 55.42612, val loss: 55.82714, in 0.123s\n[285/300] 1 tree, 40 leaves, max depth = 10, train loss: 55.40942, val loss: 55.81141, in 0.076s\n[286/300] 1 tree, 40 leaves, max depth = 11, train loss: 55.37349, val loss: 55.77613, in 0.117s\n[287/300] 1 tree, 40 leaves, max depth = 13, train loss: 55.34715, val loss: 55.74978, in 0.083s\n[288/300] 1 tree, 40 leaves, max depth = 10, train loss: 55.31101, val loss: 55.71701, in 0.091s\n[289/300] 1 tree, 40 leaves, max depth = 14, train loss: 55.27229, val loss: 55.67858, in 0.110s\n[290/300] 1 tree, 40 leaves, max depth = 14, train loss: 55.25899, val loss: 55.66585, in 0.073s\n[291/300] 1 tree, 40 leaves, max depth = 15, train loss: 55.22272, val loss: 55.62711, in 0.100s\n[292/300] 1 tree, 40 leaves, max depth = 12, train loss: 55.18707, val loss: 55.59264, in 0.091s\n[293/300] 1 tree, 40 leaves, max depth = 17, train loss: 55.15194, val loss: 55.55869, in 0.118s\n[294/300] 1 tree, 40 leaves, max depth = 14, train loss: 55.11880, val loss: 55.52754, in 0.098s\n[295/300] 1 tree, 40 leaves, max depth = 11, train loss: 55.08862, val loss: 55.49721, in 0.104s\n[296/300] 1 tree, 40 leaves, max depth = 14, train loss: 55.05289, val loss: 55.46477, in 0.111s\n[297/300] 1 tree, 40 leaves, max depth = 12, train loss: 55.01923, val loss: 55.43099, in 0.114s\n[298/300] 1 tree, 40 leaves, max depth = 11, train loss: 54.99416, val loss: 55.40498, in 0.081s\n[299/300] 1 tree, 40 leaves, max depth = 10, train loss: 54.96560, val loss: 55.37525, in 0.085s\n[300/300] 1 tree, 40 leaves, max depth = 11, train loss: 54.94186, val loss: 55.34927, in 0.080s\nFit 300 trees in 35.345 s, (12000 total leaves)\nTime spent computing histograms: 22.072s\nTime spent finding best splits:  1.218s\nTime spent applying splits:      3.058s\nTime spent predicting:           0.823s\n✅ Validation RMSE: 10.5242\n📁 solution.csv saved!\n","output_type":"stream"}],"execution_count":6},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}