Как мы видели в предыдущей статье под названием «Руководство по автоматическому тестированию моделей машинного обучения — глава 1», мы обсуждали важность автоматического тестирования моделей машинного обучения. В статье освещаются проблемы, с которыми сталкиваются специалисты по данным в процессе тестирования, и дается обзор основных типов автоматизированного тестирования, которые можно использовать.

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

В этой главе мы раскроем необходимость и типы тестирования моделей машинного обучения.

Необходимость тестирования

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

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

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

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

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

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

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

Типы тестирования

Учитывая все эти аспекты, вот несколько типов автоматизированного тестирования моделей машинного обучения:

  1. Модульное тестирование.В модульном тестировании тестируются отдельные компоненты модели машинного обучения, такие как отдельная функция или класс. Например, если у нас есть модель, которая прогнозирует цены на жилье на основе квадратных метров, количества спален и местоположения, мы можем создать функцию, которая принимает эти входные данные и возвращает прогнозируемую цену. Мы можем написать модульные тесты для этой функции, чтобы убедиться, что она работает правильно.
  2. Интеграционное тестирование. Интеграционное тестирование включает проверку совместной работы различных компонентов системы машинного обучения. Например, в нашей модели прогнозирования цен на жилье мы можем проверить, как функция прогнозирования взаимодействует с функциями предварительной обработки данных и инженерными функциями. Мы можем написать интеграционные тесты для этих взаимодействий, чтобы убедиться, что вся система работает должным образом.
  3. Приемочное тестирование. Приемочное тестирование включает проверку способности модели машинного обучения соответствовать бизнес-требованиям или ожиданиям пользователей. Например, если наша модель прогнозирования цен на жилье предназначена для точного прогнозирования цен на жилье в пределах определенного диапазона ошибок, мы можем написать приемочные тесты, чтобы убедиться, что модель соответствует этому требованию.
  4. Регрессионное тестирование. Регрессионное тестирование включает тестирование модели машинного обучения после ее обновления или изменения, чтобы убедиться, что существующие функции не были затронуты. Например, если мы добавим новую функцию в нашу модель прогнозирования цен на жилье, мы можем написать регрессионные тесты, чтобы убедиться, что существующие функции по-прежнему работают правильно.
  5. A/B-тестирование.A/B-тестирование включает тестирование двух версий модели машинного обучения, чтобы определить, какая версия работает лучше. Например, если у нас есть два разных алгоритма для прогнозирования цен на жилье, мы можем провести A/B-тестирование, чтобы определить, какой алгоритм работает лучше на данном наборе данных.
  6. Перекрестная проверка.Это включает в себя разделение набора данных на несколько частей, обучение модели на одной части и тестирование на другой части. Этот процесс повторяется несколько раз, чтобы убедиться, что модель надежна и не подходит к обучающим данным.
  7. Настройка гиперпараметров. Гиперпараметры – это параметры, которые выбираются перед обучением модели, например количество деревьев в случайном лесу или скорость обучения в нейронной сети. Они могут сильно повлиять на производительность модели, поэтому важно тестировать разные значения, чтобы найти оптимальные настройки.
  8. Метрики производительности.Существует несколько метрик, которые можно использовать для оценки производительности модели машинного обучения, включая точность, достоверность, полноту, оценку F1 и площадь под ROC. изгиб. Важно выбрать подходящую метрику для конкретной проблемы.
  9. Увеличение данных.Включает в себя создание дополнительных обучающих данных путем применения таких преобразований, как повороты, перевороты и настройка цвета. Это может помочь повысить надежность модели.
  10. Сравнение моделей. Часто бывает полезно сравнить производительность разных моделей машинного обучения в одном и том же наборе данных, чтобы увидеть, какая из них работает лучше всего.
  11. Проверка гипотез. Это включает в себя создание гипотезы о производительности модели, а затем ее проверку. Например, если ожидается, что модель будет работать лучше, чем случайный базовый уровень, может быть проведена проверка гипотезы, чтобы проверить, является ли улучшение статистически значимым.
  12. Тестирование надежности. Это включает в себя проверку производительности модели на данных, которые значительно отличаются от обучающих данных. Например, если модель обучается на данных из одного географического региона, ее можно протестировать на данных из другого региона, чтобы увидеть, насколько хорошо она обобщает.
  13. Состязательное тестирование. Это включает в себя проверку производительности модели на данных, специально предназначенных для ее обмана. Например, если модель обучена распознавать кошек, состязательный тест может включать добавление шума к изображению, чтобы оно выглядело как собака, и проверку, правильно ли модель идентифицирует его как кошку.
  14. Проверка интерпретируемости модели. Сюда входит проверка интерпретируемости модели или ее способности давать представление о том, как она делает прогнозы. Например, если модель обучена прогнозировать цену дома, проверка интерпретируемости может включать анализ того, какие функции наиболее важны для прогнозирования.

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

Мы рассмотрим почти все указанные типы с примерами, которые лягут в основу. Эти типы испытаний могут соответствовать требованиям и могут быть соответствующим образом отформованы.

Примеры тестовых случаев

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

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

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

Тестовый пример производительности. Проверьте, способна ли модель обрабатывать данные в разумные сроки и может ли она обрабатывать большие наборы данных без сбоев или ошибок.

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

Тестовый пример с переоснащением. Проверьте, не переоснащает ли модель обучающие данные, проверив ее на отдельном наборе проверочных данных.

Тестовый пример обобщения. Проверьте, способна ли модель хорошо обобщать невидимые данные, протестировав ее на отдельном тестовом наборе данных.

Тестовый пример предвзятости. Проверьте, проявляет ли модель какие-либо предубеждения, например гендерные или расовые предубеждения, проверив ее на разных подгруппах данных.

Тестовый пример надежности. Проверьте, способна ли модель обрабатывать выбросы и зашумленные данные, проверив ее на наборе данных, содержащем такие данные.

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

Мы начнем Функциональный тест в качестве QA:

Функциональное тестирование

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

Несколько примеров функционального тестирования кода модели машинного обучения:

  1. Проверка функций ввода/вывода. Сюда входит проверка способности модели принимать входные данные, обрабатывать их и давать точные выходные прогнозы. Например, если у вас есть модель, которая предсказывает, содержит ли изображение кошку или собаку, вы можете проверить ее функциональность ввода-вывода, передав изображения кошек и собак и проверив, правильно ли модель их идентифицирует.
  2. Тестирование крайних случаев. Важно проверить производительность модели в крайних случаях, таких как экстремальные значения или редкие входные данные. Например, если ваша модель обучена прогнозировать цены на дома на основе их квадратных метров, вы можете протестировать ее функциональность на домах очень большой или очень маленькой площади, чтобы увидеть, может ли модель по-прежнему давать точные прогнозы.
  3. Проверка целостности данных.Включает проверку способности модели обрабатывать отсутствующие данные или выбросы во входном наборе данных. Например, если ваша модель обучена на наборе данных медицинских записей, вы можете проверить целостность ее данных, преднамеренно введя отсутствующие данные или выбросы во входные данные и проверив, может ли модель по-прежнему давать точные выходные прогнозы.
  4. Проверка стабильности модели.Включает проверку производительности модели с течением времени, чтобы убедиться, что она продолжает давать точные прогнозы по мере поступления новых данных. Например, если ваша модель обучена на наборе данных о ценах на акции, вы можете проверить ее стабильность, периодически переобучая ее на последних данных и проверяя ее эффективность с течением времени.
  5. Проверка интерпретируемости модели.Это включает в себя проверку способности модели давать представление о процессе принятия решений, чтобы пользователи могли понять, почему модель делает прогнозы, которые она делает. Например, если ваша модель обучена прогнозировать отток клиентов в службе подписки, вы можете проверить ее интерпретируемость, предоставив визуализацию ключевых факторов, влияющих на прогнозы.

Некоторые примеры того же, что и ниже

Тестирование функциональности предварительной обработки данных:

import pytest
import numpy as np
from sklearn.datasets import make_regression
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

@pytest.fixture(scope='module')
def setup_regression_model():
    # Generate a random regression dataset
    X, y = make_regression(n_samples=1000, n_features=10, random_state=42)

    # Train a linear regression model
    model = LinearRegression()
    model.fit(X, y)

    # Return the trained model and the test set
    return model, X, y

def test_regression_prediction(setup_regression_model):
    # Extract the trained model and the test set from the fixture
    model, X, y = setup_regression_model

    # Use the model to make predictions on the test set
    y_pred = model.predict(X)

    # Calculate the mean squared error of the predictions
    mse = mean_squared_error(y, y_pred)

    # Check that the mean squared error is less than a threshold
    assert mse < 100

В этом примере мы создаем набор данных случайной регрессии, используя функцию make_regression из scikit-learn, и обучаем модель линейной регрессии на наборе данных. Затем мы определяем функциональный тест для проверки прогнозов модели с помощью функции test_regression_prediction.

Приспособление setup_regression_model обучает модель на сгенерированном наборе данных и возвращает обученную модель, а также входные функции и целевые значения, используемые для обучения модели. Затем функция test_regression_prediction использует обученную модель для прогнозирования входных признаков, вычисляет среднеквадратичную ошибку прогнозов с помощью функции mean_squared_error scikit-learn и проверяет, что среднеквадратическая ошибка меньше порогового значения.

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

Выход

=================================================================================== test session starts ==================================================================================== 
platform win32 -- Python 3.11.2, pytest-7.3.1, pluggy-1.0.0 -- C:\Users\AppData\Local\Programs\Python\Python311\python.exe
cachedir: .pytest_cache
rootdir: C:\Users\Documents\workspace\python\MLTestingPython
plugins: anyio-3.6.2
collected 1 item                                                                                                                                                                             

Integration_Testing.py::test_regression_prediction PASSED

==================================================================================== 1 passed in 22.61s ==================================================================================== 

Итак, в этой статье мы обсудили необходимость тестирования моделей машинного обучения и выделили проблемы, с которыми сталкиваются специалисты по данным в процессе тестирования. В статье рассматриваются различные аспекты процесса тестирования, в том числе важность определения объема процесса тестирования, создания среды тестирования и измерения эффективности процесса тестирования. Автор также обсуждает различные типы автоматизированного тестирования, которые можно использовать для моделей машинного обучения, включая модульное тестирование, интеграционное тестирование, приемочное тестирование, регрессионное тестирование, A/B-тестирование, перекрестную проверку, настройку гиперпараметров, показатели производительности, увеличение данных, и сравнение моделей. В статье подчеркивается важность применения целостного и итеративного подхода к тестированию моделей машинного обучения и использования различных инструментов и технологий, специально разработанных для тестирования моделей машинного обучения. Скоро будет больше!!