{"metadata":{"kernelspec":{"display_name":"kaggle","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.8.20"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":84896,"databundleVersionId":10305135,"sourceType":"competition"}],"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"**Step-by-Step Implementation**","metadata":{}},{"cell_type":"code","source":"# 1. Import Required Libraries\n\nimport pandas as pd\nimport numpy as np\nfrom lightgbm import LGBMRegressor\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import mean_squared_error\n","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 2. Load the Data\n\n# Load the datasets\ntrain = pd.read_csv(\"/kaggle/input/playground-series-s4e12/train.csv\")\ntest = pd.read_csv(\"/kaggle/input/playground-series-s4e12/test.csv\")\nsubmission_sample = pd.read_csv(\"/kaggle/input/playground-series-s4e12/sample_submission.csv\")\n","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 3. Preprocess the Data\n\n## Handle Missing Values:\n\n# Fill missing values with appropriate strategies\ntrain.fillna({\n    \"Occupation\": \"Unknown\",\n    \"Credit Score\": train[\"Credit Score\"].median(),\n}, inplace=True)\n\ntest.fillna({\n    \"Occupation\": \"Unknown\",\n    \"Credit Score\": test[\"Credit Score\"].median(),\n}, inplace=True)\n\n## Convert Categorical Columns:\n\n# Encode categorical features\ncategorical_features = [\"Gender\", \"Marital Status\", \"Education Level\", \"Occupation\", \"Location\", \"Policy Type\", \"Customer Feedback\", \"Smoking Status\", \"Exercise Frequency\", \"Property Type\"]\n\nfor col in categorical_features:\n    train[col] = train[col].astype(\"category\")\n    test[col] = test[col].astype(\"category\")\n\n## Feature Engineering:\n\n# Derive new features if necessary (e.g., time-related features from Policy Start Date)\ntrain[\"Policy Start Year\"] = pd.to_datetime(train[\"Policy Start Date\"]).dt.year\ntest[\"Policy Start Year\"] = pd.to_datetime(test[\"Policy Start Date\"]).dt.year\n\n## Separate Features and Target Variable:\n\nX = train.drop(columns=[\"id\", \"Premium Amount\", \"Policy Start Date\"])\ny = train[\"Premium Amount\"]\n\nX_test = test.drop(columns=[\"id\", \"Policy Start Date\"])\n","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 4. Split the Training Data\n\n# Split the training data into train and validation sets\nX_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)\n","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 5. Train the LGBM Model\n\n# Initialize and train the model\nmodel = LGBMRegressor(\n    n_estimators=1000,\n    learning_rate=0.05,\n    max_depth=10,\n    random_state=42\n)\n\nmodel.fit(\n    X_train, y_train,\n    eval_set=[(X_val, y_val)],\n    eval_metric=\"rmse\",\n)\n","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 6. Evaluate the Model\n\n# Predict on the validation set\ny_pred = model.predict(X_val)\n\n# Calculate RMSE\nrmse = mean_squared_error(y_val, y_pred, squared=False)\nprint(f\"Validation RMSE: {rmse}\")\n","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 7. Generate Predictions for Submission\n\n# Predict on the test set\ntest_predictions = model.predict(X_test)\n\n# Prepare submission file\nsubmission = pd.DataFrame({\n    \"id\": test[\"id\"],\n    \"Premium Amount\": test_predictions\n})\n\nsubmission.to_csv(\"submission.csv\", index=False)\nprint(\"Submission file created!\")\n","metadata":{},"outputs":[],"execution_count":null}]}