Структура проекта
-
папка
solution
- весь код, используемый для решения задачиmain.py
- запуск обучения лучшей модели- Папка
best_model
содержит .py код для обучения лучшей модели. Запуск осуществляется через main.py. - Папка
notebooks
содержит два подробных исследования и применение моделей машинного и глубокого обученияDL_based_approach
- обучена полносвязная нейронная сеть с подбором оптимизатороов и learning rateML_based_approach
- исследование различных методов машинного обучения
Результаты
Наилучший результат показала полносвязная нейронная сеть с оптимизатором RMSProp
и lr=3e-2
. При помощи этой модели был сформирован файл predictions.csv
Пример запуска:
python main.py train.csv test.csv target_dir
Сводная таблица:
Оптимизатор | lr | f1-macro | ROC curve area |
---|---|---|---|
RMSProp | 3e-2 | 0.993 | 0.99 |
Adam | 4e-2 | 0.99 | 0.99 |
SGD | 4e-2 | 0.488 | 0.51 |
Планировалось провести больше экспериментов и посмотреть на другие архитектуры, но оказалось, что полносвязная нейронная сеть, взятая в качестве бейзлайна, справляется с задачей на хорошем уровне.
ML_based_approach
- обучены следующие алгоритмы:- Decision Trees
- Random Forest
- XGBoost
- Support Vector Machine
В рамках исследования проведен анализ обучающей выборки, настройка гиперпараметров каждой из модели, оценка качества с использованием f1-macro и Roc-Auc, а также применены эмбеддинги word2vec и Fastext с PCA.
Среди методов машинного обучения наилучший результат показал классификатор SVM с векторизацией Tf-Idf. Более подробный анализ предоставлен в ноутбуке.
Сводная таблица:
Модель | f1-macro | ROC AUC | Лучшие гиперпараметры |
---|---|---|---|
Decision Trees (DT) | 0.51 | 0.59 | 'dt__criterion': 'gini', 'dt__max_depth': 20, 'dt__min_samples_leaf': 1, 'dt__min_samples_split': 5 |
Random Forest (RF) | 0.65 | 0.79 | 'rf__max_depth': 10, 'rf__min_samples_leaf': 5, 'rf__n_estimators': 300 |
XGBoost | 0.68 | 0.75 | 'xgb__gamma': 0.1, 'xgb__learning_rate': 0.1, 'xgb__max_depth': 10, 'xgb__min_child_weight': 3, 'xgb__n_estimators': 300 |
Support Vector Machine | 0.82 | 0.89 | 'svc__C': 1, 'svc__gamma': 'scale', 'svc__kernel': 'rbf' |
SVM + Word2Vec | 0.52 | 0.54 | 'svc__C': 10, 'svc__gamma': 'scale', 'svc__kernel': 'linear' |
SVM + pretrained FastText + PCA | 0.63 | 0.67 | 'svc__C': 10, 'svc__gamma': 'scale', 'svc__kernel': 'rbf' |
RF + pretrained FastText + PCA | 0.63 | 0.69 | 'rf__max_depth': 10, 'rf__min_samples_leaf': 10, 'rf__n_estimators': 100 |