I'm working on a project where I need to predict university admission (binary variable: 0 = not admitted, 1 = admitted) based on a set of candidate features (e.g., academic scores, age, gender, etc.). The main challenge is that my target variable, admission, is highly imbalanced: only about 1% of the candidates get admitted.
I’ve tried several techniques so far, but I’m struggling with predicting positive cases (admitted candidates). Here’s what I’ve done:
Random Forest: Works reasonably well in terms of overall accuracy, but it takes a long time to train due to the large dataset and fails to capture almost any true positives (TP).
Basic Logit Lasso: This model also gives good accuracy, but I see little to no improvement in predicting actual admissions.
Resampling Techniques:
- Upsampling: Duplicating positive cases.
- Downsampling: Reducing negative cases.
- Weighted Classes: Assigning higher weight to the minority class (admitted candidates).
These approaches slightly improved the overall performance, raising accuracy to around 0.7, but the model still struggles to predict true admissions.
Gradient Boosting: I’m currently experimenting with xgboost, but I still face the same issues with imbalanced classes, with a low true positive rate.
I’m aware that there are effective algorithms in Python like cost-sensitive boosting, but I’m working on a computer with administrative data where Python cannot be installed, so I have to stick to R.
What other techniques can I try to handle such an imbalanced dataset and improve the prediction of positive classes? I’m specifically looking to boost precision and recall for true positives without significantly sacrificing overall accuracy.