External Learning & Competitions
[2024][Basic][P2] Real and Fake Job Postings
I revisited the interrupted BERT run and built a duplicate-aware TF-IDF and LinearSVC baseline.
- Platform
- Kaggle
- Period
- 2024-08-11–2024-08-27
- Host
- sw.baek_00
- Metric
- Accuracy
- Model rule
- Use the pretrained BERT model; other models are not allowed

Where the earlier run stopped
The notebook loaded 12,516 training rows and 5,364 test rows, but training stopped at step 51 of 352. I treated the preprocessing and partial output as a historical run, not a completed BERT result.
Duplicate-aware split
Exact duplicate descriptions stay in one group before the train, calibration, and holdout split. This prevents a model from seeing the same job description on both sides.
Local baseline
Word and character TF-IDF with a class-weighted LinearSVC reached 0.9896 accuracy, 0.9307 balanced accuracy, 0.8879 F1, and 0.9187 average precision on the holdout. I reported minority-class precision and recall alongside accuracy.
The old notebook contained a plaintext API key. I excluded it, moved credential access to an environment variable, and left revocation and replacement to the credential owner. These numbers are local holdout results, not Kaggle leaderboard results.
What I changed for the rerun
I compared the original notebook result with a local holdout run. I used word+character TF-IDF + class-weighted LinearSVC; threshold selected on calibration F1 under description-grouped stratified train/calibration/holdout; 8,009/2,003/2,504 rows; seed 42.
- Earlier run
- train 12,516 rows; test 5,364 rows; training stopped at 51/352 steps (14%)
- Simple baseline
- accuracy 0.9525; balanced accuracy 0.5000; F1 0.0000; recall 0.0000
- Reworked model
- accuracy 0.9896; balanced accuracy 0.9307; F1 0.8879; precision 0.9115; recall 0.8655; AP 0.9187
Exact duplicate descriptions stay in one split. The sanitized rerun contains no API key, but the owner must revoke and replace the credential exposed in the original notebook. Kaggle upload and leaderboard evaluation remain unverified.
The old notebook contained a plaintext API key. I excluded that file and changed the public example to read credentials from an environment variable. The old key still needs to be revoked and replaced by its owner.
Open the rerun scripts and sanitized notebooks
These numbers come from my documented local split, not from the Kaggle leaderboard. I did not reproduce a signed-in submission history or rank.