Статус: Проект завершен. Разработано приложение на Streamlit.
В ходе данного проекта необходимо решить задачу мультиклассовой классификации и создать модель, которая наилучшим образом разделит пациентов по уровню риска на низкий, средний и высокий уровень.
Python, pandas, sklearn, matplotlib, phik, Pipeline, LogisticRegression, KNeighborsClassifier, RandomForestClassifier, XGBClassifier, Streamlit.
В ходе данного проекта была построена модель МО для выявления беременных с рисками для здоровья.
Перед проведением анализа и моделирования была сделана предобработка данных, в ходе которой были выявлены следующие моменты и проведены следующие действия:
- Названия столбцов приведены к "змеиному" регистру.
- Аномальное значение ЧСС равное 7 уд/мин было рассмотрено как опечатка и умножено на 10, для приведения в нормальному.
- Были обнаружены 574 строчки с явными дубликатами. Они были удалены.
- Неявных дубликатов нет.
На этапе исследовательского анализа данных:
- В данных присутствует дисбаланс классов: данных по пациентам с низким уровнем риска в 2 раза больше (51.8% всех данных или 234 человека), чем пациентов со средним и высоким уровнем.
- Пациентов с высоким риском незначительно больше (на 1.3% или 6 человек), чем пациентов со средним уровнем риска.
- Признаки, позволяющие хорошо разграничить пациентам по трём группам риска:
age
,bs
. - Признаки, позволяющие хорошо выявить пациентов с высоким уровнем риска, но плохо разграничивающим низкий и средний уровень:
systolic_bp
,diastolic_bp
,heart_rate
. - Признак, плохо разграничивающий пациентов по группам риска:
body_temp
.
В ходе корреляционного анализа данных были расчитана матрица корреляции коэффициентов Фи. Было выявлено, что мультиколлинеарность между признаками отсутствует.
На этапе обучения модели было построено 4 модели: LogisticRegression, KNeighborsClassifier, RandomForestClassifier, XGBClassifier. Для обучения использовались 6 входных признаков: 'age', 'systolic_bp', 'diastolic_bp', 'bs', 'body_temp', 'heart_rate'.
По результатам кросс-валидации лучшей оказалась модель XGBClassifier с параметрами {learning_rate=0.05, max_depth=5, n_estimators=100, random_state=10, StandardScaler()}. Ее метрика ROC-AUC на кросс-валидации равна 0.773. Метрика ROC-AUC на тестовых данных равна 0.848.
Матрица ошибок показала хороший результат: верно были предсказаны 344 случая (TP+TN) против 62 неверных (FP+FN) на обучающей выборке, и 32 верных на тестовой против 14 неверных. Таким образом, модель достаточно хорошо позволяет выявить пациентов из группы риска.
Рекомендации:
- Можно протестировать вариант сведения данной задачи к бинарной классификации, т.е. разделения всех беременных на тех у кого есть риск и на тех у кого он низок, т.е объединения классов "средний риск" и "высокий риск". Таким образом, получится избежать дисбаланса классов и более точно выявить пациентов в группе риска.