{"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 \n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:33.883017Z","iopub.execute_input":"2024-12-16T10:34:33.883341Z","iopub.status.idle":"2024-12-16T10:34:33.886845Z","shell.execute_reply.started":"2024-12-16T10:34:33.883312Z","shell.execute_reply":"2024-12-16T10:34:33.886206Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_data = pd.read_csv(\"/kaggle/input/child-mind-institute-problematic-internet-use/train.csv\")\ntest_data = pd.read_csv(\"/kaggle/input/child-mind-institute-problematic-internet-use/test.csv\")\ntrain_data.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:33.894465Z","iopub.execute_input":"2024-12-16T10:34:33.894824Z","iopub.status.idle":"2024-12-16T10:34:33.941454Z","shell.execute_reply.started":"2024-12-16T10:34:33.894800Z","shell.execute_reply":"2024-12-16T10:34:33.940244Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_data.describe().transpose()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:33.943175Z","iopub.execute_input":"2024-12-16T10:34:33.943485Z","iopub.status.idle":"2024-12-16T10:34:34.048967Z","shell.execute_reply.started":"2024-12-16T10:34:33.943453Z","shell.execute_reply":"2024-12-16T10:34:34.048206Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_data.info()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:34.050074Z","iopub.execute_input":"2024-12-16T10:34:34.050303Z","iopub.status.idle":"2024-12-16T10:34:34.063915Z","shell.execute_reply.started":"2024-12-16T10:34:34.050280Z","shell.execute_reply":"2024-12-16T10:34:34.063146Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_data['sii'].value_counts()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:34.065723Z","iopub.execute_input":"2024-12-16T10:34:34.065947Z","iopub.status.idle":"2024-12-16T10:34:34.071917Z","shell.execute_reply.started":"2024-12-16T10:34:34.065924Z","shell.execute_reply":"2024-12-16T10:34:34.071248Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport matplotlib.pyplot as plt\nfrom sklearn.preprocessing import LabelEncoder\n\nfrom sklearn.model_selection import StratifiedKFold\nfrom tqdm import tqdm\nfrom sklearn.metrics import cohen_kappa_score\nimport lightgbm as lgb\nfrom xgboost import XGBRegressor\nfrom catboost import CatBoostRegressor\nfrom sklearn.ensemble import VotingRegressor, StackingRegressor\nfrom sklearn.linear_model import RidgeCV\nfrom sklearn.base import BaseEstimator, RegressorMixin\nimport torch\nimport warnings\nwarnings.simplefilter(\"ignore\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:34.072900Z","iopub.execute_input":"2024-12-16T10:34:34.073114Z","iopub.status.idle":"2024-12-16T10:34:34.083022Z","shell.execute_reply.started":"2024-12-16T10:34:34.073093Z","shell.execute_reply":"2024-12-16T10:34:34.081462Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_columns = set(train_data.columns)\ntest_columns = set(test_data.columns)\n\ncommon_columns = train_columns.intersection(test_columns)\nprint(\"Common columns:\", common_columns)\n\ntrain_only_columns = train_columns.difference(test_columns)\nprint(\"Columns only in train:\", train_only_columns)\n\ntest_only_columns = test_columns.difference(train_columns)\nprint(\"Columns only in test:\", test_only_columns)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:34.083949Z","iopub.execute_input":"2024-12-16T10:34:34.084189Z","iopub.status.idle":"2024-12-16T10:34:34.098897Z","shell.execute_reply.started":"2024-12-16T10:34:34.084167Z","shell.execute_reply":"2024-12-16T10:34:34.097950Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"missing_common = {col: train_data[col].isnull().sum() for col in common_columns}\nprint(\"Missing values in common columns:\")\nprint(missing_common)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:34.099894Z","iopub.execute_input":"2024-12-16T10:34:34.100164Z","iopub.status.idle":"2024-12-16T10:34:34.119629Z","shell.execute_reply.started":"2024-12-16T10:34:34.100141Z","shell.execute_reply":"2024-12-16T10:34:34.118858Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"missing_train = {col: train_data[col].isnull().sum() for col in common_columns}\nmissing_test = {col: test_data[col].isnull().sum() for col in common_columns}\n\ntotal_train = train_data.shape[0]\ntotal_test = test_data.shape[0]\n\nmissing_train_ratio = {col: missing_train[col] / total_train for col in common_columns}\nmissing_test_ratio = {col: missing_test[col] / total_test for col in common_columns}\n\nbar_width = 0.4\n\nplt.figure(figsize=(16, 10))\nindex = range(len(common_columns))\n\nplt.barh(index, list(missing_train_ratio.values()), color='skyblue', height=bar_width, label='Train', alpha=0.7)\n\nplt.barh([i + bar_width for i in index], list(missing_test_ratio.values()), color='lightcoral', height=bar_width, label='Test', alpha=0.7)\n\nplt.xlabel('Proportion of Missing Values')\nplt.title('Proportion of Missing Values in Common Columns')\nplt.yticks([i + bar_width / 2 for i in index], list(missing_train.keys()))\nplt.legend()\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:34.122506Z","iopub.execute_input":"2024-12-16T10:34:34.122817Z","iopub.status.idle":"2024-12-16T10:34:35.039511Z","shell.execute_reply.started":"2024-12-16T10:34:34.122793Z","shell.execute_reply":"2024-12-16T10:34:35.038431Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"missing_train_only = {col: train_data[col].isnull().sum() for col in train_only_columns}\nprint(\"\\nMissing values in columns only in train:\")\nprint(missing_train_only)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:35.040630Z","iopub.execute_input":"2024-12-16T10:34:35.040958Z","iopub.status.idle":"2024-12-16T10:34:35.049480Z","shell.execute_reply.started":"2024-12-16T10:34:35.040928Z","shell.execute_reply":"2024-12-16T10:34:35.048510Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"missing_train_only = {col: train_data[col].isnull().sum() for col in train_only_columns}\nmissing_train_only_ratio = {col: missing_train_only[col] / total_train for col in train_only_columns}\n\nplt.figure(figsize=(16, 10))\nplt.barh(list(missing_train_only_ratio.keys()), list(missing_train_only_ratio.values()), color='lightcoral')\nplt.xlabel('Proportion of Missing Values')\nplt.title('Proportion of Missing Values in Columns Only in Train')\nplt.xticks(rotation=45)\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:35.053242Z","iopub.execute_input":"2024-12-16T10:34:35.053958Z","iopub.status.idle":"2024-12-16T10:34:35.363401Z","shell.execute_reply.started":"2024-12-16T10:34:35.053924Z","shell.execute_reply":"2024-12-16T10:34:35.362396Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"non_numeric_columns = train_data.select_dtypes(exclude=['number']).columns\n\nprint(\"Non-numeric columns in train:\")\nprint(non_numeric_columns.tolist())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:35.364298Z","iopub.execute_input":"2024-12-16T10:34:35.364589Z","iopub.status.idle":"2024-12-16T10:34:35.370214Z","shell.execute_reply.started":"2024-12-16T10:34:35.364565Z","shell.execute_reply":"2024-12-16T10:34:35.369495Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def data_process(data, is_train=True):\n    # Common column\n    selected_columns = [\n        'id', 'PreInt_EduHx-Season', 'FGC-FGC_SRL_Zone', 'BIA-BIA_FFMI', \n        'Fitness_Endurance-Time_Sec', 'Fitness_Endurance-Time_Mins', \n        'BIA-BIA_ECW', 'FGC-FGC_SRR', 'BIA-Season', \n        'PAQ_C-PAQ_C_Total', 'FGC-FGC_TL_Zone', 'Physical-HeartRate', \n        'BIA-BIA_Fat', 'Fitness_Endurance-Max_Stage', 'Basic_Demos-Enroll_Season', \n        'PreInt_EduHx-computerinternet_hoursday', 'FGC-FGC_PU', 'BIA-BIA_TBW', \n        'BIA-BIA_BMR', 'BIA-BIA_BMC', 'Physical-Diastolic_BP', \n        'Physical-Weight', 'FGC-FGC_GSND_Zone', 'Physical-Systolic_BP', \n        'BIA-BIA_Activity_Level_num', 'PAQ_A-Season', 'SDS-SDS_Total_Raw', \n        'Physical-BMI', 'Basic_Demos-Sex', 'SDS-SDS_Total_T', 'FGC-FGC_GSD', \n        'FGC-FGC_CU', 'PAQ_A-PAQ_A_Total', 'FGC-FGC_GSD_Zone', \n        'Fitness_Endurance-Season', 'FGC-FGC_GSND', 'FGC-FGC_PU_Zone', \n        'BIA-BIA_ICW', 'FGC-Season', 'FGC-FGC_SRL', 'Physical-Waist_Circumference', \n        'BIA-BIA_Frame_num', 'FGC-FGC_SRR_Zone', 'Physical-Height', \n        'Physical-Season', 'BIA-BIA_FMI', 'PAQ_C-Season', 'FGC-FGC_CU_Zone', \n        'BIA-BIA_SMM', 'CGAS-Season', 'SDS-Season', 'BIA-BIA_BMI', \n        'FGC-FGC_TL', 'BIA-BIA_LST', 'Basic_Demos-Age', 'BIA-BIA_LDM', \n        'BIA-BIA_DEE', 'CGAS-CGAS_Score', 'BIA-BIA_FFM'\n    ]\n\n    # If it is training data, add the target column 'sii'\n    if is_train:\n        selected_columns.append('PCIAT-PCIAT_Total') #sii\n\n    data = data[selected_columns]\n\n    # LabelEncoder\n    label_encoders = {}\n    for col in data.select_dtypes(include=['object', 'category']).columns:\n        le = LabelEncoder()\n        data[col] = le.fit_transform(data[col].astype(str))  \n        label_encoders[col] = le  \n\n    if is_train:\n        # Handle missing values: Delete columns or rows proportionally\n        missing_threshold = 0.5\n        for col in data.columns:\n            missing_ratio = data[col].isnull().mean()\n            if missing_ratio > missing_threshold:\n                # Columns with more than 50% of missing values are deleted\n                data.drop(columns=[col], inplace=True)\n\n        # Delete the remaining rows with missing values\n        data.dropna(inplace=True)\n    else:\n        # Fill in missing values in the test data\n        for col in data.columns:\n            if data[col].isnull().any():\n                if data[col].dtype in ['float64', 'int64']:\n                    # The numerical columns are filled with the mean\n                    data[col].fillna(data[col].mean(), inplace=True)\n                else:\n                    # Categorical columns are populated with the most frequent values\n                    data[col].fillna(data[col].mode()[0], inplace=True)\n\n\n    return data","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:35.371091Z","iopub.execute_input":"2024-12-16T10:34:35.371314Z","iopub.status.idle":"2024-12-16T10:34:35.382924Z","shell.execute_reply.started":"2024-12-16T10:34:35.371289Z","shell.execute_reply":"2024-12-16T10:34:35.382155Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"processed_train = data_process(train_data, True)\nprocessed_test = data_process(test_data, False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:35.386345Z","iopub.execute_input":"2024-12-16T10:34:35.386649Z","iopub.status.idle":"2024-12-16T10:34:35.450062Z","shell.execute_reply.started":"2024-12-16T10:34:35.386619Z","shell.execute_reply":"2024-12-16T10:34:35.448897Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(\"Train shape:\", processed_train.shape)\nprint(\"Test shape:\", processed_test.shape)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:35.451466Z","iopub.execute_input":"2024-12-16T10:34:35.451737Z","iopub.status.idle":"2024-12-16T10:34:35.456829Z","shell.execute_reply.started":"2024-12-16T10:34:35.451715Z","shell.execute_reply":"2024-12-16T10:34:35.455841Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"target = processed_train[\"PCIAT-PCIAT_Total\"] #sii","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:35.457813Z","iopub.execute_input":"2024-12-16T10:34:35.458058Z","iopub.status.idle":"2024-12-16T10:34:35.470474Z","shell.execute_reply.started":"2024-12-16T10:34:35.458033Z","shell.execute_reply":"2024-12-16T10:34:35.469599Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_columns = set(processed_train.columns)\ntest_columns = set(processed_test.columns)\n\ncommon_columns = train_columns.intersection(test_columns)\nprint(\"Common columns:\", common_columns)\n\nprocessed_test_data = processed_test[list(common_columns)]\n\nprocessed_train_data = processed_train[list(common_columns)]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:35.471401Z","iopub.execute_input":"2024-12-16T10:34:35.471645Z","iopub.status.idle":"2024-12-16T10:34:35.483999Z","shell.execute_reply.started":"2024-12-16T10:34:35.471621Z","shell.execute_reply":"2024-12-16T10:34:35.482931Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(\"Train shape:\", processed_train_data.shape)\nprint(\"Test shape:\", processed_test_data.shape)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:35.484860Z","iopub.execute_input":"2024-12-16T10:34:35.485063Z","iopub.status.idle":"2024-12-16T10:34:35.495355Z","shell.execute_reply.started":"2024-12-16T10:34:35.485042Z","shell.execute_reply":"2024-12-16T10:34:35.494371Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X_train = processed_train_data.drop(columns=[\"id\"])\nX_test = processed_test_data.drop(columns=[\"id\"])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:35.496392Z","iopub.execute_input":"2024-12-16T10:34:35.496622Z","iopub.status.idle":"2024-12-16T10:34:35.512378Z","shell.execute_reply.started":"2024-12-16T10:34:35.496600Z","shell.execute_reply":"2024-12-16T10:34:35.511153Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def convert(scores):\n    scores =np.array(scores)*1.3\n    bins =np.zeros_like(scores)\n    bins[scores<=30]=0\n    bins[(scores>30)&(scores<50)]=1\n    bins[(scores >=50)&(scores <80)]=2\n    bins[scores>=80]=3\n    return bins\n\ndef quadratic_weighted_kappa(y_true,y_pred):\n    y_true_cat = convert(y_true)\n    y_pred_cat = convert(y_pred)\n    return cohen_kappa_score(y_true_cat, y_pred_cat, weights='quadratic')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:35.513877Z","iopub.execute_input":"2024-12-16T10:34:35.514180Z","iopub.status.idle":"2024-12-16T10:34:35.524948Z","shell.execute_reply.started":"2024-12-16T10:34:35.514154Z","shell.execute_reply":"2024-12-16T10:34:35.523757Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def train_folds(model_class, X, y, test_data, n_splits=5, params=None):\n    skf = StratifiedKFold(n_splits=n_splits, shuffle=True, random_state=42)\n    \n    oof_non_rounded = np.zeros(len(y))\n    test_preds = np.zeros((len(test_data), n_splits))\n    val_kappas = []  # Store QWK for each fold\n    \n    for fold, (train_idx, val_idx) in enumerate(tqdm(skf.split(X, y), total=n_splits, desc=\"Training Folds\")):\n        X_train, X_val = X.iloc[train_idx], X.iloc[val_idx]\n        y_train, y_val = y.iloc[train_idx], y.iloc[val_idx]\n        \n        model = model_class(**params) if params else model_class()\n        model.fit(X_train, y_train)\n        \n        # Predict validation\n        y_val_pred = model.predict(X_val)\n        oof_non_rounded[val_idx] = y_val_pred\n        \n        # Round validation predictions\n        y_val_pred_rounded = y_val_pred.round(0).astype(int)\n        \n        # Compute QWK for validation data\n        val_kappa = quadratic_weighted_kappa(y_val, y_val_pred)\n        val_kappas.append(val_kappa)\n        print(f\"Fold {fold+1} - Validation QWK: {val_kappa:.4f}\")\n        \n        # Predict test\n        test_preds[:, fold] = model.predict(test_data)\n    \n    # Average test predictions across folds\n    test_preds_mean = test_preds.mean(axis=1)\n    \n    # Print mean QWK score across all folds\n    mean_kappa = np.mean(val_kappas)\n    print(f\"Mean Validation QWK across folds: {mean_kappa:.4f}\")\n    \n    return test_preds_mean","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:35.526107Z","iopub.execute_input":"2024-12-16T10:34:35.526353Z","iopub.status.idle":"2024-12-16T10:34:35.535269Z","shell.execute_reply.started":"2024-12-16T10:34:35.526329Z","shell.execute_reply":"2024-12-16T10:34:35.534211Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"params = {\n    'learning_rate': 0.03,\n    'n_estimators': 200,\n    'num_leaves': 80,\n    'max_depth': 5,\n    'min_child_samples': 50,\n    'subsample': 0.8,\n    'colsample_bytree': 0.5,\n    'reg_alpha': 3,\n    'reg_lambda': 0.01,\n    'verbosity': -1\n}\ncatboost_params = {\n    'iterations': 804,\n    'learning_rate': 0.007,\n    'depth': 5,\n    'l2_leaf_reg': 7,\n    'subsample': 0.56,\n    'random_strength': 1.7,\n    'verbose': False\n}\n\nxgb_params = {\n    'learning_rate': 0.073,\n    'n_estimators': 59,\n    'max_depth': 3,\n    'min_child_weight': 50,\n    'subsample': 0.59,\n    'colsample_bytree': 0.912,\n    'alpha': 3,\n    'lambda': 0.01,\n    'verbosity': 0\n}","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:35.536340Z","iopub.execute_input":"2024-12-16T10:34:35.536580Z","iopub.status.idle":"2024-12-16T10:34:35.550621Z","shell.execute_reply.started":"2024-12-16T10:34:35.536555Z","shell.execute_reply":"2024-12-16T10:34:35.549130Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"lgb_model = lgb.LGBMRegressor(**params)\ncat_model = CatBoostRegressor(**catboost_params)\nxgb_model = XGBRegressor(**xgb_params)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:35.552083Z","iopub.execute_input":"2024-12-16T10:34:35.552401Z","iopub.status.idle":"2024-12-16T10:34:35.565866Z","shell.execute_reply.started":"2024-12-16T10:34:35.552374Z","shell.execute_reply":"2024-12-16T10:34:35.565143Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"voting_ensemble = VotingRegressor(\n    estimators=[\n        ('lgb', lgb_model),\n        ('cat', cat_model),\n        ('xgb', xgb_model)\n    ],\n    weights=[1, 1, 1]  # Equal weights for all models\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:35.567037Z","iopub.execute_input":"2024-12-16T10:34:35.567283Z","iopub.status.idle":"2024-12-16T10:34:35.575698Z","shell.execute_reply.started":"2024-12-16T10:34:35.567260Z","shell.execute_reply":"2024-12-16T10:34:35.574793Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"stacking_ensemble = StackingRegressor(\n    estimators=[\n        ('lgb', lgb_model),\n        ('cat', cat_model),\n        ('xgb', xgb_model)\n    ],\n    final_estimator=RidgeCV(),\n    cv=5\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:35.576707Z","iopub.execute_input":"2024-12-16T10:34:35.576982Z","iopub.status.idle":"2024-12-16T10:34:35.588745Z","shell.execute_reply.started":"2024-12-16T10:34:35.576956Z","shell.execute_reply":"2024-12-16T10:34:35.587959Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def train_folds_ensemble(ensemble_model, X, y, test_data, n_splits=5):\n    skf = StratifiedKFold(n_splits=n_splits, shuffle=True, random_state=42)\n    test_preds = np.zeros((len(test_data), n_splits))\n    val_kappas = []\n\n    for fold, (train_idx, val_idx) in enumerate(tqdm(skf.split(X, convert(y)), total=n_splits, desc=\"Training Folds\")):\n        X_train, X_val = X.iloc[train_idx], X.iloc[val_idx]\n        y_train, y_val = y.iloc[train_idx], y.iloc[val_idx]\n\n        # Fit ensemble\n        ensemble_model.fit(X_train, y_train)\n\n        # Predict validation\n        y_val_pred = ensemble_model.predict(X_val)\n\n        # Compute QWK for validation data\n        val_kappa = quadratic_weighted_kappa(y_val, y_val_pred)\n        val_kappas.append(val_kappa)\n        print(f\"Fold {fold+1} - Validation QWK: {val_kappa:.4f}\")\n\n        # Predict test\n        test_preds[:, fold] = ensemble_model.predict(test_data)\n\n    # Average test predictions across folds\n    test_preds_mean = test_preds.mean(axis=1)\n    print(f\"Mean Validation QWK across folds: {np.mean(val_kappas):.4f}\")\n\n    return test_preds_mean","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:35.589641Z","iopub.execute_input":"2024-12-16T10:34:35.589891Z","iopub.status.idle":"2024-12-16T10:34:35.599579Z","shell.execute_reply.started":"2024-12-16T10:34:35.589869Z","shell.execute_reply":"2024-12-16T10:34:35.598542Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"pred_ensemble = train_folds_ensemble(stacking_ensemble, X_train, target, X_test, n_splits=5)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:34:35.600917Z","iopub.execute_input":"2024-12-16T10:34:35.601243Z","iopub.status.idle":"2024-12-16T10:35:11.749263Z","shell.execute_reply.started":"2024-12-16T10:34:35.601214Z","shell.execute_reply":"2024-12-16T10:35:11.748334Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"pred_ensemble","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:35:11.750373Z","iopub.execute_input":"2024-12-16T10:35:11.750618Z","iopub.status.idle":"2024-12-16T10:35:11.756442Z","shell.execute_reply.started":"2024-12-16T10:35:11.750592Z","shell.execute_reply":"2024-12-16T10:35:11.755597Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"test_ids = test_data[\"id\"]\ntest_ids","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:35:11.759290Z","iopub.execute_input":"2024-12-16T10:35:11.759571Z","iopub.status.idle":"2024-12-16T10:35:11.769773Z","shell.execute_reply.started":"2024-12-16T10:35:11.759547Z","shell.execute_reply":"2024-12-16T10:35:11.768542Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission = pd.DataFrame({\n    'id': test_ids.values,\n    'sii': convert(pred_ensemble)\n})\nsubmission.to_csv('submission.csv',index=False)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:35:11.770814Z","iopub.execute_input":"2024-12-16T10:35:11.771052Z","iopub.status.idle":"2024-12-16T10:35:11.783570Z","shell.execute_reply.started":"2024-12-16T10:35:11.771028Z","shell.execute_reply":"2024-12-16T10:35:11.782751Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T10:35:11.784509Z","iopub.execute_input":"2024-12-16T10:35:11.784739Z","iopub.status.idle":"2024-12-16T10:35:11.800261Z","shell.execute_reply.started":"2024-12-16T10:35:11.784713Z","shell.execute_reply":"2024-12-16T10:35:11.799197Z"}},"outputs":[],"execution_count":null}]}