{"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":81933,"databundleVersionId":9643020,"sourceType":"competition"}],"dockerImageVersionId":30786,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport os\nimport re\nfrom sklearn.base import clone\nfrom sklearn.metrics import cohen_kappa_score\nfrom sklearn.model_selection import StratifiedKFold\nfrom scipy.optimize import minimize\nfrom concurrent.futures import ThreadPoolExecutor\nfrom tqdm import tqdm\n\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import accuracy_score\nfrom sklearn.metrics import classification_report\n\nfrom sklearn.preprocessing import StandardScaler\nimport matplotlib.pyplot as plt\nfrom keras.models import Model\nfrom keras.layers import Input, Dense\nfrom keras.optimizers import Adam\nimport torch\nimport torch.nn as nn\nimport torch.optim as optim\n\nfrom colorama import Fore, Style\nfrom IPython.display import clear_output\nimport warnings\nfrom lightgbm import LGBMRegressor\nfrom xgboost import XGBRegressor\nfrom catboost import CatBoostRegressor\nfrom sklearn.ensemble import StackingRegressor\nfrom sklearn.linear_model import Ridge\nfrom sklearn.ensemble import VotingRegressor, RandomForestRegressor, GradientBoostingRegressor\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.pipeline import Pipeline\nwarnings.filterwarnings('ignore')\npd.options.display.max_columns = None\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-10-21T06:03:52.303225Z","iopub.execute_input":"2024-10-21T06:03:52.303819Z","iopub.status.idle":"2024-10-21T06:04:16.549766Z","shell.execute_reply.started":"2024-10-21T06:03:52.303754Z","shell.execute_reply":"2024-10-21T06:04:16.548232Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 加载训练数据和测试数据\ntrain_df = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/train.csv')\ntest_df = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/test.csv')\n\n# 加载数据字典\ndata_dict = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/data_dictionary.csv')\n\n# 查看数据的前几行\nprint(train_df.head())\nprint(test_df.head())\n\n# 查看训练集的基本信息\nprint(train_df.info())\n\n# 查看 sii 特征的唯一值及其计数\nprint(train_df['sii'].value_counts())\n\n# 绘制 sii 的类别分布\nimport seaborn as sns\nimport matplotlib.pyplot as plt\n\nsns.countplot(x='sii', data=train_df)\nplt.title('Distribution of sii Classes')\nplt.show()\n\n\n# 查看缺失值情况\nmissing_values = train_df.isnull().sum()\nprint(missing_values[missing_values > 0])\n","metadata":{"execution":{"iopub.status.busy":"2024-10-21T06:04:58.365296Z","iopub.execute_input":"2024-10-21T06:04:58.366237Z","iopub.status.idle":"2024-10-21T06:04:59.223018Z","shell.execute_reply.started":"2024-10-21T06:04:58.366186Z","shell.execute_reply":"2024-10-21T06:04:59.221682Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 检查训练集和测试集的列名\ntrain_columns = set(train_df.columns)\ntest_columns = set(test_df.columns)\n\n# 找到缺失的列\nmissing_in_test = train_columns - test_columns\nmissing_in_train = test_columns - train_columns\n\nprint(\"训练集中存在但测试集中缺失的列:\", missing_in_test)\nprint(\"测试集中存在但训练集中缺失的列:\", missing_in_train)","metadata":{"execution":{"iopub.status.busy":"2024-10-21T06:04:59.225304Z","iopub.execute_input":"2024-10-21T06:04:59.226338Z","iopub.status.idle":"2024-10-21T06:04:59.234010Z","shell.execute_reply.started":"2024-10-21T06:04:59.226281Z","shell.execute_reply":"2024-10-21T06:04:59.232610Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 进行独热编码和季节变量的映射（确保只对存在于训练集的特征进行处理）\nseason_mapping = {'Winter': 0, 'Fall': 0, 'Spring': 1, 'Summer': 1}\ntrain_df['Basic_Demos-Enroll_Season'] = train_df['Basic_Demos-Enroll_Season'].map(season_mapping)\ntrain_df['CGAS-Season'] = train_df['CGAS-Season'].map(season_mapping)\ntrain_df['Physical-Season'] = train_df['Physical-Season'].map(season_mapping)\ntrain_df['SDS-Season'] = train_df['SDS-Season'].map(season_mapping)\ntrain_df['PreInt_EduHx-Season'] = train_df['PreInt_EduHx-Season'].map(season_mapping)\ntrain_df['FGC-Season'] = train_df['FGC-Season'].map(season_mapping)\ntrain_df['BIA-Season'] = train_df['BIA-Season'].map(season_mapping)\ntrain_df['Basic_Demos-Enroll_Season'] = train_df['Basic_Demos-Enroll_Season'].map(season_mapping)\ntrain_df['CGAS-Season'] = train_df['CGAS-Season'].map(season_mapping)\ntrain_df['Physical-Season'] = train_df['Physical-Season'].map(season_mapping)\n#train_df['PCIAT-Season'] = train_df['PCIAT-Season'].map(season_mapping)\n\n# 处理测试集的季节变量映射\ntest_df['Basic_Demos-Enroll_Season'] = test_df['Basic_Demos-Enroll_Season'].map(season_mapping)\ntest_df['CGAS-Season'] = test_df['CGAS-Season'].map(season_mapping)\ntest_df['Physical-Season'] = test_df['Physical-Season'].map(season_mapping)\ntest_df['SDS-Season'] = test_df['SDS-Season'].map(season_mapping)\ntest_df['PreInt_EduHx-Season'] = test_df['PreInt_EduHx-Season'].map(season_mapping)\ntest_df['FGC-Season'] = test_df['FGC-Season'].map(season_mapping)\ntest_df['BIA-Season'] = test_df['BIA-Season'].map(season_mapping)\ntest_df['Basic_Demos-Enroll_Season'] = test_df['Basic_Demos-Enroll_Season'].map(season_mapping)\ntest_df['CGAS-Season'] = test_df['CGAS-Season'].map(season_mapping)\ntest_df['Physical-Season'] = test_df['Physical-Season'].map(season_mapping)\n#test_df['PCIAT-Season'] = test_df['PCIAT-Season'].map(season_mapping)\n\n# 确保测试集的特征列与训练集一致\ntest_df = test_df.reindex(columns=train_df.columns, fill_value=0)  # 用0填充缺失的列\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-21T06:04:59.594667Z","iopub.execute_input":"2024-10-21T06:04:59.595359Z","iopub.status.idle":"2024-10-21T06:04:59.640867Z","shell.execute_reply.started":"2024-10-21T06:04:59.595303Z","shell.execute_reply":"2024-10-21T06:04:59.639781Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(\"训练集列数:\", train_df.shape[1])\nprint(\"测试集列数:\", test_df.shape[1])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-21T06:05:00.205781Z","iopub.execute_input":"2024-10-21T06:05:00.207473Z","iopub.status.idle":"2024-10-21T06:05:00.214724Z","shell.execute_reply.started":"2024-10-21T06:05:00.207402Z","shell.execute_reply":"2024-10-21T06:05:00.213083Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 删除缺失值超过50%的列\nthreshold = 0.5  # 50%缺失率阈值\nmissing_percentage = train_df.isnull().sum() / len(train_df)\ncolumns_to_drop = missing_percentage[missing_percentage > threshold].index\ntrain_df.drop(columns_to_drop, axis=1, inplace=True)\ntest_df.drop(columns_to_drop, axis=1, inplace=True)\n\n# 对数值型特征使用平均值或中位数填充\nnum_cols = train_df.select_dtypes(include=['float64', 'int64']).columns\ntrain_df[num_cols] = train_df[num_cols].fillna(train_df[num_cols].median())\ntest_df[num_cols] = test_df[num_cols].fillna(test_df[num_cols].median())\n\n# 对分类变量使用众数填充\ncat_cols = train_df.select_dtypes(include=['object']).columns\ntrain_df[cat_cols] = train_df[cat_cols].fillna(train_df[cat_cols].mode().iloc[0])\ntest_df[cat_cols] = test_df[cat_cols].fillna(test_df[cat_cols].mode().iloc[0])\n\n# 查看处理后的缺失值情况\nprint(train_df.isnull().sum().sum())  # 确保没有剩余缺失值\nprint(test_df.isnull().sum().sum())  # 确保没有剩余缺失值","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-21T06:05:00.782372Z","iopub.execute_input":"2024-10-21T06:05:00.783532Z","iopub.status.idle":"2024-10-21T06:05:00.916427Z","shell.execute_reply.started":"2024-10-21T06:05:00.783473Z","shell.execute_reply":"2024-10-21T06:05:00.915201Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 划分特征和目标变量\nX = train_df.drop('sii', axis=1)\ny = train_df['sii']\n\n# 确保目标变量为数值类型\ny = y.astype(int)  # 如果y是字符串型标签，确保它是数值型\n\n# 划分训练集和验证集\nX_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)\n\n# 检查 X_train 的数据类型\nprint(X_train.dtypes)\n\n# 找出包含非数值类型的列\nnon_numeric_cols = X_train.select_dtypes(exclude=[np.number]).columns.tolist()\nprint(\"Non-numeric columns:\", non_numeric_cols)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-21T06:05:01.461734Z","iopub.execute_input":"2024-10-21T06:05:01.462234Z","iopub.status.idle":"2024-10-21T06:05:01.493193Z","shell.execute_reply.started":"2024-10-21T06:05:01.462188Z","shell.execute_reply":"2024-10-21T06:05:01.491809Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 划分特征和目标变量\nX = train_df.drop(columns=['id', 'sii','PCIAT-Season'])\ny = train_df['sii']\n\n# 确保目标变量为数值类型\ny = y.astype(int)  # 如果y是字符串型标签，确保它是数值型\n\n# 划分训练集和验证集\nX_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)\n\nclass_weights = {0: 1, 1: 3, 2: 5, 3: 10}\nrf_model = RandomForestClassifier(n_estimators=200, max_depth=10, random_state=42, class_weight=class_weights)\nrf_model.fit(X_train, y_train)\n\n# 验证模型\ny_pred = rf_model.predict(X_val)\n\n# 打印分类报告\nprint(classification_report(y_val, y_pred))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-21T06:05:02.740267Z","iopub.execute_input":"2024-10-21T06:05:02.740759Z","iopub.status.idle":"2024-10-21T06:05:04.116216Z","shell.execute_reply.started":"2024-10-21T06:05:02.740707Z","shell.execute_reply":"2024-10-21T06:05:04.114701Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 移除 id 和 sii 列\nX_test_final = test_df.drop(columns=['id', 'sii'])\n\n# 对测试集应用与训练集相同的独热编码\nX_test_final = pd.get_dummies(X_test_final, drop_first=True)\n\n# 确保测试集的列与训练集一致\nX_test_final = X_test_final.reindex(columns=X_train.columns, fill_value=0)\n\n# 使用训练好的模型进行预测\ny_test_pred = rf_model.predict(X_test_final)\n\n# 输出预测结果\nprint(\"Test Predictions:\", y_test_pred)\n\n\n# 生成提交文件\nsubmission = pd.DataFrame({\n    'id': test_df['id'],\n    'sii': y_test_pred\n})\n\n# 保存为CSV文件\nsubmission.to_csv('submission.csv', index=False)\nsubmission","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-21T06:05:04.118572Z","iopub.execute_input":"2024-10-21T06:05:04.118950Z","iopub.status.idle":"2024-10-21T06:05:04.171934Z","shell.execute_reply.started":"2024-10-21T06:05:04.118909Z","shell.execute_reply":"2024-10-21T06:05:04.170759Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/train.csv')\ntest = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/test.csv')\nsample = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/sample_submission.csv')\n\ntrain = train.drop('id', axis=1)\ntest = test.drop('id', axis=1)   \n\nfeaturesCols = ['Basic_Demos-Enroll_Season', 'Basic_Demos-Age', 'Basic_Demos-Sex',\n                'CGAS-Season', 'CGAS-CGAS_Score', 'Physical-Season', 'Physical-BMI',\n                'Physical-Height', 'Physical-Weight', 'Physical-Waist_Circumference',\n                'Physical-Diastolic_BP', 'Physical-HeartRate', 'Physical-Systolic_BP',\n                'Fitness_Endurance-Season', 'Fitness_Endurance-Max_Stage',\n                'Fitness_Endurance-Time_Mins', 'Fitness_Endurance-Time_Sec',\n                'FGC-Season', 'FGC-FGC_CU', 'FGC-FGC_CU_Zone', 'FGC-FGC_GSND',\n                'FGC-FGC_GSND_Zone', 'FGC-FGC_GSD', 'FGC-FGC_GSD_Zone', 'FGC-FGC_PU',\n                'FGC-FGC_PU_Zone', 'FGC-FGC_SRL', 'FGC-FGC_SRL_Zone', 'FGC-FGC_SRR',\n                'FGC-FGC_SRR_Zone', 'FGC-FGC_TL', 'FGC-FGC_TL_Zone', 'BIA-Season',\n                'BIA-BIA_Activity_Level_num', 'BIA-BIA_BMC', 'BIA-BIA_BMI',\n                'BIA-BIA_BMR', 'BIA-BIA_DEE', 'BIA-BIA_ECW', 'BIA-BIA_FFM',\n                'BIA-BIA_FFMI', 'BIA-BIA_FMI', 'BIA-BIA_Fat', 'BIA-BIA_Frame_num',\n                'BIA-BIA_ICW', 'BIA-BIA_LDM', 'BIA-BIA_LST', 'BIA-BIA_SMM',\n                'BIA-BIA_TBW', 'PAQ_A-Season', 'PAQ_A-PAQ_A_Total', 'PAQ_C-Season',\n                'PAQ_C-PAQ_C_Total', 'SDS-Season', 'SDS-SDS_Total_Raw',\n                'SDS-SDS_Total_T', 'PreInt_EduHx-Season',\n                'PreInt_EduHx-computerinternet_hoursday', 'sii']\n\ntrain = train[featuresCols]\ntrain = train.dropna(subset='sii')\n\ncat_c = ['Basic_Demos-Enroll_Season', 'CGAS-Season', 'Physical-Season', \n          'Fitness_Endurance-Season', 'FGC-Season', 'BIA-Season', \n          'PAQ_A-Season', 'PAQ_C-Season', 'SDS-Season', 'PreInt_EduHx-Season']","metadata":{"execution":{"iopub.status.busy":"2024-10-21T06:05:04.264888Z","iopub.execute_input":"2024-10-21T06:05:04.266111Z","iopub.status.idle":"2024-10-21T06:05:04.353964Z","shell.execute_reply.started":"2024-10-21T06:05:04.266060Z","shell.execute_reply":"2024-10-21T06:05:04.352850Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def update(df):\n    global cat_c\n    for c in cat_c: \n        df[c] = df[c].fillna('Missing')\n        df[c] = df[c].astype('category')\n    return df\n        \ntrain = update(train)\ntest_ = update(test)\n\ndef create_mapping(column, dataset):\n    unique_values = dataset[column].unique()\n    return {value: idx for idx, value in enumerate(unique_values)}\n\nfor col in cat_c:\n    mapping = create_mapping(col, train)\n    mappingTe = create_mapping(col, test)\n    \n    train[col] = train[col].replace(mapping).astype(int)\n    test[col] = test[col].replace(mappingTe).astype(int)\n\ndef quadratic_weighted_kappa(y_true, y_pred):\n    return cohen_kappa_score(y_true, y_pred, weights='quadratic')\n\ndef threshold_Rounder(oof_non_rounded, thresholds):\n    return np.where(oof_non_rounded < thresholds[0], 0,\n                    np.where(oof_non_rounded < thresholds[1], 1,\n                             np.where(oof_non_rounded < thresholds[2], 2, 3)))\n\ndef evaluate_predictions(thresholds, y_true, oof_non_rounded):\n    rounded_p = threshold_Rounder(oof_non_rounded, thresholds)\n    return -quadratic_weighted_kappa(y_true, rounded_p)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-21T06:05:04.998225Z","iopub.execute_input":"2024-10-21T06:05:04.999482Z","iopub.status.idle":"2024-10-21T06:05:05.081269Z","shell.execute_reply.started":"2024-10-21T06:05:04.999430Z","shell.execute_reply":"2024-10-21T06:05:05.080011Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def TrainML(model_class, test_data):\n    X = train.drop(['sii'], axis=1)\n    y = train['sii']\n\n    SKF = StratifiedKFold(n_splits=n_splits, shuffle=True, random_state=SEED)\n    \n    train_S = []\n    test_S = []\n    \n    oof_non_rounded = np.zeros(len(y), dtype=float) \n    oof_rounded = np.zeros(len(y), dtype=int) \n    test_preds = np.zeros((len(test_data), n_splits))\n\n    for fold, (train_idx, test_idx) in enumerate(tqdm(SKF.split(X, y), desc=\"Training Folds\", total=n_splits)):\n        X_train, X_val = X.iloc[train_idx], X.iloc[test_idx]\n        y_train, y_val = y.iloc[train_idx], y.iloc[test_idx]\n\n        model = clone(model_class)\n        model.fit(X_train, y_train)\n\n        y_train_pred = model.predict(X_train)\n        y_val_pred = model.predict(X_val)\n\n        oof_non_rounded[test_idx] = y_val_pred\n        y_val_pred_rounded = y_val_pred.round(0).astype(int)\n        oof_rounded[test_idx] = y_val_pred_rounded\n\n        train_kappa = quadratic_weighted_kappa(y_train, y_train_pred.round(0).astype(int))\n        val_kappa = quadratic_weighted_kappa(y_val, y_val_pred_rounded)\n\n        train_S.append(train_kappa)\n        test_S.append(val_kappa)\n        \n        test_preds[:, fold] = model.predict(test_data)\n        \n        print(f\"Fold {fold+1} - Train QWK: {train_kappa:.4f}, Validation QWK: {val_kappa:.4f}\")\n        clear_output(wait=True)\n\n    print(f\"Mean Train QWK --> {np.mean(train_S):.4f}\")\n    print(f\"Mean Validation QWK ---> {np.mean(test_S):.4f}\")\n\n    KappaOPtimizer = minimize(evaluate_predictions,\n                              x0=[0.5, 1.5, 2.5], args=(y, oof_non_rounded), \n                              method='Nelder-Mead')\n    assert KappaOPtimizer.success, \"Optimization did not converge.\"\n    \n    oof_tuned = threshold_Rounder(oof_non_rounded, KappaOPtimizer.x)\n    tKappa = quadratic_weighted_kappa(y, oof_tuned)\n\n    print(f\"----> || Optimized QWK SCORE :: {Fore.CYAN}{Style.BRIGHT} {tKappa:.3f}{Style.RESET_ALL}\")\n\n    tpm = test_preds.mean(axis=1)\n    tpTuned = threshold_Rounder(tpm, KappaOPtimizer.x)\n    \n    submission = pd.DataFrame({\n        'id': sample['id'],\n        'sii': tpTuned\n    })\n\n    return submission","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-21T06:05:05.565743Z","iopub.execute_input":"2024-10-21T06:05:05.566277Z","iopub.status.idle":"2024-10-21T06:05:05.583950Z","shell.execute_reply.started":"2024-10-21T06:05:05.566225Z","shell.execute_reply":"2024-10-21T06:05:05.582272Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"SEED = 42\nn_splits = 5\n\nParams = {\n    'learning_rate': 0.046,\n    'max_depth': 12,\n    'num_leaves': 478,\n    'min_data_in_leaf': 13,\n    'feature_fraction': 0.893,\n    'bagging_fraction': 0.784,\n    'bagging_freq': 4,\n    'lambda_l1': 10.24,  # Increased from 6.59\n    'lambda_l2': 0.008  # Increased from 2.68e-06\n}\n\n\nXGB_Params = {\n    'learning_rate': 0.05,\n    'max_depth': 6,\n    'n_estimators': 200,\n    'subsample': 0.8,\n    'colsample_bytree': 0.8,\n    'reg_alpha': 0.9,  # Increased from 0.1\n    'reg_lambda': 4,  # Increased from 1\n    'random_state': SEED,\n    'tree_method': 'exact'\n}\n\n\nCatBoost_Params = {\n    'learning_rate': 0.05,\n    'depth': 6,\n    'iterations': 200,\n    'random_seed': SEED,\n    'cat_features': cat_c,\n    'verbose': 0,\n    'l2_leaf_reg': 10  # Increase this value\n}\n\n# Define Random Forest parameters\nRF_Params = {\n    'n_estimators': 200,\n    'max_depth': 12,\n    'min_samples_split': 10,\n    'min_samples_leaf': 4,\n    'random_state': SEED\n}","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-21T06:05:06.441261Z","iopub.execute_input":"2024-10-21T06:05:06.442305Z","iopub.status.idle":"2024-10-21T06:05:06.452149Z","shell.execute_reply.started":"2024-10-21T06:05:06.442253Z","shell.execute_reply":"2024-10-21T06:05:06.450772Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Create model instances\nLight = LGBMRegressor(**Params, random_state=SEED, verbose=-1, n_estimators=300)\nXGB_Model = XGBRegressor(**XGB_Params)\nCatBoost_Model = CatBoostRegressor(**CatBoost_Params)\n#RF_Model = RandomForestRegressor(**RF_Params)\n\n# Combine models using Voting Regressor\nvoting_model = VotingRegressor(estimators=[\n    ('lightgbm', Light),\n    ('xgboost', XGB_Model),\n    ('catboost', CatBoost_Model),\n    #('random_forest', RF_Model)\n])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-21T06:06:22.530575Z","iopub.execute_input":"2024-10-21T06:06:22.531048Z","iopub.status.idle":"2024-10-21T06:06:22.539185Z","shell.execute_reply.started":"2024-10-21T06:06:22.530974Z","shell.execute_reply":"2024-10-21T06:06:22.537649Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Define the base models\nbase_models = [\n    ('lightgbm', Light),\n    ('xgboost', XGB_Model),\n    ('catboost', CatBoost_Model),\n    #('random_forest', RF_Model)\n]\n\n# Define the meta-model (here we use Ridge, but you can experiment with other models)\nmeta_model = Ridge(alpha=1.0)\n\n# Create a Stacking Regressor\nstacking_model = StackingRegressor(\n    estimators=base_models,\n    final_estimator=meta_model,\n)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-21T06:08:22.909499Z","iopub.execute_input":"2024-10-21T06:08:22.910106Z","iopub.status.idle":"2024-10-21T06:08:22.918865Z","shell.execute_reply.started":"2024-10-21T06:08:22.910058Z","shell.execute_reply":"2024-10-21T06:08:22.917104Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"Submission2 = TrainML(stacking_model, test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-21T06:08:24.142191Z","iopub.execute_input":"2024-10-21T06:08:24.143248Z","iopub.status.idle":"2024-10-21T06:10:36.421036Z","shell.execute_reply.started":"2024-10-21T06:08:24.143195Z","shell.execute_reply":"2024-10-21T06:10:36.419550Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"Submission2","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-21T06:10:57.273112Z","iopub.execute_input":"2024-10-21T06:10:57.273650Z","iopub.status.idle":"2024-10-21T06:10:57.287982Z","shell.execute_reply.started":"2024-10-21T06:10:57.273603Z","shell.execute_reply":"2024-10-21T06:10:57.286586Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"Submission = TrainML(voting_model, test)\n\n# Save submission\nSubmission.to_csv('submission.csv', index=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-21T06:11:03.471318Z","iopub.execute_input":"2024-10-21T06:11:03.471874Z","iopub.status.idle":"2024-10-21T06:11:28.860378Z","shell.execute_reply.started":"2024-10-21T06:11:03.471823Z","shell.execute_reply":"2024-10-21T06:11:28.859103Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"Submission","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-21T06:11:28.862641Z","iopub.execute_input":"2024-10-21T06:11:28.863083Z","iopub.status.idle":"2024-10-21T06:11:28.876473Z","shell.execute_reply.started":"2024-10-21T06:11:28.863032Z","shell.execute_reply":"2024-10-21T06:11:28.875234Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sub1 = Submission\nsub2 = Submission2\nsub3 = submission\n\nsub1 = sub1.sort_values(by='id').reset_index(drop=True)\nsub2 = sub2.sort_values(by='id').reset_index(drop=True)\nsub3 = sub3.sort_values(by='id').reset_index(drop=True)\n\nsub1 = sub1.rename(columns={'sii': 'sii_1'})\nsub2 = sub2.rename(columns={'sii': 'sii_2'})\nsub3 = sub3.rename(columns={'sii': 'sii_3'})\n\nsubs = pd.merge(sub1,sub2,on=['id'])\nsubs = pd.merge(subs,sub3,on=['id'])\n\n\nsubs['sii_s'] = np.round(subs['sii_1'] * 0.45 + subs['sii_2'] * 0.541 + subs['sii_3'] * 0.009)\n\nsubs['sii_s'] = subs['sii_s'].astype(int)\n\ncombined = pd.DataFrame({\n    \n    'id'   : sub1['id'],\n    \n    'sii_1': sub1['sii_1'],\n    'sii_2': sub2['sii_2'],\n    \n    'sii_s': subs['sii_s'],\n})\n\ndef majority_vote(row):\n    return row.mode()[0]\n                                                         \ncombined['final_sii'] = combined[['sii_1', 'sii_2', 'sii_s']].apply(majority_vote, axis=1)\n\nfinal_submission = combined[['id', 'final_sii']].rename(columns={'final_sii': 'sii'})\n\nfinal_submission.to_csv('submission.csv', index=False)\n\nprint(\"Majority voting completed and saved to 'Final_Submission.csv'\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-21T06:12:14.230013Z","iopub.execute_input":"2024-10-21T06:12:14.230461Z","iopub.status.idle":"2024-10-21T06:12:14.273167Z","shell.execute_reply.started":"2024-10-21T06:12:14.230418Z","shell.execute_reply":"2024-10-21T06:12:14.271623Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"final_submission","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-21T06:12:15.347055Z","iopub.execute_input":"2024-10-21T06:12:15.347516Z","iopub.status.idle":"2024-10-21T06:12:15.362031Z","shell.execute_reply.started":"2024-10-21T06:12:15.347470Z","shell.execute_reply":"2024-10-21T06:12:15.360342Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}