Задача бинарной классификации — предсказать, уйдет ли клиент (TARGET = 1) или останется (TARGET = 0).
Проект включает полный цикл работы с данными: предобработка, анализ, feature engineering, обучение и сравнение нескольких моделей машинного обучения.
- train.csv — обучающая выборка (355 190 строк, 116 признаков)
- test.csv — тестовая выборка для предсказаний
Целевая переменная: TARGET (1 — отток, 0 — клиент остался)
- Удаление признаков с >20% пропусков — 72 признака удалено
- Заполнение пропусков — медианное значение для оставшихся признаков с низким процентом пропусков
- Удаление дубликатов
- Визуализация распределения каждого признака (6×7 графиков)
- Анализ целевой переменной: сильный дисбаланс классов (92% — 0, 8% — 1)
- Категориальный признак
PACK— one-hot encoding - Числовые признаки — стандартизация (StandardScaler)
- Разделение данных — train/test 80/20 со стратификацией
| Naive Classifier (все 0) | Random Forest | MLPClassifier (sklearn) | Keras Sequential (с Dropout) | Pure TensorFlow (ручная реализация) | NumPy NN (ручная реализация)
- Лучшая модель (MLPClassifier) применена к тестовым данным
- Результат сохранён в
predictions.csv
- Сильный дисбаланс классов — наивный классификатор уже даёт 91.9% accuracy, поэтому ключевая метрика — AUC-ROC
- Random Forest показал лучший результат accuracy
- MLPClassifier (sklearn) показал AUC 0.919, что сопоставимо с кастомными реализациями
- Реализации нейронных сетей вручную (TensorFlow и NumPy) дали близкие результаты (~0.824 AUC)
pandas,numpy— обработка данныхmatplotlib,seaborn— визуализацияscikit-learn— ML модели, предобработка, метрикиtensorflow,keras— нейронные сети