Тех же щей, да поменьше влей: оптимизируем расход ферросплавов с помощью ML +17


Бетономешалка мешает  бетон, а сталевар берет пробу на химический состав и замеряет температуру металла
Бетономешалка мешает бетон, а сталевар берет пробу на химический состав и замеряет температуру металла

Не каждый выпускник обязан всю жизнь помнить школьный курс химии. И всё же такие элементарные вещи, как химический состав стали, должны задерживаться в памяти. Уж вы-то, уважаемый читатель, его помните?

Если кивнули — попались. Нет такой вещи, как химический состав стали вообще. Разумеется, в основном это сплав железа и углерода. А вот в какой пропорции, и самое главное — какие ещё элементы там присутствуют? Есть неисчислимое множество марок стали, отличающихся по физическим и химическим свойствам. Только у нас в ЕВРАЗе их более 1 200.

К каждой марке свои требования по максимально и минимально допустимому содержанию тех или иных элементов. Они, как правило, значительно дороже, чем железо и углерод. С одной стороны, хочется их сэкономить. С другой — не выйти за нижнюю границу допустимого. В этой статье мы расскажем, как в этом помогает ML.

О, великий суп наварили!

Сталевар неспроста называется сталеваром. Его работа на этапе ВОС (внепечной обработки стали) чем-то напоминает варку супа. В железно-углеродный расплав добавляются дополнительные ингредиенты, нужные для конкретной марки. Ингредиенты должны как следует раствориться, перейти в расплав.

Сталь — очень густой суп. Если вы представили себе растворение сахара в кипятке, то — нет, всё намного сложнее и медленнее. Этап ВОС длится порядка сорока минут. Всё это время сталь перемешивается мощными струями аргона (обычный воздух повлиял бы на химический состав). В течение этих сорока минут сталевар постепенно, маленькими порциями, добавляет в ковш ферросплавы, содержащие необходимые элементы. От двух до четырёх раз он берёт пробы, проверяя химический состав расплава. Почти как хозяйка пробует суп: достаточно ли соли, перца? В зависимости от проб сталевар корректирует последующие дозы ферросплавов. Также ему нужно учитывать, что суп немного «дойдёт» уже в холодильнике.

Финальная проба берётся уже на следующем этапе, на МНЛЗ, машине непрерывного литья заготовок — именно по ней формируется паспорт стали. К этому времени химия стали ещё немного изменяется, и сталевар должен работать на опережение.

Схема технологического процесса
Схема технологического процесса

Как уже говорилось выше, ферросплавы — достаточно дорогие специи. Хочется тратить их как можно меньше, но при этом не портить вкус блюда. Однако нельзя просто так взять, отмерить нужное количество и закинуть в ковш. Есть некоторый коэффициент усвоения элемента из ферросплава. И проблема в том, что он вроде как есть (в физическом смысле), а вот у сталевара его в поваренной книге нет. Очень хитрый этот коэффициент, зависит от множества факторов: химического состава конкретной плавки, температуры, потребления кислорода…

Получается, что с одной стороны — потенциально можно сэкономить, а с другой стороны — для экономии нужен некий показатель, который неочевидным образом выводится из множества числовых параметров. Звучит как то, что можно оптимизировать с помощью ML? Вот и в ЕВРАЗе так решили. Забегая вперёд: не ошиблись.

Не сыпь мне соль на глаз

Разумеется, сталеварение появилось не вчера и уж точно намного раньше, чем machine learning. Как сталевары справлялись раньше? Опять же, с помощью нейросетей. Только не машинных, а естественных. Проще говоря — профессиональным чутьём, наработанным за сотню плавок, и опытом, усвоенным от коллег.

Цифровой подсказчик для этапа ВОС в ЕВРАЗе — тоже не новость. Предыдущая попытка рассчитывать коэффициенты на компьютере была предпринята ещё в далёком 1995 году. Тогдашний подсказчик поставлялся вместе с оборудованием и использовал классические алгоритмы. В чём была его проблема? Да практически во всём. Он не учитывал разнообразие марок стали и жёсткие требования к химии каждой из них, температуру стали, вес плавки и другие технологические параметры. И самое главное — он был основан на несовершенной физико-химической модели (а совершенную модель плавки построить очень тяжело). В общем, классический подсказчик не отвечал требованиям производства.

Успехи машинного обучения вдохновили нас предпринять вторую попытку. Машинное обучение — это дёшево и сердито. Дёшево, потому что вместо классической физико-химической модели с переходными процессами, которая тянет на десяток научных статей и пару докторских диссертаций, можно построить ML-модель — за конечное время и без привлечения научно-исследовательских центров. А сердито, потому что эта модель или будет решать поставленную задачу с приёмлемой точностью, или мы откажемся от этой затеи ещё на этапе проверки гипотезы. Спойлер: от затеи мы не отказались.

Конечно же, вначале мы осмотрелись по сторонам: что там у конкурентов коллег по цеху? В конце концов, у нас металлургическая компания, а не IT-гигант, который разрабатывает собственные аналоги уже существующих инструментов просто потому, что может. Однако то, что нашлось в открытом доступе, наши потребности не удовлетворяло. Слишком маленький спектр химических элементов, для которых производится оптимизация. Да и нюансы производства никто не отменял. Однако само по себе существование похожих решений придавало оптимизма, и мы приступили к работе своей командой.

Попытка — не пытка

Для запуска проекта и проверки гипотезы необходимо было собрать команду лучших специалистов. Как и во всех проектах цифровой трансформации ЕВРАЗа, команда была сборная. Со стороны производства — трое технологов, которые делились знанием предметной области, определяли критерии и оценивали результат, а также бизнес-транслятор. Со стороны IT — Data Engineer, два Data Scientist’а. 

И, разумеется, менеджер проекта.

Юлия Туртаева, руководитель проекта по IT

На первом этапе Data Engineer выгрузил сырые данные по всем плавкам за три года. Эти данные передали Data Scientist’ам. В таком формате с данными было работать сложно. Нужно было придумать, как их агрегировать, при этом не теряя полезной информации. Для этого нужно было понять, какая именно информация полезна. А потому пришлось начать анализ данных буквально в том виде, в котором они хранятся в производственных базах.

В распоряжении Data Scientist’ов была куча потенциально интересной информации по каждой плавке: время начала и окончания, марка выплавляемой стали, требования по химии, фактические химические анализы стали, температура, расход газов на продувку (кислород, аргон), около сотни отдаваемых материалов (часть материалов — ферросплавы, часть — шлакообразующие и другие) с расходами каждого из них и распределением по времени отдачи, углеродный эквивалент, масса лома и чугуна, имена агрегатов (в производственной цепочке ВОС есть несколько паралелльных линий)…

Очевидно, для процесса важна масса стали. Данные по ней были с большим количеством пропусков, зато разброс был небольшим. Также удалось получить общие данные, не привязанные к плавкам: химические анализы ферросплавов от поставщика и от нашего отдела качества. Наконец придумали, как собрать данные в «плоский» формат, где каждая строка — отдельная плавка. Суммировали все отдачи материалов по агрегатам (конвертер, ковш, ВОС) от начала обработки плавки до её окончания, распределили химические анализы по этапам, оставили только первые и последние анализы на каждом агрегате (конвертер, ковш, ВОС, конечный анализ на МНЛЗ).

С бизнесом и технологами мы определились, что рекомендацию будем формировать на отдачу ферросплавов таким образом, чтобы отдача не была избыточной и приводила химию стали на МНЛЗ в границы между серединой и минимумом требований по марке. Рекомендация должна приходить после первой химической пробы на этапе ВОС, от неё мы и отталкивались. Начали обучать ML-модели «в лоб», просто подав на .fit() все параметры, потенциально известные до начала расчёта подсказки. Целевым параметром выбрали химию на МНЛЗ. Получили очевидный результат: чем больше первая проба на ВОС, тем больше будет проба на МНЛЗ, и наоборот. Удивительно, не правда ли? Немного подумав, перешли к формированию более репрезентативного целевого значения для модели. Создали новую переменную дельту — между первым анализом на ВОС и химией на МНЛЗ — и решили прогнозировать именно этот перепад за счёт добавления тех или иных ферросплавов на ВОС. Результаты сильно улучшились, но до идеала было далеко.

Следующая проблема — сталевар может закинуть в ковш ферросплав Х1 и привнести Y1% чистого элемента в сталь, а может отдать Х2 и привнести Y2%. Также набор ферросплавов на складе меняется со временем: в один год закупают один материал, на следующий год цены на рынке меняются и выгоднее купить аналог с немного другим хим. составом. Решили, что для модели нужно агрегировать все отдельные ферросплавы в одну общую фичу, чтобы не размазывать важность между всеми, а также чтобы наши модели не требовали дообучения при появлении новых ферросплавов.

Так мы сели за анализ хим. состава ферросплавов…

Андрей Косинцев, Data Scientist

Химический состав приходит от двух источников: от поставщика (при отгрузке на склад) и от нашей лаборатории. Конечно же, эти наборы параметров коррелируют, но не сходятся (качество данных, куда же без него на производстве). На этапе анализа выяснилось, что все материалы после поступления на склад перестают отслеживаться, потому что есть склад, а есть бункер (откуда непосредственно отдаётся ферросплав). Новые ферросплавы засыпаются в бункер поверх предыдущих, затем при отдаче образуется воронка, слои смешиваются… Короче говоря, отследить, какое конкретно вещество будет подано в конкретную плавку, принципиально невозможно. Таким образом пришли к тому, что нужно рассчитать для каждой добавки средневзвешенную химию за прошедший год на основе массы общей поставки каждого ферросплава. На основе истории получили сводные таблицы — идентификатор ферросплава: содержание Mn, Si, Cr, V, C, Mo, Nb, Ti. При появлении новых ферросплавов достаточно будет просто расширить конфиги.

На основе таких таблиц преобразовали исторический датасет, превратили отдачи отдельных материалов в агрегированные фичи одной семантики — количество отданного чистого элемента для Mn, Si, Cr, V, C, Mo, Nb, Ti.

Продуктивная ML-модель обучалась на следующих сущностях данных:

Сущности данных, на которых обучалась модель
Сущности данных, на которых обучалась модель

Пробовали разные типы моделей, начиная от линейных моделей, заканчивая деревьями и бустингами. По MAE, R2 и скорости работы выбрали LightGBM.

На каждом этапе анализа формировали SHAP-графики — для обсуждения технологичности моделей. В ЕВРАЗе никому не нужны «чёрные ящики», по которым нельзя понять, насколько адекватно они описывают реальность.

Влияние отдачи чистого марганца (MN_QM_avg_based, кг) на дельту по марганцу между входной и выходной пробами (по оси Y — SHAP value)
Влияние отдачи чистого марганца (MN_QM_avg_based, кг) на дельту по марганцу между входной и выходной пробами (по оси Y — SHAP value)
Влияние углерода во входной пробе (C_1_pr) на дельту по марганцу между входной и выходной пробами (по оси Y — SHAP value)
Влияние углерода во входной пробе (C_1_pr) на дельту по марганцу между входной и выходной пробами (по оси Y — SHAP value)

Из перечисленных параметров сталевар может влиять (отдавая ферросплавы) только на отдачу чистого химического элемента на АПК (агрегат ковш-печь). Подавая на вход модели разные значения этого параметра, можно на основе прогнозов конечной химии составить график зависимости количества усвоенного элемента от количества чистого элемента поданного в ковш, а затем линейно интерполировать. Тогда искомый коэффициент усвоения — просто тангенс угла наклона красной прямой.

300 prediction'ов кремния (Si) выходной пробы (МНЛЗ) на основе первой пробы для расчёта коэффициента усвоения
300 prediction'ов кремния (Si) выходной пробы (МНЛЗ) на основе первой пробы для расчёта коэффициента усвоения

На этом закончился этап PoC, пришло время разрабатывать MVP, а затем и полноценный продукт.

Если известны усреднённые составы ферросплавов и коэффициенты усвоения чистых веществ, остаётся решить классическую задачу оптимизации — как набрать необходимое количество ферросплавов из каждого бункера. Граничные условия задаются маркой стали, минимизируемая целевая функция — суммарная стоимость добавленных ферросплавов. Это классическая задача, решаемая симплекс-методом.

В целом с точки зрения оптимизации задача не новая, почитать похожий пример можно тут, только вместо сталевара и стали — кошечки и вискас. Для решения задачи использовали симплекс linprog’а (уже потом я наткнулся на pulp и рекомендую его, мне он показался более наглядным в реализации). Пришлось добавить некоторые бизнес-правила: например, для части марок стали нельзя отдавать определённые ферросплавы — особенность техпроцесса. Так и родился наш оптимизатор.

Андрей Косинцев, Data Scientist

Попробовали запускать оптимизатор заочно, сравнивая с фактическими отдачами сталевара — результат был в целом адекватен. Затем провели тестирование подсказчика в цехе. Совместно с технологами мы разбирали каждую модель по каждому химическому элементу (Si, Mn и так далее), проверяли её на «технологичность» и оценивали результаты. Если модель показывала низкую предиктивную метрику или неверно определяла важность входных параметров и их корреляцию, мы возвращались к этапу работы с данными. Таким образом мы «прокачивали» наши модели, пока не достигли хороших результатов.

Юлия Туртаева, руководитель проекта по IT

Фронт, бэк — и в продакшн!

На этапе MVP к команде присоединились новые спецы: backend, frontend, DevOps. Пришло время сделать человеческий интерфейс, продумать архитектуру, позаботиться о вопросе CI/CD.

Технологический стек был выбран достаточно стандартный для проектов цифровизации ЕВРАЗа. Фронт — SPA на React. Бэкенд — Falcon (ML-направленность проекта так или иначе предполагала Python, так что почему бы не использовать тот же язык для backend). С точки зрения DS-библиотек — LightGBM, SciPy, pandas, NumPy. Для контейнеризации и деплоя задействовали OpenShift.

Все необходимые параметры для моделирования собираются в одну БД приложения из разных источников: с сервера химической лаборатории, из систем управления производственными процессами. Когда данные собраны, они отправляются в модель. На выходе получается подсказка: список и вес ферросплавов, который надо отдать для достижения целевого химического состава. Сталевар видит подсказку в веб-интерфейсе и следует ей, если находит разумной.

Поначалу технологи не слишком доверяли новой системе. Сразу после запуска процент согласий с подсказками был небольшим. Однако по мере эксплуатации доверие к цифрам росло, сейчас этот показатель превышает 90%.

На этапе MVP к команде присоединился дизайнер. Металлургия — и так непростое производство, стоит поберечь глаза сталевара и сделать красивый и юзабельный интерфейс.

Новый коллега сталевара — интерфейс подсказчика ферросплавов
Новый коллега сталевара — интерфейс подсказчика ферросплавов

Основная часть работы, проделанная между MVP и продом, была связана уже с дизайном, с представлением данных. С тем, что именно и в какой форме должно быть представлено сталевару. Впрочем, алгоритмы продолжали дорабатываться: приходил фидбек от пользователей, он учитывался командой проекта.

Обнаружилось некоторое количество краевых случаев. Например, оказалось недостаточно исторических данных по усвоению молибдена, ниобия и титана, чтобы построить надёжную модель. Такие случаи мы покрыли бизнес-правилами. Посовещались с технологами, согласовали некие коэффициенты на основе их опыта, эти коэффициенты заложили в подсказчик в обход ML. Если задача решается совсем без костылей — это олимпиадная задача, а не бизнесовая.

После внедрения подсказчика нужно было отслеживать приживаемость продукта, работать над принятием подсказок со стороны сталеваров, учитывать их пожелания. Разработали на базе Power BI дашборд, где можно сравнить, насколько отличаются плавки по рекомендации модели от тех, где технолог следовал своему опыту. А также посмотреть, какие бригады не хотят оптимизировать процессы.

Новый коллега главного технолога — дашборд анализа рекомендаций подсказчика и действий бригад сталеваров
Новый коллега главного технолога — дашборд анализа рекомендаций подсказчика и действий бригад сталеваров

Хэппи, но не энд

Среди проектов цифровой трансформации ЕВРАЗа проект оптимизации отдачи ферросплавов был запущен одним из первых. Причина — прогнозируемый экономический эффект. Как уже говорилось в самом начале, ферросплавы бывают дорогими, иногда — очень дорогими. Их экономия крайне выгодна компании.

Такие ожидания задают определённую планку. И проект эту планку не просто взял — он превзошёл ожидания более чем в три раза. На текущий момент это самый успешный проект цифровизации, с наибольшим экономическим эффектом.

Разброс конечной химии (марганец) при принятии и отклонении подсказок
Разброс конечной химии (марганец) при принятии и отклонении подсказок

Помимо этого проект пришёлся по душе самим сталеварам. Здесь инициатива сверху сошлась с инициативой снизу. Благодаря обильной обратной связи удалось создать приложение, заточенное под своего пользователя, приложение, которым хочется пользоваться. И этот процесс ещё не закончен. В будущем подсказчик отдачи ферросплавов станет частью более глобального проекта под названием «Цифровой помощник сталевара». Помощник будет также давать подсказки по шлакообразующим материалам, и с его помощью технолог сможет анализировать процесс в целом.


Металлургическое производство — специфичная тема, однако читатели Хабра славятся своим любопытством. Надеемся, что вам было интересно. А лучший способ показать свой интерес — задать дополнительные вопросы в комментариях.




Комментарии (10):

  1. amarao
    /#24550306

    А почему бы не добавлять присадки на холодном этапе, до начала нагрева руды?

    • tark-tech
      /#24550358 / +4

      Потому что как они за всё это время выгорят/прореагируют с другими примесями - знает один Гефест, да и тот - персонаж мифический.

  2. SanyaZ7
    /#24550424

    В руде изначально могут быть какие-то легирующие примеси. После выполнения плавки спектрометром определяется состав и добавляется некоторое количество легирующих элементов до соответствия какому-то сплаву.

  3. Zharik
    /#24550636 / +1

    Мне кажется, что стоило привести другой вид графика shap без цветовой разметки. Тогда была бы видна нелинейность в процессе отдачи элемента в сталь: " ферросплав Х1 и привнести Y1% чистого элемента в сталь "
    Вот такой вид, как в статье, показывает остаточную дисперсию, которую можно объяснит за счет влияния третьего фактора, который отображается по цветовой оси. И вклад такого фактора на порядок меньше основной пары признаков.

    А в целом годная статья. Для рынка полезно, когда кейсы доводятся до конца, запускаются в продуктив и приносят измеримый value

  4. VT100
    /#24551262

    Нейтронно-активационный анализ нынче используют ли?

  5. shmyaroslav
    /#24552004 / +1

    Спасибо за статью! Верно я понял, что модель ML используется для оценки линейного коэф. усвоения по каждой конкретной идущей плавке (по группе исторических плавок можно и без ML это сделать - просто посмотреть статистику)? И уже на основе этого коэф. потом идет расчет рекомендаций?

    • andrey70rus
      /#24552266

      Да, все верно :)

      • shmyaroslav
        /#24552506

        Понял, тогда в таком подходе вы делаете предположение, что коэф. усвоения постоянный в окрестности варьирования параметров плавки, что может быть совсем не так. Можно делать рекомендации напрямую без вычисления явно коэффициента, не пробовали такой подход? это более общий и универсальный метод + в теории должен давай выше точность рекомендаций

        • andrey70rus
          /#24557748

          Пробовали предсказание дельты относительно текущей известной химии (с учетом рекомендуемой отдачи), но, к сожалению, периодические выбросы на некоторых совокупностях параметров плавки все портили, потому решили усреднять на множестве предсказаний коэффициент, это дало нам стабильности. Также, учитывая важность признаков (самое важное для перепада по химии - отдача материала) плюс опыт технологов (относительно волатильности коэффициента усвоения), оставили подход описанный в статье :)

  6. vyacheslav_s
    /#24552864 / +2

    Добрый день! А какие в итоге оценки точности получились, там R2, MAE и на каком диапазоне? И планируется ли публикация, больше про реализацию, а не сам техпроцесс, там как данные сглаживались, как многокритериальный оптимизатор строился?