Описание проекта
Проект предоставленный компанией «Цифра» (https://www.zyfra.com/ru/) представляет собой реальную задачу Data Science из золотодобывающей отрасли. Необходимо подготовить прототип модели машинного обучения для «Цифры». Компания разрабатывает решения для эффективной работы промышленных предприятий. Модель должна предсказать коэффициент восстановления золота из золотосодержащей руды. Имеются данные с параметрами добычи и очистки. Модель должна помогать оптимизировать производство, чтобы не запускать предприятие с убыточными характеристиками.
Описание данных
Технологический процесс
• Rougher feed — исходное сырье
• Rougher additions (или reagent additions) — флотационные реагенты: Xanthate, Sulphate, Depressant
○ Xanthate **— ксантогенат (промотер, или активатор флотации);
○ Sulphate — сульфат (на данном производстве сульфид натрия);
○ Depressant — депрессант (силикат натрия).
• Rougher process (англ. «грубый процесс») — флотация
• Rougher tails — отвальные хвосты
• Float banks — флотационная установка
• Cleaner process — очистка
• Rougher Au — черновой концентрат золота
• Final Au — финальный концентрат золота
Параметры этапов
• air amount — объём воздуха
• fluid levels — уровень жидкости
• feed size — размер гранул сырья
• feed rate — скорость подачи
• rougher — флотация
• primary_cleaner — первичная очистка
• secondary_cleaner — вторичная очистка
• final — финальные характеристики
Возможные значения для блока [тип_параметра]:
• input — параметры сырья
• output — параметры продукта
• state — параметры, характеризующие текущее состояние этапа
• calculation — расчётные характеристики
Основные этапы проекта:
- 1 Описание проекта Восстановление золота из руды¶
- 1.1 Описание данных
- 1.1.1 Расчёт эффективности
- 1.1.2 Метрика качества
- 2 Подготовка данных
- 2.1 Откроем и изучим файлы
- 2.2 Смотрим распределение данных
- 2.3 Проверим, что эффективность обогащения рассчитана правильно.
- 2.4 Проанализируем признаки, недоступные в тестовой выборке.
- 2.5 Проверка на дубликаты
- 2.6 Добавим недостающие данные в data_test
- 2.7 Обработка пропусков
- 2.8 Выводы по подготовке данных
- 3 Анализ данных
- 3.1 Концентрация металлов (Au, Ag, Pb) на различных этапах очистки
- 3.2 Распределения размеров гранул сырья
- 3.3 Суммарная концентрация всех веществ на разных стадиях
- 3.4 Подготовим датафреймы для прогнозирования features, target
- 3.5 Вывод по анализу данных
- 4 Модель
- 4.1 Напишем функцию для вычисления итоговой sMAPE.
- 4.2 Линейная регрессия
- 4.3 Дерево решений
- 4.4 Случайный лес
- 4.5 Расчёт по выбранной модели
- 4.6 Проверка модели на адекватность
- 5 Выводы
Реализация проекта
В рамках предобработки данных проекта, изучены загруженные файлы.
Построены графики распределения значений по всем числовым полям. Большинство признаков имеют нормальное распределение, но вместе с тем встречаются и скошенные распределения. Также у некоторых признаков видно значимое число значений в области нуля. В дальнейшем эти выбросы были удалены.
Проверен расчёт эффективности обогащения. Вычислено значение MAE между данными и расчётными значениями эффективности. Полученные значения МАЕ близки к 0. Это означаем, что эффективность обогащения рассчитана правильно.
Проанализированы поля недоступные в тестовой выборке, где отсутствуют целевые признаки для моделей 'rougher.output.recovery', 'final.output.recovery', а также значения output по всем операциям по всем элементам. Это концентрации элементов после основных операций. Это фактические данные, которые мы можем получить только по факту реальных измерений. А задача ML-модели получение прогноза. Поэтому в реальности у нас и не должно быть этих данных в файле test.
Проведена проверка на дубликаты. Обработаны пропуски. Исключительно для проверки качества оценки модели поля 'rougher.output.recovery', 'final.output.recovery' добавлены в тестовый файл для формирования выборки target_test.
Анализ концентрации металлов показал, что концентрация золота значительно увеличивается на каждом этапе обработки сырья. Концентрация золота в отвалах тоже увеличивается, но при этом на порядок ниже чем в сырье. На всех графиках концентрации сырья видны значения равные нулю. Судя по распределению, это выбросы.
Построены графики распределения плотности вероятности значений размеров гранул на входе в этапы флотации и финальной очистки выборок train и test Сами распределения похожи, что говорит об однородности данных размеров сырья в выборках train и test.
Исследована суммарная концентрация всех веществ на разных стадиях: в сырье, в черновом и финальном концентратах.
Бросается в глаза большой хвост выбросов для значений от левого уса до нуля. Для всех суммарных концентраций значения левого уса рассчитаны. Удалены выбросы попадающие в этот промежуток.
Подготовлены датафреймы для прогнозирования features, target.
Описана функция для вычисления итогового показателя качества модели - sMAPE.
На данных train обучены модели линейной регрессии, дерева решений, а также случайного леса. Проведена оценка каждой модели.
Модель линейной регрессии
Модель дерева решений
Подбор параметров для данной модели был реализован в виде цикла.
Модель случайного леса
В результате сравнения результатов, для дальнейшего прогнозирования выбрана модель случайного леса с параметрами:
1. для этапа rougher глубина 5, количество деревьев 150.
2. для этапа final глубина 5, количество деревьев 200.
Эти параметры позволяют получить на данных train показатель smape равный 7.8902
Итоговый расчёт на тестовых данных выбранной модели случайного леса позволил получить прогноз целевых признаков концентрации золота для этапа флотации и финальной очистки с показателем smape равным 9.17
Проведена проверка модели на адекватность. Итоговая оценка smape константной модели на тестовых данных равна 9.602
Особенности проекта
Прежде всего, данный проект отличается большим количеством специфических признаков. Смысл которых нужно было вникнуть, и понять общую картину. Именно этим и отличаются модели реальных производственных процессов.
Во-вторых было интересно поработать с особым, специфическим для компании-заказчика показателем качества sMAPE. Для его расчёта необходимо было реализовывать модели по двум этапам очистки, а в дальнейшем по двум результатам рассчитывать итоговый. Это было необычно и интересно!
Ссылка на мой код в GitHub