ML-скоринг вакансий
Pseudo-labeling + ablation study — precision 94%, recall 87%, F1 0.90 на 200+ вакансиях/день
Что не работает
Ручной просмотр 200+ вакансий в день невозможен. Простые keyword-фильтры пропускают 40% подходящих и пропускают 30% нерелевантных. Нужна модель, которая понимает контекст, а не только ключевые слова.
Архитектурный подход
3-модельное pseudo-labeling (majority vote) для создания обучающей выборки без ручной разметки. Ablation study для выбора значимых фичей. Grid search для оптимизации порогов. Weak supervision (Snorkel-style) для масштабирования. Cohen's Kappa для контроля согласованности.
Что было сложно
Pseudo-labeling даёт шум: 3 LLM расходятся в 18% случаев — пришлось исследовать каждый disagreement и строить tie-breaking rules. Upwork агрессивно блокирует скрапинг — anti-detection, ротация прокси, fingerprint randomization. Grid search порогов (50-95) на реальных данных выявил неочевидный оптимум 65 — ниже, чем интуитивно ожидалось.
Моя роль и вклад
Архитектор и единственный разработчик
Весь продукт с нуля: скрапер Upwork/HH, ML-pipeline (pseudo-labeling 3 LLM, ablation study 5 feature groups, grid search порогов), Telegram-бот для дайджестов, деплой на выделенный сервер. Сам спроектировал и провёл ablation study, подобрал пороги через grid search.
Как это выглядит
Архитектура системы
Как это работает
Три LLM независимо размечают вакансии (подходит/не подходит). Majority vote → pseudo-labels. Ablation study: 5 групп фичей, каждая отключается поочерёдно, измеряется F1. Grid search по порогу score (65-95). IR-метрики: precision, recall, F1 на каждой итерации.
Почему именно так
Pseudo-labeling вместо ручной разметки
Вручную разметить 500+ вакансий для обучающей выборки
Ручная разметка: 2-3 дня работы, субъективна, не масштабируется. 3 модели × majority vote: объективнее одного человека, масштабируется на любой объём, Cohen's Kappa подтверждает согласованность.
Качественная разметка за минуты. Kappa 0.82 — согласованность выше, чем у двух людей
Результаты
- 01
- Precision 94%, Recall 87%, F1 0.90
- 02
- Cohen's Kappa: 0.82 (strong agreement между 3 LLM)
- 03
- Ablation study: 5 feature groups, каждая отключена поочерёдно
- 04
- Grid search по порогу: оптимум 65 из диапазона 50-95
- 05
- 200+ вакансий/день → hourly digest в Telegram
Влияние на бизнес
Автоматический скоринг 200+ вакансий/день вместо ручного просмотра. Время на поиск работы: с 2-3 часов/день до 5 минут (просмотр дайджеста в Telegram). Precision 94% означает, что почти каждый автоотклик — на подходящую позицию.
Алгоритмы и паттерны
Технологии
- Python
- scikit-learn
- DeepSeek API
- Telegram Bot API
- PostgreSQL