{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":91342,"databundleVersionId":10785615,"sourceType":"competition"}],"dockerImageVersionId":30839,"isInternetEnabled":true,"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,"execution":{"iopub.status.busy":"2025-01-17T16:23:39.868640Z","iopub.execute_input":"2025-01-17T16:23:39.869010Z","iopub.status.idle":"2025-01-17T16:23:39.886757Z","shell.execute_reply.started":"2025-01-17T16:23:39.868981Z","shell.execute_reply":"2025-01-17T16:23:39.885484Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import mean_squared_error\nfrom sklearn.ensemble import StackingRegressor\nfrom sklearn.linear_model import Ridge\nfrom sklearn.preprocessing import StandardScaler\nimport xgboost as xgb","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-17T16:25:04.351590Z","iopub.execute_input":"2025-01-17T16:25:04.352074Z","iopub.status.idle":"2025-01-17T16:25:04.357885Z","shell.execute_reply.started":"2025-01-17T16:25:04.352035Z","shell.execute_reply":"2025-01-17T16:25:04.356504Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Load training dataset (assume it's available as 'training_data.csv')\n# Replace 'training_data.csv' with the correct path to your training data\ntraining_file_path = '/kaggle/input/ccs-ml-wars/kaggle-wars-sat-24/Kaggle-Wars Train.csv'\ntraining_data = pd.read_csv(training_file_path)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-17T16:23:44.948501Z","iopub.execute_input":"2025-01-17T16:23:44.949384Z","iopub.status.idle":"2025-01-17T16:24:10.117681Z","shell.execute_reply.started":"2025-01-17T16:23:44.949298Z","shell.execute_reply":"2025-01-17T16:24:10.116490Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Preprocessing\n# Drop irrelevant columns and handle missing values\ncolumns_to_drop = ['Unnamed: 0', 'LocationDesc', 'Data_Value_Footnote', 'Data_Value_Footnote_Symbol']\ntraining_data = training_data.drop(columns=columns_to_drop, errors='ignore')\ntraining_data = training_data.dropna()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-17T16:24:20.901761Z","iopub.execute_input":"2025-01-17T16:24:20.902151Z","iopub.status.idle":"2025-01-17T16:24:23.827655Z","shell.execute_reply.started":"2025-01-17T16:24:20.902094Z","shell.execute_reply":"2025-01-17T16:24:23.826425Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Encode categorical features\ncategorical_features = training_data.select_dtypes(include=['object']).columns\ntraining_data = pd.get_dummies(training_data, columns=categorical_features, drop_first=True)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-17T16:24:23.829055Z","iopub.execute_input":"2025-01-17T16:24:23.829540Z","iopub.status.idle":"2025-01-17T16:24:27.831291Z","shell.execute_reply.started":"2025-01-17T16:24:23.829499Z","shell.execute_reply":"2025-01-17T16:24:27.829368Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#print(training_data.columns)\n#print(training_data.head())\n\n# Split features and target\nX = training_data.drop('Data_Value', axis=1)\ny = training_data['Data_Value']\n\n# Train-test split\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-17T16:24:27.833214Z","iopub.execute_input":"2025-01-17T16:24:27.833651Z","iopub.status.idle":"2025-01-17T16:24:29.751361Z","shell.execute_reply.started":"2025-01-17T16:24:27.833602Z","shell.execute_reply":"2025-01-17T16:24:29.750194Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#Feature scaling (optional, helps Ridge regression)\nscaler = StandardScaler()\nX_train_scaled = scaler.fit_transform(X_train)\nX_test_scaled = scaler.transform(X_test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-17T16:29:04.469972Z","iopub.execute_input":"2025-01-17T16:29:04.470415Z","iopub.status.idle":"2025-01-17T16:29:24.611487Z","shell.execute_reply.started":"2025-01-17T16:29:04.470381Z","shell.execute_reply":"2025-01-17T16:29:24.607607Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# XGBoost model (base model)\nxgb_model = xgb.XGBRegressor(\n    n_estimators=200,\n    learning_rate=0.05,\n    max_depth=5,\n    subsample=0.8,\n    colsample_bytree=0.8,\n    random_state=42,\n    objective='reg:squarederror'\n)\nxgb_model.fit(X_train_scaled, y_train)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-17T16:30:33.920517Z","iopub.execute_input":"2025-01-17T16:30:33.920882Z","iopub.status.idle":"2025-01-17T16:31:18.594638Z","shell.execute_reply.started":"2025-01-17T16:30:33.920850Z","shell.execute_reply":"2025-01-17T16:31:18.593213Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Ridge regression model (base model)\nridge_model = Ridge(alpha=1.0)\n\n# Stacking Regressor\nstacked_model = StackingRegressor(\n    estimators=[\n        ('xgb', xgb_model),\n        ('ridge', ridge_model)\n    ],\n    final_estimator=Ridge(alpha=0.1)  # Final meta-model\n)\n\n# Fit stacked model\nstacked_model.fit(X_train_scaled, y_train) ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-17T16:35:34.736471Z","iopub.execute_input":"2025-01-17T16:35:34.736845Z","iopub.status.idle":"2025-01-17T16:39:45.819231Z","shell.execute_reply.started":"2025-01-17T16:35:34.736791Z","shell.execute_reply":"2025-01-17T16:39:45.816788Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Predictions\nstacked_predictions = stacked_model.predict(X_test_scaled)\n\n# Evaluate model\nstacked_rmse = np.sqrt(mean_squared_error(y_test, stacked_predictions))\nprint(f\"Stacked RMSE: {stacked_rmse}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-17T16:39:45.822333Z","iopub.execute_input":"2025-01-17T16:39:45.822743Z","iopub.status.idle":"2025-01-17T16:39:47.019388Z","shell.execute_reply.started":"2025-01-17T16:39:45.822709Z","shell.execute_reply":"2025-01-17T16:39:47.017995Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Test data preprocessing (similar to training data)\ntest_file_path = '/kaggle/input/ccs-ml-wars/kaggle-wars-sat-24/Kaggle-Wars Test.csv'\ntest_data = pd.read_csv(test_file_path)\ntest_data = test_data.drop(columns=columns_to_drop, errors='ignore')\n\n# Handle missing categorical features\nmissing_categorical_features = [col for col in categorical_features if col not in test_data.columns]\nfor col in missing_categorical_features:\n    test_data[col] = None\n\ntest_data = pd.get_dummies(test_data, columns=categorical_features, drop_first=True)\ntest_data = test_data.reindex(columns=X.columns, fill_value=0)\n\n# Scale test data\ntest_data_scaled = scaler.transform(test_data)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-17T16:40:13.372176Z","iopub.execute_input":"2025-01-17T16:40:13.372567Z","iopub.status.idle":"2025-01-17T16:40:15.547559Z","shell.execute_reply.started":"2025-01-17T16:40:13.372539Z","shell.execute_reply":"2025-01-17T16:40:15.546579Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Predictions on test data\ntest_predictions = stacked_model.predict(test_data_scaled)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-17T16:40:19.757403Z","iopub.execute_input":"2025-01-17T16:40:19.757764Z","iopub.status.idle":"2025-01-17T16:40:20.342612Z","shell.execute_reply.started":"2025-01-17T16:40:19.757735Z","shell.execute_reply":"2025-01-17T16:40:20.341584Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Save predictions\nif 'Index' in test_data.columns:\n    output = pd.DataFrame({'Index': test_data['Index'], 'Data_Value': test_predictions})\nelse:\n    output = pd.DataFrame({'Index': range(len(test_predictions)), 'Data_Value': test_predictions})\noutput.to_csv('test_predictions.csv', index=False)\nprint(\"Predictions saved to test_predictions.csv\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-17T16:40:22.173654Z","iopub.execute_input":"2025-01-17T16:40:22.174048Z","iopub.status.idle":"2025-01-17T16:40:22.774746Z","shell.execute_reply.started":"2025-01-17T16:40:22.174013Z","shell.execute_reply":"2025-01-17T16:40:22.773622Z"}},"outputs":[],"execution_count":null}]}