{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":84896,"databundleVersionId":10305135,"sourceType":"competition"}],"dockerImageVersionId":30804,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd \n\nTrain = pd.read_csv('/kaggle/input/playground-series-s4e12/train.csv')\nTest = pd.read_csv('/kaggle/input/playground-series-s4e12/test.csv')\n\nprint(\"\\n### Basic Information ###\")\nprint(Train.head(5))  # View first 5 rows of the features\nprint(\"\\n### Dataset Information ###\")\nTrain.info()  # Information on data types, non-null counts\nprint(\"\\n### Missing Values per Column ###\")\nprint(Train.isna().sum())  # Check for missing values\nprint(\"\\n### Statistical Summary ###\")\nprint(Train.describe())  # Statistical summary of numeric columns\nprint(\"\\n### Dataset Shape ###\")\nprint(Train.shape)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-18T14:30:13.712471Z","iopub.execute_input":"2024-12-18T14:30:13.712968Z","iopub.status.idle":"2024-12-18T14:30:23.629846Z","shell.execute_reply.started":"2024-12-18T14:30:13.712911Z","shell.execute_reply":"2024-12-18T14:30:23.628533Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Train Summary","metadata":{}},{"cell_type":"code","source":"print(\"\\n### Catogorical Columns Summary ###\")\nCat_Cols = Train.select_dtypes(include=[\"object\"]).columns\nfor col in Cat_Cols:\n    print(f\"Column: {col}, Number Unique Values: {Train[col].nunique()}\")\n    if Train[col].nunique() < 10:\n        print(f\"Values: {Train[col].unique()}\")\n\nprint(\"\\n### Numerical Columns Summary ###\")\nNum_Cols = Train.select_dtypes(include=[\"int64\", \"float64\"]).columns\nfor col in Num_Cols:\n    print(f\"Column: {col}, Unique Values: {Train[col].nunique()}\")\n    if Train[col].nunique() < 10:\n        print(f\"Values: {Train[col].unique()}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-18T14:30:23.631605Z","iopub.execute_input":"2024-12-18T14:30:23.632022Z","iopub.status.idle":"2024-12-18T14:30:26.938524Z","shell.execute_reply.started":"2024-12-18T14:30:23.63197Z","shell.execute_reply":"2024-12-18T14:30:26.936999Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Test Summary","metadata":{}},{"cell_type":"code","source":"print(\"\\n### Catogorical Columns Summary ###\")\nCat_Cols = Test.select_dtypes(include=[\"object\"]).columns\nfor col in Cat_Cols:\n    print(f\"Column: {col}, Number Unique Values: {Test[col].nunique()}\")\n    if Test[col].nunique() < 10:\n        print(f\"Values: {Test[col].unique()}\")\n\nprint(\"\\n### Numerical Columns Summary ###\")\nNum_Cols = Test.select_dtypes(include=[\"int64\", \"float64\"]).columns\nfor col in Num_Cols:\n    print(f\"Column: {col}, Unique Values: {Test[col].nunique()}\")\n    if Test[col].nunique() < 10:\n        print(f\"Values: {Test[col].unique()}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-18T14:30:26.940165Z","iopub.execute_input":"2024-12-18T14:30:26.940661Z","iopub.status.idle":"2024-12-18T14:30:29.040004Z","shell.execute_reply.started":"2024-12-18T14:30:26.940607Z","shell.execute_reply":"2024-12-18T14:30:29.038836Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Filling Missing Test/Train","metadata":{}},{"cell_type":"code","source":"for col in Train.columns:\n    if Train[col].dtype in ['int64', 'float64']:  # Check if the column is numerical\n        Train[col].fillna(value=Train[col].mean(), inplace=True)\n    else:  # If the column is categorical\n        Train[col].fillna(value=Train[col].mode()[0], inplace=True)\n\nfor col in Test.columns:\n    if Test[col].dtype in ['int64', 'float64']:  # Check if the column is numerical\n        Test[col].fillna(value=Test[col].mean(), inplace=True)\n    else:  # If the column is categorical\n        Test[col].fillna(value=Test[col].mode()[0], inplace=True)\n\nprint(Train.isna().sum())\nprint(Test.isna().sum())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-18T14:30:29.042124Z","iopub.execute_input":"2024-12-18T14:30:29.042513Z","iopub.status.idle":"2024-12-18T14:30:34.040464Z","shell.execute_reply.started":"2024-12-18T14:30:29.042474Z","shell.execute_reply":"2024-12-18T14:30:34.038731Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Encoding ","metadata":{}},{"cell_type":"code","source":"from sklearn.preprocessing import OrdinalEncoder\n\n# Ensure 'Policy Start Date' is a datetime format for Train and Test\nTrain[\"Policy Start Date\"] = pd.to_datetime(Train[\"Policy Start Date\"])\nTest[\"Policy Start Date\"] = pd.to_datetime(Test[\"Policy Start Date\"])\n\n# Extract Year, Month, and Day for Train\nTrain[\"Year\"] = Train[\"Policy Start Date\"].dt.year\nTrain[\"Month\"] = Train[\"Policy Start Date\"].dt.month\nTrain[\"Day\"] = Train[\"Policy Start Date\"].dt.day\n\n# Extract Year, Month, and Day for Test\nTest[\"Year\"] = Test[\"Policy Start Date\"].dt.year\nTest[\"Month\"] = Test[\"Policy Start Date\"].dt.month\nTest[\"Day\"] = Test[\"Policy Start Date\"].dt.day\n\n# Display the first rows of the Train and Test datasets\nprint(\"Train Dataset:\\n\", Train.head())\nprint(\"Test Dataset:\\n\", Test.head())\n\nYTrain = Train['Premium Amount']\nTrain = Train.drop(columns=['Premium Amount', 'id'])\nTest = Test.drop(columns=['id'])\n\ncombined = pd.concat([Train, Test], axis=0, ignore_index=True)\ncategorical_cols = combined.select_dtypes(include=['object', 'category']).columns\nencoder = OrdinalEncoder()\ncombined[categorical_cols] = encoder.fit_transform(combined[categorical_cols])\n\nTrain = combined.iloc[:len(Train), :]  # Rows corresponding to Train\nTest = combined.iloc[len(Train):, :]  # Rows corresponding to Test","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-18T14:30:34.042057Z","iopub.execute_input":"2024-12-18T14:30:34.042429Z","iopub.status.idle":"2024-12-18T14:30:41.851443Z","shell.execute_reply.started":"2024-12-18T14:30:34.042395Z","shell.execute_reply":"2024-12-18T14:30:41.850258Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Model","metadata":{}},{"cell_type":"code","source":"from lightgbm import LGBMRegressor\n\n# Ensure all non-numeric columns are removed\nif \"Policy Start Date\" in Train.columns:\n    Train = Train.drop(columns=[\"Policy Start Date\"])\nif \"Policy Start Date\" in Test.columns:\n    Test = Test.drop(columns=[\"Policy Start Date\"])\n\n# Confirm all columns are numeric\nprint(\"Train Columns Types:\\n\", Train.dtypes)\nprint(\"Test Columns Types:\\n\", Test.dtypes)\n\nmodel = LGBMRegressor(\n    boosting_type='gbdt', \n    num_leaves=31, \n    max_depth=-1, \n    learning_rate=0.1, \n    n_estimators=1000, \n    random_state=42\n)\n\n# Train the model\nmodel.fit(Train, YTrain)\n\n# Predict and evaluate\ny_pred = model.predict(Test)\nSubmission = pd.read_csv('/kaggle/input/playground-series-s4e10/sample_submission.csv')\nResults = pd.DataFrame({'id': Submission['id'], 'Premium Amount': y_pred})\nResults.to_csv('submission.csv', index = False)\nprint('Finished')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-18T14:30:41.853097Z","iopub.execute_input":"2024-12-18T14:30:41.853578Z"}},"outputs":[],"execution_count":null}]}