{"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":106680,"databundleVersionId":13374319,"sourceType":"competition"},{"sourceId":277879801,"sourceType":"kernelVersion"},{"sourceId":278063789,"sourceType":"kernelVersion"}],"dockerImageVersionId":31192,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Blended with Random Noise\n\n**Approach:** Blend predictions by introducing random noise, applying changes to probabilities for more varied and robust results.\n\n**Acknowledgments:** Thanks to Jirka Borovec, whose work made this possible.","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\n\n# Paths\npath_A = \"/kaggle/input/airr-ml-25-eda-convert-dataset-to-parquet/submission.csv\"\npath_B = \"/kaggle/input/airr-ml-25-naive-baseline-with-xgboost-pca/submission.csv\"\n\n# Load submissions\nsub_A = pd.read_csv(path_A)\nsub_B = pd.read_csv(path_B)\n\n# Ensure the same number of rows\nassert len(sub_A) == len(sub_B), \"Submissions must have the same number of rows.\"\n\n# Set seed for reproducibility\nnp.random.seed(42)\n\n# Define the change range\nmin_change = 0.01\nmax_change = 0.15\n\n# Generate random changes for each row in the 'label_positive_probability'\nchange_pct = np.random.uniform(min_change, max_change, len(sub_B))  # Array of random percentages\nsign_change = np.random.choice([-1, 1], size=len(sub_B))  # Randomly pick +1 or -1 for each row\n\n# Calculate the change to apply to each row\nchange = sign_change * sub_A[\"label_positive_probability\"].values * change_pct\n\n# Apply the change to sub_B\nsub_B[\"label_positive_probability\"] += change\n\n# Clip values to be between 0 and 1\nsub_B[\"label_positive_probability\"] = np.clip(sub_B[\"label_positive_probability\"], 0, 1)\n\n# Save the final blended submission\nsub_B.to_csv(\"submission.csv\", index=False)\n\nprint(\"Blended submission saved. Each row's probability changed and clipped to range [0, 1].\")\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-11-19T04:45:26.764151Z","iopub.execute_input":"2025-11-19T04:45:26.764464Z","iopub.status.idle":"2025-11-19T04:45:31.087845Z","shell.execute_reply.started":"2025-11-19T04:45:26.764441Z","shell.execute_reply":"2025-11-19T04:45:31.086636Z"}},"outputs":[],"execution_count":null}]}