Перейти к содержимому
← Все кейсыML PipelineAI

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.

Демо

Как это выглядит

Архитектура

Архитектура системы

Upwork ScraperHH ScraperRaw Jobs200+/day3-LLM Pseudo-labelmajority, Kappa 0.82Feature Extract5 groups (ablation)Scoringgrid, thr=65FilterP94 R87 F1=.90TG Bothourly digestPrecision 94% | Recall 87% | F1 0.90 | Cohen's Kappa 0.82 | Threshold 65AI/LLMDataInfraEval
Реализация

Как это работает

Три 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% означает, что почти каждый автоотклик — на подходящую позицию.

Методы

Алгоритмы и паттерны

Pseudo-labeling (3 models)Ablation StudyCohen's KappaGrid SearchWeak Supervision (Snorkel-style)F1/Precision/RecallBias detection
Стек

Технологии

  • Python
  • scikit-learn
  • DeepSeek API
  • Telegram Bot API
  • PostgreSQL

Готовы обсудить?

Если вам нужен архитектор, который строит автономные AI-системы — напишите.

Сербия (Белград) · CET/CEST · рабочие часы совпадают с EU · Опыт международных контрактов