Resampling (SMOTE/undersample), class weights, threshold tuning, PR-AUC over accuracy.
How to answer it
First ask whether it is a problem. A 1% positive rate is fine if the model ranks well; it is only a problem for a metric like accuracy, or for a model that never predicts the minority. So the first fix is measurement: precision, recall, PR-AUC, not accuracy.
Then, in order of preference:
Reweight rather than resample. class_weight="balanced" or scale_pos_weight makes the loss care about the minority without inventing data.
Tune the decision threshold. The model outputs a probability; the 0.5 cutoff is arbitrary. Pick the threshold on the validation set that hits the precision or recall the business needs.
Resample only if the above is not enough. Undersample the majority (cheap, loses data) or oversample the minority; SMOTE generates synthetic points and helps on some tabular problems and hurts on others. Resample inside the cross-validation loop, on the training fold only.
Get more minority examples if it is at all possible. Nothing else is as good.
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression(class_weight="balanced").fit(X_tr, y_tr)
p = clf.predict_proba(X_val)[:, 1]
# choose the threshold, not 0.5
from sklearn.metrics import precision_recall_curve
prec, rec, thr = precision_recall_curve(y_val, p)
What they are checking: whether you start with the metric and the threshold before touching the data.
Common mistake: SMOTE applied before the train/validation split, which leaks synthetic copies of validation points into training and produces a beautiful, fake score.