{"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":"# Import libraries\nimport numpy as np\nimport pandas as pd\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.model_selection import train_test_split, StratifiedKFold\nfrom sklearn.metrics import roc_auc_score\nfrom imblearn.over_sampling import SMOTE\nimport tensorflow as tf\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense, Dropout, BatchNormalization\nfrom tensorflow.keras.callbacks import EarlyStopping, ReduceLROnPlateau\n\n# Load data\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\")\n\n# Process test IDs and drop unnecessary columns\nid_column = df_test['id']\ndf_test = df_test.drop(columns=['id'])\ndf = df.drop(columns=['id'])\n\n# Handle target (sii)\ntarget = df.pop('sii')  # Extract target column\ndf = df[target.notna()]  # Retain rows with non-null target\ntarget = target[target.notna()]  # Remove NaN from target\n\n# Encode categorical features\nfor column in df.columns:\n    if df[column].dtype == object:\n        df[column], _ = pd.factorize(df[column])\nfor column in df_test.columns:\n    if df_test[column].dtype == object:\n        df_test[column], _ = pd.factorize(df_test[column])\n\n# Fill missing values\ndf.fillna(df.median(), inplace=True)\ndf_test.fillna(df_test.median(), inplace=True)\n\n# Ensure train and test data have the same columns\ncommon_columns = df.columns.intersection(df_test.columns)\ndf = df[common_columns]\ndf_test = df_test[common_columns]\n\n# Scale data\nscaler = StandardScaler()\nX = scaler.fit_transform(df)\nX_test = scaler.transform(df_test)\ny = target.values\n\n# Handle imbalance using SMOTE\nsmote = SMOTE(random_state=42, k_neighbors=5)\nX, y = smote.fit_resample(X, y)\n\n# Build model function for k-fold validation\ndef build_model(input_dim):\n    model = Sequential([\n        Dense(512, activation='relu', input_dim=input_dim),\n        BatchNormalization(),\n        Dropout(0.4),\n        Dense(256, activation='relu'),\n        BatchNormalization(),\n        Dropout(0.3),\n        Dense(128, activation='relu'),\n        BatchNormalization(),\n        Dropout(0.3),\n        Dense(1, activation='sigmoid')  # Binary classification\n    ])\n    model.compile(optimizer=tf.keras.optimizers.RMSprop(learning_rate=0.0001),\n                  loss='binary_crossentropy',\n                  metrics=['accuracy', tf.keras.metrics.AUC(name='auc')])\n    return model\n\n# Cross-validation setup\nkfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)\nval_auc_scores = []\n\nfor train_idx, val_idx in kfold.split(X, y):\n    X_train, X_val = X[train_idx], X[val_idx]\n    y_train, y_val = y[train_idx], y[val_idx]\n    \n    # Build and train model\n    model = build_model(X_train.shape[1])\n    early_stopping = EarlyStopping(monitor='val_auc', patience=15, restore_best_weights=True, mode='max')\n    reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.5, patience=10, min_lr=1e-6)\n    \n    history = model.fit(\n        X_train, y_train,\n        epochs=300,\n        batch_size=64,\n        validation_data=(X_val, y_val),\n        callbacks=[early_stopping, reduce_lr],\n        verbose=0\n    )\n    \n    # Evaluate model\n    val_loss, val_accuracy, val_auc = model.evaluate(X_val, y_val, verbose=0)\n    val_auc_scores.append(val_auc)\n    print(f\"Fold Validation AUC: {val_auc:.4f}\")\n\n# Print average AUC\nprint(f\"Average Validation AUC: {np.mean(val_auc_scores):.4f}\")\n\n# Retrain on full data and predict on test set\nfinal_model = build_model(X.shape[1])\nfinal_model.fit(X, y, epochs=300, batch_size=64, verbose=0)\n\ny_test_predict = final_model.predict(X_test)\ny_test_predict = (y_test_predict > 0.5).astype(int)\n\n# Save results for submission\nsubmission = pd.DataFrame({'id': id_column, 'sii': y_test_predict.flatten()})\nsubmission.to_csv(\"/kaggle/working/submission.csv\", index=False)\nprint(\"Optimized submission file created!\")\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-12-07T04:44:30.313933Z","iopub.execute_input":"2024-12-07T04:44:30.314372Z","iopub.status.idle":"2024-12-07T04:49:18.803428Z","shell.execute_reply.started":"2024-12-07T04:44:30.314331Z","shell.execute_reply":"2024-12-07T04:49:18.801750Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}