Версия scoring v1.0.0
Методология без чёрного ящика
TechRole Index - сравнительный индикатор 0-100, а не обещание зарплаты и не карьерный прогноз. Показатели доступны вместе с датой, выборкой и confidence.
Зарплатная статистика
Для профессии, уровня, региона и периода отдельно считаются: вакансии, вакансии с зарплатой, coverage, медиана, среднее, P25, P75, медианы нижних и верхних границ, sample size и confidence.
Midpoint = (нижняя + верхняя) / 2 используется только при наличии обеих границ. Единственная граница остаётся единственной - вторую мы не восстанавливаем.
Gross, net и неизвестный налоговый статус не смешиваются. Интерфейс MVP показывает явно обозначенный gross-срез. Валюты переводятся отдельным rate provider с сохранением исходной валюты, курса, даты и провайдера.
При менее чем 20 midpoint-наблюдениях медиана и среднее скрыты как «Недостаточно данных». Порог конфигурируется через MIN_SALARY_SAMPLE.
Тренды
Стрелка не сравнивает соседние дни. Для периода N сравниваются средние текущего и предыдущего окна:
Δ% = (avg current N - avg previous N) / avg previous N × 100
- ↗ рост: больше +3%
- → нейтрально: от -3% до +3%
- ↘ падение: меньше -3%
Рассчитываются окна 7, 30 и 90 дней. Для 90-дневного сравнения нужны данные за последние 180 дней.
Формула итоговой оценки
Количество вакансий логарифмируется, денежные и growth-экстремумы ограничиваются 5/95 перцентилями, затем признаки переводятся в percentile rank среди активных профессий. Итог ограничивается диапазоном 0-100.
| Компонент | Вес | Нормализация |
|---|---|---|
| Спрос | 30% | Percentile rank логарифма активных вакансий |
| Уровень зарплаты | 25% | Percentile rank winsorized медианы |
| Рост спроса | 20% | Percentile rank изменения спроса с ограничением экстремумов |
| Доступность для начинающих | 10% | Доля Junior, нормированная к 35% |
| Удалённая работа | 10% | Доля удалённых активных вакансий |
| Стабильность и качество | 5% | Coverage зарплат и размер выборки |
Score = 100 × Σ(weightᵢ × normalized_componentᵢ)
Breakdown и scoring_version сохраняются в profession_scores_daily. Новые веса создают новую версию, а не переписывают историю. Низкое качество данных остаётся видимым в badge и компоненте data quality.
Классификация вакансий
Основной классификатор объясним: Unicode-нормализация заголовка → алиасы → регулярные выражения → исключения → поле опыта → маркеры junior/middle/senior на русском и английском → confidence. Team Lead, Principal и Architect не становятся Senior автоматически. Optional AI может только помочь с неопределёнными вакансиями и никогда не обязателен.
Источники и условия
Публичные исторические метрики пока основаны на воспроизводимом подготовленном наборе. Открытый API «Работы России» загружает реальные записи в отдельный provenance-контур, но не перезаписывает показатели до проверки совместимости зарплат. Официальный HH API выключен. Никакой HTML-скрейпинг, CAPTCHA/proxy/rate-limit обход не применяется.
Подробнее об источниках →Короткие ответы
Частые вопросы о расчётах
Почему медиана и среднее показываются отдельно?
Среднее сильнее реагирует на редкие экстремальные значения. Медиана описывает середину выборки, поэтому два показателя дополняют друг друга.
Почему вместо зарплаты бывает «Недостаточно данных»?
TechRole Index не публикует итоговую midpoint-статистику, если наблюдений меньше настроенного порога. По умолчанию требуется не менее 20 записей с двумя границами вилки.
Что означает изменение за 7 дней?
Сравнивается среднее число наблюдений за текущие семь дней со средним за предыдущие семь дней. Один день с предыдущим днём не сравнивается.
Смешиваются ли gross и net зарплаты?
Нет. Gross, net и неизвестный налоговый статус разделяются. Неизвестный статус не включается в явно обозначенный gross-срез.
Принимает ли локальная модель решения вместо правил?
Нет. Основным остаётся объяснимый классификатор. Локальная модель может обработать ограниченное число неопределённых записей, её ответ валидируется и получает ограничение confidence.