Tests model: Model Tests | The Fashion School

Содержание

Model Tests | The Fashion School

 

Красота – это сиюминутная вечность.
© Симона Вейль

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

ЧТО ТАКОЕ «МОДЕЛЬНЫЕ ТЕСТЫ»
Направление «model tests» входит в число самых востребованных видов съёмки современной фэшн-индустрии. Этот жанр имеет свои визуальные правила, стандарты и отличается определённой спецификой. Главная задача – максимально эффектно представить данные модели и подчеркнуть уникальные особенности внешности.

Попадая в модельный бизнес, все участники процесса (букеры, агенты, скауты и модели) первым делом обращаются за съёмками данного направления. Качественная фото или видео-съёмка, раскрывающая personality, способна поднять начинающую неизвестную модель до мирового уровня, а работы фотографа – до буков топовых агенств. 

ЗАДАЧИ КУРСА
 

  • научиться работать с моделями и языком тела
  • научиться этике работы с модельными агентствами
  • узнать и отработать на практике профессиональные приёмы и важные нюансы съёмки данного направления – от момента подготовки до подачи фотографий в агентство и продвижения себя, как специалиста
  • научиться понимать особенности стайлинга для съёмки модельных тестов
  • отточить навыки стилизации съёмок
  • научиться понимать и учитывать психологические аспекты работы не только с профессиональными моделями, но и с new-face
  • отработать на практике приёмы раскрепощения модели
  • научиться работать с моделями обоих полов
  • научиться видеть и раскрывать personality модели, подчёркивая уникальные особенности внешности
  • пополнить портфолио новыми профессиональными работами

ЦЕЛЕВАЯ АУДИТОРИЯ
В первую очередь, курс MODEL TESTS ориентирован на фотографов и стилистов, которые имеют опыт работы в портретной или fashion-съёмке. Программа также будет полезна всем, кто работает в индустрии моды или только собирается реализовать себя в выбранной профессии и в настоящий момент получает соответствующее образование.

УСЛОВИЯ ПОСТУПЛЕНИЯ
Курс не предполагает обучения с нуля.
Для поступления учащимся необходимо обладать:
 

  • уверенными знаниями настроек фотоаппарата, а также опытом работы со студийными моноблоками
  • базовыми знаниями работы в программе Adobe Photoshop
  • базовыми знаниями истории моды и международных fashion-media
  • пониманием принципов функционирования современной модной индустрии

ДОКУМЕНТ О ПРОХОЖДЕНИИ ОБУЧЕНИЯ
По окончании обучения и после успешной защиты итогового проекта выдаётся СЕРТИФИКАТ о прохождении курса.

СТАРТ КУРСА
дата уточняется

ПРОДОЛЖИТЕЛЬНОСТЬ ИНТЕНСИВА – 8 занятий
5 теоретических + 3 практических занятия
1 занятие – 4 академических часа
общая продолжительность курса – 32 академических часа

ГРАФИК ЗАНЯТИЙ
занятия проходят 2 раза в неделю:
четверг – с 17:00 до 20:00
суббота – с 12:00 до 15:00

ДАТЫ ПРОВЕДЕНИЯ ЗАНЯТИЙ
занятие #1 – четверг (дата уточняется)
занятие #2 – суббота (дата уточняется)
занятие #3 – четверг (дата уточняется)
занятие #4 – суббота (дата уточняется)
занятие #5 – четверг (дата уточняется)
занятие #6 – суббота (дата уточняется)
занятие #7 – четверг (дата уточняется)
занятие #8 – суббота (дата уточняется)

ГРУППА
Занятия курса MODEL TESTS проходят в мини-группах. Количество мест на интенсив ограничено – не более 15 человек.
 

model tests | SERAFIMA DVORETSKAYA

 Я верю в то, что все зависит от нас самих. Соответственно и жизнь мы проживаем такую, какую мы хотим.

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

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

Удивительно, как Елена в правильный момент умеет задавать нужные вопросы. Отвечая на них, тебя посещается озарение, происходит внутренний инсайт. Моя жизнь перевернулась на 180 градусов. Оглядываясь назад (почти 5 месяцев прошло!) изменилась не только я, но и все мое окружение.

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

 Так я оказалась на курсах стилистов в Falma Fashion Academy. Мое понимание стилистики и ее сфер было похоже на вождение в тумане. Когда ты ведешь машину по трассе и вокруг туман, видимость примерно 500-700 метров, а дальше неизвестность. Скорость на спидометре 60. Едешь и не знаешь, что ждет тебя за поворотом.

 Отучившись полтора месяца в Falma Style, я выехала на освещенную трассу, туман позади. Скорость приближается к 120. Мой путь освещен и имеет четкую и ясную цель. Теперь я знаю, если ты тотально самореализуешься, автоматически к тебе придет счастье от каждого прожитого дня и успех. Работая по 12 часов в сутки и чувствуя усталость, у тебя открывается второе дыхание и появляется неизведанный источник сил. А я верю, что силы нам даются только тогда, когда есть на что их тратить.

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

Подвести итог хочу цитатой Роберта Кольер «Успех — это сумма результатов всех маленьких шажков, которые мы делаем ежедневно». Ежедневно, шаг за шагом я строю мое будущее и мою жизнь. Начиная от письма Елене и заканчивая моим обучение в Falma Fashion Academy. Каждый мой день начинается с безграничного ощущения счастья за все то, что у меня есть.

Хочется с вами поделиться всеми фотографиями съемок, где я принимала участие. Но пока я их жду от фотографа, покажу вам те, которые мне уже прислали. Где я была стилистом.

Подбирала одежду, макияж и прическу. Наша практика проходила в Lukovsky Model Agency.

Мы составляли образы для лукбука моделей (с англ. «книга образов»). 

Test kit, chromium color disc, model CH-12, 0.1-1.5 mg/L, 50Cr6+50T tests | Hach Российская Федерация — Обзор

Хотели бы Вы воспользоваься конфигуратором прежде, чем добавите это в свою корзину? Если нет, добавьте в корзину напрямую.

Widely used as a corrosion inhibitor in cooling towers and engine cooling systems, chromium is also used in surface finishing, leather tanning, and other industries. The most widely used form, hexavalent chromium, is very toxic and strict limits are placed on discharges.
Method/Chemistry: Color disc. Range (mg/L): 0-1.5. Smallest Increment (mg/L): 0.1. Approx. Number of Tests: 50 Cr6+.
Method/Chemistry: Diphenylcarbazide/Hypobromite oxidation. Number of Tests: 50 T **. Case Style: 12×7.25×4.5 inches Blue Polypropylene Carrying Case.

Создание и запуск тестов — Документация Django 1.7

Этот раздел состоит из двух разделов. В первом мы расскажем как писать тесты с Django, во втором — как их запускать

Написание тестов

Юнит тесты для Django используют стандартную библиотеку Python: unittest. Эта библиотека позволяет создавать тесты в ООП стиле.

unittest2

Не рекомендуется, начиная с версии 1.7.

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

Т.к. Django больше не поддерживает Python версии меньше 2.7, django.utils.unittest помечен как устаревший. Просто используйте unittest.

В примере ниже мы наследуемся от django.test.TestCase, который является классом наследником unittest. TestCase, и запускает каждый тест в отдельной транзакции для их изоляции:

from django.test import TestCase
from myapp.models import Animal

class AnimalTestCase(TestCase):
    def setUp(self):
        Animal.objects.create(name="lion", sound="roar")
        Animal.objects.create(name="cat", sound="meow")

    def test_animals_can_speak(self):
        """Animals that can speak are correctly identified"""
        lion = Animal.objects.get(name="lion")
        cat = Animal.objects.get(name="cat")
        self.assertEqual(lion.speak(), 'The lion says "roar"')
        self.assertEqual(cat.speak(), 'The cat says "meow"')

Когда вы запускаете тесты, происходит поиск всех тестов (классов унаследованных от unittest.TestCase) в файлах, которые начинаются с test, затем создается набор тестов(test suite) и их запуск.

Изменено в Django 1.6:

В предыдущих версиях Django тесты искались только в файлах tests.py и models.py в пакетах Python, которые указаны в INSTALLED_APPS.

Подробности о unittest смотрите в документации Python.

Предупреждение

Если ваши тесты используют базу данных, убедитесь, что вы наследуетесь от django.test.TestCase, а не unittest.TestCase.

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

Запуск тестов

Чтобы запустить тесты, используйте команду test скрипта manage.py в вашей проекте:

Поиск тестов основан на поиске тестов библиотеки unittest. По умолчанию тесты ищутся во всех файлах “test*.py” в текущем каталоге.

Вы можете запустить определенные тесты, указав “test labels” для команды ./manage.py test. Каждый “label” — это путь к пакету Python, модулю, классу наследнику TestCase, или методу теста. Например:

# Run all the tests in the animals. tests module
$ ./manage.py test animals.tests

# Run all the tests found within the 'animals' package
$ ./manage.py test animals

# Run just one test case
$ ./manage.py test animals.tests.AnimalTestCase

# Run just one test method
$ ./manage.py test animals.tests.AnimalTestCase.test_animals_can_speak

Также можно передать путь к каталогу, в котором будет выполнен поиск тестов:

$ ./manage.py test animals/

Можно указать шаблон для поиска файлов с тестами, используя опцию -p (или —pattern), если имена ваших файлов с тестами не соответствуют шаблону test*.py:

$ ./manage.py test --pattern="tests_*.py"

Изменено в Django 1.6:

В предыдущих версиях название теста могло быть в формате applabel, applabel.TestCase, или applabel.TestCase.test_method, а не обычный путь для импорта Python, и поиск тестов выполнялся только в файлах tests.py и models.py пакета Python, указанного в INSTALLED_APPS. Опция —pattern и использование пути к файлу, как название теста, были добавлены в 1.6.

Если нажать Ctrl-C при выполнении тестов, будет завершен текущий тест и затем остановлено выполнение тестов. После остановки будет выведен результат выполнения тестов и удалена тестовая база данных. Ctrl-C может быть очень полезна, если вы забыли указать опцию —failfast, и не хотите ждать окончания выполнения всех тестов, если один из них уже выполнился с ошибкой.

Если вы не хотите ждать окончания текущего теста, можете нажать Ctrl-C еще раз и выполнение тестов завершиться немедленно. При этом вы не получите результатов выполнения тестов и тестовая база данных не будет удалена.

Выполнение тестов с включенными предупреждениями

Хорошая практика — запускать тесты с включенными предупреждениями Python: python -Wall manage.py test. Флаг -Wall указывает Python показывать предупреждения об использовании устаревшего API. Django, как и многие другие библиотеки Python, использует такие предупреждения для пометки функционала, который в будущем будет удален из Django. Предупреждения могут также использоваться, чтобы обратить внимание на код, который не совсем неправильный, но требует лучшей реализации.

Тестовая база данных

Тесты, которые работают с базой данных (то есть тесты моделей), не будут использовать “настоящую” базу данных. Для этого будет создана отдельная пустая база данных.

Независимо от результата выполнения тестов тестовая база будет удалена после выполнения тестов.

По умолчанию название тестовой базы данных формируется путем добавления префикса test_ к значению настройки NAME баз данных, указанных в настройке DATABASES. При использовании SQLite тестовая база данных создается в памяти (файловая система не используется!). Если вы хотите использовать другое название для тестовой базы данных, укажите его через NAME в словаре насйтроки TEST для баз данных, указанных в DATABASES.

Изменено в Django 1.7:

Для PostgreSQL пользователь из USER должен иметь права на чтение встроенной базы данных postgres.

При создании тестовой базы данных будут использоваться настройки базы данных: ENGINE, USER, HOST, и т.д. Тестовая база данных создается пользователем из USER, убедитесь, что у этого пользователя есть права на создания базы данных.

Для больше контроля кодировок в тестовой базе данных используйте параметр CHARSET настройки TEST. При использовании MySQL можно также указать COLLATION. Подробнее о настройках можно прочитать в соответствующем разделе.

Изменено в Django 1.7:

Настройки с префиксом TEST_ были перенесены в настройку TEST для каждой из используемых баз данных.

Запросы к настоящей базе дынных при выполнении тестов

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

Добавлено в Django 1.7:

Это также относиться и к методу ready().

Порядок выполнения тестов

Чтобы код TestCase выполнялся на чистой базе данных, Django выполняет тесты в следующем порядке:

  • Сначала классы-наследники TestCase.

  • Затем остальные тесты, которые используют базовые тесты Django (классы-наследники SimpleTestCase, включая TransactionTestCase). Эти тесты могут быть выполнены в любом порядке.

  • Затем все остальные тесты unittest.TestCase (включая “doctests”), которые могут изменять базу данных без восстановления начального состояния.

Примечание

Такой порядок выполнения тестов может выявить неожиданные зависимости между тестами. Например, “doctests” могут использовать состояние, оставленное определенным TransactionTestCase. Такие тесты следует исправить, чтобы они могли выполняться независимо.

Эмуляция отката изменений

Все начальные данные, созданные миграциями, будут доступны в тестах TestCase, но не TransactionTestCase, и только, если база данных поддерживает транзакции (обратите внимание, MyISAM не поддерживает транзакции).

Django может восстановить начальные данные перед каждым тестом, эмулируя откат изменений, если указать атрибут serialized_rollback с True в теле TestCase или TransactionTestCase. Но учтите, это замедлит выполнение тестов приблизительно в 3 раза.

Распространяемые приложения и те, что используют MyISAM, должны использовать этот атрибут. Но мы рекомендуем использовать базу данных, которая поддерживает транзакции, и TestCase для создания тестов. В таком случае эта настройка не понадобится.

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

Приложения без миграция работают как и раньше — initial_data фикстуры загружаются перед каждым тестом.

Другие условия выполнения тестов

Независимо от значения DEBUG в вашем файле настроек, Django выполняет все тесты со значением DEBUG=False. Таким образом, при выполнении тестов код будет работать так же, как и на боевом сервере.

Кэш не очищается после каждого теста, и выполнение “manage.py test fooapp” может привести к добавлению тестовых данных в кэш на “боевом” сервере, если вы запускаете тесты на этот сервере. В отличии от базы данных, отдельный “кэш для тестирования” не используется. Но это может измениться в будущем.

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

При выполнении тестов в консоль выводится различная информация. Вы можете указать уровень подробности вывода, используя опцию verbosity:

Creating test database...
Creating table myapp_animal
Creating table myapp_mineral
Loading 'initial_data' fixtures...
No fixtures found.

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

После создания базы данных Django начнет выполнять тесты. Если тесты выполнены успешно, вы увидите приблизительно такое:

----------------------------------------------------------------------
Ran 22 tests in 0.221s

OK

Если некоторые тесты не выполнились успешно, будут выведены подробности:

======================================================================
FAIL: test_was_published_recently_with_future_poll (polls.tests.PollMethodTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/dev/mysite/polls/tests.py", line 16, in test_was_published_recently_with_future_poll
    self.assertEqual(future_poll.was_published_recently(), False)
AssertionError: True != False

----------------------------------------------------------------------
Ran 1 test in 0.003s

FAILED (failures=1)

Мы не будем подробно описывать информацию об ошибке, но все и так должно быть понятно. Подробности вы можете найти в документации Python для пакета unittest.

Обратите внимание, “return code” команды будет 1, если не выполнился хотя бы один тест. Если все тесты выполнились успешно, вернет 0. Это полезно, если вы запускаете тесты в shell скрипте и необходим результат выполнения.

Оптимизация тестов

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

PASSWORD_HASHERS = (
    'django.contrib.auth.hashers.MD5PasswordHasher',
)

Не забудьте также добавить в PASSWORD_HASHERS все хэширующие алгоритмы, которые используются в фикстурах.

Что такое, инструменты и примеры

Что такое тестирование на основе моделей?

Тестирование на основе модели — это метод тестирования программного обеспечения, при котором поведение тестируемого программного обеспечения во время выполнения проверяется на соответствие прогнозам, сделанным моделью. Модель — это описание поведения системы. Поведение можно описать в терминах входных последовательностей, действий, условий, выхода и потока данных от входа к выходу. Он должен быть практически понятным и многоразовым; shareable должно иметь точное описание тестируемой системы.

Доступно множество моделей, описывающих различные аспекты поведения системы. Примеры модели:

  • Поток данных
  • Поток управления
  • Графы зависимостей
  • Таблицы решений
  • Машины перехода между состояниями

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

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

В этом руководстве вы познакомитесь с

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

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

Типы MBT:

Существует два типа инфраструктуры тестирования на основе моделей.

  1. Offline / a priori: создание наборов тестов перед их выполнением. Набор тестов — это не что иное, как набор тестовых примеров.
  2. Онлайн / на лету: Создание наборов тестов во время выполнения теста

Различные модели в тестировании:

Чтобы понять MBT, необходимо понять некоторые модели, описанные ниже. Давайте пройдемся по порядку:

Конечные автоматы

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

Система будет иметь определенное состояние и текущее состояние, которое определяется набором входных данных, поступающих от тестеров.

Рассмотрим пример —

Существует система, позволяющая сотрудникам входить в приложение. Теперь текущее состояние сотрудника — «Нет», и оно стало «Входит», когда он входит в систему. В состоянии «в» сотрудник может просматривать, печатать, сканировать документы в системе.

Диаграммы состояний

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

Например —

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

Унифицированный язык моделирования (UML)

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

UML имеет такие обозначения, как:

  • Действия
  • Участники
  • Бизнес-процесс
  • Компоненты
  • Язык программирования

Проблемы модельно-ориентированного тестирования:

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

  • Необходимые навыки, необходимые для тестировщиков
  • Время обучения будет больше
  • Трудно понять саму модель

Преимущества тестирования модели:

Ниже приведены преимущества MBT:

  • Простое обслуживание тестового набора / набора
  • Снижение затрат
  • Улучшенное покрытие тестами
  • Можно проводить различные тесты на n машинах
  • Раннее обнаружение дефектов
  • Увеличение количества дефектов
  • Экономия времени
  • Повышение удовлетворенности работой тестировщика

Заключение

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

Тестирование на основе моделей — это новый подход к тестированию программного обеспечения. Эволюция тестирования программного обеспечения показана ниже —

Тестирование моделей машинного обучения

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

Какова цель тестирования машинного обучения?

Прежде всего, чего мы пытаемся достичь при выполнении тестирования машинного обучения, а также любого тестирования программного обеспечения вообще?

  • Гарантия качества необходима для того, чтобы система программного обеспечения работала в соответствии с требованиями. Все ли функции реализованы, как согласовано? Программа ведет себя так, как ожидалось? Все параметры, по которым вы тестируете программу, должны быть указаны в техническом описании.
  • Более того, тестирование программного обеспечения может выявить все дефекты и недостатки во время разработки. Вы же не хотите, чтобы ваши клиенты сталкивались с ошибками после выпуска программного обеспечения и приходили к вам, размахивая кулаками. Различные виды тестирования позволяют нам обнаруживать ошибки, которые видны только во время выполнения.

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

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

Обычно тестирование программного обеспечения включает:

  • Модульные тесты. Программа разбита на блоки, и каждый элемент (блок) тестируется отдельно.
  • Регрессионные тесты. Они охватывают уже протестированное программное обеспечение, чтобы увидеть, не сломается ли оно внезапно.
  • Интеграционные тесты. Этот тип тестирования наблюдает, как несколько компонентов программы работают вместе.

Более того, есть определенные правила, которым следуют люди: не объединяйте код, пока он не пройдет все тесты, всегда тестируйте новые введенные блоки кода, при исправлении ошибок пишите тест, который фиксирует ошибку.

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

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

  • Набор проверки. Недостаточно иметь только обучающий набор и набор для тестирования, если вы делаете много раундов настройки гиперпараметров (что всегда). А это может привести к переобучению. Чтобы этого избежать, вы можете выбрать небольшой набор данных проверки для оценки модели. Только после того, как вы добьетесь максимальной точности на проверочном наборе, вы заставите набор для тестирования войти в игру.
  • Тестовый комплект (или удерживающий комплект). Ваша модель может идеально соответствовать набору обучающих данных. Но где гарантии, что он будет одинаково хорошо работать в реальной жизни? Чтобы убедиться в этом, вы выбираете образцы для набора для тестирования из набора для обучения — примеров, которые машина раньше не видела.При отборе важно оставаться непредвзятым и отбирать образцы наугад. Кроме того, вы не должны использовать один и тот же набор много раз, чтобы избежать обучения на ваших тестовых данных. Ваш набор тестов должен быть достаточно большим, чтобы предоставлять статистически значимые результаты и быть репрезентативными для набора данных в целом.

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

Перекрестная проверка

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

k-кратная перекрестная проверка

Наиболее распространенный метод перекрестной проверки называется k-кратной перекрестной проверкой. Чтобы использовать его, вам нужно разделить набор данных на $ k $ подмножеств (также называемых складками) и использовать их $ k $ раз.Например, разбив набор данных на 10 подмножеств, вы выполните 10-кратную перекрестную проверку. Каждое подмножество должно использоваться как набор для проверки хотя бы один раз.

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

Перекрестная проверка без исключения

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

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

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

Оценка моделей с использованием показателей

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

Точность

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

$$ Точность \ Equiv \ frac {True \ Positives + True \ Negatives} {True \ Positives + False \ Positives + True \ Negatives + False \ Negatives} $$

Убыток

Убыток описывает процент неверных прогнозов. Если прогноз модели идеален, потери равны нулю; в противном случае потери больше.

Precision

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

$$ Precision \ Equiv \ frac {True \ Positives} {True \ Positives + False \ Positives} $$

Напомнить

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

$$ Напомним \ Equiv \ frac {True \ Positives} {True \ Positives + False \ Negatives} $$

Матрица неточностей

Матрица неточностей — это квадратная таблица $ N \ times N $, где $ N $ — количество классов, которые модель должна классифицировать.Обычно этот метод применяется к классификации, где каждый столбец представляет собой метку. Например, если вам нужно разделить фрукты на три категории: апельсины, яблоки и бананы, вы рисуете таблицу $ 3 \ times3 $. Одна ось будет фактической меткой, а другая — прогнозируемой.

Лучшие практики для отладки модели машинного обучения

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

Отладка

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

Отладка данных

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

Схема базы данных

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

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

  • Убедитесь, что отправленные значения находятся в диапазоне от 1 до 5 (например, в рейтингах).
  • Убедитесь, что все изображения в формате JPEG.

Схема может быть двух типов:

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

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

Отладка модели

После тестирования данных можно приступить к отладке модели.

Установите базовый уровень

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

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

Написание модульных тестов ML

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

Настроить гиперпараметры

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

  • Скорость обучения. Обычно библиотеки ML заранее устанавливают скорость обучения, например, в TensorFlow это 0,05. Однако это может быть не лучшая скорость обучения для вашей модели. Поэтому лучший вариант — установить его вручную между 0.0001 и 1.0 и поиграйте с ним, не тратя часы на тренировки, чтобы увидеть, что дает вам наилучшие потери.
  • Регуляризация. Регуляризацию следует проводить только после того, как вы убедились, что модель может делать прогнозы на основе данных обучения без регуляризации. Регуляризация L1 полезна, если вам нужно уменьшить размер модели. Примените регуляризацию L2, если вы предпочитаете повышенную стабильность модели. И, в случае нейронных сетей, работайте с регуляризацией отсева.

  • Размер партии. Модели, обученные на небольших партиях, обычно лучше обобщают. Партия обычно должна содержать 10-1000 образцов, минимальный размер которых зависит от вашей модели.
  • Глубина слоев. Глубина описывает количество слоев в нейронной сети: чем больше в ней слоев, тем она глубже. Начните с 1 слоя и постепенно увеличивайте количество, если вы чувствуете, что модель должна быть глубже, чтобы решить вашу проблему. Такой подход помогает не усложнять модель с самого начала.

Как писать модельные тесты?

Итак, чтобы написать тесты модели, нам нужно решить несколько вопросов:

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

Прочтите подробное объяснение того, как выполнять модульные тесты на Medium.

Существует два основных типа тестов:

Предварительные тесты

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

Тесты после обучения

Эти тесты выполняются на обученной модели и проверяют, правильно ли она работает. Они позволяют нам исследовать логику алгоритма и увидеть, есть ли там какие-либо ошибки. Существует три типа тестов, которые сообщают о поведении программы:

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

Конвейер разработки модели

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

Заключение

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

8 шагов для тестирования на основе моделей

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

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

Создание более разумного тестирования на основе моделей

Один из первых вопросов, которые многие задают о тестировании на основе моделей: «Кто создает модель?» Однозначного ответа нет.QA может взять на себя разработку модели. Высокоуровневая модель может быть создана бизнес-аналитиком, а команда разработчиков или QA сможет предоставить дополнительные детали процесса. Может быть созвана межфункциональная группа для совместной разработки модели и создания функционального потока, с которым все согласны и понятны. Реальность такова, что практически любой может взять на себя инициативу, поэтому моделирование для тестов должно быть простым.

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

1. Простые для понимания блоки

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

  • Начальный и конечный блоки . Открывая новый пустой холст для создания модели, вы начинаете с начального и конечного блоков. Если у вас есть несколько точек входа и выхода в потоке процессов, вы устанавливаете для каждой из них начальный и конечный блок.
  • Блоки процесса . Блоки процессов помещаются между начальной и конечной точками для определения задач. Это может быть что-то вроде «создать учетную запись», «создать метку» или «обновить запись».«Хотя блоки процесса могут иметь несколько входов, они имеют только один выход.
  • Блоки принятия решений . Блоки принятия решений учитывают различные точки принятия решений в вашем процессе, независимо от того, являются ли они центральными для требований вашего процесса или находятся на грани вашей модели. Решением может быть наименьший или наибольший разрешенный банковский депозит, варианты доставки для заказов продуктов или то, что происходит, когда пользователь вводит действительную или недействительную запись.

2. Назначение типа блока

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

  • Взаимодействие с пользователем .Пользователь нажимает кнопку или вводит текст в пользовательский интерфейс.
  • Действие данных . Примерами действия с данными могут быть чтение системой или запись на диск, а также выполнение транзакций или запросов к базе данных.
  • Кодовое действие . Действие или решение, которые не наблюдаются во внешнем интерфейсе и не раскрываются в программном обеспечении.
  • Инфраструктурное событие . Это может включать в себя нехватку дискового пространства в системе, выход из строя сети, простой ЦП или перезапуск компьютера.
  • Ошибка .Система отображает или регистрирует сообщение об ошибке.
  • Утвердить . Шаг, который проверяет, был ли достигнут заявленный результат.
  • Служба поддержки . Система выполняет метод REST или запускает или останавливает службу.

3. Добавление дополнительных деталей к блокам

Еще больше возможностей пополнить ваши модели дополнительной информацией. Например, в блоках процессов вы можете открыть меню «Детали процесса» и добавить любое количество элементов ожидаемых результатов в каждый блок.

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

4. Упрощение редактирования

Редактирование блоков должно быть простым в выбранном вами инструменте.Просто дважды щелкните или щелкните правой кнопкой мыши, чтобы изменить какие-либо или все свойства блока, включая описание, тип, ожидаемые результаты и многое другое. Например, вы можете отредактировать блок принятия решения, чтобы изменить вывод с истинного / ложного на красный / желтый / синий. Если у вас есть большая модель и вам нужно внести много изменений, вы можете выбрать «редактирование сетки» и изменить несколько свойств блока из единого табличного представления. Речь идет о легком редактировании.

5. Копирование, тиражирование и клонирование

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

  • Копирование . Скопированный блок начинается с тех же атрибутов, что и исходный. Никакие последующие правки не распространяются между оригиналом и копией; они независимы друг от друга. Это быстрый способ дублирования данных.
  • Копирование . Когда вы редактируете исходный блок, диалоговое окно предлагает вам выбрать, какие изменения вы хотите распространить на его дубликаты.Вы можете редактировать дублированные блоки по отдельности, но изменения, распространенные из исходных переопределенных правок, вносятся в дубликат. Это быстрый способ дублирования данных с возможностью внесения большого количества обновлений позже.
  • Клонирование . Клонирование блока связывает клонированный блок с исходным блоком. Это означает, что они всегда имеют одинаковые значения, за исключением имени блока и ожидаемых результатов. Вы не можете редактировать атрибуты клонированных блоков, кроме имени блока и ожидаемых результатов. Изменения, внесенные в исходный блок, влияют на все клонированные блоки.Это полезно, если вам нужно убедиться, что эти блоки согласованы.

6. Ограничения

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

7. Использование подпотоков

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

8. Хранение моделей

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

Тесты | docs.getdbt.com

Справочные документы, связанные с данной #

Начало работы #

Тесты — это утверждения, которые вы делаете о своих моделях и других ресурсах в вашем проекте dbt (например.грамм. источники, семена и снимки). Когда вы запускаете dbt test , dbt сообщит вам, прошел ли каждый тест в вашем проекте или нет.

Существует два типа тестов:

  • Schema tests (чаще): применяется в YAML, возвращает количество записей, которые не передают утверждение — когда это число равно 0, все записи проходят, следовательно , ваш тест проходит
  • тестов данных : конкретные запросы, возвращающие 0 записей

Определение тестов — отличный способ подтвердить, что ваш код работает правильно, и помогает предотвратить регрессии при изменении вашего кода.

Создание ваших первых тестов

Если вы новичок в dbt, мы рекомендуем вам ознакомиться с нашим Руководством по началу работы, чтобы создать свой первый проект dbt с моделями и тестами.

Тесты схемы #

Тесты схемы добавляются как свойств для существующей модели (или источника, начального числа или моментального снимка).

Эти свойства добавляются в файлы .yml в том же каталоге, что и ваш ресурс.

Если вы впервые работаете с добавлением свойств к ресурсу, ознакомьтесь с документацией по объявлению свойств.

Из коробки dbt поставляется с тестами unique , not_null , accept_values ​​ и отношений . Вот полный пример:

 Копия 

версия: 2

модели:

- имя: заказы

столбцы:

- имя: order_id

тесты:

- уникальный

- not_null

- имя: статус

тестов:

- accept_values:

значений: ['размещено', 'отправлено', 'выполнено', 'возвращено']

- name: customer_id

tests:

- Relations:

to: ref ('customers')

поле: id

На простом английском языке эти тесты переводятся как:

  • unique : столбец order_id в модели orders должен быть уникальным
  • not_null : Столбец order_id в модели orders не должен содержать нулевых значений
  • accept_v alues ​​: столбец статуса в заказах должен быть одним из «размещен» , «отправлен» , «завершен» или «возвращен»
  • отношения : каждый customer_id в модели заказов существует как id в таблице клиентов (также известная как ссылочная целостность)

За кулисами dbt создает запрос select для каждого теста схемы.Эти запросы возвращают номер 0 , если ваше утверждение истинно, в противном случае тест не проходит.

Более подробную информацию об этих тестах и ​​дополнительных конфигурациях (включая серьезность и теги ) можно найти в справочном разделе.

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

Мы открыли исходный код некоторых полезных тестов схемы в dbt-utils — переходите к документации по пакетам, чтобы узнать больше!

Example #

Чтобы добавить тест схемы в ваш проект:

  1. Добавьте файл .yml в каталог моделей , например models / schema.yml , со следующим содержимым (может потребоваться изменить имя : значения для существующей модели)
 Копировать версию 

: 2

models:

- name: orders

columns :

- name: order_id

tests:

- unique

- not_null

  1. Запустить команду dbt test :
 Копировать 

$ dbt test

Найдено 3 модели, 2 теста, 0 тестов , 0 анализов, 130 макросов, 0 операций, 0 исходных файлов, 0 источников

17:31:05 | Параллелизм: 1 поток (target = 'learn')

17:31:05 |

17:31:05 | 1 из 2 НАЧАТЬ тест not_null_order_order_id..................... [RUN]

17:31:06 | 1 из 2 ПРОЙДЕН not_null_order_order_id ........................... [ПРОЙДЕН через 0,99 с]

17:31:06 | 2 из 2 НАЧАТЬ тест unique_order_order_id ....................... [RUN]

17:31:07 | 2 из 2 ПРОЙДЕН unique_order_order_id ............................. [ПРОЙДЕН через 0,79 с]

17:31:07 |

17:31:07 | Завершил запуск 2 тестов за 7.17 с.

Успешно выполнено

Готово. PASS = 2 WARN = 0 ERROR = 0 SKIP = 0 TOTAL = 2

  1. Проверить, что база данных SQL запущена одним из следующих способов:
    • dbt Cloud: проверяя вкладку Details.
    • dbt CLI: проверка цели / скомпилированный каталог

Уникальный тест

  • Скомпилированный SQL
  • Шаблонный SQL
 Скопируйте 

select count (*) as validation_errors

from (

from (

from (

from)

выберите

order_id

из analytics.orders

, где order_id не равен нулю

group by order_id

с count (*)> 1

) validation_errors

Not null test

    SQL test

    • Шаблонный SQL
     Копировать 

    выберите

    count (*) как validation_errors

    из аналитики.orders

    , где order_id имеет значение null

    Data tests #

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

    Тесты данных определены в файлах .sql , обычно в вашем каталоге tests (как определено конфигурацией test-paths ). Каждый файл .sql содержит один тест данных / один оператор выбора :

    tests / assert_total_payment_amount_is_positive.sql

     Скопируйте 

    выберите

    order_id,

    sum (amount) как total_amount

    из {{ref ('fct_payments')}}

    group by 1

    без (total_amount> = 0)

    Data tests также запускаются командой dbt test . Для только запускает тесты данных, запустите dbt test --data .

    Часто задаваемые вопросы #

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

    Запуск тестов на одной модели очень похож на запуск модели: используйте флаг --models (или флаг -m ), за которым следует имя модели:

     Copy 

    dbt test --models customers

    Дополнительные операторы и примеры см. В документации по синтаксису выбора модели.

    Один из моих тестов не прошел, как его отладить?

    Чтобы отладить неудачный тест, найдите SQL, который запускал dbt:

    • dbt Cloud:
      • В выходных данных теста щелкните неудачный тест, а затем выберите «Подробности»
    • dbt CLI:
      • Открыть путь к файлу, возвращенный как часть сообщения об ошибке.
      • Перейдите в каталог target / compiled / schema_tests для всех скомпилированных тестовых запросов

    Скопируйте SQL в редактор запросов (в dbt Cloud вы можете вставить его в новый оператор ) и запустить запрос, чтобы найти записи, которые не удалось.

    Какие тесты я должен добавить в свой проект?

    Мы рекомендуем, чтобы каждая модель имела тест на первичном ключе, то есть столбце, который имеет уникальный и not_null .

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

    В продвинутых проектах dbt мы рекомендуем использовать источники и выполнять эти тесты целостности исходных данных с источниками, а не с моделями.

    Когда мне следует запускать тесты?

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

    Есть ли способ просмотреть или сохранить записи неудачного теста?

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

    Могу ли я хранить свои тесты данных в каталоге, отличном от каталога `test` в моем проекте?

    По умолчанию dbt ожидает, что ваши тестовые файлы данных будут расположены в подкаталоге tests вашего проекта.

    Чтобы изменить это, обновите конфигурацию тестовых путей в вашем dbt_project.yml
    файл, например:

     Скопируйте 

    test-paths: ["data-tests"]

    Как мне запускать тесты только для источников?

    Поскольку синтаксис выбора теста вырос из синтаксиса выбора модели (и предшествующих источников), синтаксис здесь немного неинтуитивен, но это возможно!

     Копировать 

    $ dbt test --models source: *

    Дополнительные операторы и примеры см. В документации по синтаксису выбора модели.

    Могу ли я установить пороговые значения для отказа при тестировании?

    В настоящее время это не поддерживается в dbt.

    Вместо этого подумайте:

    Могу ли я проверить уникальность двух столбцов?

    Да, есть несколько разных вариантов.

    Рассмотрим таблицу заказов, которая содержит записи из нескольких стран, и комбинация идентификатора и кода страны уникальна:

    order_id country_code
    1 AU
    2 AU
    1 US
    2 US

    Вот несколько подходов:

    1. Create уникальный ключ в модели и тесте, который #
     Копировать 

    выберите

    country_code || '-' || order_id как surrogate_key,

    ...

     Копировать 

    версия: 2

    models:

    - name: orders

    columns:

    - name: surrogate_key

    tests:

    - unique

    5 905.Проверить выражение #

     Копировать 

    версия: 2

    models:

    - name: orders

    tests:

    - unique:

    column_name: "(country_code || '-' || order_id)"

    3. Используйте тест

    dbt_utils.unique_combination_of_columns #

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

     Копировать 

    версия: 2

    модели:

    - имя: заказы

    тесты:

    - dbt_utils.unique_combination_of_columns:

    combination_of_columns:

    - country_code

    - order_id

    12 Тестирование модели компонентов, модульное тестирование, анализ кода

    12 Тестирование модели компонентов, модульное тестирование, анализ кода

    Далее: 13 Тестирование системы и
    Up: dev_guide
    Предыдущая: 11 правил управления данными
    & nbsp Содержание

    Подразделы


    Сложное программное обеспечение, такое как CCSM, требует тщательного тестирования для предотвращения
    дефекты модели и обеспечить стабильные, твердые модели для работы
    с.Многослойное тестирование оказалось наиболее эффективным в отлове
    программные дефекты. Многоуровневое тестирование относится к тестированию на разных
    уровней, как для тестирования отдельных подпрограмм, так и для более сложных
    системы. Может быть несколько уровней от простых до более сложных систем.
    также протестирован. Автономное тестирование моделей отдельных компонентов - это
    пример системы менее сложной, чем весь CCSM. Юнит-тестирование
    это первый уровень - тестирование отдельных подпрограмм или модулей. Само по себе модульное тестирование не обнаружит дефекты, которые
    зависит от отношений между различными модулями, но тестирование
    вся система иногда не обнаруживает ошибок в отдельном человеке
    модуль.Вот почему использование обеих крайностей полезно в модели ловли.
    дефекты. Раздел
    охватывает тестирование для
    всей системы моделирования CCSM, этот раздел посвящен тестированию
    отдельные компоненты модели и модульное тестирование подпрограмм и
    модули в этих компонентах. Другой способ помочь избавиться от кода
    ошибки - это периодические проверки кода. Код-ревью может быть реализован в
    много разных модных вещей, но в целом это предполагает наличие как минимум
    один человек, помимо автора, просматривает написанный код и исследует
    реализация как для дизайна, так и для ошибок.Джонс-1986 [3]
    заявляет, что `` средний уровень обнаружения дефектов составляет всего 25 процентов для единицы
    тестирование, 35 процентов для функционального тестирования и 45 процентов для интеграционного тестирования. В
    напротив, средняя эффективность проверки дизайна и кода
    55 процентов и 60 процентов. McConnel-1993 [4] также отмечает, что помимо того, что
    эффективен в обнаружении ошибок, ревью кода также выявляет различные типы
    ошибок, чем при тестировании. Кроме того, когда разработчики осознают свои
    код будет пересмотрен - они, как правило, более осторожны, когда
    программирование.

    Поскольку CCSM и компонентные модели требуют значительного объема компьютерных
    ресурсы для запуска - раннее обнаружение ошибок может снизить вычислительные затраты
    существенно. В дополнение к этому, как указал МакКоннелл-1993 [4]
    время разработки резко сокращается, когда формальная гарантия качества
    реализованы методы, в том числе code-review.

    Каждая компонентная модель должна разрабатывать и поддерживать свой собственный набор
    тестирование данного компонента. Рекомендуется анализ
    виды тестирования, необходимые для каждой модели по каждой компонентной модели
    команда разработчиков должна быть оформлена и записана в формальном
    план тестирования.Также создание автоматических тестов для запуска набора стандартных
    тесты могут быть полезны, чтобы убедиться, что модели работают и продолжают работать как
    нужный. Это особенно полезно, чтобы убедиться, что модели продолжают
    работать на нескольких платформах. McConnell-1996 [5] ссылается на
    к этому как к ежедневному `` тесту сборки и дыму '', который вы ежедневно собираете и запускаете
    ваш код, чтобы он продолжал работать, а не просто сидел там
    и `` дым ''.

    12.1.1 Разработка хороших тестов

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

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

    12.1.2 юнит-тесты

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

    Хорошие модульные тесты сделают следующее:

    1. Проверяются применимые требования.
    2. Проверяйте каждую строчку кода.
    3. Убедитесь, что работает весь диапазон возможных входных данных. (т.е. если
      Температура является входной. Убедитесь, что значения близки к минимальному и минимальному.
      максимально возможные значения работают)
    4. Граничный анализ - логические утверждения, относящиеся к порогу
      состояния проверяются на правильность.
    5. Проверьте правильность входных данных.
    6. Тест на научную достоверность.

    Анализируя тестируемый код, можно
    разработан, чтобы гарантировать, что все логические утверждения выполняются в
    модульный тест. Аналогичным образом ввод может быть разработан для проверки логического порога.
    состояния (граничный анализ). Разумеется, проверка научной обоснованности
    самое сложное. Но иногда тестирование указывает, что ответ
    известные аналитически могут быть полезны. И обеспечение (или измерение)
    степень сохранения энергии, тепла или массы для консервативных
    процессы также часто могут быть выполнены.Эти типы тестов также могут быть
    применяется также для более сложных функциональных и системных тестов.

    12.1.3 Функциональные тесты

    Функциональные тесты берут заданный набор системы и проверяют этот набор.
    для определенной функциональности. Научные функциональные тесты
    общий. Например, модель излучения колонны (CRM) используется для проверки
    радиационная часть модели атмосферы. Довольно часто научный
    функциональные тесты реализованы как опции списка имен для компонента
    модели, атмосферная модель имеет элемент списка имен для проверки динамики
    только отключив физику.Функциональные тесты также могут быть
    создан для таких инфраструктурных задач, как параллельная декомпозиция или
    обработка входных или выходных данных. Важные функциональные тесты должны быть
    поддерживается в CVS как отдельные модули, включающие каталоги
    поддерживается для модели главного компонента.

    12.1.4 Системные тесты

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

    12.1.5 Требования к тестированию CCSM и детали реализации

    Модульные тесты для компонентных моделей должны соответствовать следующему минимуму
    требования.

    1. Поддерживается в CVS либо с остальным исходным кодом модели, либо как
      отдельный модуль, который можно использовать. Название модуля и / или каталога должно
      быть легко идентифицируемыми, например, unit_testers.
    2. Имейте документацию по его использованию.
    3. Проверьте условия ошибки, чтобы ошибка распечатывала проблемы.
    4. Запрашивать любой ввод полезным способом. (так что вам не нужно читать
      код, чтобы выяснить, что вам нужно что-то ввести).
    5. Иметь связанный с ним Makefile. Может быть полезно использовать
      main Makefile, чтобы параметры компилятора были одинаковыми и чтобы
      зависимости платформы не нужно поддерживать дважды.
    6. В общем юнит-тесты
      должен запускаться с таким количеством параметров отладки компилятора, как
      возможно (проверка границ, захват сигнала и т. д.).

    Системные тесты компонентной модели должны соответствовать следующему минимуму
    требования.

    1. Убедитесь, что данная модель будет скомпилирована, построена и запущена на
      минимум одна производственная площадка.
    2. Убедитесь, что данная модель будет работать с системой CCSM на
      минимум одна производственная площадка.

    Формальные обзоры кода, где код проходит построчно
    в группах или парах оказался одним из наиболее эффективных способов
    ловить ошибки McConnell-1993 [4].Поэтому рекомендуется, чтобы
    группы разработки компонентной модели создают стратегию для регулярного
    просмотр кода.

    12.2.1 Стратегии внедрения кодовых обзоров

    Проверка кода может быть реализована по-разному.

    • Библиотекарь кода - перед тем, как код будет зарегистрирован в CVS, он проходит через `` библиотекаря ''
      который отвечает не только за тестирование, но и за проверку изменений
      - но также проверяет его на предмет дизайна и соблюдения стандартов кодекса.
    • Партнерские проверки - перед тем, как код будет зарегистрирован в CVS, партнерский разработчик просматривает
      изменения.
    • Парное программирование - Весь код разрабатывается двумя людьми
      глядя на один и тот же экран (одна из практик Экстремальных
      Программирование - [2]).
    • Управление формальной конфигурацией - Все модификации кода
      представлен группе управления конфигурацией, которая тщательно проверяет
      и тестирует изменения и включает изменения, продиктованные руководством проекта.
    • Формальная групповая прогулка - Код представлен и проходит через
      вся группа.
    • Формальный индивидуальный обход - Разные люди
      назначены и берут на себя ответственность
      для просмотра различных подпрограмм.

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

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


    Далее: 13 Тестирование системы и
    Up: dev_guide
    Предыдущая: 11 правил управления данными
    & nbsp Содержание

    [email protected]

    A / B-тестирование моделей машинного обучения (серия развертывания: руководство 08)

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

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

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

    В этом посте я описываю эксперименты вне контекста машинного обучения, а затем обсуждаю, почему онлайн-проверка моделей машинного обучения необходима. Мы поговорим об A / B-тестах как о методе онлайн-проверки и обсудим архитектуру, которая может быть реализована для моделей машинного обучения A / B-тестирования. В конце этой публикации вы можете загрузить созданное мной руководство, чтобы продемонстрировать, как реализовать архитектуру A / B-тестирования как в Google Cloud, так и в AWS.

    Зачем нужны онлайн-эксперименты?

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

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

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

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

    Вот тут-то и пригодятся эксперименты, известные как онлайн-тесты. Онлайн-эксперименты используются для измерения воздействия действия на некоторый базовый уровень в соответствии с определенным показателем. Изменения известны как обработок , а исходный уровень известен как контроль .В нашем примере пользовательского интерфейса элемент управления - это исходный цвет кнопки (красный), а новый цвет (зеленый) - это обработка. Мы измеряем показатель кликабельности кнопки.

    A / B-тестирование можно использовать, чтобы определить, приводит ли изменение пользовательского интерфейса к более высоким конверсиям. Источник.

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

    Почему модели машинного обучения A / B-тестирования?

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

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

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

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

    Отраслевые примеры A / B-тестирования моделей машинного обучения

    В своей лекции «Уроки, извлеченные из создания практических систем глубокого обучения» Ксавье Аматриан описывает 12 уроков, которые он извлек из создания и развертывания систем глубокого обучения в производственной среде.В уроке 9 подчеркивается необходимость проверки моделей машинного обучения с помощью онлайн-экспериментов. По словам Amatriain, положительная офлайн-производительность является показателем для проведения онлайн-тестов с помощью A / B-тестов. Чтобы проверить, следует ли развертывать новую модель, специалисты по данным должны

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

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

    Автономная работа является показателем для принятия решений о последующих A / B-тестах. Источник.

    Аналогичная идея выражена в документе 2019 года 150 успешных моделей машинного обучения: 6 уроков, извлеченных на Booking.com. В разделе 3 под названием Modeling: Offline Model Performance is Just a Health Check авторы заявляют, что:

    В резерве.com мы очень озабочены тем, какую ценность модель приносит нашим клиентам и нашему бизнесу. Такая ценность оценивается с помощью рандомизированных контролируемых испытаний (РКИ) и конкретных бизнес-показателей, таких как конверсия, заявки на обслуживание клиентов или отмены. Очень интересный вывод заключается в том, что повышение производительности модели не обязательно приводит к увеличению ее стоимости.

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

    По мнению авторов, это явление можно объяснить четырьмя факторами:

    • Value Performance Saturation - Невозможно бесконечно извлекать пользу для бизнеса из улучшений модели.
    • Насыщенность сегмента - Со временем размер экспериментальных групп уменьшается, поэтому становится все труднее обнаружить статистически значимое увеличение стоимости.
    • Эффект сверхъестественной долины - Некоторые пользователи обеспокоены тем, насколько хорошо модели предсказывают их действия, поскольку производительность модели со временем улучшается.Это негативно сказывается на пользовательском опыте.
    • Чрезмерная оптимизация прокси - Модели могут чрезмерно оптимизировать наблюдаемые переменные, которые являются заместителями для конкретных бизнес-целей.

    Явление, при котором пользователи негативно реагируют на точные прогнозы, известно как эффект «Странной долины». Источник.

    Как проводить A / B-тестирование моделей ML

    Как мы можем провести A / B-тест, чтобы определить, лучше ли новая модель, чем существующая?

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

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

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

    Архитектура A / B-тестирования для моделей машинного обучения

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

    Предположим, что model_A - это развернутая в настоящее время модель, которую можно запросить, сделав HTTP-запрос к конечной точке / прогноз .

      @ app.route ("/ прогнозировать")
    def прогнозировать ():
    features = request.get_json ['features']
    вернуть model_A.predict (функции)
      

    Теперь представьте, что мы разделили пользователей на контрольные / лечебные группы на основе идентификатора пользователя. Пользователи в группе лечения должны увидеть новую модель, которую мы назовем model_B . Наивная реализация A / B-теста включает реализацию логики маршрутизации, которая сопоставляет пользователей с моделями в приложении, обслуживающем модель.

      # ID пользователей в группе лечения
    TREAMENT_IDS = {}
    
    @приложение.маршрут ("/ прогнозировать")
    def прогнозировать ():
    features = request.get_json ['features']
    если request.get_json ['user_id'] в TREATMENT_IDS:
    вернуть model_B.predict (функции)
    еще:
    вернуть model_A.predict (функции)
      

    Эта архитектура изображена на следующей диаграмме.

    Наивная архитектура для моделей A / B-тестирования предполагает обслуживание нескольких моделей в одном приложении.

    Почему я считаю, что это плохой образец? Три причины.

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

    Вторая причина сводится к снижению риска за счет устранения потенциальных источников ошибок.Добавление кода всегда увеличивает область "поверхности отказа" приложения. Больше кода - больше тестов. Сами фактические развертывания увеличивают вероятность добавления ошибок в кодовую базу; вам нужно будет развернуть код один раз, чтобы начать эксперимент, и еще раз, когда эксперимент закончится. Лучше один раз написать общую логику API с хорошо сконструированными интерфейсами и редко обновлять эту логику снова.

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

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

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

    Этот подход устраняет проблемы наивного подхода:

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

    И Google Cloud (GCP), и AWS предлагают механизмы для развертывания моделей машинного обучения A / B-тестирования. Если вам интересно, я написал краткое руководство, показывающее, как реализовать эту архитектуру как на GCP, так и на AWS, которое можно скачать ниже.

    Многорукие бандиты для моделей машинного обучения

    A / B-тесты - не единственный тип онлайн-экспериментов.Эксперименты Multi-Armed Bandits (MAB) учатся на данных, собранных во время теста, чтобы динамически увеличивать распределение посетителей в пользу более эффективных вариантов. MAB полагается на «динамическое распределение трафика», чтобы постоянно определять степень, в которой одна версия превосходит другие. После обнаружения бандиты направляют большую часть трафика динамически и в реальном времени к выигрышному варианту. Это означает, что неэффективные варианты со временем распределяют все меньше и меньше трафика.MAB гарантирует, что общее количество конверсий будет максимальным во время теста, чего не делает A / B-тестирование. С другой стороны, эта гарантия означает, что вы не можете узнать влияние всех вариаций со статистической достоверностью.

    Для получения дополнительной информации о многоруких бандитах и ​​о том, чем этот подход отличается от A / B-тестов, я рекомендую вам прочитать эти две статьи:

    Заключение

    Организации проводят онлайн-эксперименты, такие как A / B-тесты, чтобы понять, приводят ли их действия к желаемым результатам.Эти действия могут иметь форму маркетинговых кампаний, новых функций продукта или вариаций существующих продуктов, таких как корректировка рекламного текста или пользовательского интерфейса. Внедрение моделей машинного обучения с целью повлиять на поведение пользователей - еще один «рычаг», который необходимо проверить с помощью онлайн-экспериментов.

    Для запуска A / B-тестов при развертывании моделей машинного обучения требуется дополнительный код и инфраструктура для настройки экспериментов и маршрутизации запросов к соответствующей модели. В этом посте мы обсудили один шаблон для реализации A / B-тестов для моделей машинного обучения.

    Статистические тесты для построения модели на Monolix

    Несколько статистических тестов могут выполняться автоматически для проверки различных компонентов модели. В этих тестах используются отдельные параметры, взятые из условного распределения, что означает, что вам необходимо запустить задачу «Условное распределение», чтобы получить эти результаты. Кроме того, тесты на остатки требуют, чтобы сначала были сгенерированы диагностические графики остатков (диаграмма рассеяния или распределение).
    Все тесты выполняются с использованием отдельных параметров, выбранных из условного распределения (или полученных из него случайных эффектов и остатков). Таким образом, они не подвержены смещению в случае усадки. Для каждого человека можно использовать несколько выборок из условного распределения. Используемые тесты включают поправку, учитывающую корреляцию этих выборок между собой.

    Результаты тестов доступны во вкладке «Результаты» и выбрав «Тесты» в левом меню.

    Модель по индивидуальным параметрам

    Рассмотрим пример ПК (набор данных варфарина из демонстраций) со следующей моделью для отдельных параметров ПК (ka, V, Cl):

    В этом примере мы делаем следующие предположения о модели:

    • 3 параметра имеют нормальное логарифмическое распределение
    • ка это функция возраста только
    • В зависит от пола и веса.Точнее, журнал объема журнала (V) является линейной функцией веса журнала \ ({\ rm lw70} = \ log ({\ rm wt} / 70) \).
    • Cl не является функцией ни одной из ковариат.
    • Случайные эффекты \ (\ eta_V \) и \ (\ eta_ {Cl} \) линейно коррелированы.
    • \ (\ eta_ {ka} \) не коррелирует с \ (\ eta_V \) и \ (\ eta_ {Cl} \)

    Давайте посмотрим, как проверяется каждое из этих предположений:

    Ковариальная модель

    Индивидуальные параметры и ковариаты - проверьте, следует ли удалять ковариаты из модели

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

    В обоих случаях небольшое p-значение указывает, что нулевая гипотеза может быть отклонена и, таким образом, оцененный параметр бета значительно отличается от нуля.В этом случае ковариату следует сохранить в модели. Напротив, если p-значение велико, нулевая гипотеза не может быть отклонена, и это предлагает удалить ковариату из модели. Обратите внимание, что если бета равна нулю, то ковариата не влияет на параметр. Высокие значения p окрашены в желтый цвет (значение p в [0,01-0,05]), оранжевый (значение p в [0,05-0,10]) или красный (значение p в [0,10-1]), чтобы привлечь внимание к параметру. -ковариантные отношения, которые можно удалить из модели со статистической точки зрения.{(L)} \) (например, объем), только один из них необходим в модели, потому что они избыточны. В линейной регрессии только одно из оценочных значений \ (\ hat {\ beta_1} \) и \ (\ hat {\ beta_2} \) будет значительно отличаться от нуля.

    Для каждой ковариаты \ (c \) мы проводим t-тест на \ (\ hat {\ beta_c} \) с нулевой гипотезой:

    H0: \ (\ beta_c = 0 \).

    Статистика теста -

    $$ T_0 = \ frac {\ hat {\ beta_c}} {se (\ hat {\ beta_c})} $$

    , где \ (se (\ hat {\ beta_c}) \) - оценочная стандартная ошибка \ (\ hat {\ beta_c} \) (полученная методом наименьших квадратов во время регрессии).Если нулевая гипотеза верна, \ (T_0 \) следует распределению t с \ (N-n_C-1 \) степенями свободы (где N - количество особей).

    В нашем примере тест корреляции предлагает удалить пол из ka:

    Тест Вальда

    Тест Вальда основан на стандартных ошибках. Таким образом, задача «Стандартные ошибки» должна быть рассчитана, чтобы увидеть результаты теста. Тест может быть выполнен с использованием стандартных ошибок, рассчитанных с использованием «метода линеаризации» (обозначенного как «линеаризация») или нет (обозначенного в тестах как «стохастическое приближение»).

    Тест Вальда проверяет следующую нулевую гипотезу:

    H0: бета-параметр, оцененный SAEM, равен нулю.

    Математика: Обратите внимание на \ (\ hat {\ beta} \) оценочное значение бета (который является параметром совокупности) и \ (se (\ hat {\ beta}) \) соответствующую стандартную ошибку, вычисленную во время задание «Стандартные ошибки». Статистика теста Вальда:

    $$ W = \ frac {\ hat {\ beta}} {se (\ hat {\ beta})} $$

    Статистика критерия сравнивается с t-распределением с 1 степенью свободы.

    В нашем примере тест Вальда предлагает убрать пол из ka и V:

    Примечание: тест Вальда и тест корреляции могут предлагать различные ковариаты, которые следует оставить или удалить. Обратите внимание, что проверенная нулевая гипотеза не совпадает.

    Случайные эффекты и ковариаты - проверьте, следует ли добавлять коварианты в модель

    Тесты корреляции

    Пирсона и ANOVA выполняются, чтобы проверить, следует ли добавлять в модель некоторые взаимосвязи между случайными эффектами и ковариатами, еще не включенными в модель. l \) случайные эффекты, соответствующие \ (L \) отдельным параметрам, выбранным из условного распределения (называемым репликами) для отдельных \ (i \) и \ (cov_i \ ) значение ковариации для индивидуального \ (i \).2}} \ sqrt {N-2} $$

    и сравнивается с t-распределением с \ (N-2 \) степенями свободы с \ (N \) числом особей.

    Категориальные ковариаты: Случайные эффекты сначала усредняются по повторам для каждого индивидуума и выполняется односторонний дисперсионный анализ (упрощенный до t-критерия, когда ковариата имеет только две категории).

    Модель для случайных эффектов

    Распределение случайных эффектов - проверьте, нормально ли распределены случайные эффекты

    В отдельной модели распределения параметров предполагают, что случайные эффекты подчиняются нормальному распределению.Для проверки этой гипотезы проводятся тесты Шапиро-Уилка. Нулевая гипотеза:

    H0: случайные эффекты нормально распределены

    Если p-значение мало, есть свидетельства того, что случайные эффекты не имеют нормального распределения, и это ставит под сомнение выбор отдельной модели (распределение параметров и ковариаты). Маленькие значения p окрашены в желтый цвет (значение p в [0,05-0,10]), оранжевый (значение p в [0,01-0,05]) или красный цвет (значение p в [0,00-0,01]).л \). Для p-значений одно p-значение вычисляется для каждой реплики с использованием таблицы Shapiro-Wild с \ (N \) (количество людей) степеней свободы. Затем применяется процедура Бенджамини-Хохберга (BH): значения p ранжируются в порядке возрастания, и критическое значение BH вычисляется для каждого как \ (\ frac {\ textrm {rank}} {L} Q \) с \ (\ textrm {rank} \) ранг отдельного p-значения, \ (L \) общее количество p-значений (равное количеству повторов) и \ (Q = 0,05 \) коэффициент ложного обнаружения. Выбирается наибольшее значение p, меньшее соответствующего критического значения.

    Совместное распределение случайных эффектов - проверьте, коррелированы ли случайные эффекты

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

    H0: ожидание произведения случайных эффектов первого и второго параметра равно нулю

    Нулевая гипотеза оценивается с помощью t-критерия.

    Примечание : В версии 2018 года использовался корреляционный тест Пирсона.

    Для корреляций, еще не включенных в модель , небольшое значение p указывает на то, что существует значительная корреляция между случайными эффектами двух параметров и что эту корреляцию следует оценивать как часть модели (в противном случае моделирование из модели будет Предположим, что случайные эффекты двух параметров не коррелированы, что не наблюдается для случайных эффектов, оцененных с использованием данных).Маленькие значения p окрашены в желтый цвет (значение p в [0,05-0,10]), оранжевый (значение p в [0,01-0,05]) или красный цвет (значение p в [0,00-0,01]).
    Для корреляций, уже включенных в модель , большое значение p указывает на то, что нельзя отвергнуть гипотезу о том, что корреляция между случайными эффектами равна нулю. Если корреляция незначительно отличается от нуля, возможно, не стоит оценивать ее в модели. Высокие значения p окрашены в желтый цвет (значение p в [0,01-0,05]), оранжевый (значение p в [0.05-0.10]) или красный (значение p в [0.10-1])

    В нашем примере мы предположили в модели, что \ (\ eta_V \) и \ (\ eta_ {Cl} \) коррелированы. Высокое значение p указывает на то, что корреляция между случайными эффектами V и Cl существенно не отличается от нуля, и предлагает удалить эту корреляцию из модели.

    Примечание: , поскольку корреляции могут быть оценены только по группам (т.е. если корреляция оценивается между (ka, V) и между (V, Cl), то необходимо также оценить корреляцию между (ka, Cl)), это может случиться так, что невозможно удалить незначительную корреляцию, не удалив также значимую.{(L)} \) среднее значение продукта по индивидуумам и \ (s \) их стандартное отклонение. Статистика теста:

    $$ T = \ frac {\ overline {p}} {\ frac {s} {\ sqrt {N}}} $$

    и сравнивается с t-распределением с \ (N-1 \) степенями свободы с \ (N \) числом особей.

    Распределение индивидуальных параметров

    Распределение отдельных параметров, не зависящих от ковариат - Проверить, нормально ли распределены преобразованные отдельные параметры

    Если отдельный параметр не зависит от ковариат, его распределение (нормальное, логнормальное, логит или пробит) можно преобразовать в нормальное распределение.Затем можно использовать тест Шапиро-Уилка для проверки нормальности преобразованного параметра. Нулевая гипотеза:

    H0: преобразованные значения отдельных параметров (взятые из условного распределения) нормально распределены

    Если p-значение мало, есть свидетельства того, что преобразованные значения отдельных параметров не имеют нормального распределения, и это ставит под сомнение выбор распределения параметров. Маленькие значения p окрашены в желтый цвет (значение p в [0.05-0.10]), оранжевый (значение p в [0,01-0,05]) или красный (значение p в [0,00-0,01]).

    В нашем примере нет причин отвергать нулевую гипотезу логнормальности для Cl.

    Примечание: проверка нормальности преобразованного индивидуального параметра, который не зависит от ковариат, эквивалентна проверке нормальности соответствующего случайного эффекта. В нашем примере мы можем проверить, что тесты Шапиро-Уилка для \ (\ log (Cl) \) и \ (\ eta_ {Cl} \) эквивалентны.л \). Для p-значений одно p-значение вычисляется для каждой реплики с использованием таблицы Shapiro-Wild с \ (N \) (количество людей) степеней свободы. Затем применяется процедура Бенджамини-Хохберга (BH): значения p ранжируются в порядке возрастания, и критическое значение BH вычисляется для каждого как \ (\ frac {\ textrm {rank}} {L} Q \) с \ (\ textrm {rank} \) ранг отдельного p-значения, \ (L \) общее количество p-значений (равное количеству повторов) и \ (Q = 0,05 \) коэффициент ложного обнаружения. Выбирается наибольшее значение p, меньшее соответствующего критического значения.

    Распределение отдельных параметров в зависимости от ковариат - проверка предельного распределения каждого отдельного параметра

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

    H0: отдельные параметры представляют собой выборки из смеси преобразованных нормальных распределений (определяемых параметрами совокупности и значениями ковариант)

    Маленькое p-значение указывает, что нулевая гипотеза может быть отклонена. Маленькие значения p окрашены в желтый цвет (значение p в [0,05-0,10]), оранжевый (значение p в [0,01-0,05]) или красный цвет (значение p в [0.00-0.01]).

    В нашем примере получаем:

    Модель для наблюдений

    В нашем примере предполагается комбинированная1 модель ошибок с нормальным распределением:

    Распределение остатков

    Несколько тестов выполняются для индивидуальных остатков (IWRES), NPDE и для остатков генеральной совокупности (PWRES).

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

    Тест Мяо, Геля и Гаствирта ( 2006 ) (или тест Ван дер Вардена в версии 2018 г.) используется для проверки симметрии остатков.В самом деле, симметрия остатков вокруг 0 ​​является важным свойством, которое заслуживает проверки, чтобы решить, например, нужно ли выполнить какое-либо преобразование наблюдений. Проверенная нулевая гипотеза:

    H0: медиана остатков равна своему среднему значению

    Маленькое p-значение указывает, что нулевая гипотеза может быть отклонена.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *