{"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":"nvidiaTeslaT4","dataSources":[{"sourceId":81933,"databundleVersionId":9643020,"sourceType":"competition"}],"dockerImageVersionId":30805,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\n\nimport os\nimport re\n\nfrom sklearn.base import clone\nfrom sklearn.metrics import cohen_kappa_score\nfrom sklearn.model_selection import StratifiedKFold\n\nfrom scipy.optimize import minimize\nfrom concurrent.futures import ThreadPoolExecutor\n\nfrom tqdm import tqdm\nimport polars as pl\nimport polars.selectors as cs\nimport matplotlib.pyplot as plt\nfrom matplotlib.ticker import MaxNLocator, FormatStrFormatter, PercentFormatter\nimport seaborn as sns\n\n\n\nfrom sklearn.preprocessing import StandardScaler\nimport matplotlib.pyplot as plt\n\nimport torch\nimport torch.nn as nn\nimport torch.optim as optim\n\n\n\nfrom colorama import Fore, Style\nfrom IPython.display import clear_output\nimport warnings\n\nimport lightgbm as lgb\n\nfrom lightgbm import LGBMRegressor\n\nfrom xgboost import XGBRegressor\n\nfrom catboost import CatBoostRegressor\n\nfrom sklearn.ensemble import VotingRegressor, RandomForestRegressor, GradientBoostingRegressor\n\nfrom sklearn.impute import SimpleImputer, KNNImputer\n\nfrom sklearn.pipeline import Pipeline\n\nimport gc\nfrom catboost import CatBoostClassifier, Pool\nwarnings.filterwarnings('ignore')\npd.options.display.max_columns = None","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-12-10T15:37:18.368598Z","iopub.execute_input":"2024-12-10T15:37:18.369412Z","iopub.status.idle":"2024-12-10T15:37:25.804502Z","shell.execute_reply.started":"2024-12-10T15:37:18.369377Z","shell.execute_reply":"2024-12-10T15:37:25.803828Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import random\ndef seed_everything(seed):\n    random.seed(seed)\n    os.environ['PYTHONHASHSEED'] = str(seed)\n    np.random.seed(seed)\n    torch.manual_seed(seed)\n    torch.cuda.manual_seed(seed)\n    torch.backends.cudnn.deterministic = True\n    torch.backends.cudnn.benchmark = True\nseed_everything(42)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-10T15:38:20.848890Z","iopub.execute_input":"2024-12-10T15:38:20.850236Z","iopub.status.idle":"2024-12-10T15:38:20.860590Z","shell.execute_reply.started":"2024-12-10T15:38:20.850183Z","shell.execute_reply":"2024-12-10T15:38:20.859735Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# 方案1","metadata":{}},{"cell_type":"code","source":"SEED = 42\nn_splits = 5\ndef process_file(filename, dirname):\n    df = pd.read_parquet(os.path.join(dirname, filename, 'part-0.parquet'))\n    df.drop('step', axis=1, inplace=True)\n    return df.describe().values.reshape(-1), filename.split('=')[1]\n\ndef load_time_series(dirname) -> pd.DataFrame:\n    ids = os.listdir(dirname)\n    \n    with ThreadPoolExecutor() as executor:\n        results = list(tqdm(executor.map(lambda fname: process_file(fname, dirname), ids), total=len(ids)))\n    \n    stats, indexes = zip(*results)\n    \n    df = pd.DataFrame(stats, columns=[f\"Stat_{i}\" for i in range(len(stats[0]))])\n    df['id'] = indexes\n    \n    return df\n\ntrain = 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_ts = load_time_series(\"/kaggle/input/child-mind-institute-problematic-internet-use/series_train.parquet\")\ntest_ts = load_time_series(\"/kaggle/input/child-mind-institute-problematic-internet-use/series_test.parquet\")\ntime_series_cols = train_ts.columns.tolist()\ntime_series_cols.remove(\"id\")\n\ntrain = pd.merge(train, train_ts, how=\"left\", on='id')\ntest = pd.merge(test, test_ts, how=\"left\", on='id')\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\nfeaturesCols += time_series_cols\n\ntrain = train[featuresCols]\ntrain = train.dropna(subset='sii')\n\ncat_c = ['Basic_Demos-Enroll_Season', 'CGAS-Season', 'Physical-Season', 'Fitness_Endurance-Season', \n          'FGC-Season', 'BIA-Season', 'PAQ_A-Season', 'PAQ_C-Season', 'SDS-Season', 'PreInt_EduHx-Season']\n\ndef update(df):\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\n\"\"\"This Mapping Works Fine For me I also Check Each Values in Train and test Using Logic. There no Data Lekage.\"\"\"\n\nfor col in cat_c:\n    mapping_train = create_mapping(col, train)\n    mapping_test = create_mapping(col, test)\n    \n    train[col] = train[col].replace(mapping_train).astype(int)\n    test[col] = test[col].replace(mapping_test).astype(int)\n\nprint(f'Train Shape : {train.shape} || Test Shape : {test.shape}')\n\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)\n\ndef TrainML(model_class, test_data):\n    \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') # Nelder-Mead | # Powell\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,model\n\n\nParams7 = {'learning_rate': 0.03884249148676395, 'max_depth': 12, 'num_leaves': 413, 'min_data_in_leaf': 14,\n           'feature_fraction': 0.7987976913702801, 'bagging_fraction': 0.7602261703576205, 'bagging_freq': 2, \n           'lambda_l1': 4.735462555910575, 'lambda_l2': 4.735028557007343e-06} # CV : 0.4094 | LB : 0.471\n\nLight = lgb.LGBMRegressor(**Params7,random_state=SEED, verbose=-1,n_estimators=200)\nSubmission1,model = TrainML(Light,test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-10T15:38:41.014437Z","iopub.execute_input":"2024-12-10T15:38:41.014790Z","iopub.status.idle":"2024-12-10T15:39:57.939690Z","shell.execute_reply.started":"2024-12-10T15:38:41.014760Z","shell.execute_reply":"2024-12-10T15:39:57.938863Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# 方案2-1 & 2","metadata":{}},{"cell_type":"code","source":"from sklearn.metrics import f1_score, accuracy_score\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')\nsample = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/sample_submission.csv')\n\ntrain_ts = load_time_series(\"/kaggle/input/child-mind-institute-problematic-internet-use/series_train.parquet\")\ntest_ts = load_time_series(\"/kaggle/input/child-mind-institute-problematic-internet-use/series_test.parquet\")\n\nts_cols = list(set(train_ts.columns) - {'id'})\ntrain_ts_encoded = train_ts\n\ntest_ts_encoded = test_ts\n\n\ntrain = pd.merge(train_df, train_ts_encoded, how=\"left\", on='id')\ntest = pd.merge(test_df, test_ts_encoded, how=\"left\", on='id')\n\ntrain = train.dropna(subset=['sii'])\ntrain_ids = train[\"id\"]\n\n\ncat_c = ['Basic_Demos-Enroll_Season', 'CGAS-Season', 'Physical-Season', \n\n          'Fitness_Endurance-Season', 'FGC-Season', 'BIA-Season', \n\n          'PAQ_A-Season', 'PAQ_C-Season', 'SDS-Season', 'PreInt_EduHx-Season']\n\n\n\ndef update(df):\n\n    global cat_c\n\n    for c in cat_c: \n\n        df[c] = df[c].fillna('Missing')\n\n        df[c] = df[c].astype('category')\n\n    return df\n\n        \n\ntrain = update(train)\n\ntest = update(test)\n\n\n\ndef create_mapping(column, dataset):\n\n    unique_values = dataset[column].unique()\n\n    return {value: idx for idx, value in enumerate(unique_values)}\n\n\n\nfor col in cat_c:\n\n    mapping = create_mapping(col, train)\n\n    mappingTe = create_mapping(col, test)\n\n    \n\n    train[col] = train[col].replace(mapping).astype(int)\n\n    test[col] = test[col].replace(mappingTe).astype(int)\n\n\ndef feature_engineering(df):\n    \n    df['BMI_Age'] = df['Physical-BMI'] * df['Basic_Demos-Age']\n    df['Internet_Hours_Age'] = df['PreInt_EduHx-computerinternet_hoursday'] * df['Basic_Demos-Age']\n    df['BMI_Internet_Hours'] = df['Physical-BMI'] * df['PreInt_EduHx-computerinternet_hoursday']\n    df['BFP_BMI'] = df['BIA-BIA_Fat'] / df['BIA-BIA_BMI']\n    df['FFMI_BFP'] = df['BIA-BIA_FFMI'] / df['BIA-BIA_Fat']\n    df['FMI_BFP'] = df['BIA-BIA_FMI'] / df['BIA-BIA_Fat']\n    df['LST_TBW'] = df['BIA-BIA_LST'] / df['BIA-BIA_TBW']\n    df['BFP_BMR'] = df['BIA-BIA_Fat'] * df['BIA-BIA_BMR']\n    df['BFP_DEE'] = df['BIA-BIA_Fat'] * df['BIA-BIA_DEE']\n    df['BMR_Weight'] = df['BIA-BIA_BMR'] / df['Physical-Weight']\n    df['DEE_Weight'] = df['BIA-BIA_DEE'] / df['Physical-Weight']\n    df['SMM_Height'] = df['BIA-BIA_SMM'] / df['Physical-Height']\n    df['Muscle_to_Fat'] = df['BIA-BIA_SMM'] / df['BIA-BIA_FMI']\n    df['Hydration_Status'] = df['BIA-BIA_TBW'] / df['Physical-Weight']\n    df['ICW_TBW'] = df['BIA-BIA_ICW'] / df['BIA-BIA_TBW']\n    \n    return df\n\ntrain = feature_engineering(train)\n\ntest = feature_engineering(test)\n\n\ntrain_featuresCols = ['Basic_Demos-Age', 'Basic_Demos-Sex',\n                'CGAS-CGAS_Score', 'Physical-BMI',\n                'Physical-Height', 'Physical-Weight', 'Physical-Waist_Circumference',\n                'Physical-Diastolic_BP', 'Physical-HeartRate', 'Physical-Systolic_BP',\n                'Fitness_Endurance-Max_Stage',\n                'Fitness_Endurance-Time_Mins', 'Fitness_Endurance-Time_Sec',\n                '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',\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-PAQ_A_Total',\n                'PAQ_C-PAQ_C_Total', 'SDS-SDS_Total_Raw',\n                'SDS-SDS_Total_T',\n                'PreInt_EduHx-computerinternet_hoursday', 'sii', 'BMI_Age','Internet_Hours_Age','BMI_Internet_Hours',\n                'BFP_BMI', 'FFMI_BFP', 'FMI_BFP', 'LST_TBW', 'BFP_BMR', 'BFP_DEE', 'BMR_Weight', 'DEE_Weight',\n                'SMM_Height', 'Muscle_to_Fat', 'Hydration_Status', 'ICW_TBW']\n\ntrain_featuresCols += cat_c\ntrain_featuresCols += ts_cols\ntrain = train[train_featuresCols]\n\n\ntest_featuresCols = ['Basic_Demos-Age', 'Basic_Demos-Sex',\n                'CGAS-CGAS_Score', 'Physical-BMI',\n                'Physical-Height', 'Physical-Weight', 'Physical-Waist_Circumference',\n                'Physical-Diastolic_BP', 'Physical-HeartRate', 'Physical-Systolic_BP',\n                'Fitness_Endurance-Max_Stage',\n                'Fitness_Endurance-Time_Mins', 'Fitness_Endurance-Time_Sec',\n                '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',\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-PAQ_A_Total',\n                'PAQ_C-PAQ_C_Total', 'SDS-SDS_Total_Raw',\n                'SDS-SDS_Total_T',\n                'PreInt_EduHx-computerinternet_hoursday', 'BMI_Age','Internet_Hours_Age','BMI_Internet_Hours',\n                'BFP_BMI', 'FFMI_BFP', 'FMI_BFP', 'LST_TBW', 'BFP_BMR', 'BFP_DEE', 'BMR_Weight', 'DEE_Weight',\n                'SMM_Height', 'Muscle_to_Fat', 'Hydration_Status', 'ICW_TBW']\n\ntest_featuresCols += cat_c\ntest_featuresCols += ts_cols\ntest = test[test_featuresCols]\nif np.any(np.isinf(train)):\n    train = train.replace([np.inf, -np.inf], np.nan)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-10T15:42:31.177346Z","iopub.execute_input":"2024-12-10T15:42:31.177703Z","iopub.status.idle":"2024-12-10T15:43:40.396445Z","shell.execute_reply.started":"2024-12-10T15:42:31.177671Z","shell.execute_reply":"2024-12-10T15:43:40.395778Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"num_folds = 9\nmost_num = 81\nSEED = 42\nall_idx_set = set(train.index.values)\nl1 = []\nfor i in range(4):\n    \n    tmp_idxs = train.loc[train['sii']==i].index.values\n\n    n = most_num*num_folds if len(tmp_idxs) > most_num*num_folds else len(tmp_idxs)\n    \n    sample_idxs = np.random.choice(tmp_idxs, size=n, replace=False)\n    \n    \n    split_data = np.array_split(sample_idxs, num_folds)\n    l1.append(split_data)\n\n\nret = []\nfor i in range(num_folds):\n    valid_idxs = []\n    for n in range(4):\n        valid_idxs.extend(l1[n][i].tolist())\n    ret.append((all_idx_set - set(valid_idxs), set(valid_idxs)))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-10T15:44:39.817603Z","iopub.execute_input":"2024-12-10T15:44:39.817967Z","iopub.status.idle":"2024-12-10T15:44:39.831985Z","shell.execute_reply.started":"2024-12-10T15:44:39.817937Z","shell.execute_reply":"2024-12-10T15:44:39.831329Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"target = 'sii'\nX = train.drop(target, axis=1)\ny = train[target].ravel()\n\ntest_pool = Pool(test, cat_features=cat_c)\nfeatures = cat_c\n\n\ndef TrainML3(model_class, test_data):\n    test_pool = Pool(test_data, cat_features=cat_c)\n   \n    X = train.drop(['sii'], axis=1)\n    y = train['sii']\n    \n    \n    train_S = []\n    test_S = []\n    \n    train_S2 = []\n    test_S2 = []\n    \n    \n    train_S3 = []\n    test_S3 = []\n    \n    \n    \n    oof_non_rounded = []\n    \n    oof_target = []\n    oof_rounded = []\n    \n    \n    test_preds = []\n    \n    \n    for fold, (train_idx, test_idx) in enumerate(tqdm(ret)):\n        train_idx, test_idx = list(train_idx), list(test_idx)\n        X_train, X_val = X.loc[train_idx], X.loc[test_idx]\n        y_train, y_val = y.loc[train_idx], y.loc[test_idx]\n\n        X_train_pool = Pool(X_train, y_train, cat_features=features)\n        X_test_pool = Pool(X_val, y_val, cat_features=features)\n        \n        model = clone(model_class)\n        model.fit(X=X_train_pool,eval_set=X_test_pool, early_stopping_rounds=400)\n\n\n\n    \n        y_train_pred = model.predict(X_train_pool)\n        y_val_pred = model.predict(X_test_pool)\n\n        \n        train_kappa = quadratic_weighted_kappa(y_train, y_train_pred)\n        val_kappa = quadratic_weighted_kappa(y_val, y_val_pred)\n    \n        train_f1_macro = f1_score(y_train, y_train_pred, average='macro')\n        val_f1_macro = f1_score(y_val, y_val_pred, average='macro')\n    \n        train_acc = accuracy_score(y_train, y_train_pred)\n        val_acc = accuracy_score(y_val, y_val_pred)\n\n\n        \n        test_preds.append(model.predict(test_pool))\n\n        print(f\"Fold {fold+1} - Train QWK: {train_kappa:.4f}, Validation QWK: {val_kappa:.4f}- Train ACC: {train_acc:.4f}, Validation ACC: {val_acc:.4f}- Train F1: {train_f1_macro:.4f}, Validation F1: {val_f1_macro:.4f}\")\n\n\n\n        \n    \n        train_S.append(train_kappa)\n        test_S.append(val_kappa)\n    \n        train_S2.append(train_acc)\n        train_S3.append(train_f1_macro)\n    \n        test_S2.append(val_acc)\n        test_S3.append(val_f1_macro)\n    \n    print(f\"Mean Train QWK --> {np.mean(train_S):.4f}\")\n    print(f\"Mean Validation QWK ---> {np.mean(test_S):.4f}\")\n    print(\"<-------------------------**********************-------------------------------------->\")\n    \n    print(f\"Mean Train ACC --> {np.mean(train_S2):.4f}\")\n    print(f\"Mean Validation ACC ---> {np.mean(test_S2):.4f}\")\n    \n    print(\"<-------------------------**********************-------------------------------------->\")\n    print(f\"Mean Train F1 --> {np.mean(train_S3):.4f}\")\n    print(f\"Mean Validation F1 ---> {np.mean(test_S3):.4f}\")\n    print(\"<-------------------------**********************-------------------------------------->\")\n    test_preds = [i.reshape(-1) for i in test_preds]\n        \n    return test_preds, train_S, np.mean(test_S)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-10T15:44:45.370359Z","iopub.execute_input":"2024-12-10T15:44:45.370731Z","iopub.status.idle":"2024-12-10T15:44:45.413668Z","shell.execute_reply.started":"2024-12-10T15:44:45.370700Z","shell.execute_reply":"2024-12-10T15:44:45.412827Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"params = {\n            \n            'task_type'           : \"GPU\",\n            'loss_function'       : 'MultiClassOneVsAll',\n            'classes_count': 4,\n            'eval_metric'         : \"Accuracy\",\n            'auto_class_weights'         : \"Balanced\",\n            'iterations'          : 1_000,\n            \n\n            'learning_rate'       :  0.035,\n            'max_depth'           : 6,\n            'min_data_in_leaf'    : 63,\n            'bagging_temperature' :  1.141003510568888,\n            # 'colsample_bylevel': colsample_bylevel,\n            'l2_leaf_reg'         :  10.248435466776273,\n            'random_strength'     :   0.25 ,\n\n    \n            'random_state'        : 42,\n            'early_stopping_rounds': 400,\n            'use_best_model'       : True,\n            'allow_writing_files' : False,\n            'verbose': 100,\n        }\n\nmodel = CatBoostClassifier(**params)\noof_preds, oof_accs,val_s = TrainML3(model, test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-10T15:48:34.453504Z","iopub.execute_input":"2024-12-10T15:48:34.453875Z","iopub.status.idle":"2024-12-10T15:49:42.184017Z","shell.execute_reply.started":"2024-12-10T15:48:34.453844Z","shell.execute_reply":"2024-12-10T15:49:42.183343Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"combined = pd.DataFrame(np.array(oof_preds))\ncombined[\"score\"] = oof_accs\ndel combined['score']\ncombined = combined.T\n\ndef majority_vote(row):\n\n    return row.mode()[0]\n\n\ncombined['sii'] = combined.apply(majority_vote, axis=1)\ncombined['id'] = sample['id']\nSubmission2_1 = combined[['id', 'sii']] ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-10T15:49:51.879078Z","iopub.execute_input":"2024-12-10T15:49:51.879407Z","iopub.status.idle":"2024-12-10T15:49:51.893278Z","shell.execute_reply.started":"2024-12-10T15:49:51.879377Z","shell.execute_reply":"2024-12-10T15:49:51.892635Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Submission2_1","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-10T15:50:12.604080Z","iopub.execute_input":"2024-12-10T15:50:12.604913Z","iopub.status.idle":"2024-12-10T15:50:12.608252Z","shell.execute_reply.started":"2024-12-10T15:50:12.604879Z","shell.execute_reply":"2024-12-10T15:50:12.607478Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_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')\nsample = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/sample_submission.csv')\n\ntrain_ts = load_time_series(\"/kaggle/input/child-mind-institute-problematic-internet-use/series_train.parquet\")\ntest_ts = load_time_series(\"/kaggle/input/child-mind-institute-problematic-internet-use/series_test.parquet\")\n\nts_cols = list(set(train_ts.columns) - {'id'})\ntrain_ts_encoded = train_ts\n\ntest_ts_encoded = test_ts\n\n\ntrain = pd.merge(train_df, train_ts_encoded, how=\"left\", on='id')\ntest = pd.merge(test_df, test_ts_encoded, how=\"left\", on='id')\n\ntrain = train.dropna(subset=['sii'])\ntrain_ids = train[\"id\"]\n\n\ncat_c = ['Basic_Demos-Enroll_Season', 'CGAS-Season', 'Physical-Season', \n\n          'Fitness_Endurance-Season', 'FGC-Season', 'BIA-Season', \n\n          'PAQ_A-Season', 'PAQ_C-Season', 'SDS-Season', 'PreInt_EduHx-Season']\n\n\n\ndef update(df):\n\n    global cat_c\n\n    for c in cat_c: \n\n        df[c] = df[c].fillna('Missing')\n\n        df[c] = df[c].astype('category')\n\n    return df\n\n        \n\ntrain = update(train)\n\ntest = update(test)\n\n\n\ndef create_mapping(column, dataset):\n\n    unique_values = dataset[column].unique()\n\n    return {value: idx for idx, value in enumerate(unique_values)}\n\n\n\nfor col in cat_c:\n\n    mapping = create_mapping(col, train)\n\n    mappingTe = create_mapping(col, test)\n\n    \n\n    train[col] = train[col].replace(mapping).astype(int)\n\n    test[col] = test[col].replace(mappingTe).astype(int)\n\n\ndef feature_engineering(df):\n    \n    df['BMI_Age'] = df['Physical-BMI'] * df['Basic_Demos-Age']\n    df['Internet_Hours_Age'] = df['PreInt_EduHx-computerinternet_hoursday'] * df['Basic_Demos-Age']\n    df['BMI_Internet_Hours'] = df['Physical-BMI'] * df['PreInt_EduHx-computerinternet_hoursday']\n    df['BFP_BMI'] = df['BIA-BIA_Fat'] / df['BIA-BIA_BMI']\n    df['FFMI_BFP'] = df['BIA-BIA_FFMI'] / df['BIA-BIA_Fat']\n    df['FMI_BFP'] = df['BIA-BIA_FMI'] / df['BIA-BIA_Fat']\n    df['LST_TBW'] = df['BIA-BIA_LST'] / df['BIA-BIA_TBW']\n    df['BFP_BMR'] = df['BIA-BIA_Fat'] * df['BIA-BIA_BMR']\n    df['BFP_DEE'] = df['BIA-BIA_Fat'] * df['BIA-BIA_DEE']\n    df['BMR_Weight'] = df['BIA-BIA_BMR'] / df['Physical-Weight']\n    df['DEE_Weight'] = df['BIA-BIA_DEE'] / df['Physical-Weight']\n    df['SMM_Height'] = df['BIA-BIA_SMM'] / df['Physical-Height']\n    df['Muscle_to_Fat'] = df['BIA-BIA_SMM'] / df['BIA-BIA_FMI']\n    df['Hydration_Status'] = df['BIA-BIA_TBW'] / df['Physical-Weight']\n    df['ICW_TBW'] = df['BIA-BIA_ICW'] / df['BIA-BIA_TBW']\n    \n    return df\n\ntrain = feature_engineering(train)\n\ntest = feature_engineering(test)\n\n\ntrain_featuresCols = ['Basic_Demos-Age', 'Basic_Demos-Sex',\n                'CGAS-CGAS_Score', 'Physical-BMI',\n                'Physical-Height', 'Physical-Weight', 'Physical-Waist_Circumference',\n                'Physical-Diastolic_BP', 'Physical-HeartRate', 'Physical-Systolic_BP',\n                'Fitness_Endurance-Max_Stage',\n                'Fitness_Endurance-Time_Mins', 'Fitness_Endurance-Time_Sec',\n                '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',\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-PAQ_A_Total',\n                'PAQ_C-PAQ_C_Total', 'SDS-SDS_Total_Raw',\n                'SDS-SDS_Total_T',\n                'PreInt_EduHx-computerinternet_hoursday', 'sii', 'BMI_Age','Internet_Hours_Age','BMI_Internet_Hours',\n                'BFP_BMI', 'FFMI_BFP', 'FMI_BFP', 'LST_TBW', 'BFP_BMR', 'BFP_DEE', 'BMR_Weight', 'DEE_Weight',\n                'SMM_Height', 'Muscle_to_Fat', 'Hydration_Status', 'ICW_TBW']\n\ntrain_featuresCols += cat_c\ntrain_featuresCols += ts_cols\ntrain = train[train_featuresCols]\n\n\ntest_featuresCols = ['Basic_Demos-Age', 'Basic_Demos-Sex',\n                'CGAS-CGAS_Score', 'Physical-BMI',\n                'Physical-Height', 'Physical-Weight', 'Physical-Waist_Circumference',\n                'Physical-Diastolic_BP', 'Physical-HeartRate', 'Physical-Systolic_BP',\n                'Fitness_Endurance-Max_Stage',\n                'Fitness_Endurance-Time_Mins', 'Fitness_Endurance-Time_Sec',\n                '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',\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-PAQ_A_Total',\n                'PAQ_C-PAQ_C_Total', 'SDS-SDS_Total_Raw',\n                'SDS-SDS_Total_T',\n                'PreInt_EduHx-computerinternet_hoursday', 'BMI_Age','Internet_Hours_Age','BMI_Internet_Hours',\n                'BFP_BMI', 'FFMI_BFP', 'FMI_BFP', 'LST_TBW', 'BFP_BMR', 'BFP_DEE', 'BMR_Weight', 'DEE_Weight',\n                'SMM_Height', 'Muscle_to_Fat', 'Hydration_Status', 'ICW_TBW']\n\ntest_featuresCols += cat_c\ntest_featuresCols += ts_cols\ntest = test[test_featuresCols]\nif np.any(np.isinf(train)):\n    train = train.replace([np.inf, -np.inf], np.nan)\n\n\n\n\ncat_params={\n    'task_type'           : \"GPU\",\n    'loss_function'       : 'MultiClassOneVsAll',\n    'classes_count': 4,\n    'eval_metric'         : \"Accuracy\",\n    'auto_class_weights'         : \"Balanced\",\n\n    \n    'bagging_temperature' : 1.2,\n\n\n    \n    'iterations'          : 1_000,\n    'learning_rate'       : 0.035,\n    'max_depth'           : 7,\n    'l2_leaf_reg'         : 10,\n    'min_data_in_leaf'    : 62,\n    'random_strength'     : 0.25,\n    \n    'random_state'        : 42,\n    \n    'early_stopping_rounds': 200,\n    'use_best_model'       : True,\n    'allow_writing_files' : False,\n} \n\n\ntarget = 'sii'\nskfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=42)\nX = train.drop(target, axis=1)\ny = train[target].ravel()\ntest_pool = Pool(test, cat_features=cat_c)\nfeatures = cat_c\noof_preds = []\noof_accs = []\noof_train_preds = np.zeros(len(y))\nfor fold, (train_idx, test_idx) in enumerate(skfold.split(X, y)):\n    X_train, y_train = X.iloc[train_idx], y[train_idx]\n    X_test, y_test = X.iloc[test_idx], y[test_idx]\n    \n    X_train_pool = Pool(X_train, y_train, cat_features=features)\n    X_test_pool = Pool(X_test, y_test, cat_features=features)\n    \n    cat_clf = CatBoostClassifier(**cat_params)\n    cat_clf = cat_clf.fit(X=X_train_pool,\n                          eval_set=X_test_pool,\n                          verbose=100,\n                          early_stopping_rounds=400)\n    oof_train_preds[test_idx] = cat_clf.predict(Pool(X_test, cat_features=features)).reshape(-1)\n    test_pred = cat_clf.predict(test_pool).reshape(-1)\n    oof_preds.append(test_pred)\n    auc = quadratic_weighted_kappa(y_test, oof_train_preds[test_idx])\n    oof_accs.append(auc)\n\n    # break\n    print(f\"\\nFold {fold+1}--> Kappa Score: {auc:.6f}\\n\")\n    \n    del X_train, y_train, X_test, y_test\n    del X_train_pool, X_test_pool\n    del cat_clf\n    gc.collect()\n\nprint(np.mean(oof_accs))\n\n\n\n\ncombined = pd.DataFrame(np.array(oof_preds))\ncombined[\"score\"] = oof_accs\ndel combined['score']\ncombined = combined.T\n\ndef majority_vote(row):\n\n    return row.mode()[0]\n\n\ncombined['sii'] = combined.apply(majority_vote, axis=1)\ncombined['id'] = sample['id']\nSubmission2 = combined[['id', 'sii']] ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-10T15:50:25.736470Z","iopub.execute_input":"2024-12-10T15:50:25.736818Z","iopub.status.idle":"2024-12-10T15:53:15.646006Z","shell.execute_reply.started":"2024-12-10T15:50:25.736787Z","shell.execute_reply":"2024-12-10T15:53:15.645147Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"Submission2","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-10T15:53:33.909733Z","iopub.execute_input":"2024-12-10T15:53:33.910068Z","iopub.status.idle":"2024-12-10T15:53:33.918967Z","shell.execute_reply.started":"2024-12-10T15:53:33.910039Z","shell.execute_reply":"2024-12-10T15:53:33.918011Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# 方案 3","metadata":{}},{"cell_type":"code","source":"train_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')\nsample = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/sample_submission.csv')\n\ndef process_file(filename, dirname):\n    df = pd.read_parquet(os.path.join(dirname, filename, 'part-0.parquet'))\n    df.drop('step', axis=1, inplace=True)\n    return df.describe().values.reshape(-1), filename.split('=')[1]\n\ndef load_time_series(dirname) -> pd.DataFrame:\n    ids = os.listdir(dirname)\n    \n    with ThreadPoolExecutor() as executor:\n        results = list(tqdm(executor.map(lambda fname: process_file(fname, dirname), ids), total=len(ids)))\n    \n    stats, indexes = zip(*results)\n    \n    df = pd.DataFrame(stats, columns=[f\"stat_{i}\" for i in range(len(stats[0]))])\n    df['id'] = indexes\n    return df\ntrain_ts = load_time_series(\"/kaggle/input/child-mind-institute-problematic-internet-use/series_train.parquet\")\ntest_ts = load_time_series(\"/kaggle/input/child-mind-institute-problematic-internet-use/series_test.parquet\")\n\nts_cols = list(set(train_ts.columns) - {'id'})\ntrain_ts_encoded = train_ts\ntest_ts_encoded = test_ts\n\ntrain = pd.merge(train_df, train_ts_encoded, how=\"left\", on='id')\ntest = pd.merge(test_df, test_ts_encoded, how=\"left\", on='id')\n\ntrain = train.dropna(subset=['sii'])\n\ncat_c = ['Basic_Demos-Enroll_Season', 'CGAS-Season', 'Physical-Season', \n\n          'Fitness_Endurance-Season', 'FGC-Season', 'BIA-Season', \n\n          'PAQ_A-Season', 'PAQ_C-Season', 'SDS-Season', 'PreInt_EduHx-Season']\n\n\n\ndef update(df):\n\n    global cat_c\n\n    for c in cat_c: \n\n        df[c] = df[c].fillna('Missing')\n\n        df[c] = df[c].astype('category')\n\n    return df\n\n        \n\ntrain = update(train)\n\ntest = update(test)\n\n\n\ndef create_mapping(column, dataset):\n\n    unique_values = dataset[column].unique()\n\n    return {value: idx for idx, value in enumerate(unique_values)}\n\n\n\nfor col in cat_c:\n\n    mapping = create_mapping(col, train)\n\n    mappingTe = create_mapping(col, test)\n\n    \n\n    train[col] = train[col].replace(mapping).astype(int)\n\n    test[col] = test[col].replace(mappingTe).astype(int)\n\ndef feature_engineering(df):\n    \n    df['BMI_Age'] = df['Physical-BMI'] * df['Basic_Demos-Age']\n    df['Internet_Hours_Age'] = df['PreInt_EduHx-computerinternet_hoursday'] * df['Basic_Demos-Age']\n    df['BMI_Internet_Hours'] = df['Physical-BMI'] * df['PreInt_EduHx-computerinternet_hoursday']\n    df['BFP_BMI'] = df['BIA-BIA_Fat'] / df['BIA-BIA_BMI']\n    df['FFMI_BFP'] = df['BIA-BIA_FFMI'] / df['BIA-BIA_Fat']\n    df['FMI_BFP'] = df['BIA-BIA_FMI'] / df['BIA-BIA_Fat']\n    df['LST_TBW'] = df['BIA-BIA_LST'] / df['BIA-BIA_TBW']\n    df['BFP_BMR'] = df['BIA-BIA_Fat'] * df['BIA-BIA_BMR']\n    df['BFP_DEE'] = df['BIA-BIA_Fat'] * df['BIA-BIA_DEE']\n    df['BMR_Weight'] = df['BIA-BIA_BMR'] / df['Physical-Weight']\n    df['DEE_Weight'] = df['BIA-BIA_DEE'] / df['Physical-Weight']\n    df['SMM_Height'] = df['BIA-BIA_SMM'] / df['Physical-Height']\n    df['Muscle_to_Fat'] = df['BIA-BIA_SMM'] / df['BIA-BIA_FMI']\n    df['Hydration_Status'] = df['BIA-BIA_TBW'] / df['Physical-Weight']\n    df['ICW_TBW'] = df['BIA-BIA_ICW'] / df['BIA-BIA_TBW']\n    \n    return df\n\ntrain = feature_engineering(train)\n\ntest = feature_engineering(test)\n\ntrain_featuresCols = ['Basic_Demos-Age', 'Basic_Demos-Sex',\n                'CGAS-CGAS_Score', 'Physical-BMI',\n                'Physical-Height', 'Physical-Weight', 'Physical-Waist_Circumference',\n                'Physical-Diastolic_BP', 'Physical-HeartRate', 'Physical-Systolic_BP',\n                'Fitness_Endurance-Max_Stage',\n                'Fitness_Endurance-Time_Mins', 'Fitness_Endurance-Time_Sec',\n                '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',\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-PAQ_A_Total',\n                'PAQ_C-PAQ_C_Total', 'SDS-SDS_Total_Raw',\n                'SDS-SDS_Total_T',\n                'PreInt_EduHx-computerinternet_hoursday', 'sii', 'BMI_Age','Internet_Hours_Age','BMI_Internet_Hours',\n                'BFP_BMI', 'FFMI_BFP', 'FMI_BFP', 'LST_TBW', 'BFP_BMR', 'BFP_DEE', 'BMR_Weight', 'DEE_Weight',\n                'SMM_Height', 'Muscle_to_Fat', 'Hydration_Status', 'ICW_TBW']\n\ntrain_featuresCols += cat_c\ntrain_featuresCols += ts_cols\ntrain = train[train_featuresCols]\n\n\ntest_featuresCols = ['Basic_Demos-Age', 'Basic_Demos-Sex',\n                'CGAS-CGAS_Score', 'Physical-BMI',\n                'Physical-Height', 'Physical-Weight', 'Physical-Waist_Circumference',\n                'Physical-Diastolic_BP', 'Physical-HeartRate', 'Physical-Systolic_BP',\n                'Fitness_Endurance-Max_Stage',\n                'Fitness_Endurance-Time_Mins', 'Fitness_Endurance-Time_Sec',\n                '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',\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-PAQ_A_Total',\n                'PAQ_C-PAQ_C_Total', 'SDS-SDS_Total_Raw',\n                'SDS-SDS_Total_T',\n                'PreInt_EduHx-computerinternet_hoursday', 'BMI_Age','Internet_Hours_Age','BMI_Internet_Hours',\n                'BFP_BMI', 'FFMI_BFP', 'FMI_BFP', 'LST_TBW', 'BFP_BMR', 'BFP_DEE', 'BMR_Weight', 'DEE_Weight',\n                'SMM_Height', 'Muscle_to_Fat', 'Hydration_Status', 'ICW_TBW']\n\ntest_featuresCols += cat_c\ntest_featuresCols += ts_cols\ntest = test[test_featuresCols]\n\nif np.any(np.isinf(train)):\n    train = train.replace([np.inf, -np.inf], np.nan)\n\n\nlgb_params={\n    'learning_rate': 0.015,\n    'n_estimators':5000,\n    'max_depth': 12, \n    'num_leaves': 256,\n    'min_data_in_leaf': 14,\n    'feature_fraction': 0.8,\n    'bagging_fraction': 0.75,\n    'bagging_freq': 2, \n    'lambda_l1': 8,\n    'lambda_l2': 5e-06,\n    'verbose':-1,\n    'early_stopping_rounds':500\n    \n} \n\ntarget = 'sii'\nn_splits = 5\nskfold = StratifiedKFold(n_splits=n_splits, shuffle=True, random_state=42)\nX = train.drop(target, axis=1)\ny = train[target].ravel()\ntest_pool = test\n\ntrain_S = []\ntest_S = []\n\noof_preds = []\noof_accs = []\n\n\noof_non_rounded = np.zeros(len(y), dtype=float) \noof_rounded = np.zeros(len(y), dtype=int) \ntest_preds = np.zeros((len(test), n_splits))\nfor fold, (train_idx, test_idx) in enumerate(skfold.split(X, y)):\n    X_train, y_train = X.iloc[train_idx], y[train_idx]\n    X_val, y_val = X.iloc[test_idx], y[test_idx]\n    \n    # X_train_pool = Pool(X_train, y_train, cat_features=features)\n    \n    # X_val_pool = Pool(X_val, y_val, cat_features=features)\n    train_data = lgb.Dataset(X_train, label=y_train)\n    val_data = lgb.Dataset(X_val, label=y_val, reference=train_data)\n    \n    model = LGBMRegressor(**lgb_params)\n    \n    model = model.fit(X_train, y_train, eval_set=[(X_val, y_val)])\n\n    # break\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    \n    y_val_pred_rounded = y_val_pred.round(0).astype(int)\n    \n    oof_rounded[test_idx] = y_val_pred_rounded\n    \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_pool)\n    \n    print(f\"Fold {fold+1} - Train QWK: {train_kappa:.4f}, Validation QWK: {val_kappa:.4f}\")\n\n\nprint(f\"Mean Train QWK --> {np.mean(train_S):.4f}\")\nprint(f\"Mean Validation QWK ---> {np.mean(test_S):.4f}\")\n\nKappaOPtimizer = minimize(evaluate_predictions,\n                          x0=[0.5, 1.5, 2.5], args=(y, oof_non_rounded), \n                          method='Nelder-Mead') # Nelder-Mead | # Powell\nassert KappaOPtimizer.success, \"Optimization did not converge.\"\n\noof_tuned = threshold_Rounder(oof_non_rounded, KappaOPtimizer.x)\ntKappa = quadratic_weighted_kappa(y, oof_tuned)\n\nprint(f\"----> || Optimized QWK SCORE :: {Fore.CYAN}{Style.BRIGHT} {tKappa:.3f}{Style.RESET_ALL}\")\n\ntpm = test_preds.mean(axis=1)\ntpTuned = threshold_Rounder(tpm, KappaOPtimizer.x)\n\nSubmission3 = pd.DataFrame({\n    'id': sample['id'],\n    'sii': tpTuned\n})\nSubmission3","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-10T15:53:51.545587Z","iopub.execute_input":"2024-12-10T15:53:51.546121Z","iopub.status.idle":"2024-12-10T15:55:18.894656Z","shell.execute_reply.started":"2024-12-10T15:53:51.546086Z","shell.execute_reply":"2024-12-10T15:55:18.893859Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# 方案4","metadata":{}},{"cell_type":"code","source":"n_splits = 5\ntrain = 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\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\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']\n\ntrain_ts = load_time_series(\"/kaggle/input/child-mind-institute-problematic-internet-use/series_train.parquet\")\ntest_ts = load_time_series(\"/kaggle/input/child-mind-institute-problematic-internet-use/series_test.parquet\")\n\ntime_series_cols = train_ts.columns.tolist()\ntime_series_cols.remove(\"id\")\n\ntrain = pd.merge(train, train_ts, how=\"left\", on='id')\ntest = pd.merge(test, test_ts, how=\"left\", on='id')\n\ntrain = train.drop('id', axis=1)\ntest = test.drop('id', axis=1)\n\nfeaturesCols += time_series_cols\n\ntrain = train[featuresCols]\ntrain = train.dropna(subset='sii')\n\ndef 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)\n\ndef 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    tp_rounded = threshold_Rounder(tpm, KappaOPtimizer.x)\n\n    return tp_rounded\n\nimputer = SimpleImputer(strategy='median')\n\nensemble = VotingRegressor(estimators=[\n    ('lgb', Pipeline(steps=[('imputer', imputer), ('regressor', LGBMRegressor(random_state=SEED))])),\n    ('xgb', Pipeline(steps=[('imputer', imputer), ('regressor', XGBRegressor(random_state=SEED))])),\n    ('cat', Pipeline(steps=[('imputer', imputer), ('regressor', CatBoostRegressor(random_state=SEED, silent=True))])),\n    ('rf', Pipeline(steps=[('imputer', imputer), ('regressor', RandomForestRegressor(random_state=SEED))])),\n    ('gb', Pipeline(steps=[('imputer', imputer), ('regressor', GradientBoostingRegressor(random_state=SEED))]))\n])\n\nSubmission4 = TrainML(ensemble, test)\nSubmission4 = pd.DataFrame({\n    'id': sample['id'],\n    'sii': Submission4\n})\n\nSubmission4","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-10T15:55:31.577978Z","iopub.execute_input":"2024-12-10T15:55:31.578789Z","iopub.status.idle":"2024-12-10T15:58:42.225502Z","shell.execute_reply.started":"2024-12-10T15:55:31.578754Z","shell.execute_reply":"2024-12-10T15:58:42.224665Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# 方案5","metadata":{}},{"cell_type":"code","source":"n_splits = 5\ntrain = 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\ndef process_file(filename, dirname):\n    df = pd.read_parquet(os.path.join(dirname, filename, 'part-0.parquet'))\n    df.drop('step', axis=1, inplace=True)\n    return df.describe().values.reshape(-1), filename.split('=')[1]\n\ndef load_time_series(dirname) -> pd.DataFrame:\n    ids = os.listdir(dirname)\n    \n    with ThreadPoolExecutor() as executor:\n        results = list(tqdm(executor.map(lambda fname: process_file(fname, dirname), ids), total=len(ids)))\n    \n    stats, indexes = zip(*results)\n    \n    df = pd.DataFrame(stats, columns=[f\"stat_{i}\" for i in range(len(stats[0]))])\n    df['id'] = indexes\n    return df\n        \ntrain_ts = load_time_series(\"/kaggle/input/child-mind-institute-problematic-internet-use/series_train.parquet\")\ntest_ts = load_time_series(\"/kaggle/input/child-mind-institute-problematic-internet-use/series_test.parquet\")\n\ntime_series_cols = train_ts.columns.tolist()\ntime_series_cols.remove(\"id\")\n\ntrain = pd.merge(train, train_ts, how=\"left\", on='id')\ntest = pd.merge(test, test_ts, how=\"left\", on='id')\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\nfeaturesCols += time_series_cols\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']\n\ndef 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)\n\ndef 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\n\n# Model parameters for LightGBM\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,  # Increased from 6.59\n    'lambda_l2': 0.01  # Increased from 2.68e-06\n}\n\n\n# XGBoost parameters\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': 1,  # Increased from 0.1\n    'reg_lambda': 5,  # Increased from 1\n    'random_state': SEED\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# 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\n# Combine models using Voting Regressor\nvoting_model = VotingRegressor(estimators=[\n    ('lightgbm', Light),\n    ('xgboost', XGB_Model),\n    ('catboost', CatBoost_Model)\n])\n\n# Train the ensemble model\nSubmission5 = TrainML(voting_model, test)\n\n\nSubmission5","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-10T15:59:07.733756Z","iopub.execute_input":"2024-12-10T15:59:07.734065Z","iopub.status.idle":"2024-12-10T16:01:08.076088Z","shell.execute_reply.started":"2024-12-10T15:59:07.734038Z","shell.execute_reply":"2024-12-10T16:01:08.075253Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# 方案融合","metadata":{}},{"cell_type":"code","source":"sub1 = Submission1 # 0.4095\nsub2 = Submission2 # 0.415\nsub3 = Submission3 #  0.388 \nsub4 = Submission4 #  0.3803\nsub5 = Submission5  # 0.3926\nsub6 = Submission2_1 # 0.3903\n\nsub_list = [sub1, sub2,sub3, sub4,sub5,sub6]\nweights = [3,2,1,2,2,1]\n\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-10T16:10:53.251702Z","iopub.execute_input":"2024-12-10T16:10:53.252035Z","iopub.status.idle":"2024-12-10T16:10:53.257552Z","shell.execute_reply.started":"2024-12-10T16:10:53.252004Z","shell.execute_reply":"2024-12-10T16:10:53.256637Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def merge_ret(sub_list, weights):\n    ret = []\n    for i in range(len(sub_list)):\n        w = weights[i]\n        df = sub_list[i]\n        for _ in range(w):\n            ret.append(df['sii'].values)\n    return ret \n\n\n\nr = merge_ret(sub_list, weights)\n\n\n    \n    ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-10T16:10:23.325816Z","iopub.execute_input":"2024-12-10T16:10:23.326152Z","iopub.status.idle":"2024-12-10T16:10:23.331038Z","shell.execute_reply.started":"2024-12-10T16:10:23.326124Z","shell.execute_reply":"2024-12-10T16:10:23.330203Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"combined = pd.DataFrame(np.array(r))\n# combined[\"score\"] = oof_accs\n# del combined['score']\ncombined = combined.T\n\ndef majority_vote(row):\n\n    return row.mode()[0]\n\n\ncombined['sii'] = combined.apply(majority_vote, axis=1)\ncombined['id'] = sample['id']\nfinal_submission = combined[['id', 'sii']] \nfinal_submission.to_csv('submission.csv', index=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-10T16:15:30.309971Z","iopub.execute_input":"2024-12-10T16:15:30.310317Z","iopub.status.idle":"2024-12-10T16:15:30.323962Z","shell.execute_reply.started":"2024-12-10T16:15:30.310286Z","shell.execute_reply":"2024-12-10T16:15:30.323134Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"combined","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-10T16:13:51.376419Z","iopub.execute_input":"2024-12-10T16:13:51.376767Z","iopub.status.idle":"2024-12-10T16:13:51.388968Z","shell.execute_reply.started":"2024-12-10T16:13:51.376736Z","shell.execute_reply":"2024-12-10T16:13:51.387943Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# final_submission","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-06T10:51:57.347895Z","iopub.execute_input":"2024-12-06T10:51:57.348713Z","iopub.status.idle":"2024-12-06T10:51:57.357175Z","shell.execute_reply.started":"2024-12-06T10:51:57.348674Z","shell.execute_reply":"2024-12-06T10:51:57.356364Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(final_submission)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-10T16:15:45.837563Z","iopub.execute_input":"2024-12-10T16:15:45.837931Z","iopub.status.idle":"2024-12-10T16:15:45.843995Z","shell.execute_reply.started":"2024-12-10T16:15:45.837901Z","shell.execute_reply":"2024-12-10T16:15:45.843116Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}