{"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.10.14"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":81933,"databundleVersionId":9643020,"sourceType":"competition"}],"dockerImageVersionId":30805,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true},"papermill":{"default_parameters":{},"duration":10.341205,"end_time":"2024-12-10T01:58:20.682855","environment_variables":{},"exception":null,"input_path":"__notebook__.ipynb","output_path":"__notebook__.ipynb","parameters":{},"start_time":"2024-12-10T01:58:10.341650","version":"2.6.0"}},"nbformat_minor":4,"nbformat":4,"cells":[{"id":"7b7c58fc","cell_type":"markdown","source":"## Import required libraries","metadata":{"papermill":{"duration":0.008809,"end_time":"2024-12-10T01:58:13.138366","exception":false,"start_time":"2024-12-10T01:58:13.129557","status":"completed"},"tags":[]}},{"id":"a3236cae","cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.ensemble import RandomForestClassifier","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","execution":{"iopub.status.busy":"2024-12-11T18:52:45.102965Z","iopub.execute_input":"2024-12-11T18:52:45.103310Z","iopub.status.idle":"2024-12-11T18:52:46.347756Z","shell.execute_reply.started":"2024-12-11T18:52:45.103268Z","shell.execute_reply":"2024-12-11T18:52:46.346878Z"},"papermill":{"duration":2.562354,"end_time":"2024-12-10T01:58:15.710472","exception":false,"start_time":"2024-12-10T01:58:13.148118","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"a893e1aa","cell_type":"markdown","source":"## Read the CSV file","metadata":{"papermill":{"duration":0.006828,"end_time":"2024-12-10T01:58:15.725852","exception":false,"start_time":"2024-12-10T01:58:15.719024","status":"completed"},"tags":[]}},{"id":"90ac9ea2","cell_type":"code","source":"train_data = pd.read_csv(\"/kaggle/input/child-mind-institute-problematic-internet-use/train.csv\", index_col=\"id\")\ntest_data = pd.read_csv(\"/kaggle/input/child-mind-institute-problematic-internet-use/test.csv\", index_col=\"id\")","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:52:46.348875Z","iopub.execute_input":"2024-12-11T18:52:46.349247Z","iopub.status.idle":"2024-12-11T18:52:46.423689Z","shell.execute_reply.started":"2024-12-11T18:52:46.349214Z","shell.execute_reply":"2024-12-11T18:52:46.422873Z"},"papermill":{"duration":0.104404,"end_time":"2024-12-10T01:58:15.837312","exception":false,"start_time":"2024-12-10T01:58:15.732908","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"cd225903","cell_type":"code","source":"train_df = train_data.copy()\ntest_df = test_data.copy()","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:52:46.424777Z","iopub.execute_input":"2024-12-11T18:52:46.425069Z","iopub.status.idle":"2024-12-11T18:52:46.430415Z","shell.execute_reply.started":"2024-12-11T18:52:46.425043Z","shell.execute_reply":"2024-12-11T18:52:46.429519Z"},"papermill":{"duration":0.016906,"end_time":"2024-12-10T01:58:15.861565","exception":false,"start_time":"2024-12-10T01:58:15.844659","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"1633aa4e","cell_type":"markdown","source":"## Handle missing output sample","metadata":{"papermill":{"duration":0.007195,"end_time":"2024-12-10T01:58:15.876468","exception":false,"start_time":"2024-12-10T01:58:15.869273","status":"completed"},"tags":[]}},{"id":"6286ac40","cell_type":"code","source":"#Remove sample which not have sii\ntrain_df = train_df.dropna(subset=['sii'])","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:52:46.431549Z","iopub.execute_input":"2024-12-11T18:52:46.431864Z","iopub.status.idle":"2024-12-11T18:52:46.445538Z","shell.execute_reply.started":"2024-12-11T18:52:46.431805Z","shell.execute_reply":"2024-12-11T18:52:46.444649Z"},"papermill":{"duration":0.02516,"end_time":"2024-12-10T01:58:15.908962","exception":false,"start_time":"2024-12-10T01:58:15.883802","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"9bee153c","cell_type":"markdown","source":"## One-hot encoding process","metadata":{"papermill":{"duration":0.007029,"end_time":"2024-12-10T01:58:15.923360","exception":false,"start_time":"2024-12-10T01:58:15.916331","status":"completed"},"tags":[]}},{"id":"9dc80763","cell_type":"code","source":"train_df.head(20)","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:52:46.448988Z","iopub.execute_input":"2024-12-11T18:52:46.449256Z","iopub.status.idle":"2024-12-11T18:52:46.492729Z","shell.execute_reply.started":"2024-12-11T18:52:46.449233Z","shell.execute_reply":"2024-12-11T18:52:46.491732Z"},"papermill":{"duration":0.059793,"end_time":"2024-12-10T01:58:15.990585","exception":false,"start_time":"2024-12-10T01:58:15.930792","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"572a2c7a","cell_type":"code","source":"threshold = 0.5\nmissing_ratio = train_df.isnull().mean()\ndropped_columns = missing_ratio[missing_ratio > threshold].index.tolist()\n\ntrain_df.drop(columns=dropped_columns, inplace=True)\ntrain_df.drop(columns=[col for col in train_df if 'PCIAT' in col], inplace=True)\n\ntest_df.drop(columns=dropped_columns, inplace=True)","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:52:46.493871Z","iopub.execute_input":"2024-12-11T18:52:46.494137Z","iopub.status.idle":"2024-12-11T18:52:46.505012Z","shell.execute_reply.started":"2024-12-11T18:52:46.494112Z","shell.execute_reply":"2024-12-11T18:52:46.504138Z"},"papermill":{"duration":0.026219,"end_time":"2024-12-10T01:58:16.025016","exception":false,"start_time":"2024-12-10T01:58:15.998797","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"daf07cf1","cell_type":"code","source":"train_df.info()","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:52:46.506174Z","iopub.execute_input":"2024-12-11T18:52:46.506555Z","iopub.status.idle":"2024-12-11T18:52:46.528669Z","shell.execute_reply.started":"2024-12-11T18:52:46.506514Z","shell.execute_reply":"2024-12-11T18:52:46.527895Z"},"papermill":{"duration":0.038525,"end_time":"2024-12-10T01:58:16.071948","exception":false,"start_time":"2024-12-10T01:58:16.033423","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"012912e2","cell_type":"code","source":"int_cols = ['BIA-BIA_Activity_Level_num', 'FGC-FGC_GSD_Zone','FGC-FGC_GSND_Zone','BIA-BIA_Frame_num', 'PreInt_EduHx-computerinternet_hoursday']\ncategorical_int_cols = [col for col in int_cols if col not in dropped_columns]\n\ncategorical_str_cols = [col for col in train_df.columns if 'Season' in col and col not in dropped_columns]\ncategorical_cols = categorical_str_cols + categorical_int_cols","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:52:46.529923Z","iopub.execute_input":"2024-12-11T18:52:46.530295Z","iopub.status.idle":"2024-12-11T18:52:46.535637Z","shell.execute_reply.started":"2024-12-11T18:52:46.530255Z","shell.execute_reply":"2024-12-11T18:52:46.534778Z"},"papermill":{"duration":0.019203,"end_time":"2024-12-10T01:58:16.099830","exception":false,"start_time":"2024-12-10T01:58:16.080627","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"158efc5d","cell_type":"code","source":"binary_cols = [col for col in train_df.columns if train_df[col].nunique() == 2]","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:52:46.536725Z","iopub.execute_input":"2024-12-11T18:52:46.537040Z","iopub.status.idle":"2024-12-11T18:52:46.553492Z","shell.execute_reply.started":"2024-12-11T18:52:46.537016Z","shell.execute_reply":"2024-12-11T18:52:46.552607Z"},"papermill":{"duration":0.027879,"end_time":"2024-12-10T01:58:16.136819","exception":false,"start_time":"2024-12-10T01:58:16.108940","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"96b2ff32","cell_type":"code","source":"numerical_cols = [col for col in train_df.columns if col != 'sii' and col not in categorical_cols and col not in binary_cols]","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:52:46.554481Z","iopub.execute_input":"2024-12-11T18:52:46.554778Z","iopub.status.idle":"2024-12-11T18:52:46.564420Z","shell.execute_reply.started":"2024-12-11T18:52:46.554740Z","shell.execute_reply":"2024-12-11T18:52:46.563665Z"},"papermill":{"duration":0.017336,"end_time":"2024-12-10T01:58:16.162539","exception":false,"start_time":"2024-12-10T01:58:16.145203","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"2f7e850b","cell_type":"code","source":"for col in categorical_cols:\n    mode_value = train_df[col].mode()[0]\n    train_df[col] = train_df[col].fillna(mode_value)\n    train_df[col] = train_df[col].astype(object)\n\nfor col in binary_cols:\n    mode_value = train_df[col].mode()[0]\n    train_df[col] = train_df[col].fillna(mode_value)\n    train_df[col] = train_df[col].astype(int)\n\nfor col in numerical_cols:\n    mean_value = train_df[col].mean()\n    train_df[col] = train_df[col].fillna(mean_value)\n","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:52:46.565352Z","iopub.execute_input":"2024-12-11T18:52:46.565634Z","iopub.status.idle":"2024-12-11T18:52:46.660187Z","shell.execute_reply.started":"2024-12-11T18:52:46.565604Z","shell.execute_reply":"2024-12-11T18:52:46.657690Z"},"papermill":{"duration":0.053256,"end_time":"2024-12-10T01:58:16.224079","exception":false,"start_time":"2024-12-10T01:58:16.170823","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"88b88b16","cell_type":"code","source":"for col in categorical_cols:\n    mode_value = test_df[col].mode()[0]\n    test_df[col] = test_df[col].fillna(mode_value)\n    test_df[col] = test_df[col].astype(object)\n\nfor col in binary_cols:\n    mode_value = test_df[col].mode()[0]\n    test_df[col] = test_df[col].fillna(mode_value)\n    test_df[col] = test_df[col].astype(int)\n\nfor col in numerical_cols:\n    mean_value = test_df[col].mean()\n    test_df[col] = test_df[col].fillna(mean_value)\n","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:52:46.661330Z","iopub.execute_input":"2024-12-11T18:52:46.664994Z","iopub.status.idle":"2024-12-11T18:52:46.706917Z","shell.execute_reply.started":"2024-12-11T18:52:46.664957Z","shell.execute_reply":"2024-12-11T18:52:46.705867Z"},"papermill":{"duration":0.0443,"end_time":"2024-12-10T01:58:16.276694","exception":false,"start_time":"2024-12-10T01:58:16.232394","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"ea8837b6","cell_type":"code","source":"scaler = StandardScaler()\n\n# Helper function\ndef standardize(df):\n    columns_to_standardize = [col for col in numerical_cols]\n    df[columns_to_standardize] = scaler.fit_transform(df[columns_to_standardize])\n    return df\n\n#Proceed with standardizing\ntrain_df = standardize(train_df)\ntest_df = standardize(test_df)","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:52:46.708128Z","iopub.execute_input":"2024-12-11T18:52:46.708401Z","iopub.status.idle":"2024-12-11T18:52:46.728648Z","shell.execute_reply.started":"2024-12-11T18:52:46.708376Z","shell.execute_reply":"2024-12-11T18:52:46.727794Z"},"papermill":{"duration":0.042155,"end_time":"2024-12-10T01:58:16.327161","exception":false,"start_time":"2024-12-10T01:58:16.285006","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"20095dda","cell_type":"code","source":"#Helper function\ndef OneHot_Encoding(original_dataframe, feature_to_encode):\n    dummies = pd.get_dummies(original_dataframe[[feature_to_encode]], dtype=int)\n    original_dataframe = pd.concat([original_dataframe, dummies], axis=1)\n    original_dataframe = original_dataframe.drop([feature_to_encode], axis=1)\n    return original_dataframe\n\nfor col in categorical_cols:\n    train_df = OneHot_Encoding(train_df, col)\n    test_df = OneHot_Encoding(test_df, col)","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:52:46.729727Z","iopub.execute_input":"2024-12-11T18:52:46.730016Z","iopub.status.idle":"2024-12-11T18:52:46.796688Z","shell.execute_reply.started":"2024-12-11T18:52:46.729985Z","shell.execute_reply":"2024-12-11T18:52:46.795862Z"},"papermill":{"duration":0.108824,"end_time":"2024-12-10T01:58:16.445304","exception":false,"start_time":"2024-12-10T01:58:16.336480","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"fa516493","cell_type":"code","source":"train_df.head()","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:52:46.797690Z","iopub.execute_input":"2024-12-11T18:52:46.797946Z","iopub.status.idle":"2024-12-11T18:52:46.816045Z","shell.execute_reply.started":"2024-12-11T18:52:46.797921Z","shell.execute_reply":"2024-12-11T18:52:46.815126Z"},"papermill":{"duration":0.034182,"end_time":"2024-12-10T01:58:16.488073","exception":false,"start_time":"2024-12-10T01:58:16.453891","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"2a0a281f","cell_type":"code","source":"# Remove feature which does not appear in test data, excluding 'sii'\ntrain_miss = (set(train_df.columns) - set(test_df.columns)) - {'sii'}\n\ntrain_df = train_df.drop(columns=train_miss)","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:52:46.817170Z","iopub.execute_input":"2024-12-11T18:52:46.817497Z","iopub.status.idle":"2024-12-11T18:52:46.823243Z","shell.execute_reply.started":"2024-12-11T18:52:46.817461Z","shell.execute_reply":"2024-12-11T18:52:46.822170Z"},"papermill":{"duration":0.020021,"end_time":"2024-12-10T01:58:16.516830","exception":false,"start_time":"2024-12-10T01:58:16.496809","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"be24e506","cell_type":"code","source":"train_df.head()","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:52:46.824287Z","iopub.execute_input":"2024-12-11T18:52:46.824538Z","iopub.status.idle":"2024-12-11T18:52:46.846253Z","shell.execute_reply.started":"2024-12-11T18:52:46.824501Z","shell.execute_reply":"2024-12-11T18:52:46.845162Z"},"papermill":{"duration":0.036581,"end_time":"2024-12-10T01:58:16.562586","exception":false,"start_time":"2024-12-10T01:58:16.526005","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"56b914a0","cell_type":"markdown","source":"## Standardize process","metadata":{"papermill":{"duration":0.008862,"end_time":"2024-12-10T01:58:16.580470","exception":false,"start_time":"2024-12-10T01:58:16.571608","status":"completed"},"tags":[]}},{"id":"e16326e3","cell_type":"markdown","source":"## Handle missing cells","metadata":{"papermill":{"duration":0.008861,"end_time":"2024-12-10T01:58:16.598584","exception":false,"start_time":"2024-12-10T01:58:16.589723","status":"completed"},"tags":[]}},{"id":"405e5e8f","cell_type":"markdown","source":"## Extract df","metadata":{"papermill":{"duration":0.009196,"end_time":"2024-12-10T01:58:16.617256","exception":false,"start_time":"2024-12-10T01:58:16.608060","status":"completed"},"tags":[]}},{"id":"7fd75305","cell_type":"code","source":"features = [col for col in train_df.columns if col != 'sii']\nX = train_df[features]\ny = train_df.sii","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:52:46.847261Z","iopub.execute_input":"2024-12-11T18:52:46.847554Z","iopub.status.idle":"2024-12-11T18:52:46.855597Z","shell.execute_reply.started":"2024-12-11T18:52:46.847530Z","shell.execute_reply":"2024-12-11T18:52:46.854604Z"},"papermill":{"duration":0.019655,"end_time":"2024-12-10T01:58:16.646323","exception":false,"start_time":"2024-12-10T01:58:16.626668","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"0c102056","cell_type":"code","source":"X.head()","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:52:46.856697Z","iopub.execute_input":"2024-12-11T18:52:46.857552Z","iopub.status.idle":"2024-12-11T18:52:46.878980Z","shell.execute_reply.started":"2024-12-11T18:52:46.857510Z","shell.execute_reply":"2024-12-11T18:52:46.878028Z"},"papermill":{"duration":0.036492,"end_time":"2024-12-10T01:58:16.691867","exception":false,"start_time":"2024-12-10T01:58:16.655375","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"65d583f3","cell_type":"markdown","source":"## Split dataset","metadata":{"papermill":{"duration":0.009012,"end_time":"2024-12-10T01:58:16.710772","exception":false,"start_time":"2024-12-10T01:58:16.701760","status":"completed"},"tags":[]}},{"id":"7ba185c1","cell_type":"code","source":"from sklearn.model_selection import train_test_split\nX_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:52:46.881965Z","iopub.execute_input":"2024-12-11T18:52:46.882240Z","iopub.status.idle":"2024-12-11T18:52:46.896617Z","shell.execute_reply.started":"2024-12-11T18:52:46.882208Z","shell.execute_reply":"2024-12-11T18:52:46.895864Z"},"papermill":{"duration":0.024452,"end_time":"2024-12-10T01:58:16.744845","exception":false,"start_time":"2024-12-10T01:58:16.720393","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"64842d22","cell_type":"markdown","source":"## Define and train model","metadata":{"papermill":{"duration":0.008949,"end_time":"2024-12-10T01:58:16.763234","exception":false,"start_time":"2024-12-10T01:58:16.754285","status":"completed"},"tags":[]}},{"id":"0eee24cc","cell_type":"code","source":"# from sklearn.model_selection import GridSearchCV\n# from sklearn.ensemble import RandomForestClassifier\n\n# from sklearn.metrics import cohen_kappa_score, make_scorer\n\n\n# def quadratic_weighted_kappa(y_true, y_pred):\n#     return cohen_kappa_score(y_true, y_pred, weights=\"quadratic\")\n\n\n# qwk_scorer = make_scorer(quadratic_weighted_kappa)\n\n\n# param_grid = {\n#     'n_estimators': [150, 200, 250, 300],\n#     'max_depth': [5, 8, 10],\n#     'min_samples_split': [2, 3, 4, 5],\n#     'min_samples_leaf': [1, 2, 3, 4],\n#     'criterion':['entropy', 'gini'],\n# }\n\n# # Khởi tạo mô hình\n# rf_model = RandomForestClassifier(\n#     random_state=42,\n#     class_weight='balanced',\n#     max_features='sqrt',\n# )\n\n# # GridSearchCV với 3-fold cross-validation\n# grid_search = GridSearchCV(\n#     estimator=rf_model,\n#     param_grid=param_grid,\n#     scoring=qwk_scorer,\n#     cv=3,\n#     verbose=3,\n#     n_jobs=-1\n# )\n\n# # Tìm kiếm\n# grid_search.fit(X, y)\n\n# print(\"Best parameters found:\", grid_search.best_params_)\n# print(\"Best cross-validation accuracy:\", grid_search.best_score_)\n# best_rf_model = grid_search.best_estimator_\n","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:52:47.221988Z","iopub.execute_input":"2024-12-11T18:52:47.222946Z","iopub.status.idle":"2024-12-11T18:59:41.964836Z","shell.execute_reply.started":"2024-12-11T18:52:47.222894Z","shell.execute_reply":"2024-12-11T18:59:41.963805Z"},"papermill":{"duration":0.018409,"end_time":"2024-12-10T01:58:16.791399","exception":false,"start_time":"2024-12-10T01:58:16.772990","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"1c66bd7d","cell_type":"code","source":"#Validation model,train on X_val test\n\nval_model = RandomForestClassifier(\n    n_estimators=300,\n    max_depth=8,\n    max_features='sqrt',\n    min_samples_split=5,\n    min_samples_leaf=1,\n    class_weight='balanced',\n    random_state=42,\n)\n\nval_model.fit(X_train, y_train)","metadata":{"execution":{"iopub.status.busy":"2024-12-11T19:03:46.862908Z","iopub.execute_input":"2024-12-11T19:03:46.863277Z","iopub.status.idle":"2024-12-11T19:03:48.084112Z","shell.execute_reply.started":"2024-12-11T19:03:46.863243Z","shell.execute_reply":"2024-12-11T19:03:48.083291Z"},"papermill":{"duration":1.332065,"end_time":"2024-12-10T01:58:18.133224","exception":false,"start_time":"2024-12-10T01:58:16.801159","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"787d2ac9","cell_type":"code","source":"#Test model,train on all X\ntest_model = RandomForestClassifier(\n    n_estimators=300,\n    max_depth=8,\n    max_features='sqrt',\n    min_samples_split=5,\n    min_samples_leaf=1,\n    class_weight='balanced',\n    random_state=42,\n)\n\ntest_model.fit(X, y)","metadata":{"execution":{"iopub.status.busy":"2024-12-11T19:03:49.568190Z","iopub.execute_input":"2024-12-11T19:03:49.568918Z","iopub.status.idle":"2024-12-11T19:03:50.950418Z","shell.execute_reply.started":"2024-12-11T19:03:49.568882Z","shell.execute_reply":"2024-12-11T19:03:50.949582Z"},"papermill":{"duration":1.598563,"end_time":"2024-12-10T01:58:19.741678","exception":false,"start_time":"2024-12-10T01:58:18.143115","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"db8d3429","cell_type":"markdown","source":"## Evaluation","metadata":{"papermill":{"duration":0.009223,"end_time":"2024-12-10T01:58:19.760806","exception":false,"start_time":"2024-12-10T01:58:19.751583","status":"completed"},"tags":[]}},{"id":"12e94552","cell_type":"code","source":"#Evaluation function\ndef QWK(y_true, y_pred, n_classes):\n    \"\"\"\n    Calculate the Quadratic Weighted Kappa (QWK) score.\n\n    Parameters:\n    y_true (list or numpy array): Actual values (ground truth).\n    y_pred (list or numpy array): Predicted values.\n    n_classes (int): Number of distinct classes/labels.\n\n    Returns:\n    float: QWK score.\n    \"\"\"\n    # Create histogram matrix O (observed matrix)\n    O = np.zeros((n_classes, n_classes), dtype=np.float64)\n    for true, pred in zip(y_true, y_pred):\n        O[true, pred] += 1\n\n    # Create weight matrix W\n    W = np.zeros((n_classes, n_classes), dtype=np.float64)\n    for i in range(n_classes):\n        for j in range(n_classes):\n            W[i, j] = ((i - j) ** 2) / ((n_classes - 1) ** 2)\n\n    # Create expected matrix E\n    actual_hist = np.sum(O, axis=1)\n    pred_hist = np.sum(O, axis=0)\n    E = np.outer(actual_hist, pred_hist) / np.sum(O)\n\n    # Calculate QWK\n    numerator = np.sum(W * O)\n    denominator = np.sum(W * E)\n    kappa = 1 - (numerator / denominator)\n\n    return kappa","metadata":{"execution":{"iopub.status.busy":"2024-12-11T19:03:58.701700Z","iopub.execute_input":"2024-12-11T19:03:58.702541Z","iopub.status.idle":"2024-12-11T19:03:58.708984Z","shell.execute_reply.started":"2024-12-11T19:03:58.702503Z","shell.execute_reply":"2024-12-11T19:03:58.708094Z"},"papermill":{"duration":0.021699,"end_time":"2024-12-10T01:58:19.792445","exception":false,"start_time":"2024-12-10T01:58:19.770746","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"e59a226e","cell_type":"code","source":"val_preds = val_model.predict(X_val)\nval_preds = np.array(val_preds).astype(int)\n\ny_val = np.array(y_val).astype(int)\n\nprint(QWK(y_val, val_preds, 4))","metadata":{"execution":{"iopub.status.busy":"2024-12-11T19:04:00.529927Z","iopub.execute_input":"2024-12-11T19:04:00.530414Z","iopub.status.idle":"2024-12-11T19:04:00.569380Z","shell.execute_reply.started":"2024-12-11T19:04:00.530381Z","shell.execute_reply":"2024-12-11T19:04:00.568561Z"},"papermill":{"duration":0.055111,"end_time":"2024-12-10T01:58:19.857370","exception":false,"start_time":"2024-12-10T01:58:19.802259","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"c75b3bdb","cell_type":"markdown","source":"## Submit","metadata":{"papermill":{"duration":0.010132,"end_time":"2024-12-10T01:58:19.877362","exception":false,"start_time":"2024-12-10T01:58:19.867230","status":"completed"},"tags":[]}},{"id":"065f0485","cell_type":"code","source":"# missing_columns = (set(X.columns) - set(test_df.columns))\n\n# for col in missing_columns:\n#     test_df[col] = 0\n\n# test_df = test_df[X.columns]","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:47:38.566979Z","iopub.execute_input":"2024-12-11T18:47:38.567451Z","iopub.status.idle":"2024-12-11T18:47:38.573019Z","shell.execute_reply.started":"2024-12-11T18:47:38.567403Z","shell.execute_reply":"2024-12-11T18:47:38.571626Z"},"papermill":{"duration":0.0179,"end_time":"2024-12-10T01:58:19.905212","exception":false,"start_time":"2024-12-10T01:58:19.887312","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"ce63fb0b","cell_type":"code","source":"test_df.head()","metadata":{"execution":{"iopub.status.busy":"2024-12-11T18:47:38.574677Z","iopub.execute_input":"2024-12-11T18:47:38.575164Z","iopub.status.idle":"2024-12-11T18:47:38.604577Z","shell.execute_reply.started":"2024-12-11T18:47:38.575114Z","shell.execute_reply":"2024-12-11T18:47:38.603439Z"},"papermill":{"duration":0.035995,"end_time":"2024-12-10T01:58:19.951120","exception":false,"start_time":"2024-12-10T01:58:19.915125","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"6cbb566e","cell_type":"code","source":"test_preds = test_model.predict(test_df)\ntest_preds = np.array(test_preds).astype(int)","metadata":{"execution":{"iopub.status.busy":"2024-12-11T19:04:15.432155Z","iopub.execute_input":"2024-12-11T19:04:15.432968Z","iopub.status.idle":"2024-12-11T19:04:15.454152Z","shell.execute_reply.started":"2024-12-11T19:04:15.432932Z","shell.execute_reply":"2024-12-11T19:04:15.453526Z"},"papermill":{"duration":0.035652,"end_time":"2024-12-10T01:58:19.997567","exception":false,"start_time":"2024-12-10T01:58:19.961915","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"8f1816bd","cell_type":"code","source":"output = pd.DataFrame({'id': test_data.index,\n                       'sii': test_preds})\noutput.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2024-12-11T19:04:17.392395Z","iopub.execute_input":"2024-12-11T19:04:17.393208Z","iopub.status.idle":"2024-12-11T19:04:17.402308Z","shell.execute_reply.started":"2024-12-11T19:04:17.393172Z","shell.execute_reply":"2024-12-11T19:04:17.401623Z"},"papermill":{"duration":0.02189,"end_time":"2024-12-10T01:58:20.030089","exception":false,"start_time":"2024-12-10T01:58:20.008199","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"3522c0fc","cell_type":"code","source":"","metadata":{"papermill":{"duration":0.010303,"end_time":"2024-12-10T01:58:20.050541","exception":false,"start_time":"2024-12-10T01:58:20.040238","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null}]}