{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":108426,"databundleVersionId":13143440,"sourceType":"competition"}],"dockerImageVersionId":31089,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Import","metadata":{"_uuid":"16754152-d090-4a5e-9a8d-69d816b98b5c","_cell_guid":"f65b2c30-8241-45d3-b4bd-7d4f49adc557","trusted":true,"collapsed":false,"jupyter":{"outputs_hidden":false}}},{"cell_type":"code","source":"#install scikit learn 1.5.2 as this version supports root_mean_squared_log_error\n!pip uninstall scikit-learn -y\n!pip install -q scikit-learn==1.5.2","metadata":{"_uuid":"de4add81-4f94-4d6c-b2cc-814cfdda55bd","_cell_guid":"8ef64d96-013f-42fc-be35-7a01f85af87f","trusted":true,"execution":{"iopub.status.busy":"2025-07-23T11:37:07.309878Z","iopub.execute_input":"2025-07-23T11:37:07.310162Z","iopub.status.idle":"2025-07-23T11:37:19.809634Z","shell.execute_reply.started":"2025-07-23T11:37:07.310134Z","shell.execute_reply":"2025-07-23T11:37:19.808493Z"},"jupyter":{"source_hidden":true}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import sklearn\nsklearn.__version__","metadata":{"_uuid":"b1a029b6-e345-4c33-8d7c-7eacf9c3571b","_cell_guid":"6d38ada0-d1fd-4558-8a5f-01eeaf3f42ca","trusted":true,"execution":{"iopub.status.busy":"2025-07-23T11:37:19.810891Z","iopub.execute_input":"2025-07-23T11:37:19.811186Z","iopub.status.idle":"2025-07-23T11:37:20.878301Z","shell.execute_reply.started":"2025-07-23T11:37:19.811155Z","shell.execute_reply":"2025-07-23T11:37:20.877501Z"},"jupyter":{"source_hidden":true}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import warnings\nwarnings.filterwarnings(\"ignore\", category=UserWarning, module=\"seaborn\")\nwarnings.filterwarnings(\"ignore\", category=FutureWarning, module=\"seaborn\")\n\nimport numpy as np\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import OneHotEncoder\nfrom sklearn.compose import ColumnTransformer\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.metrics import mean_squared_log_error\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.linear_model import LinearRegression","metadata":{"_uuid":"9c471f67-dfbc-4033-9a14-70da908cb922","_cell_guid":"96538d8a-ee24-4716-b8e3-461f339aef9d","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-07-23T11:37:20.880782Z","iopub.execute_input":"2025-07-23T11:37:20.881199Z","iopub.status.idle":"2025-07-23T11:37:20.993042Z","shell.execute_reply.started":"2025-07-23T11:37:20.881174Z","shell.execute_reply":"2025-07-23T11:37:20.992229Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Read data","metadata":{"_uuid":"da08c94f-4d68-49d6-9a14-f427639aed5d","_cell_guid":"5726f4e0-0c3e-4eb1-99df-c446324d0432","trusted":true,"collapsed":false,"execution":{"iopub.execute_input":"2025-04-22T10:30:14.640596Z","iopub.status.busy":"2025-04-22T10:30:14.640324Z","iopub.status.idle":"2025-04-22T10:30:22.7682Z","shell.execute_reply":"2025-04-22T10:30:22.767482Z","shell.execute_reply.started":"2025-04-22T10:30:14.640576Z"},"jupyter":{"outputs_hidden":false}}},{"cell_type":"code","source":"train_df=pd.read_csv('/kaggle/input/big-oai-final-course-1/train.csv')\ntest_df=pd.read_csv('/kaggle/input/big-oai-final-course-1/test.csv')","metadata":{"_uuid":"b501519b-70a8-4b5e-b756-43ba7d11acdf","_cell_guid":"e4285630-700a-4798-980a-28df820e0435","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-07-23T11:37:20.993874Z","iopub.execute_input":"2025-07-23T11:37:20.994287Z","iopub.status.idle":"2025-07-23T11:37:29.420032Z","shell.execute_reply.started":"2025-07-23T11:37:20.994242Z","shell.execute_reply":"2025-07-23T11:37:29.419189Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Save 'id' column for submission\ntest_ids = test_df['id']\n\n# Define the target column\ntarget_column = 'Premium Amount'","metadata":{"_uuid":"47ffb88c-2162-4eea-b471-9cda4cda052b","_cell_guid":"41037755-22da-4269-8e4e-e76912d35fb2","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-07-23T11:37:29.421065Z","iopub.execute_input":"2025-07-23T11:37:29.421430Z","iopub.status.idle":"2025-07-23T11:37:29.432216Z","shell.execute_reply.started":"2025-07-23T11:37:29.421402Z","shell.execute_reply":"2025-07-23T11:37:29.430878Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Select categorical and numerical columns (initial)\ncategorical_columns = train_df.select_dtypes(include=['object']).columns\nnumerical_columns = train_df.select_dtypes(exclude=['object']).columns\n\n# Print out column information\nprint(\"Target Column:\", target_column)\nprint(\"\\nCategorical Columns:\", categorical_columns.tolist())\nprint(\"\\nNumerical Columns:\", numerical_columns.tolist())","metadata":{"_uuid":"b4df2c86-4197-48cd-9d99-ccdd43d80ce8","_cell_guid":"bc5fbd96-2aa3-43e1-ad0c-c3f39e5aaf7d","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-07-23T11:37:29.433364Z","iopub.execute_input":"2025-07-23T11:37:29.433831Z","iopub.status.idle":"2025-07-23T11:37:29.634402Z","shell.execute_reply.started":"2025-07-23T11:37:29.433793Z","shell.execute_reply":"2025-07-23T11:37:29.633537Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Data Preprocessing","metadata":{"_uuid":"be5c2161-4211-4c0f-aa77-5119590b0b20","_cell_guid":"63e85ae3-24ae-444e-9f95-657b29116549","trusted":true,"collapsed":false,"jupyter":{"outputs_hidden":false}}},{"cell_type":"markdown","source":"## Features and Target","metadata":{"_uuid":"14e1d1b0-1db8-48d9-bc23-282d2f76e9af","_cell_guid":"7b73f7b5-3c74-44ca-9105-b208885fec6d","trusted":true,"collapsed":false,"jupyter":{"outputs_hidden":false}}},{"cell_type":"code","source":"# Split train data into features and target\nX = train_df.drop(columns=[target_column, \"id\"])\ny = train_df[target_column]","metadata":{"_uuid":"9ebb54c3-068b-4555-931c-5d2a7f768344","_cell_guid":"1bc84c79-6c2d-4456-aaca-e96750d41942","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-07-23T11:37:29.635359Z","iopub.execute_input":"2025-07-23T11:37:29.635701Z","iopub.status.idle":"2025-07-23T11:37:29.796151Z","shell.execute_reply.started":"2025-07-23T11:37:29.635673Z","shell.execute_reply":"2025-07-23T11:37:29.795200Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"categorical_columns = X.select_dtypes(include=['object']).columns\nnumerical_columns = X.select_dtypes(exclude=['object']).columns","metadata":{"_uuid":"ba67c65c-f6b3-48a7-8857-315bfc50b6da","_cell_guid":"750a376e-5f1f-4e6b-b752-10f0f544f2e2","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-07-23T11:37:29.796991Z","iopub.execute_input":"2025-07-23T11:37:29.797229Z","iopub.status.idle":"2025-07-23T11:37:29.980527Z","shell.execute_reply.started":"2025-07-23T11:37:29.797211Z","shell.execute_reply":"2025-07-23T11:37:29.979617Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Handle Missing Values & Preprocessing Pipeline","metadata":{"_uuid":"26b949b9-a900-46dd-9b04-0988037c0731","_cell_guid":"041e852e-a31c-4e6d-8e2d-4b7da06d67ab","trusted":true,"collapsed":false,"jupyter":{"outputs_hidden":false}}},{"cell_type":"code","source":"# Preprocessing pipeline for numerical features\nnum_pipeline = Pipeline(steps=[\n    ('imputer', SimpleImputer(strategy='median')),\n])\n\n# Preprocessing pipeline for categorical features\ncat_pipeline = Pipeline(steps=[\n    ('imputer', SimpleImputer(strategy='constant', fill_value='Unknown')),  # Handle missing values\n    ('onehot', OneHotEncoder(handle_unknown='ignore'))                      # Encode categorical features\n])\n\n# Combine pipelines into a ColumnTransformer\npreprocessor = ColumnTransformer(\n    transformers=[\n        ('num', num_pipeline, numerical_columns),\n        ('cat', cat_pipeline, categorical_columns)\n    ]\n)\n\n# Preprocess train and test data\nX_processed = preprocessor.fit_transform(X)\ntest_processed = preprocessor.transform(test_df.drop(columns=['id']))","metadata":{"_uuid":"d99bbd9e-6bb9-4263-a62e-3d36da3d21ae","_cell_guid":"8eab0022-b845-434b-82da-694ce0b2ecbc","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-07-23T11:37:29.983642Z","iopub.execute_input":"2025-07-23T11:37:29.983909Z","iopub.status.idle":"2025-07-23T11:37:40.938075Z","shell.execute_reply.started":"2025-07-23T11:37:29.983889Z","shell.execute_reply":"2025-07-23T11:37:40.937133Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Splitting Data","metadata":{"_uuid":"b73b6eb3-364a-48ee-aca2-8250da95e0da","_cell_guid":"50aab28f-bc6f-4606-b727-98b877b57969","trusted":true,"collapsed":false,"jupyter":{"outputs_hidden":false}}},{"cell_type":"code","source":"# Split the data\nX_train, X_val, y_train, y_val = train_test_split(X_processed, y, test_size=0.2, random_state=42)","metadata":{"_uuid":"58f1f377-5b81-4fbe-8b18-2de4cbb936e9","_cell_guid":"0303cf17-13c7-42fe-b460-2ab3e488072a","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-07-23T11:37:40.939131Z","iopub.execute_input":"2025-07-23T11:37:40.939475Z","iopub.status.idle":"2025-07-23T11:37:41.226677Z","shell.execute_reply.started":"2025-07-23T11:37:40.939446Z","shell.execute_reply":"2025-07-23T11:37:41.225850Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Model Training","metadata":{"_uuid":"85fbb7d4-7d6a-4415-af39-15e0cbbe7d0c","_cell_guid":"dbf053dc-f113-425b-9aa5-dbb46c606781","trusted":true,"collapsed":false,"jupyter":{"outputs_hidden":false}}},{"cell_type":"code","source":"# --- 1. Linear Regression ---\nprint(\"--- Training Linear Regression ---\")\n# Instantiate the model\nlr_model = LinearRegression()\n\n# Train the model\nlr_model.fit(X_train, y_train)\nprint(\"Linear Regression training complete.\")\n\n# Predict on the validation set\ny_pred_lr = lr_model.predict(X_val)\nprint(\"-\" * 30)","metadata":{"_uuid":"9460b5f8-8021-4899-b14d-ab304d59fec2","_cell_guid":"5f3176a3-33d7-45aa-908e-d395bb42ae14","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-07-23T11:37:41.227639Z","iopub.execute_input":"2025-07-23T11:37:41.228505Z","iopub.status.idle":"2025-07-23T11:37:42.306795Z","shell.execute_reply.started":"2025-07-23T11:37:41.228480Z","shell.execute_reply":"2025-07-23T11:37:42.305760Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def calculate_rmsle(y_true, y_pred):\n    \"\"\"Calculates RMSLE, clipping negative predictions to 0.\"\"\"\n    if np.any(y_true < 0):\n        print(f\"Warning: Negative true values found. RMSLE calculation may fail or be invalid.\")\n\n    y_pred_clipped = np.maximum(y_pred, 0)\n\n    msle = mean_squared_log_error(y_true, y_pred_clipped)\n    rmsle = np.sqrt(msle)\n    return rmsle\n\nprint(\"--- Evaluating Models using RMSLE ---\")\n\n# Evaluate Linear Regression\nrmsle_lr = calculate_rmsle(y_val, y_pred_lr)\nprint(f\"Linear Regression RMSLE: {rmsle_lr:.4f}\")","metadata":{"_uuid":"2d7fdd7d-59f1-41a2-9618-9edac41a9deb","_cell_guid":"c1498db4-0ad1-472c-9730-51093e1fa09c","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-07-23T11:37:42.307796Z","iopub.execute_input":"2025-07-23T11:37:42.308198Z","iopub.status.idle":"2025-07-23T11:37:42.334449Z","shell.execute_reply.started":"2025-07-23T11:37:42.308164Z","shell.execute_reply":"2025-07-23T11:37:42.332847Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Predict","metadata":{"_uuid":"d4f72268-d579-4933-89dc-bec9963657ea","_cell_guid":"267f0629-2f53-48e9-ba51-b29a89b8fa63","trusted":true,"collapsed":false,"jupyter":{"outputs_hidden":false}}},{"cell_type":"code","source":"sample_submission = pd.read_csv(\"/kaggle/input/big-oai-final-course-1/sample_submission.csv\")\nsample_submission.head()","metadata":{"_uuid":"0510974c-0092-4e5e-8750-a6d0c3d479ad","_cell_guid":"b2623d35-f917-4c4d-a3a6-71e12effa830","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-07-23T11:37:42.335962Z","iopub.execute_input":"2025-07-23T11:37:42.336819Z","iopub.status.idle":"2025-07-23T11:37:42.458778Z","shell.execute_reply.started":"2025-07-23T11:37:42.336786Z","shell.execute_reply":"2025-07-23T11:37:42.457265Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Predict\ny_pred = lr_model.predict(test_processed)","metadata":{"_uuid":"3ff37174-ca5c-430e-be7e-45752079b14d","_cell_guid":"bc3ef6c0-bc7e-4f15-a697-8e4cf942efdb","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-07-23T11:37:42.459830Z","iopub.execute_input":"2025-07-23T11:37:42.460094Z","iopub.status.idle":"2025-07-23T11:37:42.491454Z","shell.execute_reply.started":"2025-07-23T11:37:42.460074Z","shell.execute_reply":"2025-07-23T11:37:42.490465Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission_df = pd.DataFrame()\n\nif 'id' in test_df.columns:\n    submission_df['id'] = test_df['id'].values\nelse:\n    submission_df['id'] = sample_submission['id'].values\n\ntarget_column_name = sample_submission.columns[1] # Assumes target is the second column\nsubmission_df[target_column_name] = y_pred\n\n# Save\nsubmission_filename = 'submission.csv'\nsubmission_df.to_csv(submission_filename, index=False)\n\nprint(f\"Submission file '{submission_filename}' created.\")\nprint(submission_df.head())","metadata":{"_uuid":"e05a8772-e49d-463a-a33d-c2456a846ce3","_cell_guid":"3d554577-7a2b-4f25-8ffd-583d504ecf4e","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-07-23T11:37:42.492424Z","iopub.execute_input":"2025-07-23T11:37:42.492718Z","iopub.status.idle":"2025-07-23T11:37:43.180488Z","shell.execute_reply.started":"2025-07-23T11:37:42.492696Z","shell.execute_reply":"2025-07-23T11:37:43.179395Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null}]}