{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.11","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":31012,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Child Mind Institute-Problematic Internet Use\n\n# Group Members: William Agyei, Kaylee Bronson, Roshan Mandal, and Dhruvkumar Patel","metadata":{}},{"cell_type":"markdown","source":"## 📌 Introduction\nThe goal of this competition is to predict the likelihood that a child exhibits problematic internet use based on clinical and survey data. This is a binary classification problem.\n\nThis notebook analyzes data from the Child Mind Institute to predict problematic internet use levels in children (target: `sii`). We perform exploratory analysis, preprocess the data, train a model, evaluate performance, and generate a submission.\n\n","metadata":{}},{"cell_type":"markdown","source":"# 📂 Data Loading","metadata":{}},{"cell_type":"code","source":"import os\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import LabelEncoder, StandardScaler\nimport warnings\nwarnings.filterwarnings('ignore')\n\n# Set random seed\ndef set_global_seed(seed=42):\n    np.random.seed(seed)\n    import random\n    random.seed(seed)\nset_global_seed()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T18:47:21.746349Z","iopub.execute_input":"2025-04-30T18:47:21.746614Z","iopub.status.idle":"2025-04-30T18:47:23.339473Z","shell.execute_reply.started":"2025-04-30T18:47:21.746595Z","shell.execute_reply":"2025-04-30T18:47:23.338615Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_train = 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')\ndf_dict = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/data_dictionary.csv')\n\nprint(\"Train shape:\", df_train.shape)\nprint(\"Test shape:\", df_test.shape)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T18:47:25.183350Z","iopub.execute_input":"2025-04-30T18:47:25.183777Z","iopub.status.idle":"2025-04-30T18:47:25.280615Z","shell.execute_reply.started":"2025-04-30T18:47:25.183752Z","shell.execute_reply":"2025-04-30T18:47:25.279698Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# 🔍 EDA & Visualizations","metadata":{}},{"cell_type":"code","source":"# Target Distribution\nprint(df_train['sii'].value_counts())\nsns.countplot(x='sii', data=df_train)\nplt.title('Target Variable Distribution (sii)')\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T19:09:31.882419Z","iopub.execute_input":"2025-04-30T19:09:31.882708Z","iopub.status.idle":"2025-04-30T19:09:32.036356Z","shell.execute_reply.started":"2025-04-30T19:09:31.882687Z","shell.execute_reply":"2025-04-30T19:09:32.035562Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Correlation Heatmap\ntrain_filled = df_train.fillna(df_train.median(numeric_only=True))\nplt.figure(figsize=(12, 8))\nsns.heatmap(train_filled.corr(numeric_only=True), cmap='coolwarm', center=0)\nplt.title('Feature Correlation Heatmap')\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T19:09:34.007450Z","iopub.execute_input":"2025-04-30T19:09:34.007775Z","iopub.status.idle":"2025-04-30T19:09:34.851524Z","shell.execute_reply.started":"2025-04-30T19:09:34.007744Z","shell.execute_reply":"2025-04-30T19:09:34.850500Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# BMI Boxplot by sii\nsns.boxplot(x='sii', y='Physical-BMI', data=df_train)\nplt.title('BMI by Problematic Internet Use Level')\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T19:31:20.301454Z","iopub.execute_input":"2025-04-30T19:31:20.301747Z","iopub.status.idle":"2025-04-30T19:31:20.461619Z","shell.execute_reply.started":"2025-04-30T19:31:20.301723Z","shell.execute_reply":"2025-04-30T19:31:20.460834Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# 🛠 Preprocessing","metadata":{}},{"cell_type":"code","source":"# Handle Missing Values\ntrain_filled = df_train.fillna(df_train.median(numeric_only=True))\ntest_filled = df_test.fillna(df_train.median(numeric_only=True))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T19:31:22.534455Z","iopub.execute_input":"2025-04-30T19:31:22.534779Z","iopub.status.idle":"2025-04-30T19:31:22.582420Z","shell.execute_reply.started":"2025-04-30T19:31:22.534738Z","shell.execute_reply":"2025-04-30T19:31:22.581690Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Encode Categorical Columns\nX = train_filled.drop(['id', 'sii'], axis=1)\ny = train_filled['sii']\nX_test = test_filled.drop(['id'], axis=1)\n\n# Encode remaining season columns\nseason_cols = [\n    'Basic_Demos-Enroll_Season', 'CGAS-Season', 'Physical-Season',\n    'Fitness_Endurance-Season', 'FGC-Season', 'BIA-Season',\n    'PAQ_A-Season', 'PAQ_C-Season',\n    'SDS-Season', 'PreInt_EduHx-Season'\n]\n\n\nle = LabelEncoder()\nfor col in season_cols:\n    if col in X.columns and col in X_test.columns:\n        X[col] = le.fit_transform(X[col].astype(str))\n        X_test[col] = le.transform(X_test[col].astype(str))\n\n# Drop PCIAT-Season if it exists\nX = X.drop(columns=['PCIAT-Season'], errors='ignore')\n\n# Align and fill X_test\nX_test = X_test.reindex(columns=X.columns, fill_value=np.nan)\nX_test = X_test.fillna(X.median(numeric_only=True))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T19:31:23.884959Z","iopub.execute_input":"2025-04-30T19:31:23.885556Z","iopub.status.idle":"2025-04-30T19:31:23.945047Z","shell.execute_reply.started":"2025-04-30T19:31:23.885530Z","shell.execute_reply":"2025-04-30T19:31:23.943914Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# 🧠 Model Training & Evaluation","metadata":{}},{"cell_type":"code","source":" # Train-Test Split & Scaling\nX_train, X_val, y_train, y_val = train_test_split(\n    X, y, test_size=0.2, random_state=42, stratify=y\n)\n\nscaler = StandardScaler()\nX_train_scaled = scaler.fit_transform(X_train)\nX_val_scaled = scaler.transform(X_val)\nX_test_scaled = scaler.transform(X_test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T19:31:25.999428Z","iopub.execute_input":"2025-04-30T19:31:25.999695Z","iopub.status.idle":"2025-04-30T19:31:26.035187Z","shell.execute_reply.started":"2025-04-30T19:31:25.999675Z","shell.execute_reply":"2025-04-30T19:31:26.034230Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Random Forest","metadata":{}},{"cell_type":"code","source":"from sklearn.ensemble import RandomForestClassifier\nfrom sklearn.metrics import classification_report, confusion_matrix\n\n# Initialize and train\nrf_model = RandomForestClassifier(random_state=42)\nrf_model.fit(X_train_scaled, y_train)\n\n# Predict and evaluate\ny_pred = rf_model.predict(X_val_scaled)\nprint(\"Classification Report:\")\nprint(classification_report(y_val, y_pred))\n\n# Confusion matrix\nimport seaborn as sns\nimport matplotlib.pyplot as plt\n\nconf_matrix = confusion_matrix(y_val, y_pred)\nsns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues')\nplt.title(\"Confusion Matrix\")\nplt.xlabel(\"Predicted\")\nplt.ylabel(\"Actual\")\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T19:38:01.804957Z","iopub.execute_input":"2025-04-30T19:38:01.805477Z","iopub.status.idle":"2025-04-30T19:38:02.591923Z","shell.execute_reply.started":"2025-04-30T19:38:01.805452Z","shell.execute_reply":"2025-04-30T19:38:02.591077Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# 📊 Additional Visuals","metadata":{}},{"cell_type":"markdown","source":"# Feature Importance","metadata":{}},{"cell_type":"code","source":"importances = rf_model.feature_importances_\nimportance_df = pd.DataFrame({'Feature': X.columns, 'Importance': importances})\ntop_feats = importance_df.sort_values(by='Importance', ascending=False).head(15)\n\nsns.barplot(data=top_feats, x='Importance', y='Feature')\nplt.title('Top 15 Important Features (Random Forest)')\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T19:31:31.974414Z","iopub.execute_input":"2025-04-30T19:31:31.975093Z","iopub.status.idle":"2025-04-30T19:31:32.228338Z","shell.execute_reply.started":"2025-04-30T19:31:31.975064Z","shell.execute_reply":"2025-04-30T19:31:32.227476Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Confusion Matrix","metadata":{}},{"cell_type":"code","source":"cm = confusion_matrix(y_val, y_pred)\nsns.heatmap(cm, annot=True, fmt='d', cmap='Purples')\nplt.title(\"Confusion Matrix (Validation Set)\")\nplt.xlabel(\"Predicted\")\nplt.ylabel(\"Actual\")\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T19:31:34.116356Z","iopub.execute_input":"2025-04-30T19:31:34.116648Z","iopub.status.idle":"2025-04-30T19:31:34.328576Z","shell.execute_reply.started":"2025-04-30T19:31:34.116625Z","shell.execute_reply":"2025-04-30T19:31:34.327810Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# PCA Visualization","metadata":{}},{"cell_type":"code","source":"from sklearn.decomposition import PCA\npca = PCA(n_components=2)\nX_pca = pca.fit_transform(X_train_scaled)\n\nsns.scatterplot(x=X_pca[:, 0], y=X_pca[:, 1], hue=y_train, palette='deep')\nplt.title(\"PCA Visualization of Training Set\")\nplt.xlabel(\"PC1\")\nplt.ylabel(\"PC2\")\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T19:31:37.390439Z","iopub.execute_input":"2025-04-30T19:31:37.390712Z","iopub.status.idle":"2025-04-30T19:31:37.751125Z","shell.execute_reply.started":"2025-04-30T19:31:37.390694Z","shell.execute_reply":"2025-04-30T19:31:37.750293Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Make Predictions on Test Set for Submission","metadata":{}},{"cell_type":"code","source":"# Predict on test set\ntest_preds = rf_model.predict(X_test_scaled)\n\n# Prepare submission\nsubmission = pd.DataFrame({\n    'id': df_test['id'],\n    'sii': test_preds\n})\nsubmission.to_csv('submission.csv', index=False)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-30T19:43:02.938515Z","iopub.execute_input":"2025-04-30T19:43:02.939286Z","iopub.status.idle":"2025-04-30T19:43:02.953942Z","shell.execute_reply.started":"2025-04-30T19:43:02.939257Z","shell.execute_reply":"2025-04-30T19:43:02.953201Z"}},"outputs":[],"execution_count":null}]}