Глубокое погружение в очевидно ИИ для повышения качества данных и производительности моделей

В этом блоге мы рассмотрим темы

  • Дрейф данных и моделей, отслеживание и их важность
  • Необходимость измерения дрейфа модели
  • Последствия дрейфа модели
  • Обнаружение и устранение дрейфа модели с помощью Python
  • Введение в очевидно ИИ
  • Особенности очевидно ИИ
  • Изучение модели с помощью очевидного искусственного интеллекта
  • Плюсы и минусы отслеживания дрейфа модели

Что такое дрейф модели и данных?

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

Необходимость измерения дрейфа

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

Последствия дрифта

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

Обнаружение и устранение дрейфа модели с использованием Python

  • Сбор данных. Убедитесь, что у вас есть доступ к историческим данным и данным в реальном времени, чтобы оценить эффективность модели с течением времени.
  • Разделение данных. Разделите данные на наборы для обучения и тестирования. Обучающий набор используется для разработки исходной модели, а тестовый набор имитирует реальные данные для постоянной оценки.
  • Обучение модели. Обучите свою модель с помощью обучающего набора, используя соответствующие алгоритмы и методы, основанные на вашей проблемной области.
  • Оценка эффективности модели. Примените обученную модель к тестовому набору и измерьте ее производительность с помощью соответствующих показателей оценки (например, точности, прецизионности, полноты).
  • Установите порог. Определите порог производительности, ниже которого вы считаете, что производительность модели указывает на потенциальное отклонение.
  • Отслеживание отклонений. Периодически переоценивайте эффективность модели, используя данные в реальном времени или обновленные данные. Сравните показатели производительности с установленным порогом.
  • Обнаружение отклонения. Если производительность модели падает ниже порогового значения, это может указывать на смещение модели. Для обнаружения дрейфа можно применять различные статистические методы и алгоритмы, такие как сравнение распределений или проверка гипотез.
  • Смещение адреса. Если обнаружено смещение, можно предпринять несколько действий, включая переобучение модели с использованием обновленных данных, точную настройку параметров модели или рассмотрение альтернативных алгоритмов.

Очевидно, ИИ

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

Особенности очевидно ИИ

Профилирование данных. Очевидно, что ИИ выполняет тщательное профилирование данных, обобщая ключевые статистические данные и их распределение, что позволяет ученым, работающим с данными, понять характеристики своих наборов данных.

Анализ производительности модели. Библиотека предоставляет подробные показатели и визуализации для оценки производительности модели, включая точность, точность, полноту, кривые ROC и матрицы путаницы.

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

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

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

Изучение модели с помощью очевидного искусственного интеллекта

Мы будем использовать набор данных о совместном использовании велосипедов от Kaggle. Набор данных представляет собой набор данных об аренде велосипедов от людей, которые арендуют велосипед в одном месте и возвращают его в другое место по мере необходимости. Более подробную информацию можно найти в разделе Велопрокат. Начнём с установки всех зависимых библиотек и загрузки данных.

import pandas as pd
import numpy as np
import requests
import zipfile
import io
from datetime import datetime, time
from sklearn import datasets, ensemble
from evidently import ColumnMapping
from evidently.report import Report
from evidently.metric_preset import DataDriftPreset, TargetDriftPreset, RegressionPreset
content = requests.get("https://archive.ics.uci.edu/static/public/275/bike+sharing+dataset.zip").content
with zipfile.ZipFile(io.BytesIO(content)) as arc:
    raw_data = pd.read_csv(arc.open("hour.csv"), header=0, sep=',', parse_dates=['dteday'], index_col='dteday')
raw_data.index = raw_data.apply(
    lambda row: datetime.combine(row.name, time(hour=int(row['hr']))), axis = 1)

Давайте посмотрим на данные

Мы замечаем, что в наборе данных есть как числовые, так и категориальные столбцы. Будет проще разделить их на две категории, а именно числовые_функции и категориальные_функции. Кроме того, определите целевую переменную как «cnt», которая представляет собой количество велосипедов, арендуемых каждый день, и еще одну прогнозируемую переменную, которую мы будем прогнозировать с помощью модели.

target = 'cnt'
prediction = 'prediction'
numerical_features = ['temp', 'atemp', 'hum', 'windspeed', 'hr', 'weekday']
categorical_features = ['season', 'holiday', 'workingday']

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

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

reference = raw_data.loc['2011-01-01 00:00:00':'2011-01-28 23:00:00']
current = raw_data.loc['2011-01-29 00:00:00':'2011-02-28 23:00:00']
# Building a Randomforest Regressor model
regressor = ensemble.RandomForestRegressor(random_state = 0, n_estimators = 50)
# Set up the predictor variables that are numnerical, categorical and the target variable
regressor.fit(reference[numerical_features + categorical_features], reference[target])
# Preict for bothe reference and the current dataset
ref_prediction = regressor.predict(reference[numerical_features + categorical_features])
current_prediction = regressor.predict(current[numerical_features + categorical_features])
# Add a new column called prediction in respective dataframes
reference['prediction'] = ref_prediction
current['prediction'] = current_prediction

Пришло время проверить производительность модели с помощью модуля отчетов Evidently. В этом испытании наши текущие данные — январь, а ссылка отсутствует, поскольку эта модель является нашей базовой моделью, и в прошлом нет ничего, что можно было бы сравнить с ней.

column_mapping = ColumnMapping()

column_mapping.target = target
column_mapping.prediction = prediction
column_mapping.numerical_features = numerical_features
column_mapping.categorical_features = categorical_features

regression_perfomance = Report(metrics=[RegressionPreset()])
regression_perfomance.run(current_data=reference, reference_data=None, 
            column_mapping=column_mapping)

# Display the report
regression_perfomance.show()

Метрики модели

Отслеживание моделей

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

regression_perfomance = Report(metrics=[RegressionPreset()])
regression_perfomance.run(current_data=current.loc['2011-01-29 00:00:00':'2011-02-07 23:00:00'], 
                          reference_data=reference,
                          column_mapping=column_mapping)
regression_perfomance.show()

Показатели производительности модели

Наблюдения из отчета за первую неделю

  1. Средняя абсолютная ошибка увеличилась до 13,38 с 4,1 (базовая модель).
  2. Распределение ошибок указывает на некоторые изменения, но оно по-прежнему нормально распределяется.
  3. Нормальность ошибки указывает на некоторое отклонение, но на данном этапе ничего серьезного.
  4. Дрейф модели не обнаружен, но модель занижает оценку
  5. Оценка дрейфа (p_value) для прогнозируемой переменной: 0,684. Поскольку оно больше 0,05, можно сделать вывод, что дрейфа нет.

Наблюдения из отчета за третью неделю

Мы будем использовать тот же код, что и выше, с изменением дат (2011–02–15 на 2011–02–21). Вот наблюдения

  1. Средняя абсолютная ошибка увеличилась до 24,69.
  2. Распределение ошибок указывает на значительное отклонение от эталонного значения.
  3. Нормальность ошибки указывает на некоторое отклонение, но на данном этапе ничего серьезного.
  4. Дрейф модели не обнаружен, но модель занижает оценку
  5. Оценка дрейфа (p_value) для прогнозируемой переменной: 0,095. Поскольку оно больше 0,05, можно сделать статистический вывод об отсутствии дрейфа. Важно отметить снижение с 0,684 (первая неделя) до 0,095. Это признак того, что модель дрейфует и ее необходимо переобучить.

Дрейф данных

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

column_mapping = ColumnMapping()

column_mapping.numerical_features = numerical_features

data_drift = Report(metrics = [DataDriftPreset()])
data_drift.run(current_data = current.loc['2011-01-29 00:00:00':'2011-02-07 23:00:00'],
               reference_data = reference,
               column_mapping=column_mapping)

data_drift.show()

Наблюдения:

  1. Некоторые переменные меняются/эволюционируют со временем, и из приведенного выше списка это сезонные факторы.
  2. Хотя производительность модели не показала значительного ухудшения по сравнению с эталоном, распределение ошибок все же указывало на отклонение от эталона.
  3. Кроме того, еще одним заметным фактором было то, что модель занижала прогноз по сравнению с эталоном.
  4. Анализ дрейфа данных показал, что 4 переменные дрейфуют, что указывает на необходимость переобучения и развертывания модели.

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

Плюсы и минусы отслеживания дрейфа модели

Плюсы

  • Раннее обнаружение. Отслеживание отклонения модели позволяет заранее обнаружить ухудшение производительности и своевременно принять меры.
  • Улучшение процесса принятия решений. Точные модели позволяют принимать более обоснованные решения, что положительно влияет на результаты бизнеса.
  • Соответствие требованиям и регулирование. Отслеживание отклонений модели обеспечивает соответствие нормативным требованиям и отраслевым стандартам.

Минусы

  • Накладные расходы на вычисления. Реализация механизмов мониторинга дрейфа может привести к дополнительной вычислительной сложности.
  • Проблемы со сбором данных. Обеспечение репрезентативных и разнообразных данных для обнаружения дрейфа может оказаться непростой задачей, особенно в быстро развивающихся областях.
  • Ложные срабатывания. Методы обнаружения дрейфа могут иногда вызывать ложные срабатывания, что приводит к ненужным обновлениям модели или ее переобучению.

Заключение

Очевидно, что AI — это мощная библиотека Python, которая предоставляет ценную информацию о качестве данных и производительности модели. Используя его функции, ученые, работающие с данными, и специалисты по машинному обучению могут активно отслеживать свои модели, выявлять такие проблемы, как дрейф данных и разрушение моделей, а также принимать обоснованные решения. В этом блоге был представлен обзор Evidently AI и продемонстрированы практические примеры его использования. Включение ИИ Evidently в рабочий процесс машинного обучения может значительно улучшить понимание и управление качеством данных и производительностью модели. Активно используя Evidently AI, специалисты по данным могут обеспечить надежность и надежность своих моделей машинного обучения, что в конечном итоге приведет к более точным прогнозам и принятию обоснованных решений.

Существуют и другие статистические методы тестирования/измерения дрейфа.

  1. Тест Колмогорова-Смирнова (КС)
  2. Индекс стабильности населения
  3. Модельный подход
  4. Адаптивное оконное управление (ADWIN)
  5. Метод Пейджа-Хинкли

Рекомендации

https://www.evidentlyai.com/