An open API service indexing awesome lists of open source software.

https://github.com/exp98/diploma_holland

Predicting the Holland RIASEC Code for a master's thesis (diploma)
https://github.com/exp98/diploma_holland

holland-test ml r riasec

Last synced: about 1 month ago
JSON representation

Predicting the Holland RIASEC Code for a master's thesis (diploma)

Awesome Lists containing this project

README

          

[![License: Apache 2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
![Under Review](https://img.shields.io/badge/status-under_review-orange)
![Main language: R](https://img.shields.io/badge/main_language-R-276DC3?logo=r)
![Also uses: Python](https://img.shields.io/badge/also%20uses-Python-3776AB?logo=python)
![Research](https://img.shields.io/badge/type-academic%20research-blueviolet)
![Commits](https://img.shields.io/github/commit-activity/y/ExP98/Diploma_Holland)
[![](https://img.shields.io/badge/Shiny-shinyapps.io-blue?style=flat&labelColor=black&logo=RStudio&logoColor=blue)](https://exp98.shinyapps.io/diploma_holland/)

# Предсказание кода Голланда (RIASEC) по результатам психометрических тестов на основе ML

## Краткое описание

Выполнено в рамках магистерской ВКР по теме **"Определение кода Голланда по результатам психометрических тестов личности на основе методов машинного обучения в условиях неполноты информации"**.

Проект посвящён анализу данных психометрических тестов и построению моделей машинного обучения для предсказания индивидуальных характеристик пользователей. Разработано Shiny-приложение для интерактивного взаимодействия с результатами.

Выполнил **Глушков Егор Александрович**, группа 23.М04-мм, программа "Математическое обеспечение и администрирование информационных систем"

## Описание структуры проекта

- `0. Data/` — исходные данные
- `1. R/` — скрипты на R -- основные расчетные модули и эксперименты
- `2. Python/` — модели на Python: нейросетевые модели, ранжирование
- `3. Shiny_app/`, app.R — код и вспомогательные файлы интерактивного веб-приложения
- `4. Output/` — графики и результаты
- `5. Sources_TeX_n_Docs/` — исходники-материалы текста и презентации, готовые файлы и документы
- `rsconnect/` — конфигурация публикации приложения

## Как запустить проект

1. Положите данные в папку `0. Data`
2. Откройте среду разработки для R (RStudio, VS Code), установите R (4.4.2) и необходимые пакеты
3. Запустите `00. Source_all.R`
4. Для проверки регрессионных моделей проведите тесты из файла `06. Regression_models.Rmd`
5. Для проверки классификационных моделей проведите тесты из файла `07. Classification_models.Rmd`
6. Для проверки моделей ранжирования и регрессионных моделей на основе нейронных сетей:
- Установите Python 3.12.3, PyTorch 12.8
- регрессия: `01.multitarget_regression.qmd`
- ранжирование: `02.learn_to_rank.qmd`
7. Для проверки моделей и подходов, не вошедших в итоговый анализ:
- `09. Non_standard_models.Rmd`
- `03.classification_to_cluster_relations.qmd`
8. Для запуска приложения app.R: ```r shiny::runApp()```

## Дисклеймер

Данные для настоящего научного исследования были предоставлены сторонней организацией, обладающей заинтересованностью в его результатах, и являются её собственностью. В рамках достигнутых соглашений о неразглашении конфиденциальной информации исходные материалы были оставлены в закрытом доступе.

В случае заинтересованности во внесении вклада в исследования или ознакомлении с используемыми данными просьба направить соответствующий запрос автору работы. Автор, в свою очередь, организует взаимодействие со сторонней организацией — владельцем данных.

## Обратная связь

Автор открыт к предложениям, идеям и сотрудничеству по теме научной работы: egorglushkov2014 [at] yandex [dot] ru

# Краткая техническая записка

## Цель и суть задачи

Цель работы — автоматизация процесса профориентации с помощью методов машинного обучения.
Задача состояла в том, чтобы предсказать **код Голланда (RIASEC)** по неполным результатам других психометрических тестов.
Профиль личности рассматривался как **вектор из шести числовых оценок**, каждая из которых отражает выраженность соответствующего типа личности, либо как **упорядоченный набор из шести меток**, отсортированных по степени выраженности.

Тест Голланда широко используется в профориентации, но чувствителен к социально-культурным факторам и не всегда стабилен. В работе предлагается определять код Голланда по данным других, более надёжных тестов — Леонгарда, Айзенка, Кеттелла, Шварца и «Большой пятёрки».

В исследовании использовались анонимизированные данные **1278 пользователей** мини-приложения **«Психологические тесты» ВКонтакте**, разработанного лабораторией прикладного искусственного интеллекта СПб ФИЦ РАН.
Результаты работы применяются в этой лаборатории: найденный лучший пайплайн и обученная модель используются при анализе новых данных пользователей.

---

## Метрики качества

Для оценки точности и сопоставления разных типов алгоритмов применялись специализированные метрики:

- **C-индекс** — профильная метрика предметной области, мера **сходства профессиональных профилей**, применявшаяся как основная при сравнении всех моделей и подходов.
- **Регрессия** — среднеквадратичная ошибка (**RMSE**) по шести выходным переменным
- **Классификация** — показатели **Hits≥K@3** ($K = 1..3$), отражающие долю случаев, когда истинный код присутствует в числе первых 1–3 предсказаний
- **Ранжирование** — метрика **NDCG@3 (Normalized Discounted Cumulative Gain)**, оценивающая качество порядка первых трёх элементов предсказанного списка

Все модели и ансамбли сравнивались именно по значению C-индекса, как универсальной метрике качества в данной предметной области, также позволяющей сравнивать между собой и различные подходы.

---

## Подходы к постановке задачи

### Многоцелевая регрессия

Рассматривались три способа решения задачи прогнозирования шести факторов RIASEC:

- **Multioutput** — обучение шести независимых моделей, каждая из которых предсказывает один из факторов
- **Regressor chain** — последовательность моделей, где выходы предыдущих используются как признаки для следующих, что позволяет учитывать зависимости между факторами
- **Модели со встроенной поддержкой мульти-выхода** — CatBoost, LightGBM, Random Forest и ExtraTrees, которые способны предсказывать несколько выходов одновременно

---

### Классификация

Были реализованы три постановки задачи:

- **Multiclass** — классификация на шесть классов, каждому объекту соответствует один основной тип; итоговая тройка формируется по трём наибольшим вероятностям
- **Multilabel** — шесть независимых бинарных классификаторов, определяющих, входит ли код в «топ-3»; финальная тройка кодов выбирается по наибольшим вероятностям принадлежности
- **Label powerset** — классификация на множество комбинаций трёх кодов Голланда, при этом внутри тройки порядок не учитывается. Модель фактически предсказывает тройку кодов, совпадающую с набором наиболее выраженных типов

---

### Списочное ранжирование

В рамках подхода ранжирования задача формулировалась как предсказание **полного упорядоченного списка шести кодов Голланда**.
Использовались три архитектуры моделей:

- **Многослойный перцептрон (MLP)**
- **Deep & Cross Network**
- **Трансформер**

Для обучения применялись функции потерь:

- **ApproxNDCG** — приближённая оптимизация метрики NDCG
- **LambdaRank** — градиентная оптимизация парных сравнений
- **ListNet@1** и **ListNet@3** — вероятностные функции потерь, минимизирующие различие между распределениями ранговых позиций

Метрика качества — **NDCG@3**, отражающая точность порядка трёх наиболее выраженных типов личности.

---

## Восстановление неполных данных

В работе реализованы и сравнены четыре подхода:

- **MICE (Multivariate Imputation by Chained Equations)**
• Плюсы: учитывает взаимозависимости признаков, выполняет итеративную множественную импутацию
• Минусы: вычислительно сложен, возможны проблемы со сходимостью при высокой корреляции признаков

- **Soft Impute**
• Плюсы: основан на регуляризованном сингулярном разложении (SVD), устойчив и хорошо масштабируется
• Минусы: описывает преимущественно линейные зависимости

- **Маски пропусков**
• Плюсы: простота реализации, не создаёт синтетических значений
• Минусы: модель должна самостоятельно учитывать наличие или отсутствие значения как информативный признак

- **Ансамбли по комбинациям тестов**
• Плюсы: адаптируется к конкретным комбинациям заполненных тестов
• Минусы: требует большого числа моделей и усложняет сопровождение

Наилучший результат показал метод **Soft Impute** в сочетании с ансамблем регрессоров, где веса подбирались методом роя частиц.

---

## Взвешенное ансамблирование (блендинг)

Для объединения результатов базовых моделей использовалось **взвешенное ансамблирование (blending)** — линейная комбинация предсказаний с оптимизацией весов по целевой метрике.
Рассматривались шесть способов подбора весов:

- **Равные веса** — базовый способ без оптимизации
- **Вектор Шэпли** — стохастическая аппроксимация вклада каждой модели на основе оценок важности
- **Grid search** — перебор весов по равномерной сетке с шагом 0.05–0.1 и выбор комбинации, максимизирующей метрику
- **Квадратичная оптимизация (Quadratic programming)** — минимизация квадратичной ошибки ансамбля при ограничении суммы весов
- **Генетический алгоритм (Genetic algorithm)** — эволюционная оптимизация: случайная инициализация, операции скрещивания и мутации, отбор лучших комбинаций по метрике
- **Метод роя частиц (Particle swarm optimization, PSO)** — оптимизация в пространстве весов с использованием популяции частиц, каждая из которых обновляет положение под действием собственной инерции и притяжения к лучшим решениям. Такой подход обеспечивает эффективный поиск глобального оптимума и устойчивость ансамбля к переобучению

Метод роя частиц показал наилучшие результаты по C-индексу и устойчивости ансамблей.

---

## Объём и глубина исследования

Разработан вычислительный конвейер, включающий все этапы — от восстановления пропусков и снижения размерности до обучения моделей и построения ансамблей.
Комбинация параметров всех модулей (способ восстановления данных, применение PCA, тип постановки задачи, вариант подхода, набор базовых моделей, их гиперпараметры и метод ансамблирования) образует **до 63 000 возможных конфигураций**.

Предложен способ автоматизированного перебора конфигураций, позволяющий протестировать большое число вариантов без полного перебора всех комбинаций.
Подбор гиперпараметров для каждой модели осуществлялся с помощью **Grid search** по заданным диапазонам параметров и выполнялся в составе единого вычислительного эксперимента.

---

## Результаты вычислительного эксперимента

| Категория задачи | Лучшая модель | Метрика (C-индекс) |
|------------------|----------------|--------------------|
| Регрессия (multioutput) | Lasso (L1) | 11.175 |
| Классификация (multilabel) | kNN | 10.838 |
| Ранжирование | MLP с функцией потерь ListNet@3 | 10.788 |
| Ансамбль регрессоров (multioutput, PSO) | Lasso + Stepwise + CatBoost + ExtraTrees | **11.663** |
| Ансамбль классификаторов (multilabel, PSO) | kNN + SVM + Logistic L1 + XGBoost + LightGBM | **11.625** |
| Восстановленные данные (Soft Impute + PSO) | Ансамбль регрессоров | 10.740 |

**Выводы:**
- Ансамблевые методы обеспечивают устойчивое повышение точности по сравнению с одиночными моделями
- Классические ML-модели (Lasso, ExtraTrees, LightGBM) показали более высокие результаты, чем нейросетевые, что связано с ограниченным объёмом данных
- Использование Soft Impute и методов оптимизации весов (PSO) позволило добиться лучших показателей при работе с неполными данными
- Итоговые значения C-индекса 11.6–11.7 превосходят результаты аналогичных исследований (≈ 11.0)

---

## Технологический стек

- **R 4.4.2** — основной язык реализации вычислительного конвейера (предобработка, восстановление данных, обучение, ансамблирование, эксперименты)
- **Python 3.12.3** — реализация нейросетевых и ранжирующих моделей
- **Shiny** — веб-интерфейс прототипа инструмента профориентации
- Использовались специализированные библиотеки для статистического анализа, машинного обучения и визуализации данных

---

## Прототип и внедрение

Создан прототип инструмента профориентации на платформе **R Shiny**.
Пользователь вводит частичные результаты тестов, система выполняет их валидацию, восстанавливает пропуски методом Soft Impute, применяет обученный ансамбль моделей и отображает предсказанный код Голланда с пояснением.
Приложение развернуто в открытом доступе и используется в рамках лабораторных исследований СПб ФИЦ РАН.

---

## Итоговые результаты

- Реализованы четыре метода восстановления данных, три подхода к постановке задачи и шесть алгоритмов ансамблирования
- Проведён вычислительный эксперимент с автоматизированным перебором до 63 000 конфигураций моделей
- Лучшая модель — **взвешенный ансамбль регрессоров с оптимизацией весов методом роя частиц (PSO)** — достигла **C-индекса = 11.663**
- Разработан программный прототип и проведена оценка качества на неполных данных (C-индекс = 10.74)
- Результаты внедрены в научно-исследовательские работы СПб ФИЦ РАН и представлены на конференции SCM 2025