Цель проекта — разработать модель для импутации данных STR (Short Tandem Repeats) на основе SNP (Single Nucleotide Polymorphisms) данных для коров Голштинской породы. Это важно для подтверждения родословной животных в животноводстве, что способствует улучшению селекционных программ.
├── Makefile <- Команды для запуска скриптов
├── README.md <- Описание проекта
├── config <- Конфигурационные файлы для моделей
│ ├── config_catboost.yaml
│ └── config_xgboost.yaml
├── data
│ ├── processed <- Обработанные данные
│ │ ├── snp_pivot.csv
│ │ ├── str_pivot.csv
│ │ └── STR_test_imputed.csv
│ └── raw <- Сырые данные
│ ├── data.zip
│ ├── FinalReport.csv
│ ├── snp_map_file.csv
│ ├── STR_test.csv
│ └── STR_train.csv
├── docs <- Документация
│ ├── README.md
│ └── Тестовое задание.pdf
├── environment.yml <- Описание окружения для conda
├── ksitest <- Исходный код проекта
│ ├── __init__.py
│ ├── impute.ipynb
│ ├── impute_str.py <- Скрипт для импутации STR данных
│ ├── optuna_hyperparameter_optimization.py
│ ├── prepare
│ │ └── preprocess.py <- Скрипт для предобработки данных
│ └── train_model.py <- Скрипт для обучения моделей
├── models <- Сохраненные модели
│ ├── catboost <- Модели CatBoost
│ └── xgboost <- Модели XGBoost
├── notebooks
│ └── EDA.ipynb <- Ноутбук с разведочным анализом данных
├── pyproject.toml <- Конфигурация проекта
├── results <- Результаты экспериментов
│ ├── catboost
│ │ ├── optuna_results_catboost.txt
│ │ ├── results_CatBoost_iterative.txt
│ │ ├── results_CatBoost_none.txt
│ │ ├── results_CatBoost_simple.txt
│ │ ├── results_CatBoost_winsorization.txt
│ │ └── results_CatBoost_zscore.txt
│ ├── optuna_test
│ │ ├── optuna_results_catboost.txt
│ │ └── optuna_results_xgboost.txt
│ └── xgboost
│ ├── optuna_results_xgboost.txt
│ ├── results_XGBoost_iterative.txt
│ ├── results_XGBoost_none.txt
│ ├── results_XGBoost_simple.txt
│ ├── results_XGBoost_winsorization.txt
│ └── results_XGBoost_zscore.txt
├── setup.cfg <- Конфигурация для инструментов кодирования
└── tests <- Тесты для проверки кода (если применимо)
-
Установка окружения:
mamba env create -f environment.yml conda activate ksitest
-
Загрузка данных:
gdown https://drive.google.com/uc?id=1t5mAz9s6xu40J7_QUSnBqcLmCX-T8L56 -O data/raw/data.zip unzip data/raw/data.zip -d data/raw/
- SNP данные: Загружаются и преобразуются в формат
animal_id
xSNP Name
, пропуски заполняются средними значениями. - STR данные: Преобразуются в формат
animal_id
xSTR Name
, удаляются выбросы (значения > 600).
- Использовались модели CatBoostRegressor и XGBRegressor.
- Применялись различные методы обработки выбросов:
- None: Без обработки выбросов.
- Winsorization: Ограничение экстремальных значений (обрезание 5% с каждой стороны).
- Z-score: Удаление значений за пределами 3 стандартных отклонений.
- Обученные модели использовались для предсказания отсутствующих STR аллелей в тестовом наборе.
- Результаты сохранялись в
STR_test_imputed.csv
.
После обучения моделей с различными методами обработки выбросов были получены следующие средние значения RMSE и R²:
Метод | Средний RMSE | Средний R² |
---|---|---|
CatBoost | 2.4172 | 0.6879 |
XGBoost | 2.6540 | 0.4087 |
Метод | Средний RMSE | Средний R² |
---|---|---|
CatBoost | 1.6678 | 0.8211 |
XGBoost | 1.6684 | 0.8203 |
Метод | Средний RMSE | Средний R² |
---|---|---|
CatBoost | 1.7641 | 0.7982 |
XGBoost | 1.7461 | 0.8050 |
- Winsorization показал наилучшие средние результаты по RMSE и R² для обоих алгоритмов.
- Z-score также улучшил результаты по сравнению с обучением без обработки выбросов, но уступил Winsorization.
- RMSE и R² варьируются в зависимости от выбранного метода обработки выбросов и алгоритма.
- Обработка выбросов значительно влияет на качество модели. Применение Winsorization привело к существенному снижению RMSE и увеличению R².
- Модели CatBoost и XGBoost показали схожие результаты при использовании методов обработки выбросов.
- Вариабельность RMSE и R² указывает на то, что разные аллели могут быть предсказаны с различной точностью.
-
Ансамблирование моделей: Можно попробовать объединить результаты разных моделей, таких как CatBoost и XGBoost, а также различных способов обработки выбросов. Это может улучшить общую точность предсказаний.
-
Тонкая настройка гиперпараметров: Использование инструментов вроде Optuna поможет автоматически подобрать лучшие параметры для каждой модели, что повысит её производительность.
-
Использование нейросетей (DNN): Применение глубоких нейронных сетей для моделирования более сложных зависимостей между SNP и STR может привести к более точным предсказаниям.
-
Генеративные модели: Попробовать модели, которые могут восстанавливать недостающие данные, например, вариационные автоэнкодеры (VAE) или генеративно-состязательные сети (GAN).
-
Создание новых признаков: Разработка дополнительных признаков или применение методов feature engineering для улучшения обучения моделей.
-
Аугментация данных: Использовать техники увеличения данных, которые позволят моделям лучше обучаться на большем количестве информации.
Теперь все шаги можно запустить одной командой make all
, которая выполнит установку окружения, загрузку данных, предобработку, обучение моделей и импутацию STR:
-
Полный процесс:
make all
-
Для повторения экспериментов по шагам:
-
Предобработка данных:
make prepare_data
-
Обучение моделей:
make train_catboost make train_xgboost
-
Импутация STR данных:
make impute_str
-