{"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":30804,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-12-05T13:29:09.380927Z","iopub.execute_input":"2024-12-05T13:29:09.381309Z","iopub.status.idle":"2024-12-05T13:29:10.031089Z","shell.execute_reply.started":"2024-12-05T13:29:09.381277Z","shell.execute_reply":"2024-12-05T13:29:10.029522Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\nfrom sklearn.ensemble import RandomForestRegressor\nfrom sklearn.model_selection import train_test_split, RandomizedSearchCV, StratifiedKFold\nfrom sklearn.metrics import mean_squared_error, r2_score\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.decomposition import PCA","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-05T13:29:10.033059Z","iopub.execute_input":"2024-12-05T13:29:10.033411Z","iopub.status.idle":"2024-12-05T13:29:10.039166Z","shell.execute_reply.started":"2024-12-05T13:29:10.033378Z","shell.execute_reply":"2024-12-05T13:29:10.038092Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Fungsi untuk encoding kolom string ke numerik\ndef encode_string_columns(df):\n    for column in df.columns:\n        if df[column].dtype == object:\n            codes, _ = pd.factorize(df[column])\n            df[column] = codes\n    return df\n\n# Membaca dataset pelatihan dan pengujian\ndf = pd.read_csv(\"/kaggle/input/child-mind-institute-problematic-internet-use/train.csv\")\ndf_test = pd.read_csv(\"/kaggle/input/child-mind-institute-problematic-internet-use/test.csv\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-05T13:29:10.040482Z","iopub.execute_input":"2024-12-05T13:29:10.040820Z","iopub.status.idle":"2024-12-05T13:29:10.104175Z","shell.execute_reply.started":"2024-12-05T13:29:10.040780Z","shell.execute_reply":"2024-12-05T13:29:10.103127Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Menyimpan kolom 'id' dari data uji\ntest_ids = df_test['id']\n\n# Menghapus kolom yang tidak dibutuhkan\ndf.drop(columns=['id', 'sii'], inplace=True)\ndf_test.drop(columns=['id'], inplace=True)\n\n# Melakukan encoding kolom string menjadi numerik\ndf = encode_string_columns(df)\ndf_test = encode_string_columns(df_test)\n\n# Mengisi nilai yang hilang dengan nol\ndf.fillna(0, inplace=True)\ndf_test.fillna(0, inplace=True)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-05T13:29:10.106042Z","iopub.execute_input":"2024-12-05T13:29:10.106415Z","iopub.status.idle":"2024-12-05T13:29:10.134371Z","shell.execute_reply.started":"2024-12-05T13:29:10.106382Z","shell.execute_reply":"2024-12-05T13:29:10.133143Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Menentukan fitur (X) dan target (y) untuk model pelatihan\nX = df\ny = pd.read_csv(\"/kaggle/input/child-mind-institute-problematic-internet-use/train.csv\")['sii']\ny.fillna(0, inplace=True)\n\n# Pembagian data menjadi pelatihan dan validasi\nX_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)\n\n# Cek kolom yang ada di X_train dan df_test\ncommon_columns = X_train.columns.intersection(df_test.columns)\nprint(\"Common columns:\", common_columns)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-05T13:30:07.229300Z","iopub.execute_input":"2024-12-05T13:30:07.229824Z","iopub.status.idle":"2024-12-05T13:30:07.285466Z","shell.execute_reply.started":"2024-12-05T13:30:07.229768Z","shell.execute_reply":"2024-12-05T13:30:07.283928Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Menambahkan kolom yang hilang pada df_test dengan nilai 0\nmissing_columns = set(X_train.columns) - set(df_test.columns)\nfor col in missing_columns:\n    df_test[col] = 0\n\n# Menyusun ulang df_test agar kolomnya sama dengan X_train\ndf_test = df_test[X_train.columns]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-05T13:30:20.543266Z","iopub.execute_input":"2024-12-05T13:30:20.543665Z","iopub.status.idle":"2024-12-05T13:30:20.559259Z","shell.execute_reply.started":"2024-12-05T13:30:20.543627Z","shell.execute_reply":"2024-12-05T13:30:20.557971Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Standarisasi fitur menggunakan data pelatihan\nscaler = StandardScaler()\nX_train_scaled = scaler.fit_transform(X_train)  # Fit and transform on train data\nX_val_scaled = scaler.transform(X_val)          # Only transform on validation data\nX_test_scaled = scaler.transform(df_test)       # Only transform on test data","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-05T13:30:32.734716Z","iopub.execute_input":"2024-12-05T13:30:32.735138Z","iopub.status.idle":"2024-12-05T13:30:32.760386Z","shell.execute_reply.started":"2024-12-05T13:30:32.735105Z","shell.execute_reply":"2024-12-05T13:30:32.759190Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Penggunaan PCA untuk reduksi dimensi (mempertahankan 95% variansi)\npca = PCA(n_components=0.95)\nX_train_pca = pca.fit_transform(X_train_scaled)\nX_val_pca = pca.transform(X_val_scaled)\nX_test_pca = pca.transform(X_test_scaled)\n\n# Mendefinisikan model RandomForestRegressor\nrf_model = RandomForestRegressor(random_state=42)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-05T13:30:42.854202Z","iopub.execute_input":"2024-12-05T13:30:42.854573Z","iopub.status.idle":"2024-12-05T13:30:42.897774Z","shell.execute_reply.started":"2024-12-05T13:30:42.854543Z","shell.execute_reply":"2024-12-05T13:30:42.893254Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Hyperparameter tuning menggunakan RandomizedSearchCV (lebih cepat daripada GridSearchCV)\nparam_dist = {\n    'n_estimators': [100, 200, 300],\n    'max_depth': [10, 20, None],\n    'min_samples_split': [2, 5, 10],\n    'min_samples_leaf': [1, 2, 4]\n}\n\nrandom_search = RandomizedSearchCV(estimator=rf_model, param_distributions=param_dist, n_iter=10, cv=StratifiedKFold(n_splits=3), n_jobs=-1, verbose=2, random_state=42)\nrandom_search.fit(X_train_pca, y_train)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-05T13:30:55.245512Z","iopub.execute_input":"2024-12-05T13:30:55.245910Z","iopub.status.idle":"2024-12-05T13:32:23.223560Z","shell.execute_reply.started":"2024-12-05T13:30:55.245876Z","shell.execute_reply":"2024-12-05T13:32:23.222104Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Menampilkan hasil terbaik dari RandomizedSearchCV\nprint(\"Best parameters found: \", random_search.best_params_)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-05T13:32:23.253810Z","iopub.execute_input":"2024-12-05T13:32:23.254218Z","iopub.status.idle":"2024-12-05T13:32:23.269418Z","shell.execute_reply.started":"2024-12-05T13:32:23.254178Z","shell.execute_reply":"2024-12-05T13:32:23.268120Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Menggunakan model terbaik untuk prediksi\nbest_rf_model = random_search.best_estimator_\n\n# Melakukan prediksi pada data validasi\ny_val_pred = best_rf_model.predict(X_val_pca)\n\n# Evaluasi model dengan MSE dan R²\nmse = mean_squared_error(y_val, y_val_pred)\nr2 = r2_score(y_val, y_val_pred)\nprint(f'Mean Squared Error (Validation): {mse:.2f}')\nprint(f'R² Score (Validation): {r2:.2f}')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-05T13:32:57.816999Z","iopub.execute_input":"2024-12-05T13:32:57.818092Z","iopub.status.idle":"2024-12-05T13:32:57.844678Z","shell.execute_reply.started":"2024-12-05T13:32:57.818046Z","shell.execute_reply":"2024-12-05T13:32:57.843566Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Melakukan prediksi pada data uji\ny_test_pred = best_rf_model.predict(X_test_pca)\n\n# Menyusun DataFrame untuk submission\ny_test_pred_df = pd.DataFrame(y_test_pred, columns=[\"sii\"])\nsubmission = pd.concat([test_ids, y_test_pred_df], axis=1)\n\n# Menyimpan hasil prediksi ke dalam file CSV\nsubmission.to_csv(\"/kaggle/working/submission.csv\", index=False)\n\n# Print the id and sii values\nprint(submission.head())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-05T13:33:15.268573Z","iopub.execute_input":"2024-12-05T13:33:15.269172Z","iopub.status.idle":"2024-12-05T13:33:15.302301Z","shell.execute_reply.started":"2024-12-05T13:33:15.269121Z","shell.execute_reply":"2024-12-05T13:33:15.301052Z"}},"outputs":[],"execution_count":null}]}