В этом посте мы собираемся более подробно изучить набор данных kaggle, когда не будет назначен медицинский прием, чтобы выяснить, какие факторы влияют на людей, пропускающих их встречи, и попытаться предсказать, пропустит ли человек встречу. Данные взяты из медицинских приемов в Бразилии. Набор данных содержит 110527 записей и следующую информацию:
- PatientId: идентификатор пациента.
- AppointmentID: идентификатор каждой встречи.
- Пол: мужской или женский.
- AppointmentDay: день встречи.
- ScheduledDay: день, когда пациент записался на прием.
- Возраст: возраст пациента.
- Район: место встречи.
- Стипендия: указывает, участвует ли пациент в программе государственной помощи.
- Гипертония: если у пациента гипертония.
- Диабет: если у пациента диабет.
- Алкоголизм: если пациент алкоголик.
- Инвалид: если у пациента есть инвалидность.
- Получено SMS: если пациенту было отправлено сообщение
- Нет - показать: пропустил пациент или нет.
Вступление
Можно увидеть, что большинство людей, почти 80%, приходят на прием к врачу. Но для тех, кто не знает, что может повлиять?
Раздел I. Какие факторы влияют на пропуск приема к врачу?
В этом разделе мы исследуем, какие факторы могут повлиять на пропуск человека на прием.
- Имеет ли значение время ожидания до встречи?
Более 40% людей, которые ждали менее 15 дней, приходили на прием к врачу, а из тех, кто ждал более месяца, приходили менее 10%. Для людей, которые опаздывали на прием, большая часть ожидала от 1 недели до 1 месяца. Кажется, что ожидание менее 15 дней увеличивает вероятность того, что человек пойдет на консультацию к врачу.
2. Имеет ли значение возраст?
Можно увидеть, что группы «Молодые взрослые» и «Подростки» имеют тенденцию пропускать больше встреч. Старшие люди, как правило, более надежны в плане появления на работе. Для группы «Чайлдс» существенной разницы между двумя группами нет (обе остались на уровне почти 20%).
3. Пропускает ли встречу, прежде чем снова пропадает?
Мы можем проверить, не пропустил ли человек встречу, и создать новую функцию под названием «missed_appointment_before» и проверить корреляцию с неявкой. У них есть корреляция 0,63, что является значительным.
The correlation between missed before and no-show is: 0.630
Раздел II: Прогнозирование того, что человек пропустит встречу
Во введении мы увидели, что большинство людей не пропускают свои встречи, поэтому у нас есть проблема классового дисбаланса. Весь код этого раздела находится в этом репозитории, здесь мы просто смотрим на лучшую модель и ее результаты.
Чтобы справиться с проблемой дисбаланса классов, был использован подход из https://developers.google.com/machine-learning/data-prep/construct/sampling-splitting/imbalanced-data, и были выполнены следующие шаги:
(В репозитории есть сравнение этого подхода и использования всего набора данных с использованием классификаторов Random Forests и GradientBoosting)
- Очистите данные, выполните проектирование функций и одно горячее кодирование категориальных функций
- Используйте понижающую дискретизацию и повышающий вес для набора данных перед построением модели
- Создайте классификатор
- Используйте точность и показатель F1 для оценки результатов
Последней моделью был GradientBoostingClassifier со следующими результатами:
GB - Accuracy: 89.36% GB - Precision score: 84.55% GB - Recall score: 96.30% GB - F1-score: 90.04%
Было бы ошибкой смотреть только на точность, если просто предположить, что все люди придут на встречу, вы получите точность почти 80% (это называется наивным классификатором).
Если мы хотим найти людей, которые пропустят встречу, то тех, кого не хватает наивному классификатору. Было бы неплохо взглянуть на метрику, учитывающую точность и отзывчивость. Это будет оценка F1, поэтому эта окончательная модель была выбрана на основе этой метрики.
Заключение
- Подождать менее 15 дней до встречи - отличный показатель того, что человек ее не пропустит.
- Старшие более надежны при посещении врача. Группы "Молодые люди" и "Подростки" часто пропускают встречи.
- Было возможно построить модель со счетом F1 90% для прогнозирования неявок.