{"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":84896,"databundleVersionId":10305135,"sourceType":"competition"},{"sourceId":10303058,"sourceType":"datasetVersion","datasetId":6377413},{"sourceId":211821570,"sourceType":"kernelVersion"}],"dockerImageVersionId":30822,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom sklearn.model_selection import KFold\nfrom scipy.optimize import minimize","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-12-25T20:01:45.869154Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def load_csv(file_paths):\n    data_frames = [pd.read_csv(path) for path in file_paths]\n    return data_frames","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def rmsle_loss(weights, predictions, true_values):\n    ensemble_prediction = np.average(predictions, axis=0, weights=weights)\n    return np.sqrt(np.mean((np.log1p(ensemble_prediction) - np.log1p(true_values)) ** 2))","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def optimize_weights(predictions, true_values):\n    n_models = len(predictions)\n    initial_weights = np.ones(n_models) / n_models\n\n    constraints = ({'type': 'eq', 'fun': lambda w: 1 - sum(w)})\n    bounds = [(0, 1)] * n_models\n\n    result = minimize(\n        rmsle_loss,\n        initial_weights,\n        args=(predictions, true_values),\n        method='SLSQP',\n        bounds=bounds,\n        constraints=constraints\n    )\n    return result.x","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def cross_validate(file_paths, target_col, n_splits=5):\n    data_frames = load_csv(file_paths)\n    target = data_frames[0][target_col].values\n    predictions = [df[target_col].values for df in data_frames]\n\n    kf = KFold(n_splits=n_splits, shuffle=True, random_state=42)\n    optimized_weights = []\n\n    for train_index, val_index in kf.split(target):\n        train_true = target[train_index]\n        val_true = target[val_index]\n\n        train_predictions = [pred[train_index] for pred in predictions]\n        val_predictions = [pred[val_index] for pred in predictions]\n\n        weights = optimize_weights(train_predictions, train_true)\n        optimized_weights.append(weights)\n\n    return np.mean(optimized_weights, axis=0)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def ensemble_predictions(file_paths, target_col, optimized_weights):\n    data_frames = load_csv(file_paths)\n    predictions = [df[target_col].values for df in data_frames]\n    ensemble_prediction = np.average(predictions, axis=0, weights=optimized_weights)\n    return ensemble_prediction","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"if __name__ == \"__main__\":\n    csv_files = [\"/kaggle/input/rid-catboost-nonlog-as-feature/submission.csv\", \"/kaggle/input/auto-xgb/autogluon.csv\",\"/kaggle/input/auto-xgb/xgb.csv\"]\n    target_column = \"Premium Amount\"\n\n    best_weights = cross_validate(csv_files, target_column)\n    print(f\"best: {best_weights}\")\n\n    final_ensemble = ensemble_predictions(csv_files, target_column, best_weights)\n    output_df = pd.read_csv('/kaggle/input/playground-series-s4e12/sample_submission.csv')\n    output_df[target_column] = final_ensemble\n    output_df.to_csv(\"submission.csv\", index=False)\n    display(output_df.head(10))","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}