{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.12.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceType":"competition","sourceId":132448,"databundleVersionId":15891735,"isSourceIdPinned":false},{"sourceType":"datasetVersion","sourceId":15246977,"datasetId":9754494,"databundleVersionId":16144841}],"dockerImageVersionId":31286,"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\nimport os\nimport seaborn as sns\nimport matplotlib.pyplot as plt\nimport warnings\nwarnings.filterwarnings('ignore')\n\nINPUT_DIR = '/kaggle/input/datasets/safar1/nfvnfjbgjbgj/' \nWORKING_DIR = '/kaggle/working/' \n\nTARGET_COL = 'isFraud'\nID_COL = 'TransactionID'\n\ntop_submissions = {\n    'submission_final_push_0.93.csv': 0.93016, \n    'blend_diff_evolution.csv': 0.93016,      \n    'blend_super_blend_v2.csv': 0.93005,\n    'blend_rank_top3.csv': 0.93004,\n    'blend_isotonic_calibrated.csv': 0.92991, \n    'blend_super_blend.csv': 0.92990,\n    'submission_mega_weighted.csv': 0.92990,\n    'blend_hill_climbing.csv': 0.92988,\n    'blend_rank_top5.csv': 0.92987,\n    'blend_power_3.0.csv': 0.92987\n}\n\nprint(\"--- Загрузка элитных файлов ---\")\ndfs = {}\navailable_files = []\n\nfor file, score in top_submissions.items():\n    path_working = os.path.join(WORKING_DIR, file)\n    path_input = os.path.join(INPUT_DIR, file)\n    \n    final_path = path_working if os.path.exists(path_working) else (path_input if os.path.exists(path_input) else file)\n    \n    if os.path.exists(final_path):\n        dfs[file] = pd.read_csv(final_path).sort_values(by=ID_COL).reset_index(drop=True)\n        available_files.append(file)\n    else:\n        print(f\"⚠️ Пропускаю: {file} (не найден)\")\n\nif not dfs:\n    raise ValueError(\"❌ Файлы не найдены! Проверьте INPUT_DIR.\")\nelse:\n    print(f\"✅ Загружено файлов: {len(dfs)}\")\n\n\nchampions = []\nfor expected_file in ['submission_final_push_0.93.csv', 'blend_super_blend_v2.csv', 'blend_rank_top3.csv', 'blend_isotonic_calibrated.csv']:\n    if expected_file in dfs:\n        champions.append(expected_file)\n    else:\n        fallback = [f for f in available_files if f not in champions][0]\n        champions.append(fallback)\n\nprint(\"\\n--- Выбраны Чемпионы для финального бленда ---\")\nfor c in champions:\n    print(f\"🌟 {c} (Score: {top_submissions[c]})\")\n\nweights = [0.45, 0.25, 0.20, 0.10] \n\nprint(\"\\n--- Генерация прорывного сабмишена ---\")\n\nfinal_sub = dfs[champions[0]][[ID_COL]].copy()\n\nrank_pred = np.zeros(len(final_sub))\nfor file, w in zip(champions, weights):\n    rank_pred += dfs[file][TARGET_COL].rank(pct=True).values * w\n\nprob_pred = np.zeros(len(final_sub))\nfor file, w in zip(champions, weights):\n    prob_pred += dfs[file][TARGET_COL].values * w\n\nrank_min, rank_max = rank_pred.min(), rank_pred.max()\nnorm_rank_pred = (rank_pred - rank_min) / (rank_max - rank_min)\n\nfinal_sub[TARGET_COL] = (norm_rank_pred * 0.65) + (prob_pred * 0.35)\n\n\nfinal_sub[TARGET_COL] = final_sub[TARGET_COL].clip(0.00001, 0.99999)\n\noutput_file = 'submission_ULTRA_blend_0.931.csv'\nfinal_sub.to_csv(output_file, index=False)\n\nprint(f\"✅ Готово! Файл сохранен как: {output_file}\")\nprint(\"🚀 Загружайте на Kaggle! Это выжмет максимум из ваших топ-файлов без переобучения.\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-03-17T21:21:46.062886Z","iopub.execute_input":"2026-03-17T21:21:46.063242Z","iopub.status.idle":"2026-03-17T21:21:47.276616Z","shell.execute_reply.started":"2026-03-17T21:21:46.063215Z","shell.execute_reply":"2026-03-17T21:21:47.275637Z"}},"outputs":[],"execution_count":null}]}