КулЛиб - Классная библиотека! Скачать книги бесплатно 

Инженерия машинного обучения [Андрей Бурков] (pdf) читать онлайн

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]
Андрей Бурков

Инженерия машинного обуче­ния

Machine Learning
Engineering

Andriy Burkov

Инженерия
машинного обуче­ния

Андрей Бурков

Москва, 2022

УДК 004.4
ББК 32.972
Б91

Б91

Бурков А.
Инженерия машинного обуче­ния / пер. с англ. А. А. Слинкина. – М.: ДМК
Пресс, 2022. – 306 с.: ил.
ISBN 978-5-93700-125-2
Книга представляет собой подробный обзор передовых практик и паттернов
проектирования в области прикладного машинного обучения. В отличие от многих учебников, уделяется внимание инженерным аспектам МО. Рассматриваются
сбор, хранение и предобработка данных, конструирование признаков, а также
тестирование и отладка моделей, развертывание и вывод из эксплуатации, сопровождение на этапе выполнения и в процессе эксплуатации. Главы книги можно
изучать в любом порядке.
Издание будет полезно тем, кто собирается использовать машинное обучение
в крупномасштабных проектах. Предполагается, что читатель знаком с основами
МО и способен построить модель при наличии подходящим образом отформатированного набора данных.
Дизайн обложки разработан с использованием ресурса freepik.com

УДК 004.4
ББК 32.972

Copyright Title of English-language edition: “Machine Learning Engineering”, ISBN 978-19995795-7-9 published by Andriy Burkov. Copyright © 2020 Andriy Burkov. Russian-language
edition copyright © 2022 by DMK Press Publishing. All rights reserved.
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения
владельцев авторских прав.

ISBN 978-1-9995795-7-9 (англ.)
ISBN 978-5-93700-125-2 (рус.)

© Andriy Burkov, 2020
© Перевод, оформление, издание,
ДМК Пресс, 2022

Теоретически между теорией и практикой
нет никакой разницы. Но на практике она есть.
– Бенджамин Брюстер
Идеальный план проекта –
сначала составить список всех неизвестных.
– Билл Лэнгли
Привлечение средств – это искусственный интеллект.
Найм на работу – машинное обучение.
Реализация – это линейная регрессия.
А отладка – это printf().
– Бэрон Шварц

Содержание
От издательства. ...................................................................................................14
Вступительное слово..........................................................................................15
Предисловие...........................................................................................................17
Глава 1. Введение.................................................................................................19
1.1. Обозначения и определения..............................................................................19
1.1.1. Структуры данных........................................................................................19
1.1.2. Заглавная сигма............................................................................................21
1.2. Что такое машинное обучение. .........................................................................21
1.2.1. Обучение с учителем. ..................................................................................22
1.2.2. Обучение без учителя..................................................................................23
1.2.3. Обучение с частичным привлечением учителя.......................................24
1.2.4. Обучение с подкреплением........................................................................24
1.3. Терминология машинного обучения................................................................25
1.3.1. Данные, используемые прямо и косвенно...............................................25
1.3.2. Первичные и аккуратные данные..............................................................26
1.3.3. Обучающие и зарезервированные наборы. .............................................27
1.3.4. Ориентир. ......................................................................................................28
1.3.5. Конвейер машинного обучения.................................................................28
1.3.6. Параметры и гиперпараметры...................................................................29
1.3.7. Классификация и регрессия........................................................................29
1.3.8. Обучение на основе модели и обучение на основе экземпляров.........30
1.3.9. Поверхностное и глубокое обучение.........................................................30
1.3.10. Обучение и оценивание. ...........................................................................30
1.4. Когда следует использовать машинное обучение. .........................................31
1.4.1. Когда задача слишком сложна для кодирования.....................................31
1.4.2. Когда задача постоянно меняется. ............................................................32
1.4.3. Когда речь идет о задаче восприятия........................................................32
1.4.4. Когда это неизученное явление. ................................................................32
1.4.5. Когда задача имеет простую целевую функцию......................................33
1.4.6. Когда это экономически выгодно..............................................................33
1.5. Когда не следует использовать машинное обучение. ....................................34
1.6. Что такое инженерия машинного обучения....................................................34
1.7. Жизненный цикл проекта машинного обучения. ..........................................36
1.8. Резюме...................................................................................................................37

Глава 2. Прежде чем приступать к проекту............................................39
2.1. Определение приоритетов проекта машинного обучения...........................39
2.1.1. Последствия машинного обучения............................................................39
2.1.2. Стоимость машинного обучения...............................................................40

Содержание  7

2.2. Оценивание сложности проекта машинного обучения.................................41
2.2.1. Неизвестные..................................................................................................41
2.2.2. Упрощение задачи........................................................................................42
2.2.3. Нелинейный прогресс..................................................................................43
2.3. Определение цели проекта машинного обучения. ........................................43
2.3.1. Что модель может делать. ...........................................................................43
2.3.2. Свойства успешной модели........................................................................44
2.4. Организация группы машинного обучения....................................................45
2.4.1. Две традиции. ...............................................................................................45
2.4.2. Члены группы машинного обучения.........................................................46
2.5. Причины провалов проектов машинного обучения......................................47
2.5.1. Нехватка квалифицированных кадров.....................................................47
2.5.2. Отсутствие поддержки со стороны руководства.....................................48
2.5.3. Отсутствующая инфраструктура данных. ................................................48
2.5.4. Трудности с разметкой данных..................................................................49
2.5.5. Разобщенные организации и отсутствие сотрудничества.....................49
2.5.6. Технически невыполнимые проекты........................................................50
2.5.7. Нестыковка между техническими и коммерческими группами...........50
2.6. Резюме...................................................................................................................51

Глава 3. Сбор и подготовка данных............................................................53
3.1. Вопросы к данным...............................................................................................53
3.1.1. Доступны ли данные?. .................................................................................54
3.1.2. Насколько велик объем данных?................................................................54
3.1.3. Пригодны ли данные для использования?...............................................56
3.1.4. Понятны ли данные?....................................................................................58
3.1.5. Надежны ли данные?. ..................................................................................58
3.2. Типичные проблемы с данными.......................................................................60
3.2.1. Высокая стоимость.......................................................................................60
3.2.2. Плохое качество............................................................................................62
3.2.3. Зашумленность.............................................................................................62
3.2.4. Смещение. .....................................................................................................63
Типы смещения..................................................................................................63
Как избежать смещения....................................................................................67
3.2.5. Низкая предсказательная способность.....................................................69
3.2.6. Устаревшие примеры...................................................................................70
3.2.7. Выбросы. ........................................................................................................70
3.2.8. Просачивание данных. ................................................................................71
3.3. Что считать хорошими данными. .....................................................................72
3.3.1. Хорошие данные информативны. .............................................................72
3.3.2. Хорошие данные обладают хорошим покрытием...................................72
3.3.3. Хорошие данные отражают реальные входы...........................................73
3.3.4. Хорошие данные несмещенные.................................................................73
3.3.5. Хорошие данные не являются результатом петли обратной связи......73
3.3.6. У хороших данных согласованные метки.................................................74
3.3.7. Хорошие данные достаточно велики.........................................................74
3.3.8. Сводный перечень свойств хороших данных. .........................................74

8  Содержание
3.4. Обработка данных о взаимодействии..............................................................75
3.5. Причины просачивания данных. ......................................................................75
3.5.1. Цель является функцией от признака.......................................................76
3.5.2. Признак скрывает цель................................................................................76
3.5.3. Признак из будущего...................................................................................77
3.6. Разбиение данных. ..............................................................................................78
3.6.1. Просачивание во время разбиения. ..........................................................79
3.7. Обработка отсутствия атрибутов.......................................................................80
3.7.1. Методы подстановки данных......................................................................80
3.7.2. Просачивание во время подстановки........................................................82
3.8. Приращение данных. ..........................................................................................82
3.8.1. Приращение данных для изображений....................................................82
3.8.2. Приращение данных для текста.................................................................84
3.9. Обработка несбалансированных данных.........................................................85
3.9.1. Выборка с избытком. ...................................................................................86
3.9.2. Выборка с недостатком................................................................................87
3.9.3. Гибридные стратегии...................................................................................87
3.10. Стратегии выборки данных. ............................................................................88
3.10.1. Простая случайная выборка......................................................................89
3.10.2. Систематическая выборка. .......................................................................90
3.10.3. Стратифицированная выборка. ...............................................................90
3.11. Хранение данных...............................................................................................90
3.11.1. Форматы данных........................................................................................91
3.11.2. Уровни хранения данных..........................................................................92
3.11.3. Версионирование данных.........................................................................94
3.11.4. Документация и метаданные...................................................................96
3.11.5. Жизненный цикл данных. ........................................................................96
3.12. Дополнительные рекомендации по работе с данными...............................97
3.12.1. Воспроизводимость. ..................................................................................97
3.12.2. Сначала данные, потом алгоритм............................................................97
3.13. Резюме.................................................................................................................98

Глава 4. Конструирование признаков......................................................100
4.1. Зачем конструировать признаки.....................................................................100
4.2. Как конструируются признаки........................................................................101
4.2.1. Конструирование признаков для текста.................................................102
4.2.2. Почему мешок слов работает. ..................................................................105
4.2.3. Преобразование категориальных признаков в числа. .........................105
4.2.4. Хеширование признаков...........................................................................108
4.2.5. Тематическое моделирование..................................................................109
4.2.6. Признаки для временных рядов..............................................................112
4.2.7. Проявите свои творческие способности. ................................................114
4.3. Штабелирование признаков. ...........................................................................115
4.3.1. Штабелирование векторов признаков....................................................115
4.3.2. Штабелирование индивидуальных признаков......................................116
4.4. Свойства хороших признаков..........................................................................117

Содержание  9

4.4.1. Высокая предсказательная способность.................................................117
4.4.2. Быстрое вычисление..................................................................................117
4.4.3. Надежность..................................................................................................118
4.4.4. Некоррелированность................................................................................118
4.4.5. Другие свойства..........................................................................................118
4.5. Отбор признаков................................................................................................119
4.5.1. Отрезание длинного хвоста......................................................................119
4.5.2. Boruta............................................................................................................120
4.5.3. L1-регуляризация.......................................................................................123
4.5.4. Зависящий от задачи отбор признаков...................................................123
4.6. Синтезирование признаков.............................................................................123
4.6.1. Дискретизация признаков........................................................................124
4.6.2. Синтез признаков из реляционных данных. .........................................125
4.6.3. Синтезирование признаков по данным. ................................................126
4.6.4. Синтезирование признаков по другим признакам. .............................127
4.7. Обучение признаков на данных. .....................................................................128
4.7.1. Погружения слов.........................................................................................128
4.7.2. Погружения документов............................................................................130
4.7.3. Погружения всего, чего угодно.................................................................131
4.7.4. Выбор размерности погружения..............................................................132
4.8. Понижение размерности..................................................................................132
4.8.1. Быстрое понижение размерности методом PCA...................................133
4.8.2. Понижение размерности с целью визуализации..................................133
4.9. Масштабирование признаков..........................................................................133
4.9.1. Нормировка.................................................................................................134
4.9.2. Стандартизация..........................................................................................135
4.10. Просачивание данных при конструировании признаков.........................136
4.10.1. Возможные проблемы. ............................................................................136
4.10.2. Решение. ....................................................................................................136
4.11. Хранение и документирование признаков. ................................................136
4.11.1. Файл схемы................................................................................................137
4.11.2. Хранилище признаков.............................................................................138
4.12. Рекомендации по конструированию признаков. .......................................141
4.12.1. Генерируйте много простых признаков. ..............................................141
4.12.2. Повторно используйте унаследованные системы...............................141
4.12.3. Используйте идентификаторы как признаки, когда это
необходимо…........................................................................................................142
4.12.4. …но по возможности уменьшайте количество значений..................142
4.12.5. Осторожнее со счетчиками.....................................................................143
4.12.6. Отбирайте признаки, когда необходимо..............................................143
4.12.7. Тщательно тестируйте код. .....................................................................144
4.12.8. Синхронизируйте код, модель и данные..............................................144
4.12.9. Изолируйте код выделения признаков.................................................144
4.12.10. Сериализуйте модель и экстрактор признаков совместно..............145
4.12.11. Протоколируйте значения признаков. ...............................................145
4.13. Резюме...............................................................................................................145

10  Содержание

Глава 5. Обучение модели с учителем (часть 1).................................147
5.1. Прежде чем приступать к работе над моделью.............................................148
5.1.1. Проверка согласованности со схемой. ....................................................148
5.1.2. Определение достижимого уровня качества. ........................................148
5.1.3. Выбор метрики качества...........................................................................149
5.1.4. Выбирайте правильный ориентир...........................................................149
5.1.5. Разбиение данных на три набора. ...........................................................151
5.1.6. Предварительные условия для обучения с учителем. ..........................152
5.2. Представление меток для машинного обучения..........................................153
5.2.1. Многоклассовая классификация..............................................................153
5.2.2. Многозначная классификация.................................................................154
5.3. Выбор алгоритма обучения..............................................................................154
5.3.1. Основные свойства алгоритма обучения. ..............................................155
5.3.2. Выборочная проверка алгоритмов..........................................................156
5.4. Построение конвейера......................................................................................158
5.5. Оценивание качества модели..........................................................................159
5.5.1. Метрики качества для регрессии.............................................................159
5.5.2. Метрики качества для классификации...................................................160
5.5.3. Метрики качества для ранжирования.....................................................165
5.6. Настройка гиперпараметров. ..........................................................................168
5.6.1. Поиск на сетке.............................................................................................169
5.6.2. Случайный поиск........................................................................................170
5.6.3. Поиск с измельчением...............................................................................170
5.6.4. Другие методы............................................................................................172
5.6.5. Перекрестная проверка.............................................................................172
5.7. Обучение поверхностной модели....................................................................173
5.7.1. Стратегия обучения поверхностной модели..........................................173
5.7.2. Сохранение и восстановление модели....................................................174
5.8. Компромисс между смещением и дисперсией.............................................175
5.8.1. Недообучение..............................................................................................175
5.8.2. Переобучение..............................................................................................176
5.8.3. Компромисс.................................................................................................177
5.9. Регуляризация....................................................................................................179
5.9.1. L1- и L2-регуляризации.............................................................................179
5.9.2. Другие формы регуляризации..................................................................180
5.10. Резюме...............................................................................................................180

Глава 6. Обучение модели с учителем (часть 2).................................183
6.1. Стратегия обучения глубоких моделей..........................................................183
6.1.1. Стратегия обучения нейронной сети......................................................184
6.1.2. Метрика качества и функция стоимости................................................184
6.1.3. Стратегии инициализации параметров..................................................187
6.1.4. Алгоритмы оптимизации..........................................................................187
6.1.5. Планы уменьшения скорости обучения. ................................................191
6.1.6. Регуляризация.............................................................................................192
6.1.7. Определение размера сети и настройка гиперпараметров.................193

Содержание  11

6.1.8. Работа с несколькими входами................................................................195
6.1.9. Работа с несколькими выходами. ............................................................196
6.1.10. Перенос обучения.....................................................................................197
6.2. Штабелирование моделей. ...............................................................................199
6.2.1. Типы ансамблевого обучения...................................................................199
6.2.2. Алгоритм штабелирования моделей.......................................................200
6.2.3. Просачивание данных при штабелировании моделей.........................201
6.3. Борьба со сдвигом распределения..................................................................202
6.3.1. Обработка сдвига распределения............................................................202
6.3.2. Состязательная проверка..........................................................................202
6.4. Обработка несбалансированных наборов данных.......................................203
6.4.1. Взвешивание классов.................................................................................203
6.4.2. Ансамбль перераспределенных наборов данных..................................204
6.4.3. Другие методы............................................................................................205
6.5. Калибровка модели. ..........................................................................................205
6.5.1. Хорошо откалиброванные модели. .........................................................205
6.5.2. Методы калибровки...................................................................................207
6.6. Поиск неполадок и анализ ошибок.................................................................208
6.6.1. Причины плохого поведения модели. ....................................................208
6.6.2. Итеративное уточнение модели. .............................................................209
6.6.3. Анализ ошибок............................................................................................209
6.6.4. Анализ ошибок в комплексных системах...............................................211
6.6.5. Использование расслоенных метрик......................................................212
6.6.6. Исправление неправильных меток. ........................................................212
6.6.7. Нахождение дополнительных примеров для пометки.........................213
6.6.8. Поиск неполадок при глубоком обучении..............................................213
6.7. Рекомендации.....................................................................................................215
6.7.1. Поставляйте хорошую модель..................................................................215
6.7.2. Доверяйте популярным реализациям с открытым исходным
кодом......................................................................................................................215
6.7.3. Оптимизируйте важную для бизнеса меру качества............................216
6.7.4. При обновлении начинайте с нуля. .........................................................216
6.7.5. Избегайте каскадов коррекций. ...............................................................217
6.7.6. Используйте каскадирование моделей с осторожностью....................217
6.7.7. Пишите эффективный код, компилируйте и распараллеливайте.......218
6.7.8. Тестируйте на старых и новых данных. ..................................................219
6.7.9. Больше данных лучше, чем более умный алгоритм..............................220
6.7.10. Новые данные лучше более изощренных признаков. ........................220
6.7.11. Радуйтесь крохотным достижениям......................................................220
6.7.12. Обеспечьте воспроизводимость.............................................................220
6.8. Резюме.................................................................................................................221

Глава 7. Оценивание модели........................................................................224
7.1. Офлайновое и онлайновое оценивания.........................................................225
7.2. A/B-тестирование...............................................................................................227
7.2.1. G-критерий..................................................................................................228
7.2.2. Z-критерий...................................................................................................231

12  Содержание
7.2.3. Заключительные замечания и предупреждения. ..................................233
7.3. Многорукий бандит...........................................................................................233
7.4. Статистические границы качества модели....................................................236
7.4.1. Статистический интервал для ошибки классификации.......................236
7.4.2. Бутстреп статистического интервала......................................................237
7.4.3. Бутстреп интервала предсказания для регрессии.................................238
7.5. Оценивание адекватности тестового набора. ...............................................239
7.5.1. Нейронное покрытие.................................................................................239
7.5.2. Мутационное тестирование......................................................................240
7.6. Оценивание свойств модели............................................................................240
7.6.1. Робастность..................................................................................................241
7.6.2. Справедливость...........................................................................................241
7.7. Резюме..................................................................................................................243

Глава 8. Развертывание модели.................................................................244
8.1. Статическое развертывание.............................................................................245
8.2. Динамическое развертывание на устройстве пользователя. .....................245
8.2.1. Развертывание параметров модели........................................................246
8.2.2. Развертывание сериализованного объекта............................................246
8.2.3. Развертывание в браузере.........................................................................246
8.2.4. Плюсы и минусы.........................................................................................246
8.3. Динамическое развертывание на сервере.....................................................247
8.3.1. Развертывание на виртуальной машине................................................247
8.3.2. Развертывание в контейнере....................................................................248
8.3.3. Бессерверное развертывание. ..................................................................250
8.3.4. Потоковое развертывание модели. .........................................................251
8.4. Стратегии развертывания................................................................................253
8.4.1. Разовое развертывание.............................................................................253
8.4.2. Немое развертывание................................................................................254
8.4.3. Канареечное развертывание. ...................................................................254
8.4.4. Многорукие бандиты.................................................................................255
8.5. Автоматизированное развертывание, версионирование и метаданные.....255
8.5.1. Объекты, сопровождающие модель.........................................................255
8.5.2. Синхронизация версий..............................................................................256
8.5.3. Метаданные версии модели. ....................................................................256
8.6. Рекомендации по развертыванию модели....................................................257
8.6.1. Эффективность алгоритма........................................................................257
8.6.2. Развертывание глубоких моделей. ..........................................................260
8.6.3. Кеширование...............................................................................................260
8.6.4. Формат доставки модели и кода..............................................................261
8.6.5. Начинайте с простой модели....................................................................263
8.6.6. Тестируйте на посторонних......................................................................263
8.7. Резюме. ................................................................................................................264

Глава 9. Выполнение, мониторинг и сопровождение модели.......266
9.1. Свойства среды выполнения модели..............................................................266
9.1.1. Безопасность и корректность...................................................................267

Содержание  13

9.1.2. Простота развертывания...........................................................................267
9.1.3. Гарантии правильности модели...............................................................268
9.1.4. Простота восстановления..........................................................................268
9.1.5. Предотвращение расхождений между обучением и выполнением.....268
9.1.6. Предотвращение скрытых петель обратной связи...............................269
9.2. Режимы выполнения модели...........................................................................269
9.2.1. Выполнение в пакетном режиме. ............................................................270
9.2.2. Обслуживание запроса со стороны человека.........................................270
9.2.3. Обслуживание запроса со стороны машины..........................................272
9.3. Выполнение модели на практике....................................................................273
9.3.1. Готовность к ошибкам. ..............................................................................273
9.3.2. Отношение к ошибкам..............................................................................274
9.3.3. Готовность к изменениям и отношение к ним......................................275
9.3.4. Готовность к особенностям человеческой природы
и отношение к ним...............................................................................................277
Избегайте путаницы........................................................................................277
Умерьте ожидания. ..........................................................................................277
Завоевывайте доверие.....................................................................................277
Не переутомляйте пользователя....................................................................278
Остерегайтесь фактора отторжения..............................................................278
9.4. Мониторинг модели..........................................................................................278
9.4.1. Что может пойти не так?...........................................................................279
9.4.2. Что и как мониторить................................................................................280
9.4.3. Что протоколировать.................................................................................282
9.4.4. Мониторинг неправомерного использования.......................................283
9.5. Сопровождение модели....................................................................................283
9.5.1. Когда обновлять..........................................................................................284
9.5.2. Как обновлять. ............................................................................................285
9.6. Резюме.................................................................................................................288

Глава 10. Заключение. .....................................................................................290
10.1. Сухой остаток. ..................................................................................................290
10.2. Что еще почитать.............................................................................................294
10.3. Благодарности..................................................................................................295

Предметный указатель. ..................................................................................297

От издательства
Отзывы и пожелания
Мы всегда рады отзывам наших читателей. Расскажите нам, что вы ду­маете
об этой книге – что понравилось или, может быть, не понравилось. Отзывы
важны для нас, чтобы выпускать книги, которые будут для вас максимально
полезны.
Вы можете написать отзыв на нашем сайте www.dmkpress.com, зайдя на
страницу книги и оставив комментарий в разделе «Отзывы и рецензии».
Также можно послать письмо главному редактору по адресу dmkpress@gmail.
com; при этом укажите название книги в теме письма.
Если вы являетесь экспертом в какой-либо области и заинтересованы в написании новой книги, заполните форму на нашем сайте по адресу http://
dmkpress.com/authors/publish_book/ или напишите в издательство по адресу
dmkpress@gmail.com.

Список опечаток
Хотя мы приняли все возможные меры для того, чтобы обеспечить высокое качество наших текстов, ошибки все равно случаются. Если вы найдете
ошибку в одной из наших книг, мы будем очень благодарны, если вы сообщите о ней главному редактору по адресу dmkpress@gmail.com. Сделав это,
вы избавите других читателей от недопонимания и поможете нам улучшить
последующие издания этой книги.

Нарушение авторских прав
Пиратство в интернете по-прежнему остается насущной проблемой. Издательство «ДМК Пресс» очень серьезно относится к вопросам защиты авторских прав
и лицензирования. Если вы столкнетесь в интернете с незаконной публикацией
какой-либо из наших книг, пожалуйста, пришлите нам ссылку на интернет-ресурс, чтобы мы могли применить санкции.
Ссылку на подозрительные материалы можно прислать по адресу элект­
ронной почты dmkpress@gmail.com.
Мы высоко ценим любую помощь по защите наших авторов, благодаря
которой мы можем предоставлять вам качественные материалы.

Вступительное слово
Хочу открыть вам один секрет: когда говорят «машинное обуче­ние», складывается впечатление, будто речь идет только об одной дисциплине. А вот
и нет! На самом деле есть два вида машинного обуче­ния, и они различаются
так же, как придумывание новых блюд и изобретение кухонных принадлежностей. То и другое занятия достойны уважения, но путать их не надо: не
станете же вы поручать шеф-повару разработку кухонной плиты, а инженеру-электрику – печь хлеб!
Увы, почти все путают эти два вида машинного обуче­ния. Поэтому неудивительно, что так много компаний терпят крах на этапе машинного обуче­
ния. Начинающим, похоже, никто не объяснил, что все то, что преподают на
курсах машинного обуче­ния и пишут в учебниках, – это теоретическое машинное обуче­ние: как конструировать кухонные плиты (а также микроволновки, блендеры, тостеры, чайники … и мойку, в которой все смешивается!)
с нуля, а не как придумывать новые блюда и готовить на огромную компанию. Иными словами, если ваша цель – создавать инновационные решения
конкретных задач на базе МО, то вам нужно прикладное, а не теоретическое
машинное обуче­ние. Поэтому большинство книг – не для вас.
А теперь хорошая новость! Перед вами первая книга, посвященная именно
прикладному машинному обуче­нию. Да, вы ее нашли! Настоящая прикладная иголка в стоге теоретического сена. Поздравляю, любезный читатель…
если, конечно, вы не искали книгу, которая помогла бы отточить навыки проектирования алгоритмов общего назначения. Но тогда я надеюсь, что автор
не будет на меня в обиде за то, что я посоветую вам купить чуть ли не любую
другую книгу по МО. А эта от них отличается.
В 2016 году, разрабатывая курс Google по прикладному МО «Как подружиться с машинным обуче­нием», полюбившийся нашим инженерам и руководителям групп – а их больше десяти тысяч, – я придала ему примерно
такую же структуру, как в этой книге. А все потому, что действовать в правильном порядке очень важно в прикладных дисциплинах. Попытка выполнить определенные шаги, прежде чем будут завершены другие, может иметь
печальные последствия: от зря потраченного времени до феерического краха
проекта. На самом деле сходство оглавления этой книги и моего курса как раз
и побудило меня прочитать ее. И в полном согласии с теорией параллельной
эволюции я узрела в авторе единомышленника, терзаемого по ночам отсутствием ресурсов по прикладному машинному обуче­нию, одной из потенциально самых полезных и вместе с тем самых недопонятых отраслей инженерной практики, – терзаемого с такой силой, что он захотел как-то исправить
ситуацию. Так что если вы вознамерились захлопнуть книгу, то, пожалуйста,
сделайте мне одолжение – задумайтесь на минутку, почему главы следуют
именно в таком порядке. Обещаю, уже это принесет полезные плоды.
Так что же будет в книге дальше? Машинное обуче­ние можно сравнить
с руководством по приготовлению еды в массовом масштабе. Поскольку вы

16  Вступительное слово
еще не прочитали книгу, опишу содержание книги в кулинарных терминах.
Вам нужно определить, что имеет смысл приготовить и каковы цели (принятие решений и управление продуктом), понять, кто является поставщиками
и клиентами (знакомство с предметной областью и деловое чутье), как обрабатывать ингредиенты в большом количестве (инженерия и анализ данных),
как быстро оценивать много разных сочетаний ингредиентов, пригодных
для создания потенциальных рецептов блюд (инженерная разработка прототипа), как проверить качество рецепта (статистика), как эффективно
превратить потенциальный рецепт в миллионы порций (организация производства) и как гарантировать, что блюда останутся высококачественными,
даже если грузовик привез тонну картошки вместо заказанного риса (обес­
печение надежности). Эта книга – одна из немногих, где рассматриваются все
этапы технологического процесса.
Теперь самое время подпустить немного дегтя в бочку меда. Это хорошая
книга. Правда. Но не идеальная. Иногда автор срезает углы – как часто делают
инженеры, профессионально занимающиеся машинным обуче­нием, – хотя
в целом все изложено правильно. А поскольку предмет книги быстро эволюционирует, автор и не пытается всегда быть на переднем крае. Но даже
в отсутствие совершенства книгу все равно стоит прочитать. Учитывая, как
мало на рынке подробных руководств по прикладному машинному обуче­
нию, ясное и последовательное введение в эту тему дорогого стоит. Я очень
рада, что такая книга появилась!
Что мне в ней очень нравится, так это полнота, с которой излагается самая
важная вещь, которую нужно знать о машинном обуче­нии: ошибки возможны… и иногда болезненные ошибки. Как любят говорить мои коллеги, занимающиеся надежностью: «Надежда на лучшее – это не стратегия». Надеяться,
что ошибок не будет, – худший из возможных подходов. Эта книга устроена иначе – и лучше. Она быстро заставляет расстаться с ложным чувст­вом
безопас­ности, которое вы могли лелеять, надеясь построить систему ИИ, более
«умную», чем вы сами. (Забудьте об этом, ничего не получится.) Затем автор
становится вашим заботливым проводником по пути, на котором можно наделать самых разнообразных ошибок, и объясняет, как их предотвратить, обнаружить и исправить. В книге прекрасно подчеркнута важность мониторинга,
описаны подходы к сопровождению модели, рассказано, что делать, если чтото поломается, как спланировать резервные стратегии на случай разного рода
отказов и как управлять ожиданиями пользователей (есть также раздел о том,
что делать, если пользователями являются машины). Эти вопросы очень важны при практическом применении машинного обуче­ния, но в других книгах
для них часто не находится места. Впрочем, эта книга не из их числа.
Если вы собираетесь использовать машинное обуче­ние для решения крупномасштабных практических задач, могу только порадоваться, что вы на­
ткнулись на эту книгу. Читайте с удовольствием!
Кэсси Козырков,
главный специалист по теории принятия решений в Google,
автор курса «MakingFriends with Machine Learning»
на облачной платформе Google
Сентябрь 2020

Предисловие
За последние несколько лет машинное обуче­ние (МО) для многих стало синонимом искусственного интеллекта. И хотя машинное обуче­ние как научная
дисциплина существует уже несколько десятков лет, в мире найдется лишь
горстка организаций, в полной мере осознавших его потенциал.
Несмотря на доступность современных библиотек, пакетов и каркасов машинного обуче­ния с открытым исходным кодом, которые поддерживаются
ведущими организациями и широким сообществом ученых и программис­
тов, большинство компаний все еще испытывают трудности с применением
машинного обуче­ния к решению практических деловых задач.
Одна из проблем – нехватка кадров. Но, даже располагая талантливыми
специалистами по машинному обуче­нию и анализу данных, в 2020 году большинство организаций все еще тратят от 31 до 90 дней на развертывание всего
одной модели, а 18 % – более 90 дней, у некоторых на доведение идеи до продукта уходит даже больше года. Основные проблемы, с которыми приходится
сталкиваться при освоении потенциала МО, например управление версиями
модели, воспроизводимость результатов и масштабирование, имеют скорее
инженерную, чем научную природу.
Существует много книг по машинному обуче­нию – как теоретических, так
и практических. Из типичного учебника вы можете узнать о разных типах
машинного обуче­ния, об основных семействах алгоритмов, о том, как они
работают и как с их помощью создавать модели из данных.
В типичном учебнике меньше внимания уделяется инженерным аспектам реализации проектов машинного обуче­ния. Такие вопросы, как сбор,
хранение и предобработка данных, конструирование признаков, а также
тес­тирование и отладка моделей, развертывание и вывод из эксплуатации,
сопровождение на этапе выполнения и в процессе эксплуатации, зачастую
остаются за кадром.
Эта книга призвана заполнить пробел.

На кого рассчитана эта книга
Я предполагаю, что читатель знаком с основами машинного обуче­ния и способен построить модель при наличии подходящим образом отформатированного набора данных, применяя свой любимый язык программирования или
библиотеку. Если вы неуверенно владеете применением алгоритмов машинного обуче­ния к данным и не видите разницы между логистической регрессией, методом опорных векторов и случайным лесом, то я рекомендую предварительно прочитать мою книгу «The Hundred-Page Machine Learning Book»1.
1

Бурков А. Машинное обуче­ние без лишних слов. СПб.: Питер, 2020.

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

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

Глава

1
Введение

Хотя предполагается, что читатель этой книги знаком с основами машинного
обуче­ния, все же важно начать с определений, чтобы у нас было общее понимание используемых в книге терминов.
Ниже я повторяю некоторые определения из главы 2 книги «Машинное
обуче­ние без лишних слов», а также даю несколько новых определений. Если
вы читали мою первую книгу, то некоторые части этой главы могут показаться вам знакомыми.
После этой главы мы будем одинаково понимать такие понятия, как обуче­
ние с учителем и без учителя. У нас будет общий взгляд на прямо и косвенно
используемые данные, первичные и аккуратные данные, обучающие и зарезервированные данные.
Мы будем знать о том, когда следует использовать машинное обуче­ние,
а когда этого делать не стоит, а также о различных формах машинного обуче­
ния, например: на основе модели и на основе экземпляров, глубокое и поверхностное, классификация и регрессия и т. д.
Наконец, мы определим предмет инженерии машинного обуче­ния и представим жизненный цикл проекта машинного обуче­ния.

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

1.1.1. Структуры данных
Скаляром1 называется простое числовое значение, например 15 или –3.25.
Переменные или константы, принимающие скалярные значения, обозначаются курсивом, например x или a.
Вектором называется упорядоченный список скалярных значений, именуемых атрибутами. Мы обозначаем вектор полужирным шрифтом, например x или w. Векторы изображаются в виде направленных стрелок, а также
1

Если термин выделен полужирным шрифтом, значит, он присутствует в алфавитном указателе в конце книги.

20  Введение

6

6

5

5

4

4

3

3

x(2)

x(2)

точек в многомерном пространстве. Иллюстрации трех двумерных векторов a = [2, 3], b = [–2, 5] и c = [1, 0] приведены на рис. 1.1. Атрибут вектора
обозначается курсивной буквой с верхним индексом, например: w(j) или x(j).
Индекс j обозначает конкретное измерение вектора, т. е. позицию атрибута
в списке. Например, в векторе a, показанном красным цветом на рис. 1.1,
a(1) = 2 и a(2) = 3.

2

2

1

1

0

0

–1

–3

–2

–1

0
x(1)

1

2

3

–1

–3

–2

–1

0
x(1)

1

2

3

Рис. 1.1  Три вектора, представленных направленными стрелками и точками

Обозначение x(j) не следует путать с оператором возведения в степень, например 2 в x2 (возведение в квадрат) или 3 в x3 (возведение в куб). Если мы
хотим применить оператор возведения в степень, скажем, в квадрат, к индексированному атрибуту вектора, то пишем: (x(j))2.
(k)
Переменная может иметь два и более индексов, например: xi(j) или xi,j
. Так,
(j)
в нейронных сетях xl,u обозначает j-й входной признак u-го блока в l-м слое.
Матрица – это прямоугольный массив чисел, организованный по строкам и столбцам. Ниже приведен пример матрицы с двумя строками и тремя
столбцами:

Матрицы обозначаются полужирными заглавными буквами, например A
или W. Из примера матрицы А выше видно, что матрицы можно трактовать
как регулярные структуры, состоящие из векторов. И действительно, столбцами приведенной выше матрицы A являются векторы a, b и c, показанные
на рис. 1.1.
Множеством называется неупорядоченная коллекция неповторяющихся
элементов. Множество обозначается каллиграфической заглавной буквой,
например 𝒮. Множество чисел может быть конечным (содержать фиксированное количество значений). В этом случае его элементы перечисляются
в фигурных скобках, например {1, 3, 18, 23, 235} или {x1, x2, x3, x4, …, xn}. Множество также может быть бесконечным и включать все значения в некотором

Что такое машинное обучение  21

интервале. Множество, содержащее все значения между a и bвключительно,
обозначается [a, b]. Если же множество не включает граничные значения a
и b, то оно обозначается (a, b). Например, множество [0, 1] включает среди
прочего значения 0, 0.0001, 0.25, 0.784, 0.9995 и 1.0. Буквой ℝ обозначается
множество всех чисел от минус бесконечности до плюс бесконечности.
Если элемент x принадлежит множеству 𝒮, то мы пишем x ∈ 𝒮. Новое множество 𝒮3 можно получить как пересечение двух множеств 𝒮1 и 𝒮2. В этом
случае мы пишем 𝒮3 ← 𝒮1 ∩ 𝒮2. Например, {1, 3, 5, 8} ∩ {1, 8, 4} дает новое
множество {1, 8}.
Новое множество 𝒮3 можно получить как объединение двух множеств 𝒮1
и 𝒮2. В этом случае мы пишем 𝒮3 ← 𝒮1 ∪ 𝒮2. Например, {1, 3, 5, 8} ∪ {1, 8, 4} дает
новое множество {1, 3, 5, 8, 4}.
|𝒮| обозначает размер множества 𝒮, то есть число элементов в нем.

1.1.2. Заглавная сигма

Сумма множества чисел 𝒳 = {x1, x2, …, xn−1, xn} или атрибутов вектора x = [x(1),
x(2), …, x(m−1), x(m)] обозначается следующим образом:

или

Здесь
означает «по определению равно».
Евклидова норма вектора x, обозначаемая ||x||, характеризует «размер»,
или «длину», вектора. Она определяется как
В качестве расстояния между векторами a и b берется евклидово расстояние:

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

22  Введение
1) сбора набора данных и
2) алгоритмического обуче­ния статистической модели на этом наборе.
Предполагается, что эта статистическая модель каким-то образом используется для решения практической задачи. Для краткости я буду использовать
термины «обуче­ние» и «машинное обуче­ние» как синонимы. По той же причине я буду часто говорить «модель», имея в виду статистическую модель.
Обучение бывает с учителем, без учителя, с частичным привлечением
учителя и с подкреплением.

1.2.1. Обучение с учителем
В случае обуче­ния с учителем аналитик работает с набором помеченных
примеров {(x1, y1), (x2, y2), …, (xN, yN)}. Каждый элемент xi называется вектором признаков. В информатике вектор – это одномерный массив. Одномерный массив, в свою очередь, является упорядоченной и индексированной
последовательностью значений. Длина этой последовательности значений,
D, называется размерностью вектора.
Вектор признаков – это вектор, в котором каждое измерение j = 1 … D содержит значение, описывающее пример. Каждое такое значение называется
признаком и обозначается x(j). Например, если каждый пример x представляет человека, то первый признак, x(1), может содержать рост в сантиметрах,
второй признак, x(2), – вес в килограммах, x(3) – пол и т. д. Для всех примеров
в наборе данных значение в позиции j вектора признаков всегда имеет один
и тот же тип. Это означает, что если xi(2) содержит вес в килограммах для некоторого i, то и для любого k от 1 до N xk(2) будет содержать вес в килограммах. Метка yi может быть либо элементом конечного множества классов
{1, 2, …, C}, либо вещественным числом, либо более сложной структурой,
такой как вектор, матрица, дерево или граф. Если явно не оговорено противное, то в этой книге yi является либо элементом конечного множества
классов, либо вещественным числом1. Можно считать, что класс – это категория, к которой относится пример.
Скажем, если примерами являются сообщения электронной почты, а наша
задача заключается в обнаружении спама, то есть два класса: спам и не спам.
В случае обуче­ния с учителем задача предсказания класса называется классификацией, а задача предсказания вещественного числа называется регрессией. Значение, которое должно быть предсказано моделью, обученной с учителем, называется целевым показателем, или целью. Примером
регрессии является задача предсказания заработной платы сотрудника
с учетом его опыта работы и знаний. Примером классификации является
ситуация, когда врач вводит характеристики пациента в приложение, а то
возвращает диагноз.
Различие между классификацией и регрессией показано на рис. 1.2. В случае классификации алгоритм обуче­ния ищет линию (или, в более общем слу1

Вещественное число – это величина, представляющая расстояние вдоль прямой от
некоторой начальной точки на ней. Примеры: 0, –256.34, 1000, 1000.2.

Что такое машинное обучение  23

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

Регрессия

х(2)

y
y

х(1)

х

Рис. 1.2  Разница между классификацией и регрессией

Цель алгоритма обуче­ния с учителем – использовать набор данных для
порождения модели, которая на входе принимает вектор признаков x, а на
выходе выдает информацию, позволяющую вывести метку для этого вектора
признаков. Например, модель, созданная с использованием набора данных
о пациентах, может на входе принимать вектор признаков, описывающий
пациента, и на выходе выдавать вероятность наличия у пациента рака.
Даже если модель традиционно представляет собой математическую функцию, размышляя о действиях модели с входными данными, удобно думать,
что модель «смотрит» на значения некоторых признаков на входе и, основываясь на опыте работы с аналогичными примерами, выводит значение. Это
выходное значение представляет собой число или класс, «наиболее похожий»
на метки, которые мы видели в прошлом в примерах с похожими значениями признаков. Такое описание выглядит упрощенно, но именно так работает
модель решающего дерева и алгоритм k ближайших соседей.

1.2.2. Обучение без учителя
В случае обуче­ния без учителя набор данных содержит непомеченные
примеры {x1, x2, …, xN}. Как и раньше, x – вектор признаков, а цель алгоритма обуче­ния без учителя заключается в порождении модели, которая на
входе принимает вектор признаков x и преобразовывает его либо в другой
вектор, либо в значение, используемое для решения практической задачи.
Например, в случае кластеризации для каждого вектора признаков из на-

24  Введение
бора данных модель возвращает ИД кластера. Кластеризация применяется
для отыскания групп похожих объектов в большом наборе объектов, например изображений или текстовых документов. Используя кластеризацию,
аналитик может, например, выбрать достаточно репрезентативное, но малое
подмножество непомеченных примеров из большого набора, чтобы потом
пометить их вручную: из каждого кластера выбирается всего несколько примеров, вместо того чтобы отбирать непосредственно из большого набора
с риском выбрать очень похожие примеры.
В задаче понижения размерности выходом модели является вектор
признаков с меньшим числом измерений, чем на входе. Например, у исследователя имеется вектор признаков, слишком сложный для визуализации
(поскольку число измерений больше трех). Модель понижения размерности
может преобразовать этот вектор в другой (сохраняя часть информации) –
двумерный или трехмерный. Этот новый вектор признаков можно изобразить на графике.
В задаче обнаружения выбросов выходом является действительное число, показывающее, насколько входной вектор признаков отличается от «типичного» примера в наборе данных. Обнаружение выбросов применяется для
решения задачи о проникновении в сеть (путем обнаружения аномальных
сетевых пакетов, которые отличаются от типичного пакета в «нормальном»
трафике) или обнаружения новизны (например, документа, отличающегося
от других документов в наборе).

1.2.3. Обучение с частичным привлечением
учителя
В случае обуче­ния с частичным привлечением учителя набор данных
содержит как помеченные, так и непомеченные примеры. Обычно число
непомеченных примеров намного превышает число помеченных. Цель алгоритма с частичным привлечением учителя такая же, как у алгоритма
обуче­ния с учителем. Мы надеемся, что, располагая большим числом непомеченных примеров, алгоритм обуче­ния сможет отыскать (можно было бы
сказать «породить» или «вычислить») лучшую модель.

1.2.4. Обучение с подкреплением
Обучение с подкреплением – это раздел машинного обуче­ния, в котором
рассматривается ситуация, когда машина (именуемая агентом) «обитает»
в окружающей среде и способна воспринимать состояние этой среды как вектор признаков. Машина может выполнять действия в незаключительных состояниях. Разные действия приносят разные вознаграждения, а также могут
переводить машину в другое состояние окружающей среды. Типичная цель
алгоритма обуче­ния с подкреплением – обучиться оптимальной политике.
Оптимальная политика – это функция (аналогичная модели в обуче­нии
с учителем), которая на входе принимает вектор признаков состояния, а на

Терминология машинного обучения  25

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

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

1.3.1. Данные, используемые прямо и косвенно
Данные в проекте машинного обуче­ния могут использоваться для формирования примеров x прямо или косвенно.
Допустим, что мы строим систему распознавания именованных сущностей. На вход модели поступает последовательность слов, на выходе выдается
последовательность меток1 той же длины, что вход. Для того чтобы алгоритм машинного обуче­ния мог прочитать данные, мы должны преобразовать
каждое слово естественного языка в машиночитаемый массив атрибутов,
называемый вектором признаков2. Некоторые признаки могут содержать информацию, которая отличает это конкретное слово от других слов в словаре.
Другие признаки могут содержать дополнительные атрибуты слова в этой
конкретной последовательности, такие как его форма (в нижнем регистре,
в верхнем регистре, с заглавной буквы и т. д.). Либо это могут быть бинарные
атрибуты, указывающие на то, является ли слово первым словом имени человека или последним словом названия какого-либо места или организации.
Для создания таких бинарных признаков мы можем прибегнуть к словарям,
справочным таблицам, географическим справочникам или другим моделям
машинного обуче­ния, делающим предсказания относительно слов.
Вы, вероятно, уже поняли, что набор последовательностей слов – это данные, используемые для формирования обучающих примеров непосредствен1

2

Метки могут быть, например, значениями из множества {«Местоположение», «Организация», «Лицо», «Прочее»}.
Термины «атрибут» и «признак» часто используются как синонимы. В этой книге
я применяю термин «атрибут» для описания конкретного свойства примера, тогда
как термин «признак» относится к значению x(j) в позиции j вектора признаков x,
используемого алгоритмом машинного обуче­ния.

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

1.3.2. Первичные и аккуратные данные
Как мы только что обсудили, непосредственно используемые данные – это
набор сущностей, составляющих основу набора данных. Каждая сущность
в этом наборе может быть преобразована в обучающий пример. Первичные данные – это набор сущностей в их естественной форме; их не всегда
можно задействовать для машинного обуче­ния непосредственно. Например,
документ Word или JPEG-файл являются первичными данными; алгоритм
машинного обуче­ния не может использовать их напрямую1.
Необходимым (но не достаточным) условием использования данных в машинном обуче­нии является их аккуратность. Аккуратные данные можно
рассматривать как электронную таблицу, в которой строки представляют
примеры, а столбцы – атрибуты примеров, как показано на рис. 1.3. Иног­
да сами первичные данные могут быть аккуратными, например если они
уже представлены в виде электронной таблицы. Однако на практике, чтобы
получить аккуратные данные из первичных, аналитики нередко прибегают
к процедуре конструирования признаков, которая применяется к прямым
и, факультативно, к косвенным данным с целью преобразования каждого
первичного примера в вектор признаков x. Глава 4 полностью посвящена
конструированию признаков.
Атрибуты

Примеры

Рис. 1.3  Аккуратные данные:
строки содержат примеры, а столбцы – атрибуты

1

Термин «неструктурированные данные» часто используется для обозначения элемента данных, содержащего информацию, тип которой формально не определен.
Примерами неструктурированных данных являются фотографии, изображения,
видео, текстовые сообщения, сообщения в социальных сетях, PDF-файлы, текстовые документы и электронные письма. Термин «полуструктурированные данные»
относится к элементам данных, структура которых помогает выводить типы некоторой закодированной в них информации. К полуструктурированным данным
можно отнести файлы журналов, текстовые файлы с запятыми или табуляторами
в качестве разделителей, а также документы в форматах JSON и XML.

Терминология машинного обучения  27

Здесь важно отметить, что в некоторых задачах пример, используемый
алгоритмом обуче­ния, может быть последовательностью векторов, матрицей
или последовательностью матриц. Понятие аккуратности данных для таких
алгоритмов определяется в схожем ключе: нужно лишь заменить «строку
фиксированной ширины в электронной таблице» матрицей фиксированной
ширины и высоты либо обобщением матрицы на большее число измерений –
тензором.
Термин «аккуратные данные» был введен Хэдли Уикхемом в одноименной
статье1.
Как было сказано в начале этого раздела, данные могут быть аккуратными,
но все равно непригодными для использования конкретным алгоритмом
машинного обуче­ния. На самом деле большинство алгоритмов машинного
обуче­ния принимают обучающие данные только в виде набора векторов числовых признаков. Возьмем данные, показанные на рис. 1.3. Атрибут «Регион»
является категориальным, а не числовым. Алгоритм обуче­ния на основе решающего дерева может работать со значениями категориальных атрибутов,
но большинство алгоритмов обуче­ния на это не способны. В разделе 4.2
главы 4 мы увидим, как преобразовать категориальный атрибут в числовой.
Обратите внимание, что в академической литературе по машинному
обуче­нию слово «пример» обычно относится к примеру аккуратных данных, возможно, с соответственной меткой. Однако на этапе сбора данных
и их разметки, который мы рассмотрим в следующей главе, примеры могут
быть еще представлены в первичной форме: изображения, тексты или строки
с категориальными атрибутами в электронной таблице. В этой книге, когда
важно подчеркнуть разницу, я буду говорить «первичный пример», чтобы
указать, что часть данных еще не была преобразована в вектор признаков.
В противном случае мы будем предполагать, что примеры имеют форму
векторов признаков.

1.3.3. Обучающие и зарезервированные наборы
На практике аналитики работают с тремя разными наборами примеров:
1) обучающий набор;
2) контрольный набор2;
3) тестовый набор.
Получив данные в виде набора примеров, первое, что нужно сделать в проекте, – перемешать примеры и разделить данные на три отдельных набора:
обучающий, контрольный и тестовый. Обучающий набор обычно является самым крупным; он используется в алгоритме обуче­ния для порождения
модели. Контрольный и тестовый наборы имеют примерно одинаковый, гораздо меньший, размер. Алгоритму обуче­ния не разрешается использовать
1
2

Wickham Hadley. Tidy data // Journal of Statistical Software 59.10 (2014): 1–23.
Иногда, если помеченных примеров недостаточно, аналитик может обойтись без
контрольного набора, как мы увидим в разделе главы 5, посвященном перекрестной проверке.

28  Введение
примеры из контрольного или тестового набора для обуче­ния модели. Поэтому оба этих набора иногда называют зарезервированными.
Причина наличия трех наборов, а не одного, проста: в процессе обуче­ния
мы не хотим, чтобы модель хорошо предсказывала метки только тех примеров, которые алгоритм уже встречал. Тривиальный алгоритм, который просто
запоминает все обучающие примеры, а затем использует их для «предсказания» меток, не будет делать никаких ошибок, когда его попросят предсказать метки обучающих примеров. Однако на практике такой алгоритм будет
бесполезен. Действительно, нам нужна модель, хорошо предсказывающая
примеры, которые не предъявлялись алгоритму во время обуче­ния. Иными
словами, мы хотим иметь хорошее качество на зарезервированном наборе1.
Два зарезервированных набора, а не один, нужно, потому что контрольный набор используется, чтобы 1) выбирать алгоритм обуче­ния и 2) отыс­
кивать оптимальные конфигурационные параметры для этого алгоритма
(именуемые гиперпараметрами). Тестовый набор применяется для оценивания модели перед ее передачей заказчику или развертыванием в производственной среде. Вот почему так важно, чтобы никакая информация из
контрольного или тестового набора не была предъявлена алгоритму обуче­
ния. В противном случае результаты контроля и тестирования, скорее всего,
будут слишком оптимистичными. Такая неприятность иногда случается изза просачивания данных, явления, которое мы рассмотрим в разделе 3.2.8
главы 3 и последующих главах.

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

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

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

Терминология машинного обучения  29

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

1.3.6. Параметры и гиперпараметры
Гиперпараметры – это входные данные алгоритма машинного обуче­
ния или конвейера, которые влияют на качество модели. Они не относятся
к обучающим данным и не могут быть обучены на их основе. Например,
максимальная глубина дерева в алгоритме решающего дерева, штраф за
неправильную классификацию в методе опорных векторов, величина k в алгоритме k ближайших соседей, целевая размерность в алгоритме понижения
размерности и выбор способа подстановки пропущенных данных – все это
примеры гиперпараметров.
Параметры, с другой стороны, являются переменными, которые определяют обучаемую модель. Параметры напрямую модифицируются алгоритмом обуче­ния на основе обучающих данных. Цель обуче­ния состоит в том,
чтобы отыскать такие значения параметров, которые делают модель в определенном смысле оптимальной. Примерами параметров являются w и b
в уравнении линейной регрессии y = wx + b, где x является входом модели,
а y – ее выходом (предсказанием).

1.3.7. Классификация и регрессия
Классификация – это задача автоматического назначения метки непомеченному примеру. Распознавание спама – широко известный пример
классификации.
В машинном обуче­нии задача классификации решается алгоритмом
обуче­ния классификатора, который на входе принимает набор помеченных примеров, а на выходе порождает модель, которая может получать
непомеченный пример и возвращать либо саму метку, либо число, которое
аналитик может использовать для нахождения метки. Примером такого числа является вероятность того, что элемент входных данных имеет определенную метку.
В задаче классификации метка является элементом конечного множест­
ва классов. Если размер этого множества равен двум (больной/здоровый,
спам/не спам), то мы говорим о бинарной классификации (в некоторых
источниках она называется биномиальной). Многоклассовая (или мультиномиальная) классификация – это задача классификации с тремя или
более классами1.
В то время как некоторые алгоритмы обуче­ния естественным образом
допускают наличие более двух классов, другие по природе своей являются
1

Тем не менее каждому примеру по-прежнему соответствует одна метка.

30  Введение
алгоритмами бинарной классификации. Существуют стратегии преобразования алгоритма бинарной классификации в многоклассовый. Об одном из
них, «один против остальных», я расскажу в разделе 6.5 главы 6.
Регрессия – это задача предсказания вещественной величины по непомеченному примеру. Широко известный пример регрессии – оценка стоимости дома на основе таких его характеристик, как площадь, число спален,
местоположение и т. д.
Задача регрессии решается с помощью алгоритма обуче­ния регрессии;
на входе он принимает набор помеченных примеров и порождает модель,
которая принимает непомеченный пример и выводит целевой показатель.

1.3.8. Обучение на основе модели и обучение
на основе экземпляров
Большинство алгоритмов обуче­ния с учителем основаны на моделях. Типичной моделью является метод опорных векторов (Support Vector Machine – SVM). В алгоритмах обуче­ния на основе моделей обучающие данные
используются для создания модели с обученными параметрами. В SVM таких параметров два: w (вектор) и b (вещественное число). Обученную модель
можно сохранить на диске, а обучающие данные удалить.
В алгоритмах обуче­ния на основе экземпляров весь набор данных целиком используется в качестве модели. Одним из часто используемых на
практике алгоритмов такого рода является метод k ближайших соседей
(kNN). Для предсказания метки входного примера алгоритм kNN рассматривает его окрестность в пространстве векторов признаков и выводит метку,
которая встречается в этой окрестности чаще других.

1.3.9. Поверхностное и глубокое обучение
Алгоритм поверхностного обуче­ния обучает параметры непосредственно
на признаках обучающих примеров. Большинство алгоритмов машинного обуче­ния поверхностные. Широко известными исключениями являются
нейросетевые алгоритмы обуче­ния, а именно такие, которые строят нейронные сети с несколькими слоями между входом и выходом. Такие сети
называются глубокими нейронными сетями. В глубоком нейросетевом
обуче­нии (или просто глубоком обуче­нии), в отличие от поверхностного,
большинство параметров модели обучаются не на самих признаках обучающих примеров, а на выходах предыдущих слоев.

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

Когда следует использовать машинное обучение  31

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

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

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

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

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

1.4.3. Когда речь идет о задаче восприятия
Сегодня трудно представить себе, что кто-то попытается решать задачи
восприятия, такие как распознавание речи, изображений и видео, без использования машинного обуче­ния. Возьмем, к примеру, изображение. Оно
представлено миллионами пикселей. Каждый пиксель обозначается тремя
числами: интенсивностью красного, зеленого и синего каналов. В прошлом
инженеры пытались решать задачу распознавания изображений (определения того, что изображено на картинке) путем применения самодельных
«фильтров» к квадратным участкам пикселей – патчам. Если, например,
фильтр, предназначенный для «обнаружения» травы, порождает большое
значение при применении ко многим патчам, а другой фильтр, предназначенный для обнаружения коричневого подшерстка, тоже возвращает большие значения для многих патчей, то высоки шансы, что изображена корова
на лугу (я немного упрощаю).
Сегодня задачи восприятия эффективно решаются с помощью моделей
машинного обуче­ния, таких как нейронные сети. Мы рассмотрим задачу
обуче­ния нейронных сетей в главе 6.

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

Когда следует использовать машинное обучение  33

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

1.4.5. Когда задача имеет простую целевую
функцию
Машинное обуче­ние особенно хорошо подходит в случаях, когда задачу можно сформулировать как оптимизацию простой целевой функции: например,
когда требуется найти бинарное решение типа да/нет или одно-единственное число. С другой стороны, машинное обуче­ние не подойдет для построения модели, работающей как типичная видеоигра, например Mario, или
как текстовый процессор типа Word. Дело в том, что число принимаемых
решений слишком велико: что, где и когда выводить на экран, как система
должна реагировать на введенные пользователем данные, что записывать
или читать с жесткого диска и т. д.; получить примеры, иллюстрирующие все
(или даже большинство) из этих решений, практически невозможно.

1.4.6. Когда это экономически выгодно
Три основных источника затрат в машинном обуче­нии таковы:
  сбор, подготовка и очистка данных;
  обуче­ние модели;
  создание и эксплуатация инфраструктуры для выполнения и мониторинга модели, а также трудовые ресурсы для ее сопровождения.

34  Введение
Стоимость обуче­ния модели включает в себя человеческий труд и в некоторых случаях дорогостоящее оборудование, необходимое для обуче­ния
глубоких моделей. Сопровождение модели включает постоянный мониторинг ее работы и сбор дополнительных данных для поддержания модели
в актуальном состоянии.

1.5. Когда не следует использовать
машинное обучение
Существует много задач, которые невозможно решить с помощью машинного обуче­ния; трудно охарактеризовать их все. Здесь мы дадим лишь несколько рекомендаций.
Пожалуй, не стоит использовать машинное обуче­ние, когда:
  любое действие системы или принятое ею решение должно быть объяснимым;
  любое изменение в поведении системы по сравнению с ее прошлым
поведением в аналогичной ситуации должно быть объяснимым;
  стоимость допущенной системой ошибки слишком высока;
  требуется вывести продукт на рынок как можно быстрее;
  получить правильные данные слишком трудно или невозможно;
  задачу можно решить с помощью традиционных методов разработки
программ с меньшими затратами;
  простая эвристика работает достаточно хорошо;
  у явления слишком много исходов, а получить примеры в количестве,
достаточном для их представления, невозможно (например, в видеоиграх или текстовых процессорах);
  построенную систему со временем не придется часто улучшать;
  можно вручную подготовить исчерпывающую справочную таблицу,
указав ожидаемый результат для любого входного значения (то есть
число возможных входных значений не слишком велико или получать
выходные данные можно быстро и дешево).

1.6. Что такое инженерия машинного
обучения
Инженерия машинного обуче­ния (machine learning engineering – MLE) – это
использование научных принципов, инструментов и методов машинного
обуче­ния и традиционной программной инженерии для проектирования
и создания сложных компьютерных систем. MLE охватывает все этапы от
сбора данных до обуче­ния модели и использования ее продуктом или клиентами.

Что такое инженерия машинного обучения  35

Традиционно аналитик данных1 занимается осмыслением деловой задачи,
построением модели для ее решения и оцениванием модели в ограниченной
среде разработки. В обязанности инженера по машинному обуче­нию входят
получение данных из различных систем и мест, их предобработка, конструирование признаков, обуче­ние эффективной модели, которая будет работать
в производственной среде, сосуществовать с другими производственными
процессами, будет стабильной, удобной для сопровождения и легкодоступной для разных типов пользователей, по-разному применяющих ее.
Иными словами, MLE включает в себя любую деятельность, которая позволяет реализовать алгоритмы машинного обуче­ния как часть эффективной
производственной системы.
На практике инженеры по машинному обуче­нию могут быть задействованы в таких видах деятельности, как переписывание созданного аналитиками данных кода с таких относительно медленных языков, как R и Python2,
на более эффективных языках типа Java или C++, масштабирование этого
исходного кода и повышение его надежности, его упаковка в легко развертываемый пакет, хранящийся в системе управления версиями, оптимизация
алгоритма машинного обуче­ния, так чтобы порождаемая им модель была
совместима с производственной средой организации и работала в ней правильно.
Во многих организациях аналитики данных выполняют такие задачи MLE,
как сбор данных, их преобразование и конструирование признаков. С другой
стороны, инженеры по машинному обуче­нию нередко выполняют некоторые
задачи анализа данных, включая выбор алгоритма обуче­ния, настройку гиперпараметров и оценивание модели.
Работа над проектом машинного обуче­ния отличается от работы над типичным проектом в области программной инженерии. В отличие от традиционной программной инженерии, где поведение программы обычно
детерминировано, приложения машинного обуче­ния включают модели, поведение которых со временем может по естественным причинам ухудшаться
или становиться аномальным. Такое аномальное поведение модели может
иметь различные корни, в т. ч. фундаментальное изменение входных данных или внедрение нового экстрактора признаков, возвращающего другое
распределение значений или значения иного типа. Нередко можно услышать, что системы машинного обуче­ния «отказывают молча». Инженер по
машинному обуче­нию должен быть способен предотвращать такие отказы
либо, если полное предотвращение невозможно, знать, как их обнаруживать
и устранять.
1

2

Должность исследователя данных (data scientist) приобрела популярность примерно с 2013 года. К сожалению, компании и эксперты не пришли к единому мнению относительно определения этого термина. Вместо этого я использую термин
«аналитик данных», имея в виду человека, способного применять численный или
статистический анализ к имеющимся данным.
Многие научные модули в Python на самом деле написаны на быстром C/C++;
однако собственный код аналитика данных на Python все равно может быть медленным.

36  Введение

1.7. Жизненный цикл проекта машинного
обучения
Проект машинного обуче­ния начинается с осмысления целевого критерия
с точки зрения бизнеса. Обычно бизнес-аналитик работает с заказчиком 1
и аналитиком данных, чтобы трансформировать деловую задачу в технический проект. Технический проект может содержать или не содержать часть,
связанную с машинным обуче­нием. В этой книге мы, разумеется, будем рассматривать проекты, в которых машинное обуче­ние используется.
После определения технического проекта как раз и начинается область
инженерии машинного обуче­ния. Машинное обуче­ние в рамках более широкого технического проекта прежде всего должно иметь четко определенную
цель. Целью машинного обуче­ния является описание того, что статистическая модель получает на входе, что она генерирует на выходе, и критериев
приемлемого (или неприемлемого) поведения модели.
Цель машинного обуче­ния не обязательно совпадает с бизнес-целью.
Бизнес-цель – это то, чего хочет достичь организация. Например, бизнесцель компании Google в случае Gmail может заключаться в том, чтобы сделать
Gmail наиболее популярной почтовой службой в мире. Для достижения этой
цели Google может создавать многочисленные технические проекты, включающие машинное обуче­ние. Цель одного из таких проектов может состоять
в том, чтобы отличать содержательные электронные письма от рекламных
акций с точностью выше 90 %.
В целом жизненный цикл проекта машинного обуче­ния, показанный на
рис. 1.4, состоит из следующих этапов: 1) определение цели, 2) сбор и подготовка данных, 3) конструирование признаков, 4) обуче­ние модели, 5) оценивание модели, 6) развертывание модели, 7) выполнение модели, 8) мониторинг модели и 9) сопровождение модели.
На рис. 1.4 область применения машинного обуче­ния (и этой книги) ограничена синей зоной. Сплошные стрелки показывают типичный технологический поток. Пунктирные стрелки означают, что на некоторых этапах может
быть принято решение вернуться назад и либо собрать больше данных, либо
собрать другие данные и пересмотреть признаки (исключив одни и сконструировав другие).
Каждый из упомянутых этапов будет рассмотрен в одной из глав книги. Но
сначала давайте обсудим вопрос о том, как расставить приоритеты в проектах машинного обуче­ния, определить цель проекта и организовать коллектив
разработчиков. Этим трем вопросам посвящена следующая глава.

1

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

Резюме  37
Инженерия машинного обуче­ния
Бизнес-аналитик
и аналитик данных
Деловая
задача

Определение
цели

Инженер по данным
и разметчик данных

Аналитик данных

Сбор
и подготовка
данных

Конструи­
рование
признаков

Обучение
модели

Оценивание
модели

Сопро­
вождение
модели

Мониторинг
модели

Обслуживание
запросов
к модели

Развер­
тывание
модели

Инженер по данным
и разметчик данных

DevOps

Рис. 1.4  Жизненный цикл проекта машинного обуче­ния

1.8. Резюме
Алгоритм машинного обуче­ния на основе модели принимает на входе набор обучающих примеров и выдает на выходе модель. Алгоритм машинного
обуче­ния на основе экземпляров использует весь обучающий набор данных
в качестве модели. Обучающие данные предъявляются алгоритму машинного обуче­ния, а зарезервированные данные – нет.
Алгоритм обуче­ния с учителем строит модель, которая принимает вектор
признаков и выводит для него предсказание. Алгоритм обуче­ния без учителя
строит модель, которая принимает вектор признаков и преобразовывает его
во что-то полезное.
Классификация – это задача предсказания для входного примера одного
из конечного множества классов.
В задачу регрессии входит предсказание числового целевого показателя.
Данные могут использоваться прямо либо косвенно. Прямо используемые
данные являются основой для формирования набора примеров. Косвенно
используемые данные используются для обогащения этих примеров.
Данные для машинного обуче­ния должны быть аккуратными. Аккуратный
набор данных можно трактовать как электронную таблицу, в которой строки
представляют примеры, а столбцы – свойства примеров. Помимо аккуратности, в большинстве алгоритмов машинного обуче­ния данные должны быть
числовыми, а не категориальными. Конструирование признаков – это процесс преобразования данных в форму, которая может использоваться алгоритмами машинного обуче­ния.
Ориентир необходим для того, чтобы модель могла работать лучше, чем
простая эвристика.

38  Введение
На практике машинное обуче­ние реализуется в виде конвейера, содержащего последовательные этапы преобразованияданных, от разбиения
и подстановки пропущенных данных до устранения несбалансированности
классов, понижения размерности и обуче­ния модели. Гиперпараметры всего
конвейера обычно оптимизируются; конвейер можно развернуть и использовать для предсказаний.
Параметры модели оптимизируются алгоритмом обуче­ния на основе тренировочных данных. Значения гиперпараметров не обучаются алгоритмически, а настраиваются с помощью контрольного набора данных. Тестовый
набор используется только для оценивания качества модели и предоставления отчета о ней клиенту или владельцу продукта.
Алгоритм поверхностного обуче­ния обучает модель, которая делает предсказания непосредственно по входным данным. Алгоритм глубокого обуче­
ния обучает многослойную модель, в которой каждый слой генерирует выходные данные, принимая на входе результаты предыдущего слоя.
Рассматривать возможность использования машинного обуче­ния для решения деловой задачи следует, когда задачу слишком сложно закодировать,
задача постоянно меняется, задача подразумевает восприятие, представляет
неизученное явление, имеет простую целевую функцию и является экономически эффективной.
Во многих ситуациях машинное обуче­ние использовать не стоит: когда
требуется объяснимость, когда ошибки недопустимы, когда традиционная
программная инженерия менее затратна, когда все входные и выходные
данные могут быть перечислены и сохранены в базе данных, а также когда
данные трудно или слишком дорого собрать.
Инженерия машинного обуче­ния (MLE) – это использование научных
принципов, инструментов и методов машинного обуче­ния и традиционной
программной инженерии для проектирования и построения сложных компьютерных систем. MLE охватывает все этапы от сбора данных до обуче­ния
модели и использования ее продуктом или потребителями.
Жизненный цикл проекта машинного обуче­ния состоит из следующих
этапов: 1) определение цели, 2) сбор и подготовка данных, 3) конструирование признаков, 4) обуче­ние модели, 5) оценивание модели, 6) развертывание
модели, 7) выполнение модели, 8) мониторинг модели и 9) сопровождение
модели.
Каждый этап будет рассмотрен в одной из глав книги.

Глава

2

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

2.1. Определение приоритетов проекта
машинного обучения
Ключевыми соображениями при определении приоритетов проекта машинного обуче­ния являются его предполагаемые последствия и стоимость.

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

40  Прежде чем приступать к проекту
строения и сопровождения такой системы бывает чрезвычайно сложным,
трудоемким и подвержен ошибкам. К тому же программисты не испытывают
никакой радости от сопровождения этой части системы. Можно ли обучить,
а не программировать правила? Можно ли использовать существующую систему для генерирования помеченных данных? Если да, то такой проект машинного обуче­ния будет иметь высокую отдачу и низкую стоимость.
Недорогие и несовершенные предсказания бывают полезны, например,
в системе, которая обрабатывает большое число запросов. Допустим, многие
из таких запросов «легкие», так что на них можно быстро ответить с помощью существующей автоматической подсистемы. Остальные запросы считаются «трудными», так что решать их приходится вручную.
Основанная на машинном обуче­нии система, которая распознает «легкие» задачи и отправляет их автоматической подсистеме, сэкономит много
времени людям, которые будут тратить усилия и время на решение трудных
вопросов. Даже если диспетчер допустит ошибку в предсказании, сложный
запрос попадет автоматической подсистеме, она с ним не справится, и в конечном итоге запрос будет передан человеку. Если человек получает легкий
запрос по ошибке, тоже не страшно: он может быть отправлен автоматической подсистеме или обработан человеком.

2.1.2. Стоимость машинного обучения
На стоимость проекта машинного обуче­ния влияют три фактора:
  сложность задачи,
  стоимость данных и
  необходимая верность.
Получить нужные данные в нужном объеме бывает очень дорого, в особенности если речь идет о ручной разметке. Потребность в высокой точности
может означать, что необходимо собрать больше данных или обучить более
сложную модель, например глубокую нейронную сеть с уникальной архитектурой или модель с нетривиальной ансамблевой архитектурой.
При обдумывании сложности задачи на первый план выходят следующие
соображения:
  существует ли способный решить задачу готовый алгоритм или программная библиотека (если да, то задача значительно упрощается);
  требуется ли для построения модели или ее выполнения в производственной среде значительная вычислительная мощность.
Вторым определяющим фактором затрат являются данные. Необходимо
принимать во внимание следующие аспекты:
  могут ли данные генерироваться автоматически (если да, то задача
значительно упрощается);
  какова стоимость ручного аннотирования данных (т. е. сопоставления
меток непомеченным примерам);
  сколько примеров необходимо (обычно это неизвестно заранее, но
может быть оценено на основе известных опубликованных результатов
или собственного опыта предприятия).

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

Стоимость

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

80 %

90 %
99 % 99.9 %
Верность

Рис. 2.1  Сверхлинейный рост стоимости
в зависимости от требований к верности

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

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

42  Прежде чем приступать к проекту
  насколько большой должна быть модель (это особенно актуально для
нейросетевых и ансамблевых архитектур);
  сколько времени потребуется для обуче­ния одной модели (иными словами, сколько нужно времени для проведения одного эксперимента)
и сколько экспериментов понадобится для достижения желаемого качества.
Можно быть почти уверенным только в одном: если требуемый уровень
верности модели (одна из популярных метрик качества модели, которую
мы рассматриваем в разделе 5.5 главы 5) превышает 99 %, то можно ожидать осложнений, связанных с недостаточным объемом помеченных данных.
В некоторых задачах даже 95%-ная верность считается труднодостижимой.
(Здесь мы, конечно же, исходим из того, что данные сбалансированы, то есть
отсутствует несбалансированность классов, которая будет темой раздела 3.9.)
Еще один полезный ориентир – качество, достигаемое при решении задачи человеком. Обычно очень трудно добиться, чтобы модель работала не
хуже человека.

2.2.2. Упрощение задачи
Высказать более обоснованную гипотезу можно, если упростить задачу
и сначала решить более простой вариант. Например, предположим, что задачей является классификация множества документов по 1000 тем. Выполните пилотный проект: сосредоточьтесь на 10 темах, а документы, относящиеся к остальным 990 темам, считайте «Прочими»1. Пометьте данные для
этих 11 классов вручную (10 реальных категорий плюс «Прочие»). Логика
здесь проста – человеку гораздо проще держать в памяти определения только
10 категорий, а не запоминать различия между 1000 категорий2.
Упростив задачу до 11 классов, решите ее и измерьте время на каждом
этапе. Убедившись, что задача для 11 классов разрешима, можно обоснованно надеяться, что она будет разрешима и для 1000 классов. Сохраненные
измерения затем можно использовать для оценивания времени, необходимого для полного решения задачи, хотя для получения точной оценки нельзя
просто умножить время на 100. Объем данных, необходимых для того, чтобы
научиться различать много классов, с увеличением числа классов обычно
растет сверхлинейно.
Другой способ получения более простой задачи из потенциально сложной – разбить задачу на несколько простых, используя естественные срезы
в имеющихся данных. Например, пусть у организации есть клиенты в не1

2

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

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

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

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

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

2.3.1. Что модель может делать
Модель обычно используется как часть системы, служащая определенной
цели. В частности, модель может:
  автоматизировать (например, выполнять действия от имени пользователя или запускать либо останавливать определенные операции на
сервере);
  предупреждать или подсказывать (например, спрашивать пользователя,
следует ли предпринимать какое-либо действие, или информировать
системного администратора о том, что трафик вызывает подозрения);
  организовывать, представляя объекты в порядке, который может быть
полезен пользователю (например, сортировать изображения или до1

Нередко срабатывает эмпирическое правило 80/20: 80 % прогресса достигаются
с использованием 20 % лучших ресурсов.

44  Прежде чем приступать к проекту
кументы в порядке сходства с запросом или в соответствии с предпочтениями пользователя);
  аннотировать (например, добавлять контекстно-зависимые аннотации
к выводимой на экран информации или выделять в тексте фразы, относящиеся к задаче пользователя);
  извлекать (например, обнаруживать небольшие фрагменты релевантной информации в крупных входных данных, скажем именованные
сущности в тексте: имена собственные, названия компаний или мест);
  рекомендовать (например, обнаруживать и показывать пользователю
наиболее релевантные элементы коллекции, исходя из содержимого
элемента или реакции пользователя на прошлые рекомендации);
  классифицировать (например, относить входные примеры к одной или
нескольким предопределенным группам с уникальными названиями);
  давать количественную оценку (например, сопоставлять цену дому);
  синтезировать (например, генерировать новый текст, изображение,
звук или другой объект, аналогичный объектам в коллекции);
  отвечать на прямой вопрос (например, «Описывает ли этот текст это
изображение?» или «Похожи ли эти два изображения?»);
  преобразовывать входные данные (например, понижать размерность
для визуализации, перефразировать длинный текст в виде краткой
аннотации, переводить предложение на другой язык или дополнять
изображение, применив к нему фильтр);
  обнаруживать новизну или аномалию.
Практически любую деловую задачу, решаемую с помощью машинного
обуче­ния, можно поставить в одной из перечисленных выше форм. Если это
не получается, то, скорее всего, машинное обуче­ние – не лучшее решение
в вашем случае.

2.3.2. Свойства успешной модели
Успешная модель обладает следующими четырьмя свойствами:
  учитывает спецификации входных и выходных данных и требования
к качеству;
  приносит пользу организации (измеряется снижением затрат, увеличением продаж или прибыли);
  помогает пользователю (измеряется продуктивностью, заинтересованностью и эмоциональным настроем);
  является строгой в научном отношении.
Научно строгая модель характеризуется предсказуемым поведением (для
входных примеров, аналогичных примерам, которые использовались на этапе обуче­ния) и воспроизводимостью. Первое свойство (предсказуемость)
означает, что если входные векторы признаков получены из того же распределения значений, что и обучающие данные, то модель в среднем должна
допускать тот же процент ошибок, что и на зарезеревированных данных
в процессе обуче­ния. Второе свойство (воспроизводимость) означает, что
модель с аналогичными свойствами может быть легко построена повторно

Организация группы машинного обучения  45

на основе тех же обучающих данных с применением того же алгоритма и значений гиперпараметров. Слово «легко» означает, что для реконструкции
модели не требуется никакого дополнительного анализа, пометки данных
или кодирования, а только вычислительные ресурсы.
Формулируя цель машинного обуче­ния, убедитесь, что решаете правильную задачу. В качестве примера неправильно сформулированной цели представьте, что у вашего заказчика есть кошка и собака и ему нужна система,
которая впускает в дом кошку, но не впускает собаку. Возможно, вы решите
обучить модель отличать кошек от собак. Однако такая модель впустит любую кошку, а не только кошку заказчика. Или же вы можете решить, что, поскольку у клиента животные только двух видов, то следует обучить модель
различать их и только их. Поскольку в данном случае модель классификации
бинарная, енот будет классифицирован либо как собака, либо как кошка. Если
он будет классифицирован как кошка, то попадет в дом1.
Определить единственную цель проекта машинного обуче­ния бывает непросто. Обычно у проекта на предприятии много заинтересованных сторон. Очевидным интересантом является владелец продукта. Допустим, что
его цель – увеличить время, которое пользователь проводит на онлайновой
платформе, по меньшей мере на 15 %. С другой стороны, исполнительный
вице-президент хотел бы увеличить доход от рекламы на 20 %. А финансовая
группа хотела бы уменьшить ежемесячный счет за пользование облаком на
10 %. При определении цели проекта машинного обуче­ния необходимо найти правильный баланс между потенциально конфликтующими требованиями и воплотить его в выборе входных и выходных данных модели, функции
стоимости и метрике качества.

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

2.4.1. Две традиции
Одна традиция гласит, что группа машинного обуче­ния должна состоять из
аналитиков данных, которые тесно сотрудничают с программистами. В этом
случае программист не обязан обладать глубокими знаниями в области машинного обуче­ния, но должен понимать термины, употребляемые коллегами-аналитиками.
Согласно другой традиции, все члены группы машинного обуче­ния должны владеть навыками в области машинного обуче­ния и разработки ПО.
У каждой традиции есть свои плюсы и минусы. Сторонники первой говорят, что каждый член группы должен быть лучшим в своем деле. Аналитик
1

Вот почему наличие класса «Прочие» в задачах классификации почти всегда является неплохой идеей.

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

2.4.2. Члены группы машинного обучения
Помимо специалистов с навыками в машинном обуче­нии и программной
инженерии, в группу МО могут входить эксперты в области инженерии данных (инженеры по данным) и эксперты по разметке данных.
Инженеры по данным – это программисты, ответственные за извлечение,
преобразование и загрузку данных (Extract, Transform, Load – ETL). Эти три
концептуальных шага являются частью типичного конвейера данных. Инженеры по данным используют методы ETL для создания автоматизированного
конвейера, в котором исходные данные преобразуются в данные, пригодные
для анализа. Они разрабатывают способы структурирования данных и их
интегрирования из различных ресурсов. Они пишут запросы к данным по
требованию или помещают наиболее частые запросы в быстрые API (интерфейсы прикладного программирования), чтобы аналитики и другие потребители могли легко обратиться к данным. Как правило, знакомство с машинным обуче­нием для инженеров по данным необязательно.
В большинстве крупных компаний инженеры по данным работают отдельно от инженеров по машинному обуче­нию в группе инженерии данных.
Эксперты по разметке данных отвечают за четыре вида деятельности:
  назначение, вручную или полуавтоматически, меток непомеченным
примерам в соответствии со спецификацией, предоставленной аналитиками данных;
  создание инструментов для назначения меток данным;
  управление внешними разметчиками;
  проверка качества помеченных примеров.
Разметчик – это лицо, ответственное за назначение меток непомеченным примерам. Опять же, в крупных компаниях эксперты по разметке данных могут быть организованы в две или три разные группы: одна или две
группы разметчиков (например, одна локальная, другая внешняя) и группа
программистов плюс специалист по пользовательскому интерфейсу (UX),
ответственный за создание инструментов разметки.

Причины провалов проектов машинного обучения  47

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

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

2.5.1. Нехватка квалифицированных кадров
По состоянию на 2020 год наука о данных, равно как инженерия машинного
обуче­ния, является относительно новой дисциплиной. До сих пор не су­
ществует стандартной методики их преподавания. Большинство организаций не знают, как нанимать специалистов по машинному обуче­нию и как их
сравнивать. Большинство доступных на рынке кадров – люди, прошедшие
один или несколько онлайновых курсов и не обладающие основательным
практическим опытом. Значительная часть рабочей силы обладает лишь поверхностным опытом в области машинного обуче­ния, полученным на демонстрационных наборах данных в условиях учебных занятий. У многих
нет опыта работы с полным жизненным циклом проекта машинного обуче­

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

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

2.5.3. Отсутствующая инфраструктура данных
Аналитики и исследователи данных работают с данными. Качество данных
имеет для успеха проекта машинного обуче­ния решающее значение. Ин-

Причины провалов проектов машинного обучения  49

фраструктура данных предприятия должна предлагать аналитику простые
способы получения качественных данных для обуче­ния моделей. В то же время инфраструктура должна обеспечивать доступность данных аналогичного
качества после развертывания модели в производственной среде.
Однако на практике так бывает не всегда. Исследователи получают данные
для обуче­ния с помощью различных ситуативных скриптов; также используются разные скрипты и инструменты для объединения источников данных.
После того как модель готова, выясняется, что, используя доступную производственную инфраструктуру, невозможно достаточно быстро (или вообще
невозможно) сгенерировать входные примеры для модели. Мы подробно
поговорим о хранении данных и признаков в главах 3 и 4.

2.5.4. Трудности с разметкой данных
В большинстве проектов машинного обуче­ния аналитики используют помеченные данные. Эти данные обычно являются специализированными,
поэтому разметка выполняется отдельно под каждый проект. По состоянию
на 2019 год, по некоторым сообщениям1, целых 76 % коллективов, занимающихся искусственным интеллектом и наукой о данных, размечают обучающие данные самостоятельно, тогда как 63 % создают собственные технологии
автоматизации разметки и аннотирования.
Это приводит к значительным затратам времени квалифицированных
исследователей данных на разметку данных и разработку инструментов.
Это серьезное препятствие на пути эффективного выполнения проекта ИИ.
Некоторые компании передают разметку данных сторонним организациям на аутсорсинг. Однако без надлежащего контроля качества такие помеченные данные могут оказаться низкого качества или совершенно неверными. Предприятия в целях поддержания качества и согласованности
между наборами данных должны инвестировать в формальное и стандартизированное обуче­ние внутренних или сторонних разметчиков. Это, в свою
очередь, может замедлять проекты машинного обуче­ния. Хотя, согласно тем
же отчетам, компании, которые отдают разметку данных на аутсорсинг, чаще
доводят проекты машинного обуче­ния до производственной стадии.

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

What data scientists tell us about AI model training today. Alegion and Dimensional
Research, 2019.

50  Прежде чем приступать к проекту
и сотрудничества приводит к трениям, когда одному подразделению требуется доступ к данным, хранящимся в другом. Кроме того, разные филиалы
одной организации часто имеют свои собственные бюджеты, поэтому сотрудничество усложняется, т. к. ни одна сторона не заинтересована в том,
чтобы тратить свой бюджет на помощь другой стороне.
Даже в рамках одного филиала нередко в проекте машинного обуче­ния
на разных этапах участвует несколько групп. Например, группа инженерии
данных обеспечивает доступ к данным или отдельным признакам, группа
исследования данных работает над моделированием, группы ETL или DevOps
работают над инженерными аспектами развертывания и мониторинга,
а группы автоматизации и внутреннего инструментария разрабатывают инструменты и процессы для непрерывного обновления модели. Отсутствие
сотрудни­чест­ва между любой парой участвующих групп может приводить
к длительной приостановке проекта. Типичными причинами недоверия
между группами является непонимание инженерами инструментов и подходов, используемых исследователями данных, а также отсутствие у исследователей знаний (или простая неосведомленность) о передовых методах
разработки программного обеспечения и паттернах проектирования.

2.5.6. Технически невыполнимые проекты
По причине высокой стоимости многих проектов машинного обуче­ния (изза высокой стоимости квалифицированных кадров и инфраструктуры) некоторые организации в целях «окупаемости инвестиций» могут ставить перед
собой очень амбициозные цели: полностью преобразовать организацию или
продукт либо обеспечить нереалистичную рентабельность инвестиций. Это
приводит к крупномасштабным проектам, предполагающим сотрудничество
между многочисленными группами, подразделениями и третьими сторонами, которое требует от всех участников предельного напряжения сил.
В результате на завершение таких чрезмерно амбициозных проектов могут уходить месяцы или даже годы; некоторые ключевые игроки, включая
руководителей и ведущих исследователей, могут потерять интерес к проекту или даже покинуть организацию. В конечном итоге проект может быть
лишен приоритетного финансирования, а если и будет доведен до конца,
то появится на рынке слишком поздно. Лучше всего, по крайней мере в начале, сосредоточиться на реализуемых проектах, предполагающих простое
сотрудничество между группами, обозримость и нацеленность на простую
деловую цель.

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

Резюме  51

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

2.6. Резюме
Приступая к проекту машинного обуче­ния, необходимо расставить приоритеты и сформировать проектную группу. Ключевыми соображениями при
определении приоритетов проекта МО являются последствия и стоимость.
Последствия применения машинного обуче­ния значительны, когда 1) машинное обуче­ние может заменить сложную часть технического проекта или
2) велик выигрыш от получения недорогих (но, вероятно, несовершенных)
предсказаний.
На стоимость проекта машинного обуче­ния сильно влияют три фактора:
1) сложность задачи, 2) стоимость данных и 3) необходимое качество модели.
Стандартного метода оценивания сложности проекта машинного обуче­ния
не существует – разве что сравнение с другими проектами, выполненными
в организации или описанными в литературе. Есть несколько существенных
неизвестных, которые почти невозможно угадать: достижим ли требуемый
уровень качества модели на практике, сколько данных потребуется для достижения этого уровня, сколько и каких признаков необходимо, насколько
большой должна быть модель, сколько времени потребуется для выполнения
одного эксперимента и сколько экспериментов необходимо для достижения
желаемого уровня качества.
Гипотеза будет более обоснованной, если упростить задачу.
Прогресс проекта машинного обуче­ния нелинеен. Ошибка обычно быстро
уменьшается в начале, но затем прогресс замедляется. Поэтому необходимо
позаботиться о том, чтобы владелец продукта (или клиент) понимал ограничения и риски. Тщательно регистрируйте в журнале каждое действие и отслеживайте, сколько времени оно заняло. Это поможет не только составить
отчет, но и оценить сложность аналогичных будущих проектов.
Цель проекта машинного обуче­ния – построить модель, которая решает
деловую задачу. В частности, модель может использоваться в рамках более
широкой системы для автоматизации, оповещения, организации, аннотирования, извлечения, генерирования рекомендаций, классификации, количественной оценки, синтеза, ответа на прямые вопросы, преобразования
входных данных и обнаружения новизны или аномалии. Если не получается
сформулировать цель машинного обуче­ния в одной из этих форм, то, скорее
всего, машинное обуче­ние – не лучшее решение.

52  Прежде чем приступать к проекту
Успешная модель:
  учитывает спецификации входных и выходных данных и требования
к качеству;
  приносит пользу организации и пользователю;
  является строгой в научном отношении.
Существует две традиции организации групп машинного обуче­ния. Одна
утверждает, что группа машинного обуче­ния должна состоять из аналитиков данных, которые тесно сотрудничают с программистами. В этом случае
программист не обязан обладать глубокими знаниями в области машинного
обуче­ния, но должен понимать термины, употребляемые коллегами-аналитиками. Согласно другой традиции, все члены группы машинного обуче­ния
должны владеть навыками в области машинного обуче­ния и разработки ПО.
Помимо специалистов с навыками в области машинного обуче­ния и разработки ПО, в группу машинного обуче­ния могут входить эксперты по разметке данных и по инженерии данных. Инженеры DevOps тесно сотрудничают
с инженерами по машинному обуче­нию для автоматизации развертывания,
загрузки, мониторинга и эпизодического или регулярного сопровождения
моделей.
Проекты машинного обуче­ния могут терпеть неудачу по многим причинам, и большинство из них действительно оказываются провальными. Типичные причины провала таковы:
  нехватка квалифицированных кадров;
  отсутствие поддержки со стороны руководства;
  отсутствие инфраструктуры данных;
  трудности с разметкой данных;
  разобщенность организации и отсутствие сотрудничества;
  техническая невыполнимость проекта;
  нестыковка между техническими и коммерческими группами.

Глава

3
Сбор и подготовка
данных

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

Деловая
задача

Определение
цели

Сбор
и подготовка
данных

Конструи­
рование
признаков

Обучение
модели

Оценивание
модели

Сопро­вождение
модели

Мониторинг
модели

Обслуживание
запросов
к модели

Развер­тывание
модели

Рис. 3.1  Жизненный цикл проекта машинного обуче­ния

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

3.1. Вопросы к данным
Итак, мы сформулировали цель машинного обуче­ния, определили входные
и выходные данные модели и критерии успеха. Теперь можно начать сбор
данных, необходимых для обуче­ния модели. Но прежде необходимо ответить
на несколько вопросов.

54  Сбор и подготовка данных

3.1.1. Доступны ли данные?
Существуют ли необходимые данные? Если да, то доступны ли они (физически, по контракту, этически или с точки зрения стоимости)? Если вы покупаете или используете чужие источники данных, подумали ли вы о том,
на каких условиях эти данные можно использовать или передавать в общее
пользование? Нужно ли договариваться о новом лицензионном соглашении
с владельцем?
Если данные доступны, то защищены ли они авторским правом или другими правовыми нормами? Если да, то установили ли вы, кому принадлежат
авторские права на эти данные? Возможно ли совместное авторское право?
Являются ли данные конфиденциальными (например, касаются проектов,
клиентов или партнеров вашей организации либо засекречены правительством)? Возможны ли потенциальные проблемы с конфиденциальностью?
Если да, то обсуждали ли вы коллективное использование данных с респондентами, от которых получали данные? Можете ли вы обеспечить сохранность персональных данных в течение длительного времени, чтобы их можно было использовать в будущем?
Нужно ли распространять данные вместе с моделью? Если да, то нужно ли
получать письменное согласие от владельцев или респондентов?
Нужно ли обезличивать данные1, например путем удаления информации,
позволяющей установить личность (personally identifiable information –
PII), во время анализа или при подготовке к распространению?
Даже если получить нужные данные физически возможно, не работайте
с ними до тех пор, пока не будут решены все вышеперечисленные вопросы.

3.1.2. Насколько велик объем данных?
Обязательно нужно получить точный ответ на вопрос, достаточно ли данных.
Но, как мы уже выяснили, обычно объем данных, необходимых для достижения цели, неизвестен, особенно если предъявляются строгие требования
к минимальному качеству модели.
Если есть сомнения в доступности достаточного объема данных немедленно, то следует выяснить, с какой частотой генерируются новые данные. В некоторых проектах можно начать с того, что доступно на начальной стадии,
и постепенно накапливать новые данные, пока идет работа над конструированием признаков, моделированием и решением других технических задач.
Данные могут поступать естественным путем, как результат какого-либо
1

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

Вопросы к данным  55

наблюдаемого или измеряемого процесса, либо предоставляться экспертами
по разметке данных или сторонним поставщиком данных.
Оцените, сколько времени может занять выполнение проекта. Будет ли за
это время собран достаточно большой набор данных1? Ответ должен быть
основан на опыте работы над аналогичными проектами или на результатах,
описанных в литературе.
Практическим способом оценить достаточность собранных данных является построение кривых обуче­ния. Именно, постройте кривые оценок на
обучающем и контрольном наборах при различном числе обучающих примеров, как показано на рис. 3.2.
Кривые обуче­ния (наивный байесовский алгоритм)
1.00

Оценка на обучающем наборе
Оценка на этапе перекрестной
проверки

0.95

Оценка

0.90
0.85
0.80
0.75
0.70

250

500

750

1000

1250

1500

Обучающие примеры

Рис. 3.2  Кривые обуче­ния для наивного байесовского алгоритма
применительно к стандартному набору данных цифр из библиотеки scikit-learn

Глядя на кривые обуче­ния, вы увидите, что качество модели будет выходить на плато после определенного числа обучающих примеров. Дальнейшее
увеличение их количества не приносит ощутимой отдачи.
Если вы замечаете, что качество алгоритма обуче­ния достигло насыщения, то, скорее всего, сбор дополнительных данных не поможет улучшить
модель. Я говорю «скорее всего», потому что возможны два других объяснения:
  отсутствуют достаточно информативные признаки, которые алгоритм
обуче­ния мог быиспользовать для построения более качественной
модели;
  использованный алгоритм обуче­ния не способен обучить достаточно
сложную модель с применением имеющихся данных.
1

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

56  Сбор и подготовка данных
В первом случае можно рассмотреть вопрос о конструировании дополнительных признаков, изобретательно скомбинировав существующие признаки или используя информацию из сторонних источников, например справочных таблиц и географических справочников. Мы рассмотрим методы
синтеза признаков в разделе 4.6 главы 4.
Во втором случае можно было бы воспользоваться ансамблевым обуче­
нием или обучить глубокую нейронную сеть. Однако глубокие нейронные
сети обычно требуют большего объема обучающих данных по сравнению
с алгоритмами поверхностного обуче­ния.
Иногда используют эмпирические правила для оценивания количества
обучающих примеров, необходимых для решения задачи. Обычно применяются коэффициенты масштабирования к:
  числу признаков, либо
  числу классов, либо
  к числу обучаемых параметров модели.
Такие эмпирические правила нередко работают, но зависят от предметной
области. Каждый аналитик вносит поправки, опираясь на собственный опыт.
Конечно, со временем вы найдете свои «волшебные» масштабные коэффициенты, а пока можете ориентироваться на цифры, которые чаще всего приводятся в онлайновых источниках:
  в 10 раз увеличить количество признаков (при этом размер обучающего набора часто оказывается завышен, но в качестве верхней границы
эта рекомендация хорошо работает);
  в 100 или 1000 раз увеличить количество классов (при этом размер
часто занижается);
  в 10 раз увеличить количество обучаемых параметров (обычно применяется к нейронным сетям).
Имейте в виду, что сам факт доступа к большому объему данных еще не
означает, что все их нужно использовать. Сравнительно небольшая выборка
может дать хорошие результаты на практике и ускорить поиск более качест­
венной модели. Однако важно убедиться, что выборка репрезентативна для
всего набора данных. Такие стратегии, как стратифицированная или сис­
тематическая выборка, могут улучшить результаты. Мы рассмотрим стратегии выборки в разделе 3.10.

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

Вопросы к данным  57

Если набор данных представлен в виде электронной таблицы, то прежде
всего нужно проверить, аккуратны ли данные. Как было сказано во введении, используемый для машинного обуче­ния набор данных должен быть
аккуратным. Если для ваших данных это не так, то следует преобразовать их
в аккуратные, применив конструирование признаков.
В аккуратном наборе данных некоторые значения могут отсутствовать.
Для их восполнения рассмотрите возможность применения методов подстановки данных. Мы обсудим несколько таких методов в разделе 3.7.
В наборах данных, подготовленных людьми, вместо отсутствующих значений часто задаются магические числа типа 9999 или –1. Такие ситуации
должны быть обнаружены на этапе визуального анализа данных, после чего
магические числа должны быть заменены с помощью подстановки данных.
Необходимо также проверить наличие дубликатов в наборе данных.
Обычно дубликаты удаляются, если только не были добавлены специально,
чтобы сбалансировать несбалансированную задачу. Мы рассмотрим эту
проблему и методы ее решения в разделе 3.9.
Срок действия данных может истечь, или они могут значительно устареть.
Например, предположим, что требуется обучить модель, которая распознает отклонения в поведении сложного электронного устройства, например
принтера. У нас имеются измерения, произведенные во время нормальной
и аномальной работы принтера. Однако они были сделаны для принтеров
предыдущего поколения, а с тех пор было внедрено несколько значительных
усовершенствований. Модель, обученная с использованием неактуальных
данных о более старом поколении принтеров, может работать хуже при развертывании на принтерах нового поколения.
Наконец, данные могут быть неполными или нерепрезентативными.
Например, набор фотографий животных может содержать снимки, сделанные только летом или в определенной географической области. Набор данных о пешеходах для беспилотных автомобилей может быть создан инженерами, игравшими роль пешеходов; в таком наборе данных чаще всего будут
представлены только молодые мужчины, тогда как дети, женщины и пожилые люди будут встречаться редко или вообще отсутствовать.
Научно-исследовательский отдел компании, работающей над распознаванием выражений лиц, может быть расположен в стране, где преобладает
белое население, поэтому в наборе данных будут присутствовать в основном
лица белых мужчин и женщин, а чернокожие и азиаты будут представлены
недостаточно. Инженеры, разрабатывающие модель распознавания позы
для камеры, возможно, создавали обучающий набор данных, фотографируя
людей в помещении, тогда как потребители обычно используют камеру на
открытом воздухе.
На практике часто бывает, что для подачи на вход модели данные необходимо подвергнуть предобработке; отсюда важность визуального анализа
набора данных перед началом моделирования. Допустим, мы работаем над
задачей предсказания темы новостных статей. Скорее всего, данные будут
собираться с новостных сайтов. А даты скачивания, вероятно, будут сохранены в том же документе, что и текст новостной статьи. Допустим также, что
инженер по данным решил в цикле перебирать встречающиеся на сайтах

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

3.1.4. Понятны ли данные?
Как показано на примере предсказания пола, крайне важно понимать, откуда взялся каждый атрибут в наборе данных. Не менее важно понимать,
что именно представляет каждый атрибут. Одна из частых проблем, наблюдаемых на практике, заключается в том, что переменная, которую аналитик
пытается предсказать, находится среди признаков в векторе признаков. Как
так?
Допустим, мы работаем над задачей предсказания цены дома по его атрибутам: число спален, площадь, местоположение, год постройки и т. д. Атрибуты каждого дома были предоставлены нам клиентом, крупной онлайновой
платформой по продаже недвижимости. Данные представлены в виде элект­
ронной таблицы Excel. Не тратя слишком много времени на анализ каждого столбца, мы удаляем из атрибутов только цену сделки и используем это
значение в качестве целевого показателя, который хотим научиться предсказывать. Очень быстро приходит понимание, что модель почти идеальна:
она предсказывает цену сделки с верностью, близкой к 100 %. Мы передаем
модель клиенту, он внедряет ее в производство, и тесты показывают, что
в большинстве случаев модель врёт. Что случилось?
То, что произошло, называется просачиванием данных (или просачиванием цели). После более тщательного анализа набора данных мы понимаем,
что в одном из столбцов электронной таблицы указана комиссия риелтора.
Конечно же, модель легко обучилась идеально преобразовывать этот атрибут
в цену дома. Однако в производственной среде эта информация недоступна
до момента продажи дома, поскольку комиссия зависит от продажной цены.
В разделе 3.2.8 мы рассмотрим проблему просачивания данных подробнее.

3.1.5. Надежны ли данные?
Надежность набора данных зависит от того, как данные собирались. Можно ли доверять меткам? Если данные порождены работниками с помощью
«Механического турка» (так называемыми «туркерами»)1, то их надежность
1

Механический турок (Mechanical Turk) – виртуальный рынок труда, созданный
компанией Amazon в 2005 году. Эта платформа дает работодателям возможность
предлагать разнообразные, преимущественно простые, задания широкому кругу
пользователей. Механический турок может использоваться для самых разных задач: категоризация, верификация данных, расстановка тегов, транскрибирование
или перевод. – Прим. перев.

Вопросы к данным  59

может оказаться очень низкой. Иногда метки, назначенные векторам признаков, получены большинством голосов (или средним арифметическим)
нескольких пользователей. В таком случае данные можно считать более надежными. Однако лучше проводить дополнительный контроль качества на
небольшой случайной выборке из набора данных.
С другой стороны, если данные представляют измерения, произведенные
измерительными приборами, то информацию о точности каждого измерения можно найти в технической документации.
На надежность меток также может влиять отсроченная или косвенная
природа метки. Метка считается отсроченной, если вектор признаков, которому была назначена метка, представляет событие, произошедшее значительно раньше времени наблюдения метки.
Конкретно возьмем задачу предсказания оттока клиентов. Здесь вектор
признаков описывает клиента, и мы хотим предсказать, уйдет ли клиент
в какой-то момент в будущем (обычно спустя время от шести месяцев до
года). Вектор признаков содержит то, что мы знаем о клиенте сейчас, но метка («ушел» либо «остался») будет назначена в будущем. Это важное свойство,
потому что между настоящим и будущим может произойти много событий,
которые не отражены в векторе признаков, но влияют на решение клиента
остаться или уйти. Следовательно, отсроченные метки делают данные менее
надежными.
Надежность также зависит от того, является ли метка прямой или косвенной, хотя тут, конечно, важно, что мы хотим предсказать. Пусть, например,
наша цель – предсказать, будет ли посетителю сайта интересна некоторая
веб-страница. Мы могли бы получить набор данных, содержащий информацию о пользователях, веб-страницах и метках «заинтересован»/«не заинтересован», отражающих, был ли конкретный пользователь заинтересован
в определенной веб-странице или нет. Прямая метка действительно указывала бы на интерес, а косвенная метка могла бы предполагать некоторый интерес. Например, если пользователь нажал кнопку «Нравится», то мы
имеем прямой индикатор интереса. Но если пользователь только перешел по
ссылке, то это является лишь косвенным выражением заинтересованности.
Пользователь мог перейти по ошибке или потому, что текст ссылки был «заманухой», – мы не можем знать наверняка. Если метка является косвенной,
то данные следует считать менее надежными. Впрочем, они менее надежны
для предсказания интереса к странице, но вполне надежны для предсказания
переходов.
Еще одним источником ненадежности данных являются петли обратной
связи. Петля обратной связи – это свойство системы, позволяющее получать данные для обуче­ния модели с помощью самой модели. Снова рассмот­
рим задачу предсказания того, понравится ли контент пользователю сайта,
и предположим, что имеются только косвенные метки – клики. Если модель
уже развернута на сайте и пользователи переходят по рекомендованным
моделью ссылкам, то это означает, что новые данные косвенно отражают
не только интерес пользователей к контенту, но и то, насколько интенсивно
модель рекомендовала этот контент. Если модель решит, что конкретная
ссылка достаточно важна, чтобы рекомендовать ее многим пользователям,

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

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

3.2.1. Высокая стоимость
Получение непомеченных данных может обходиться дорого; однако разметка данных – самая дорогостоящая работа, в особенности если она выполняется вручную.
Получение непомеченных данных становится дорогостоящим, когда их
необходимо собирать специально для конкретной задачи. Допустим, наша
цель – узнать, где в городе расположены разные торговые предприятия. Лучше всего было бы купить эти данные у государственного учреждения. Однако
по разным причинам это может быть сложно или даже невозможно: государственная база данных может быть неполной или устаревшей. Для получения
актуальных данных можно выпустить оснащенные камерами автомобили на
улицы города и поручить им фотосъемку всех зданий.
Понятно, что такая затея стоит недешево. Собрать фотографии зданий недостаточно. Нам еще нужен тип торгового предприятия в каждом здании. То
есть нужны данные, помеченные как «кофейня», «банк», «бакалея», «аптека»,
«заправочная станция» и т. д. Метки должны назначаться вручную, и комуто за выполнение этой работы придется дорого заплатить. Кстати, у Google
есть хитроумный метод передачи разметки на аутсорсинг случайным людям
с помощью бесплатной службы reCAPTCHA. Благодаря службе reCAPTCHA
компания Google решает две проблемы: сокращение спама в вебе и получение дешевых помеченных данных.
На рис. 3.3 показано, что нужно сделать для назначения меток одному
изображению. Цель здесь состоит в том, чтобы сегментировать изображение,
назначая каждому пикселю метки: «тяжелый грузовик», «легковой автомобиль или легкий грузовик», «лодка», «здание», «контейнер», «иное». Разметка
изображения на рис. 3.3 заняла у меня около 30 минут. Если бы типов было
больше, например «мотоцикл», «дерево», «дорога», то это заняло бы больше
времени, а стоимость разметки была бы выше.
В хорошо продуманных инструментах разметки минимизировано использование мыши (в т. ч. для открытия меню), по максимуму используются горячие клавиши, поэтому затраты снижаются за счет увеличения скорости
разметки данных.
По возможности процесс принятия решений следует сводить к выбору ответа да или нет. Вместо того чтобы просить найти все цены в данном тексте,

Типичные проблемы с данными  61

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

Исходная фотография

Помеченная фотография

Рис. 3.3  Непомеченный и помеченный аэрофотоснимок.
Фото предоставлено Томом Фиском

Рис. 3.4  Пример простого интерфейса разметки

Еще один прием, позволяющий ускорить разметку, – зашумленная предварительная разметка, т. е. предварительная пометка примера с использованием наилучшей текущей модели. В этом сценарии мы начинаем с пометки определенного числа примеров «с нуля» (то есть без использования
какой-либо поддержки). Затем с помощью этого начального набора помеченных примеров создается первая модель, которая работает более-менее
приемлемо. После этого для пометки новых примеров используется текущая
модель вместо разметчика-человека1.
Спросите, правильна ли автоматически назначенная метка. Если разметчик отвечает «Да», то сохраните этот пример как обычно. Если же он отвечает
«Нет», то попросите пометить этот пример вручную. Технологический про1

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

62  Сбор и подготовка данных
цесс показан на рис. 3.5. Цель хорошо организованного процесса – максимально ускорить разметку. Интерес разметчика к процессу также является
ключевым фактором. Показывайте, сколько меток было добавлено, а также
качество текущей наилучшей модели. Это стимулирует разметчика, поскольку у него появляется ясная цель.

Рис. 3.5  Пример технологического процесса
зашумленной предварительной разметки

3.2.2. Плохое качество
Помните, что качество данных является одним из важнейших факторов,
влияющих на качество модели. Не устаю это подчеркивать.
У качества данных есть два аспекта: качество первичных данных и качест­
во разметки.
Для первичных данные характерно несколько хорошо известных проблем:
зашумленность, смещение, низкая предсказательная способность, устаревшие примеры, выбросы и просачивание.

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

Типичные проблемы с данными  63

Если в аккуратных данных пропущены атрибуты, то их можно восполнить,
применив методы подстановки данных, которые мы рассмотрим в разделе 3.7.1.
Восстановить резкость размытых изображений позволяют специальные
алгоритмы, хотя при необходимости этому можно обучить модели глубокого
машинного обуче­ния, например нейронные сети. То же самое относится к зашумленности аудиоданных: шум можно устранить алгоритмически.
Зашумленность является серьезной проблемой, когда набор данных относительно невелик (тысячи примеров или меньше), поскольку наличие шума
может стать причиной переобуче­ния: алгоритм может обучиться моделировать шум, содержащийся в обучающих данных, что нежелательно. С другой
стороны, в контексте больших данных шум, случайно применяемый к каждому примеру независимо от всех остальных, обычно «усредняется» по всем
примерам. И в этом случае результатом шума может стать регуляризация,
поскольку он не дает алгоритму обуче­ния слишком сильно полагаться на
малое подмножество входных признаков1.

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

Типы смещения
Смещение отбора отдает предочтение источникам данных, которые легкодоступны, удобны и (или) экономически эффективны. Например, вы хотите
узнать мнение читателей о своей новой книге. Для этого вы рассылаете несколько начальных глав читателям предыдущей книги. Очень вероятно, что
этой избранной группе ваша новая книга понравится. Однако эта информация мало что говорит о читателе вообще.
Реальным примером смещения отбора является изображение, сгенерированное с помощью алгоритма повышающей передискретизации фотографий
Photo Upsampling via Latent Space Exploration (PULSE), в котором используется нейросетевая модель для увеличения разрешающей способности. Во
время его тестирования пользователи интернета обнаружили, что передискретизированное изображение чернокожего в некоторых случаях может
представлять белого человека, как показано на фотографии Барака Обамы
на рис. 3.6.
Этот пример показывает, что нельзя предполагать, что модель машинного
обуче­ния верна просто потому, что алгоритмы машинного обуче­ния беспристрастны, а обученные модели основаны на данных. Если в данных имеется
смещение, то оно, скорее всего, будет отражено и в модели.
1

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

64  Сбор и подготовка данных

Рис. 3.6  Влияние смещения отбора на обученную модель
(Твиттер / @Chicken3gg)

Смещение самоотбора – это форма смещения отбора, когда данные поступают из «добровольно» предложивших их источников. Такому смещению
подвержены данные большинства опросов. Пусть, например, мы хотим обучить модель предсказывать поведение успешных предпринимателей. Сначала мы задаем предпринимателям вопрос, успешны они или нет. И сохраняем
данные, только если респондент заявил, что успешен. Проблема в том, что
у действительно успешных предпринимателей, скорее всего, нет времени
отвечать на наши вопросы, а те, кто объявляет себя успешными, могут ошибаться на свой счет.
Другой пример. Пусть мы хотим обучить модель предсказывать, понравится ли книга читателям. Можно воспользоваться оценками, которые пользователи ставили похожим книгам в прошлом. Однако хорошо известно,
что недовольные пользователи часто ставят несоразмерно низкие оценки.
Данные будут смещены в сторону большого количества очень низких оценок
по сравнению с числом оценок в среднем диапазоне (рис. 3.7). Смещение
усугубляется тем фактом, что мы склонны ставить оценку, только если наш
опыт оказался очень положительным или очень отрицательным.

Рис. 3.7  Распределение оценок,
поставленных читателям популярной книге по ИИ на сайте Amazon

Типичные проблемы с данными  65

Смещение из-за отсутствующей переменной возникает, когда среди
выделенных из данных признаков нет нужного для верного предсказания.
Предположим, к примеру, что мы разрабатываем модель оттока клиентов
и хотим предсказывать, аннулирует ли клиент подписку в течение шести
месяцев. Мы обучили модель, она достаточно верна, но спустя несколько
недель после развертывания мы начинаем наблюдать много неожиданных
ложноотрицательных результатов. Мы провели расследование снижения качества модели и обнаружили, что появился конкурент, предлагающий аналогичную услугу за меньшую цену. Мы не учли этот признак в модели, поэтому
не оказалось важной информации, необходимой для верного предсказания.
Смещению из-за спонсорства или финансирования подвержены данные, предоставленные спонсируемым агентством. Например, предположим,
что известная компания по производству видеоигр спонсирует новостное
агентство, которое поставляет новости об игровой индустрии. Пытаясь дать
предсказания, касающиеся индустрии видеоигр, мы можем включить в данные новости, предоставляемые этим спонсируемым агентством. Однако
спонсируемое агентство склонно не афишировать плохие новости о своем
спонсоре и преувеличивать его достижения.
Смещение выборки (или сдвиг распределения) возникает, когда распределение примеров, используемых для обуче­ния, не отражает распределение входных данных, получаемых моделью на этапе эксплуатации. Такой
тип смещения часто наблюдается на практике. Пусть, например, мы разрабатываем систему, которая классифицирует документы по нескольким сотням
тем. Мы создали набор документов, в котором каждая тема представлена
одинаковым количеством документов. По завершении разработки модель
давала ошибку 5 %. Но вскоре после развертывания обнаруживается, что неправильно классифицируется примерно 30 % документов. Что же случилось?
Одна из возможных причин – смещение выборки: на одну или две час­
то встречающиеся темы может приходиться 80 % всех входов. Если модель
плохо работает для таких частых тем, то развернутая система будет давать
больше ошибок, чем ожидалось.
Смещение из-за предубеждения или стереотипов нередко наблюдается, когда данные получены из исторических источников, например книг
и фотоархивов, или из онлайновых источников типа социальных сетей, сетевых форумов и комментариев к онлайновым публикациям. Например,
при использовании фотоархива для обуче­ния модели, различающей мужчин
и женщин, может оказаться, что мужчины чаще встречаются за работой или
на улице, а женщины – внутри помещения. Модель, обученная на таких смещенных данных, может испытывать трудности при распознавании женщин
на улице или мужчин в доме.
Знаменитый пример смещения такого типа – поиск ассоциаций со словами с использованием погружений слов, обученных алгоритмом типа word2vec. Такая модель предсказывает, что king – man + woman ≈ queen1 и в то же
время что programmer – man + woman ≈ homemaker2.
1
2

Король – мужчина + женщина ≈ королева. – Прим. перев.
Программист – мужчина + женщина ≈ домохозяйка. – Прим. перев.

66  Сбор и подготовка данных
Систематическая ошибка обычно возникает, когда для измерений или
наблюдений используется какое-то устройство. В результате модель машинного обуче­ния дает неоптимальные предсказания после развертывания
в производственной среде.
Пусть, например, обучающие данные собираются с помощью камеры, настроенной так, что баланс белого дает немного желтоватый цвет. Но на этапе
эксплуатации использовалась высококачественная камера, которая «видит»
белый цвет как белый. Поскольку модель была обучена на фотографиях худшего качества, ее предсказания для высококачественных изображений будут
неоптимальны.
Не следует путать систематическую ошибку с зашумленными данными.
Шум – это результат случайного процесса, искажающего данные. При наличии достаточно большого набора данных шум перестает быть проблемой,
потому что усредняется. С другой стороны, если измерения всегда смещены
в одном направлении, то это ухудшает обучающие данные и в конечном итоге приводит к модели низкого качества.
Необъективность экспериментатора – это тенденция искать, интерпретировать, отдавать предпочтение или отбирать информацию так, что
она подтверждает априорные убеждения или предположения автора. Применительно к машинному обуче­нию необъективность экспериментатора
часто возникает, когда все примеры в наборе данных получены в результате
опроса, проведенного конкретным лицом.
Обычно опросный лист содержит несколько вопросов. Их форма может
оказать существенное влияние на ответы. Вот простейший пример: «Какой
сорт пиццы вы предпочитаете: пепперони, мясную или вегетарианскую?»
Тут нет возможности выбрать вариант, отличный от предлагаемых, или хотя
бы ответить «Другой». Или же вопрос может быть сформулирован тенденциозно. Например, вместо того чтобы спросить «Вы принимаете участие
в переработке мусора?», необъективный аналитик может задать вопрос: «Вы
уклоняетесь от переработки мусора?» В первом респондент скорее даст честный ответ, чем во втором.
Необъективность экспериментатора может также возникать, если аналитик заранее проинструктирован подкрепить определенный вывод (например, в пользу вести «бизнес как обычно»). В таком случае аналитик может
исключить некоторые переменные как ненадежные или зашумленные.
Смещение пометки возникает, когда процесс или человек, назначающий метки непомеченным примерам, необъективен. Например, если вы
просите нескольких разметчиков назначить тему документу, предварительно прочитав его, то одни разметчики прочитают документ целиком
и присвоят метки осознанно, а другие просмотрят текст «по диагонали»,
выхватят несколько ключевых фраз и выберут тему, лучше всего отражающую эти фразы. Поскольку каждый человек обращает больше внимания на
ключевые фразы из близких себе предметных областей и меньше на другие,
то метки, назначенные разметчиками, не прочитавшими текст внимательно, будут смещены.
С другой стороны, некоторые разметчики могут отдать предпочтение документам на интересные им темы. Такой разметчик будет пропускать не-

Типичные проблемы с данными  67

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

Как избежать смещения
Обычно мы не можем точно знать, какие смещения присутствуют в наборе
данных. Но даже если бы знали, избежать их – непростая задача. Главное –
быть готовым.
Полезно всегда задаваться вопросами: кто создавал данные, какие у него
были побуждения и критерии качества и, что еще важнее, как и почему создавались данные. Если данные являются результатом какого-то исследования, то поинтересуйтесь методом исследования и убедитесь, что не было
внесено никаких из вышеописанных смещений.
Смещение отбора можно предотвратить, систематически задавая вопрос
о причине выбора конкретного источника данных. Если это простота или
низкая стоимость, то отнеситесь настороженно. Вспомните пример, когда
требуется узнать, подпишется ли клиент на вашу новую услугу. Обучать модель только на данных о текущих клиентах – скорее всего, неудачная идея,
потому что существующие клиенты более лояльны к вашей торговой марке,
чем случайно выбранный потенциальный клиент. Следовательно, оценка
качества модели будет чрезмерно оптимистичной.
Смещения самоотбора полностью избежать невозможно. Обычно оно
возникает, когда данные получены в результате опроса; сам факт согласия
респондента ответить на вопросы уже является проявлением смещения самоотбора. Чем длинее опросный лист, тем меньше шансов, что респондент
будет отвечать на все вопросы сосредоточенно. Поэтому старайтесь делать
опрос покороче и предлагайте стимулы давать качественные ответы.
Заранее отбирайте респондентов, чтобы минимизировать самоотбор. Не
спрашивайте предпринимателей, считают ли они себя успешными. Вместо
этого составьте список на основе характеристик, почерпнутых от экспертов
или из публикаций, и обращайтесь только к лицам из этого списка.
Избежать смещения из-за отсутствующей переменной трудно, потому
что, как говорится, «чего не знаем, того не знаем». Возможный подход – использовать всю доступную информацию, т. е. включить столько признаков,
сколько возможно, даже если они кажутся ненужными. В результате вектор
признаков может получиться очень широким (имеющим много измерений)
и разреженным (значения большинства измерений нулевые). Тем не менее
если хорошо настроить регуляризацию, то модель сама «решит», какие признаки важны, а какие нет.
С другой стороны, мы можем заподозрить, что некоторая переменная важна для верности предсказаний, и если не включить ее в модель, то появится
смещение из-за отсутствующей переменной. Предположим, что получить
эти данные проблематично. Тогда попробуйте воспользоваться замещающей
переменной. Например, если мы хотим обучить модель, которая предсказывает цену подержанного автомобиля, но не можем узнать возраст автомобиля,
то можно заменить его сроком, в течение которого автомобиль принадлежал
текущему владельцу. Это будет заместитель возраста транспортного средства.

68  Сбор и подготовка данных
Смещение из-за спонсорства можно уменьшить, внимательно исследовав источник данных, особенно обращая внимание на то, почему владелец
источника хочет предоставить данные. Например, известно, что публикации о табачных изделиях и лекарствах очень часто проплачены табачными и фармацевтическими компаниями или их конкурентами. То же самое
можно сказать о новостных компаниях, особенно тех, которые зависят от
рекламных доходов или не раскрывают свою бизнес-модель.
Смещения выборки можно избежать, изучив реальную долю различных
свойств данных, наблюдаемых в производственной среде, а затем включив
в обучающий набор примеры в такой же пропорции.
Смещение из-за предубеждения или стереотипов можно контролировать. Разрабатывая модель для различения фотографий с изображением
мужчин и женщин, аналитик мог бы уменьшить долю женщин на улице или
увеличить долю мужчин в доме. Иными словами, чтобы уменьшить смещение из-за предубеждения или стереотипов, нужно предъявить алгоритму
обуче­ния более беспристрастное распределение примеров.
Систематическую ошибку можно снизить, расширив ассортимент измерительных устройств или наняв людей, умеющих сравнивать результаты
измерений или наблюдений.
Необъективности экспериментатора можно избежать, поручив нескольким людям проверить задаваемые вопросы. Спросите себя: «Испытываю ли я неловкость или скованность, отвечая на этот вопрос?» Кроме того,
несмотря на дополнительные трудности для анализа, отдавайте предпочтение открытым вопросам, а не вопросам, на которые нужно отвечать только
да или нет или выбирать ответы из готового списка. Если вы все же решите ограничить выбор ответов, то хотя бы предусмотрите вариант «Прочее»
и мес­то для формулирования респондентом своего ответа.
Смещения пометки можно избежать, попросив нескольких разметчиков
идентифицировать один и тот же пример. Спросите их, почему они решили
назначить именно такую метку примерам, помеченным по-разному. Заметив, что некоторые разметчики ссылаются на определенные ключевые фразы, а не пытаются перефразировать весь документ, вы сможете выявить тех,
кто лишь мельком просматривает, а не читает документы.
Можно также сравнить частоту документов, пропущенных разными разметчиками. Заметив, что какой-то разметчик пропускает документы чаще,
чем в среднем, поинтересуйтесь, столкнулся ли он с техническими затруднениями или просто некоторые темы ему неинтересны.
Полностью избежать смещения данных невозможно. Панацеи не сущест­
вует. Но есть общее правило – включайте в процесс человека, особенно если
от модели зависят человеческие жизни.
Помните, что аналитики данных склонны предполагать, что моделям
машинного обуче­ния внутренне присуща честность, потому что они принимают решения, опираясь на факты и математику, в отличие от зачастую
сумбурных и иррациональных человеческих суждений. Увы, не всегда дело
обстоит так; модель, обученная на смещенных данных, неизбежно будет выдавать смещенные результаты.
Гарантировать справедливость выхода – обязанность людей, обучающих
модель. Но что такое справедливость, спросите вы. И снова вынужден от-

Типичные проблемы с данными  69

ветить, что нет такого способа, который гарантированно определял бы несправедливость. Понятие справедливости модели всегда зависит от задачи,
и только человек может его определить. В разделе 7.6 главы 7 мы рассмотрим
несколько определений справедливости в машинном обуче­нии.
Вмешательство человека на всех этапах сбора и подготовки данных – лучший способ минимизировать возможный ущерб от машинного обуче­ния.

3.2.5. Низкая предсказательная способность
О проблеме низкой предсказательной способности часто задумываются
только после того, как на обуче­ние модели бесплодно потрачено много сил.
Быть может, модель никак не удается заставить работать, потому что она недостаточно выразительна? Быть может, в данных недостаточно информации
для обуче­ния? Мы не знаем.
Допустим, что наша цель – предсказать, понравится ли слушателю новая
песня на музыкальном потоковом сервисе. Данные – имя исполнителя, название песни, текст и сведения о том, находится ли песня в плейлисте слушателя. Модель, обученная на этих данных, будет далека от совершенства.
Исполнители, отсутствующие в плейлисте слушателя, вряд ли получат от
модели высокую оценку. На музыкальные предпочтения сильно влияют такие факторы, как аранжировка песни, выбор музыкальных инструментов,
звуковые эффекты, тембр голоса и тонкие изменения тональности, ритма
и темпа. Эти свойства произведения не найти ни в тексте, ни в названии,
ни в имени исполнителя; их необходимо извлечь из самого музыкального
файла.
С другой стороны, выделить эти релевантные признаки из аудиофайла
нелегко. Даже при использовании современных нейронных сетей рекомендация песен на основе их звучания считается трудной задачей для искусственного интеллекта. Обычно рекомендации составляются путем сравнения плейлистов разных слушателей и нахождения таких, которые содержат
похожие композиции.
Рассмотрим другой пример низкой предсказательной способности. Допустим, мы хотим обучить модель, которая будет предсказывать, куда направить телескоп, чтобы наблюдать какое-то интересное явление. Данные –
фотографии различных участков небосвода, где в прошлом наблюдалось
что-то необычное. Крайне маловероятно, что только на основе этих снимков
мы сможем обучить модель верно предсказывать события. Но если добавить
к ним измерения, полученные от различных датчиков, например измерения
радиосигналов из разных зон или вспышки интенсивности космических
лучей, то шансы на верные предсказания повысятся.
Ваша работа может оказаться особенно трудной, когда вы обрабатываете
набор данных впервые. Если, несмотря на усложнение модели, никак не удается получить приемлемые результаты, то пора задуматься о проблеме низкой предсказательной способности. Придумайте как можно больше дополнительных признаков (проявите изобретательность!). Рассмотрите косвенные
источники данных, которые помогли бы обогатить векторы признаков.

70  Сбор и подготовка данных

3.2.6. Устаревшие примеры
В течение некоторого времени после развертывания модель обычно работает
хорошо. Длительность этого периода зависит от моделируемого явления.
Обычно (мы будем обсуждать это в разделе 9.4) в производственной среде
развертывается какая-то процедура контроля качества модели. Если обнаружено аномальное поведение, то для корректировки модели добавляются
новые обучающие данные, после чего модель заново обучается и развертывается.
Часто ошибка объясняется конечностью обучающего набора. В таких случаях добавление обучающих примеров способно выправить ситуацию. Но
на практике нередко бывает, что модель начинает допускать ошибки из-за
смены концепта. Так называется фундаментальное изменение в статистической связи между признаками и меткой.
Допустим, что модель предсказывает, понравится ли пользователю какойто контент на сайте. Со временем предпочтения пользователя могут измениться, например потому, что он повзрослел, или потому, что открыл для
себя что-то новое (я, например, три года назад не слушал джаз, а теперь
слушаю!). Примеры, включенные в обучающие данные в прошлом, уже не
отражают его предпочтения и, вместо того чтобы улучшать качество модели,
только ухудшают его. Это и есть смена концепта. Посмотрите, не наблюдается ли в модели нисходящий тренд качества на новых данных.
Исправьте модель, удалив устаревшие примеры из обучающих данных.
Отсортируйте обучающие примеры по убыванию новизны. Определите дополнительный гиперпараметр – какой процент самых новых примеров использовать для переобуче­ния модели – и настройте его путем поиска на
сетке или какого-нибудь другого метода настройки гиперпараметров.
Смена концепта – пример более широкой проблемы, которая называется
сдвигом распределения. Мы будем рассматривать настройку гиперпарамет­
ров и другие типы смены распределения в разделах 5.6 и 6.3.

3.2.7. Выбросы
Выбросами называются примеры, не похожие на большинство примеров
в наборе данных. Что считать «непохожим», решает аналитик данных. Обычно непохожесть измеряется в терминах какой-то метрики, например евклидова расстояния.
Но на практике то, что кажется выбросом в исходном векторе признаков, может оказаться типичным примером в векторном пространстве признаков, преобразованном с помощью ядерной функции. Преобразование
пространства признаков часто выполняется явно моделью на основе ядра,
например методом опорных векторов (support vector machine – SVM), или
неявно глубокой нейронной сетью.
Поверхностные алгоритмы, например линейная или логистическая регрессия, а также некоторые ансамблевые методы, например AdaBoost, особенно
чувствительны к выбросам. SVM в одной из формулировок менее чувстви-

Типичные проблемы с данными  71

телен к выбросам: специальный штрафующий гиперпараметр регулирует
влияние неправильно классифицированных примеров (которые часто оказываются выбросами) на решающей границе. Если величина штрафа велика, то алгоритм SVM полностью исключает выбросы из рассмотрения при
построении решающей границы (воображаемой гиперплоскости, разделяющей положительные и отрицательные примеры). Если она слишком мала, то
некоторые регулярные примеры могут оказаться не по ту сторону решающей
границы, по которую нужно. Оптимальное значение этого гиперпараметра
следует искать, применяя методы настройки гиперпараметров.
Достаточно сложная нейронная сеть может обучиться вести себя поразному для каждого выброса в наборе данных, но при этом будет хорошо
работать для регулярных примеров. Это нежелательно, потому что модель
становится избыточно сложной. А чем модель сложнее, тем дольше она
обуча­ется и медленнее предсказывает, и, кроме того, хуже обобщается после развертывания.
Следует ли исключать выбросы из обучающих данных или лучше использовать алгоритмы и модели машинного обуче­ния, робастные к выбросам, –
предмет споров. Удаление примеров из набора данных считается неправильным с научной и методологической точек зрения, особенно если набор
данных мал. С другой стороны, в контексте больших данных выбросы, как
правило, не оказывают существенного влияния на модель. С практической
точки зрения, если исключение некоторых обучающих примеров приводит
к повышению качества модели на зарезервированных данных, то исключение может быть оправдано. Какие примеры считать кандидатами на исключение, решается на основе той или иной меры сходства. Современный
подход к нахождению такой меры заключается в том, чтобы построить автокодировщик и использовать ошибку реконструкции1 как меру сходства
или несходства: чем больше ошибка реконструкции для данного примера,
тем сильнее он непохож на остальной набор данных.

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

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

72  Сбор и подготовка данных
Загрязнение

Информация, доступная
в момент предсказания

Информация, недоступная
в момент предсказания

Момент предсказания

Время

Рис. 3.8  Суть просачивания данных

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

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

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

Что считать хорошими данными  73

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

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

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

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

74  Сбор и подготовка данных

3.3.6. У хороших данных согласованные метки
Хорошие данные должны иметь согласованные метки. Несогласованность
пометки может проистекать из нескольких источников:
  разные люди помечают примеры, пользуясь разными критериями. Даже
если они полагают, что используют один и тот же критерий, может случиться, что разные люди интерпретируют этот критерий по-разному1;
  определения некоторых классов со временем изменяются. В результате
возникает ситуация, когда очень похожие векторы признаков получают разные метки;
  ошибочная интерпретация мотивов пользователя. Предположим,
к примеру, что пользователь проигнорировал рекомендованную новость. Как следствие эта новость получает отрицательную метку. Но
ведь могло случиться, что пользователь проигнорировал рекомендацию просто потому, что уже знает эту историю, а не потому, что не
интересуется данной тематикой.

3.3.7. Хорошие данные достаточно велики
Хорошие данные достаточно велики, чтобы обеспечить обобщаемость. Иног­
да ничто не помогает улучшить верность модели. Не важно, сколько данных
бросать в топку алгоритма: информация, содержащаяся в данных, не обладает нужной для задачи предсказательной способностью. Но чаще можно
получить очень верную модель, если передать ей не тысячи, а миллионы или
сотни миллионов примеров. Сколько понадобится данных, невозможно сказать заранее: нужно начать работать над задачей и наблюдать за прогрессом.

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

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

Причины просачивания данных  75

3.4. Обработка данных о взаимодействии
Данные о взаимодействии – это данные, которые собираются в процессе
взаимодействия пользователей с системой, поддерживаемой моделью. Считайте, что вам повезло, если вы можете собрать хорошие данные на основе
взаимодействия пользователей с системой.
Хорошие данные о взаимодействи содержат информацию трех видов:
  контекст взаимодействия;
  действие пользователя в этом контексте;
  результат взаимодействия.
Например, предположим, что мы создаем поисковую систему, и модель ранжирует результаты поиска для каждого пользователя индивидуально. Модель
ранжирования принимает на входе список ссылок, возвращенный поисковой
системой на основе ключевых слов, заданных пользователем, и выводит другой список, в котором порядок ссылок изменен. Обычно модель ранжирования
что-то «знает» о пользователе и его предпочтениях и может переупорядочить
результаты поиска для каждого пользователя индивидуально в соответствии
с его предпочтениями. Контекстом здесь является поисковый запрос и сотни
документов, предъявленных пользователю в определенном порядке. Действие –
это переход по ссылке на конкретный документ. Результат – сколько времени
пользователь потратил на чтение документа и нажал ли после этого кнопку
«Назад». Еще одно действие – переход по ссылке «Следующая страница».
Интуитивно кажется, что ранжирование хорошее, если пользователь перешел по ссылке и достаточно долго читал страницу. Ранжирование не очень
хорошее, если пользователь перешел по ссылке и быстро вернулся обратно.
Ранжирование плохое, если пользователь перешел по ссылке «Следующая
страница». Эти данные можно использовать, чтобы улучшить алгоритм ранжирования и сделать его более персонализированным.

3.5. Причины просачивания данных
Обсудим три самые частые причины просачивания данных во время их
сбора и подготовки: 1) цель является функцией от признака; 2) признак
скрывает цель; 3) признак берется из будущего.
Страна

Население

Регион



ВВП на душу населения

ВВП

Франция

67М

Европа



38 800

2,6Т

Германия

83М

Европа



44 578

3,7Т













Китай

1386М

Азия



8802

12,2Т

Рис. 3.9  Пример целевого показателя (ВВП),
являющегося простой функцией от двух признаков:
население и ВВП на душу населения

76  Сбор и подготовка данных

3.5.1. Цель является функцией от признака
Валовой внутренний продукт (ВВП) определяется как рыночная стоимость
всех конечных товаров и услуг, произведенных в стране за определенный период. Допустим, что мы хотим предсказать ВВП страны на основе различных
атрибутов: площадь, численность населения, географический регион и т. д.
Пример таких данных приведен на рис. 3.9. Если анализ атрибутов и их связи
с ВВП проведен небрежно, то может произойти просачивание данных: на
рис. 3.9 произведение столбцов «Население» и «ВВП на душу населения» равно ВВП. Обученная модель будет идеально предсказывать ВВП, глядя только
на эти два столбца. Мы допустили, что ВВП является одним из признаков,
пусть и немного модифированным (поделенным на численность населения),
и тем самым создали загрязнение, ставшее причиной просачивания данных.
Еще более простой пример – когда копия целевого показателя уже присутствует среди признаков, только в другом формате. Допустим, что мы обуча­
ем модель, которая должна предсказывать годовую зарплату по атрибутам
работника. В роли обучающих данных выступает таблица, содержащая среди
прочего месячную и годовую зарплаты. Если вы позабудете исключить месячную зарплату из списка признаков, то одного этого атрибута будет достаточно для точного предсказания годовой зарплаты, и вы поверите, что
модель идеальная. Но стоит развернуть ее в производственной среде, как она
перестанет получать информацию о месячной зарплате работника, а иначе
зачем бы одна была нужна?

3.5.2. Признак скрывает цель
Иногда целевой показатель не является функцией от одного или нескольких
признаков, а «скрыт» в одном из признаков. Рассмотрим набор данных на
рис. 3.10.

ИД клиента

Группа

Годовые
расходы

Просмотров
страниц в год



Пол

1

М18-25

1350

11 987



М

2

Ж25-35

2365

44 578



Ж













18879

Ж65+

3653

6775

Ж

Рис. 3.10  Пример цели, скрытой в одном из признаков

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

Причины просачивания данных  77

просачивания данных, когда значение, которое мы хотим предсказывать,
«скрыто» в значении признака.
С другой стороны, если в столбце «Группа» находятся значения, предсказанные другой, возможно, менее верной моделью, то этот атрибут можно
использовать для построения более сильной модели. Эта техника называется
штабелированием моделей (model stacking), мы рассмотрим ее в разделе 6.2.

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

ИД заемщика

Группа

Образование



Напоминаний
о просроченном
платеже

Погасит
заем

1

М35-50

Школа



0

Д

2

Ж25-35

Магистр



1

Н













65723

М25-35

Магистр

3

Н

Рис. 3.11  Признак, недоступный в момент предсказания:
«Напоминаний о просроченном платеже»

Не предприняв усилий для осмысления контекста, в котором будет использоваться модель, вы, возможно, решите использовать все доступные атрибуты для предсказания значения в столбце «Погасит заем», включая и данные
из столбца «Напоминаний о просроченном платеже». Модель будет казаться
верной на этапе тестирования, и вы передадите ее клиенту, который затем
сообщит, что модель не работает в производственной среде.
Разобравшись, вы обнаруживаете, что в производственной среде атрибут
«Напоминаний о просроченном платеже» всегда равен нулю. Это и понятно,
потому что клиент пользуется вашей моделью, до того как заемщик взял кредит, так что никаких напоминаний еще не было! Но модель-то, скорее всего,
обучилась выдавать предсказание «Нет», когда количество напоминаний
больше или равно 1, и на остальные признаки обращает меньше внимания.
Вот еще один пример. Допустим, у вас имеется сайт и вы хотите ранжировать показываемые пользователю новости, так чтобы максимизировать
число переходов по ссылкам. Если в составе обучающих данных присутствуют позиционные признаки для каждой новости, показанной прежде (например, позиция x–y заголовка и блока краткого содержания на странице), то
во время показа эта информация будет недоступна, потому что до момента
ранжирования позиции новостей на странице неизвестны.

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

3.6. Разбиение данных
В разделе 1.3.3 первой главы мы говорили, что на практике при выполнении машинного обуче­ния имеется три непересекающихся набора примеров:
обучаю­щий, контрольный и тестовый.
Весь набор данных

Обучающие данные

Контрольные
данные

Тестовые
данные

Рис. 3.12  Весь набор данных разбит на три части:
обучающий, контрольный и тестовый

Обучающий набор используется алгоритмом машинного обуче­ния для
обуче­ния модели.
Контрольный набор нужен, чтобы найти оптимальные значения гиперпараметров конвейера машинного обуче­ния. Аналитик поочередно пробует
разные комбинации гиперпараметров, обучает модель с применением каждой комбинации и смотрит, какое качество она показывает на контрольном
наборе. Гиперпараметры, при которых качество максимально, используются
для обуче­ния производственной модели. Методы настройки гиперпарамет­
ров мы рассмотрим более подробно в разделе 5.6.
Тестовый набор используется для отчета: выбрав наилучшую модель,
мы тестируем ее качество на тестовом наборе и протоколируем результаты.
Контрольный и тестовый наборы часто называют зарезервированными
наборами: они содержат примеры, которые не должны предъявляться алгоритму обуче­ния.
Хорошее разбиение набора данных на три непересекающиеся части должно удовлетворять нескольким условиям.
Условие 1. Разбиение применялось к первичным данным.
Получив первичные примеры сразу, прежде чем делать что-то еще, произведите разбиение. Ниже мы увидим, как это помогает избежать просачивания данных.
Условие 2. Перед разбиением данные были рандомизированы.
Случайным образом перетасуйте примеры, затем производите разбиение.
Условие 3. Контрольный и тестовый наборы распределены одинаково.
Выбирая наилучшие значения гиперпараметров с помощью контрольного
набора, мы хотим, чтобы полученная модель хорошо работала в производственной среде. Примеры из тестового набора – типичные представители

Разбиение данных  79

производственных данных. Поэтому и нужно, чтобы распределение конт­
рольного и тестового наборов было одинаково.
Условие 4. При разбиении удалось избежать просачивания.
Просачивание данных может случиться даже во время разбиения данных.
Ниже мы увидим, какие именно формы просачивания возможны на этой
стадии.
Не существует идеального соотношения размера трех наборов. В старой
литературе (до эры больших данных) можно было встретить рекомендацию
производить разбиение в пропорции 70:15:15 или 80:10:10 (доли обучающего, контрольного и тестового наборов соответственно).
Но теперь, в эпоху интернета и дешевого труда (например, механический
турок или краудсорсинг), организации, ученые и даже энтузиасты у себя дома
могут получить доступ к миллионам обучающих примеров. Поэтому расточительно использовать для обуче­ния только 70 или 80 % доступных данных.
Контрольные и тестовые данные используются лишь для вычисления статистики, отражающей качество модели. Их размер должен быть достаточен
для получения надежной статистики – и только. Сколько это – вопрос дискуссионный. Навскидку можно предположить, что дюжина примеров на класс –
желательный минимум. Если вы можете позволить себе сотню примеров
на класс в каждом из двух зарезервированных наборов, то запас прочности
хороший, и статистика, вычисленная по таким наборам, будет надежной.
Пропорции могут также зависеть от выбранного алгоритма обуче­ния или
модели. Качество моделей глубокого обуче­ния обычно заметно улучшается,
если подать им больше обучающих данных. Для поверхностных алгоритмов
и моделей зависимость не такая прямая.
Кроме того, пропорции могут зависеть от размера набора данных. Если
набор невелик и содержит меньше тысячи примеров, то лучше использовать
90 % данных для обуче­ния. В таком случае можно не заводить отдельного
контрольного набора, а имитировать его с помощью техники перекрестной
проверки. Мы рассмотрим этот вопрос в разделе 5.6.5.
Отметим, что при разбиении на три части данных временных рядов
нужно позаботиться о сохранении порядка наблюдений в каждом примере
в процессе перемешивания. Иначе для большинства задач предсказания данные окажутся некорректными и обучить модель не получится. О временных
рядах мы будем говорить в разделе 4.2.6.

3.6.1. Просачивание во время разбиения
Как вы уже знаете, просачивание данных может произойти на любой стадии,
от сбора данных до оценивания модели. И стадия разбиения данных не исключение.
Групповое просачивание может случиться во время разбиения. Допус­
тим, имеются магнитно-резонансные изображения головного мозга нескольких пациентов. Каждое изображение помечено определенным заболеванием, а некоторые пациенты могут быть представлены несколькими
изображениями, сделанными в разное время. Если применить описанный

80  Сбор и подготовка данных
выше метод разбиения (перемешать, затем разбить), то изображения одного
пациента могут оказаться и в обучающем, и в зарезервированном наборах.
Модель могла бы обучиться на особенностях пациента, а не болезни. Модель запомнила бы, что в мозге пациента A имеется определенный рисунок
извилин, и если в обучающих данных этот пациент помечен каким-то заболеванием, то модель успешно предскажет это заболевание в контрольных
данных, опознав пациента A по одному лишь рисунку извилин.
Решением проблемы является групповое разбиение. Это значит, что все
примеры, относящиеся к одному пациенту, нужно собрать в одном наборе:
обучающем или зарезервированном. И это еще раз подтверждает, как важно
для аналитика знать о данных максимально много.

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

3.7.1. Методы подстановки данных
Чтобы подставить значение отсутствующего числового атрибута, можно,
например, взять среднее его значений в других примерах. Математически
это выглядит следующим образом. Пусть атрибут j отсутствует в некоторых
примерах исходного набора данных, а 𝒮(j) – множество размера N(j), содержащее только те примеры из исходного набора, в которых атрибут j присутствует. Тогда вместо отсутствующего атрибута j подставляется следующее
значение x̂ (j):

1

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

Обработка отсутствия атрибутов  81

где N(j) < N, а суммирование производится только по тем примерам, в которых
присутствует значение атрибута j. На рис. 3.13 показано, как работает этот
метод, когда в двух примерах (в строках 1 и 3) отсутствует значение атрибута
«Рост». В пустые ячейки подставляется среднее значение 177.
Строка

Возраст

Вес

1

18

70

Зарплата

Рост
35 000

2

43

65

3

34

87

175

26 900

4

21

66

187

94 800

5

65

60

169

19 000

76 500

ˆ
Height

Рис. 3.13  Замена отсутствующего значения
средним значением атрибута по набору данных

Еще один способ – подставить вместо отсутствующего значение, выходящее за предел обычного для данного атрибута диапазона. Например, если
атрибут принадлежит отрезку [0, 1], то вместо отсутствующего значения
можно подставить 2 или –1; если же атрибут категориальный, например
день недели, то вместо отсутствующего значения можно подставить «Неизвестно» (Unknown). Тогда алгоритм сам обучится, что делать, когда значение
атрибута отличается от нормально допустимых. Для числовых атрибутов
существует еще один способ замены – подставить среднее значение в диапазоне. Например, если диапазон значений атрибута – [−1, 1], то вместо
отсутствующего значения можно подставлять 0. Идея в том, что среднее
значение не должно существенно влиять на предсказание.
Более продвинутый метод – использовать отсутствующее значение как
целевую переменную в задаче регрессии (предполагается, что все атрибуты числовые). Остальные атрибуты [xi(1), xi(2), …, xi(j−1), xi(j+1), …, xi(D)] можно использовать для формирования вектора признаков x̂ i и положить ŷi ← x(j)i,
где j – атрибут с отсутствующим значением. После этого мы строим модель
регрессии, предсказывающую ŷ по x̂. Конечно, при построении обучающих
примеров (x̂, ŷ) используются только примеры из исходного обучающего набора, в которых значение атрибута j присутствует.
Наконец, если имеется достаточно большой набор данных и всего несколько атрибутов с отсутствующими значениями, то можно добавить синтетический бинарный индикаторный атрибут для каждого исходного атрибута
с отсутствующими значениями. Предположим, что примеры в наборе данных
D-мерные, а у атрибута в позиции j = 12 некоторые значения отсутствуют.
Тогда для каждого примера x мы добавляем в позицию j = D + 1 атрибут,
равный 1, если значение атрибута в позиции 12 отсутствует в x, и 0 в противном случае. Вместо самого отсутствующего значения можно подставить
0 или любое другое число, какое вам нравится.
В момент предсказания, если пример неполон, то следует применить
тот же метод подстановки отсутствующих значений, что при пополнении
обучаю­щих данных.

82  Сбор и подготовка данных
Перед началом работы над задачей обуче­ния нельзя сказать, какой метод
подстановки будет работать лучше. Попробуйте несколько вариантов, постройте несколько моделей и выберите из них наилучшую (для сравнения
моделей используйте контрольный набор).

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

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

3.8.1. Приращение данных для изображений
На рис. 3.14 приведены примеры операций, которые легко применить к заданному изображению для получения новых: отражение, поворот, кадрирование, замена цвета, добавление шума, изменение перспективы, изменение
контрастности и потери части информации.
Разумеется, отражение относительно оси следует производить так, чтобы
сохранился смысл изображения. Футбольный мяч можно отразить относительно обеих осей1, но изображение автомобиля или пешехода – только относительно вертикальной.
Поворачивать следует на небольшой угол, чтобы имитировать неправильную установку горизонта. Поворачивать изображение можно в обоих направлениях.
Кадрирование можно применять несколько раз к одному и тому же изобра­
жению случайным образом, сохраняя значительные части представляющих
интерес объектов в кадре.
1

Если только контекст, например трава на газоне, не делает отражение относительно горизонтальной оси бессмысленным.

Приращение данных  83

оригинал

отражение

поворот

кадрирование

замена цвета

добавление шума

изменение перспективы

изменение контрастности

потеря информации

Рис. 3.14  Примеры методов приращения данных.
Фотографировал Альфонсо Эскаланте

В случае замены цвета красная, зеленая и синяя компоненты (RGB) немного изменяются, чтобы имитировать различные условия освещения. Изменение контрастности (как уменьшение, так и увеличение) и гауссов шум
различной интенсивности также можно применять несколько раз к одному
и тому же изображению.
Путем случайного удаления частей изображения можно имитировать ситуации, когда объект можно распознать, но он не целиком виден из-за препятствия.
Еще одна популярная техника приращения данных, которая кажется противоречащей интуиции, но хорошо работает на практике, – смешивание. Как
следует из названия, смысл в том, чтобы обучать модель на смеси изобра­жений
из обучающего набора. Точнее, вместо обуче­ния модели на первичных изображениях мы берем два изображения (которые могут принадлежать одному
классу или разным) и используем для обуче­ния их линейную комбинацию:
mixup_image = t ´ image1 + (1 - t) ´ image2,
где t – вещественное число от 0 до 1. Целевым показателем для такого смешанного изображения является такая же линейная комбинация исходных
целевых показателей:
mixup_target = t ´ target1 + (1 - t) ´ target2.

84  Сбор и подготовка данных
Эксперименты1 на наборах данных ImageNet-2012, CIFAR-10 и некоторых
других показали, что смешивание улучшает обобщаемость нейросетевых
моделей. Авторы этой техники также обнаружили, что она повышает робастность к состязательным примерам и устойчивость обуче­ния порождающих состязательных сетей (generative adversarial network – GAN).
В дополнение к методам, показанным на рис. 3.14, если вы ожидаете, что
входные изображения в производственной системе будут плотно сжаты, то
можно имитировать такое сжатие, применяя некоторые часто используемые
методы сжатия с потерей информации и соответствующие файловые форматы, например JPEG или GIF.
Приращению подвергаются только обучающие данные. Конечно, не имеет
смысла генерировать все дополнительные примеры заранее и хранить их.
На практике методы приращения данных применяются к исходным данным
динамически во время обуче­ния.

3.8.2. Приращение данных для текста
С приращением текстовых данных все обстоит не так просто. Необходимо использовать методы преобразования, сохраняющие контекстуальную
и грамматическую структуры текстов на естественном языке.
Допустим, можно заменять случайные слова в предложении близкими
синонимами. Например, вот несколько предложений, эквивалентных «Машина остановилась возле торгово-развлекательного комплекса»:
Автомобиль остановился возле торгово-развлекательного комплекса.
Машина остановилась возле торгового центра.
Легковушка остановилась возле гипермаркета.
Похожая техника – использовать гиперонимы вместо синонимов. Гиперонимом называется слово с более общим значением. Например, «млекопитающее» является гиперонимом для слов «кит» и «кот»; «транспортное
средство» – для «автомобиль» и «автобус». В нашем примере можно было бы
создать такие предложения:
Транспортное средство остановилось возле торгового центра.
Машина остановилась возле здания.
Если слова или документы в наборе данных представлены с помощью погружений слов или документов, то можно применить слабый гауссов шум
к случайно выбранным признакам погружения, чтобы создать вариант того
же слова или документа. Количество подлежащих модификации признаков
1

Дополнительные сведения о технике смешивания см. в работе Zhang Hongyi, Moustapha Cisse, Yann N. Dauphin, and David Lopez-Paz. mixup: Beyond empirical risk minimization. arXiv preprint arXiv:1710.09412 (2017).

Обработка несбалансированных данных  85

и интенсивность шума можно настраивать как гиперпараметры путем оптимизации качества на контрольном наборе.
Можно поступить по-другому – для замены слова w в предложении найти
k ближайших его соседей в пространстве погружения слов и сгенерировать
k новых предложений, подставив вместо слова w соответствующего соседа.
Для поиска ближайших соседей можно применить такие метрики, как коэффициент Отиаи (косинусный коэффициент) или евклидово расстояние.
Выбор метрики и величину k можно настроить как гиперпараметры.
Современная альтернатива методу k ближайших соседей – использовать
глубокую предобученную модель, например Bidirectional Encoder Representations from Transformers (BERT). Модели типа BERT обучаются предсказывать замаскированное слово по другим словам в предложении. С помощью
BERT можно сгенерировать k наиболее вероятных предсказаний замаскированного слова, а затем использовать их как синонимы для приращения
данных.
Аналогично в случае задачи классификации документов, когда имеется
большой корпус непомеченных и малый корпус помеченных документов,
можно поступить следующим образом. Сначала построим погружения для
всех документов в большом корпусе, для чего можно воспользоваться методом doc2vec или каким-то другим. Затем для каждого помеченного документа d в наборе данных найдем k ближайших непомеченных документов
в пространстве погружения и пометим их той же меткой, что и d. Значение
k подбирается с помощью контрольных данных.
Еще одна полезная техника приращения данных – обратный перевод.
Чтобы создать новый пример англоязычного текста (предложение или документ), сначала переведем его на другой язык l, воспользовавшись системой
машинного перевода. Затем выполним обратный перевод с l на английский.
Если получившийся текст отличается от оригинального, добавим его в набор
данных, пометив той же меткой, что оригинальный.
Существуют также методы приращения данных для других типов данных,
например аудио или видео: добавление шума, сдвиг аудио или видеоролика
во времени, замедление или ускорение, изменение высоты звука в случае
аудио или цветового баланса в случае видео и т. д. Детальное описание этих
методов выходит за рамки книги. Просто имейте в виду, что приращение
можно применить к любым мультимедийным данным, а не только к изобра­
жениям или тексту.

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

86  Сбор и подготовка данных
классифицировать большинство обучающих примеров правильно. Он вынужден так делать, потому что предназначен для минимизации функции
стоимости, которая обычно назначает положительную потерю каждому неправильно классифицированному примеру. Если потеря при неправильной
классификации примеров редко встречающихся классов такая же, как для
часто встречающихся, то может случиться, что алгоритм обуче­ния сочтет
выгодным «сдаваться» на многих примерах редко встречающихся классов,
чтобы делать меньше ошибок на часто встречающихся.
Формального определения несбалансированных данных не существует,
но можно рассмотреть следующее эвристическое правило. Если классов два,
то сбалансированность означает, что каждый класс представлен половиной набора данных. Небольшая несбалансированность обычно не составляет проблемы. Так, если 60 % принадлежат одному классу, а 40 % другому
и мы используем какой-нибудь популярный алгоритм машинного обуче­ния
в стандартной формулировке, то, как правило, качество модели не должно
сильно пострадать. Но если несбалансированность классов велика, например
одному классу принадлежит 90 % примеров, а другому только 10 %, то стандартная формулировка, которая обычно назначает одинаковый вес ошибкам
на примерах обоих классов, может оказаться неэффективной, так что потребуется ее модифицировать.

3.9.1. Выборка с избытком
Чтобы сгладить проблему несбалансированности классов, часто применяют технику выборки с избытком (oversampling). Если сделать несколько
копий примеров редко встречающегося класса, как показано на рис. 3.15
слева, то их вес повысится. Можно также создавать синтетические примеры – для этого выберем значения признаков из нескольких примеров
редко встречающегося класса и, комбинируя их, построим новый пример
этого класса. Есть два популярных алгоритма выборки с избытком путем
синтезирования примеров редко встречающегося класса: Synthetic Minority Oversampling Technique (SMOTE) и Adaptive Synthetic Sampling Method
(ADASYN).
Методы SMOTE и ADASYN во многих отношениях похожи. Для заданного
примера xi редко встречающегося класса оба метода выбирают k ближайших
соседей. Обозначим этот набор k примеров 𝒮k. Синтетический пример xnew
определяется как xi + l(xzi − xi), где xzi – пример редко встречающегося класса, случайно выбранный из 𝒮k. Гиперпараметр интерполяции l может быть
произвольным числом из отрезка [0, 1]. (На рис. 3.16 приведена иллюстрация
для l = 0.5.)
И SMOTE, и ADASYN случайно выбирают любой пример xi из набора данных. В ADASYN количество синтетических примеров, генерируемых для каждого xi, пропорционально числу примеров в 𝒮k, не принадлежащих редко
встречающемуся классу. Поэтому больше синтетических примеров генерируются в той области, где примеры редко встречающегося класса действительно редки.

Обработка несбалансированных данных  87

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

Оригинальные
данные

Выборка данных
с избытком

Оригинальные
данные

Выборка данных
с недостатком

Рис. 3.15  Выборка с избытком (слева) и с недостатком (справа)

Выборку с недостатком можно производить случайно, т. е. случайным образом выбирать примеры, подлежащие удалению из часто встречающегося
класса. Альтернативно можно исключать примеры, обладающие определенным свойством. Одно из таких свойств называется связями Томека. Связь
Томека между примерами xi и xj, принадлежащими двум разным классам,
существует, если в наборе данных нет примера xk, расстояние от которого
до xi или xj меньше, чем расстояние между ними самими. Расстояние можно
определить, например, как коэффициент Отиаи или евклидово расстояние.
На рис. 3.17 показано, как удаление примеров из часто встречающегося
класса на основе связей Томека помогает организовать отчетливый зазор
между примерами обоих классов.
Кластерная выборка с недостатком устроена следующим образом. Решите, сколько примеров должно быть в часто встречающемся классе в результате выборки с недостатком. Обозначим это число k. Примените алгоритм
кластеризации на основе центроидов к примерам часто встречающегося
класса, задав в качестве количества кластеров k. Затем замените все примеры
мажоритарных классов k центроидами. Одним из алгоритмов кластеризации
на основе центроидов является алгоритм k ближайших соседей.

3.9.3. Гибридные стратегии
Гибридные стратегии (сочетание выборки с избытком и с недостатком) иног­
да позволяют улучшить результат. Одна из таких стратегий заключается в использовании ADASYN для выборки с избытком и связей Томека для выборки

88  Сбор и подготовка данных
с недостатком. Другая стратегия – комбинация кластерной выборки с недостатком и метода SMOTE.

3.10. Стратегии выборки данных
Если имеется большой информационный актив, так называемые большие
данные, то не всегда практически полезно и необходимо работать со всем
набором. Иногда можно произвести небольшую выборку, содержащую достаточно информации для обуче­ния.
Аналогично, когда производится выборка с недостатком из часто встречающегося класса для корректировки несбалансированности данных, уменьшенная выборка должна быть репрезентативна для всего частого класса.
В этом разделе мы обсудим несколько стратегий выборки, их свойства, преимущества и недостатки.
Существует две основные стратегии: вероятностная и невероятностная
выборка. В случае вероятностной выборки шанс быть выбранным есть
у любого примера. Такие методы подразумевают рандомизацию.
3.7
Редкий класс
Частый класс
3.6

xi

x(2)

3.5

3.4
xnew

3.3

xzi
3.2

0.2

0.3

0.4

x(1)

0.5

0.6

Рис. 3.16  Генерирование синтетических примеров
с помощью комбинации SMOTE и ADASYN
(построено модифицированным скриптом Гийома Лемэтра)

0.7

Стратегии выборки данных  89

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

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

(a) исходные данные

(b) связи Томека

(c) выборка с недостатком

Рис. 3.17  Выборка с недостатком с помощью связей Томека

Один из способов получить простую случайную выборку – сопоставить
каждому примеру число, а затем воспользоваться генератором случайных
чисел, чтобы решить, какой пример выбрать. Например, если набор данных содержит 1000 примеров, пронумерованных от 0 до 999, то для выбора
примера следует использовать группы по три цифры. Так, если первые три
цифры, возвращенные генератором случайных чисел, – 0, 5 и 7, то выбираем
пример с номером 57 и т. д.
Простота – большой плюс этого метода выборки, его легко реализовать,
потому что на любом языке программирования можно написать генератор
случайных чисел. Минус же в том, что так можно не набрать достаточно
примеров, обладающих конкретным свойством, представляющим интерес.
Например, рассмотрим ситуацию, когда выборка производится из большого
несбалансированного набора данных. При этом можно получить недостаточное количество примеров из редко встречающегося класса, а то и вообще
ни одного.

90  Сбор и подготовка данных

3.10.2. Систематическая выборка
Чтобы реализовать систематическую выборку (или интервальную выборку), мы создаем список, содержащий все примеры. Затем мы случайным
образом выбираем первыйпример xstart из первых k элементов списка. Далее
берется каждый k-й элемент списка, начиная с xstart. Значение k подбирается
так, чтобы получить выборку нужного размера.
Преимущество систематической выборки перед простой случайной выборкой заключается в том, что примеры выбираются из всего диапазона
значений. Однако систематическая выборка не годится, если список перио­
дический или содержит повторяющиеся участки. В таком случае мы получили бы смещенную выборку. Но если список примеров рандомизирован, то
систематическая выборка часто дает лучшее подмножество примеров, чем
простая случайная.

3.10.3. Стратифицированная выборка
Если мы знаем о существовании в данных нескольких групп (например, по
полу, местоположению или возрасту), то выборка должна включать примеры
из каждой группы. Применяя стратифицированную выборку, мы сначала
разбиваем набор данных на группы (называемые стратами), а затем случайным образом выбираем примеры из каждой страты, как при простой
случайной выборке. Количество примеров, выбираемых из каждой страты,
пропорционально размеру страты.
Стратифицированная выборка часто улучшает репрезентативность выборки, уменьшая смещение; в худшем случае качество результирующей выборки не хуже, чем при простой случайной выборке. Однако для определения
страт аналитик должен понимать свойства набора данных. Кроме того, бывает трудно решить, какие именно атрибуты определяют страту.
Если не понятно, как лучше определить страты, то можно воспользоваться
кластеризацией. Нужно только решить, сколько необходимо кластеров. Эта
техника полезна также для выбора непомеченных примеров, которые предполагается передать человеку для пометки. Зачастую непомеченных примеров
миллионы, а ресурсы для пометки ограничены. Выбирайте примеры тщательно, чтобы в помеченных данных были представлены все страты или кластеры.
Стратифицированная выборка – самый медленный из трех методов из-за
дополнительных затрат на работу с несколькими независимыми стратами.
Но возможность получить менее смещенную выборку часто перевешивает
недостатки.

3.11. Хранение данных
Безопасное хранение данных – страховка бизнеса организации: если вы по
какой-то причине, например из-за стихийного бедствия или человеческой

Хранение данных  91

ошибки, потеряете критически важную для бизнеса модель (содержащий
модель файл случайно стерт или перезаписан), то при наличии исходных
данных сможете построить модель заново.
Если клиенты или партнеры предоставляют конфиденциальные данные
или информацию, позволяющую установить личность (PII), то хранить их
нужно не только безопасно, но и в физически защищенном месте. Совместно
с администратором базы данных или инженерами DevOps вы можете ограничить доступ к конфиденциальным данным по имени пользователя или, если
необходимо, по IP-адресу. Доступ к реляционной базе данных может быть
также ограничен определенными строками или столбцами.
Также рекомендуется ограничить доступ только операциями чтения и добавления, а операции записи и удаления разрешать лишь отдельным пользователям.
Если данные собираются на мобильных устройствах, то, возможно, потребуется хранить их там, пока владелец устройства не подключится к сети Wi-Fi.
Эти данные, возможно, необходимо шифровать, чтобы другие приложения
не могли воспользоваться ими. После подключения к сети Wi-Fi данные
должны быть синхронизированы с безопасным сервером по криптографически стойким протоколам, например Transport Layer Security (TLS). Каждый
элемент данных на мобильном устройстве должен содержать временную
метку, позволяющую правильно синхронизироваться с данными на сервере.

3.11.1. Форматы данных
Данные для машинного обуче­ния могут храниться в разных форматах. Данные, используемые косвенно, например словари и географические справочники, можно хранить в таблице реляционной базы данных, в виде коллекции
в хранилище ключей и значений или в структурированном текстовом файле.
Аккуратные данные обычно хранятся в виде последовательности значений, разделенных запятыми (CSV-файлы) или табуляторами (TSV-файлы).
В таком случае все примеры хранятся в одном файле. Альтернативно можно
хранить каждый пример в отдельном файле формата XML (Extensible Markup
Language) или JSON (JavaScript Object Notation).
Помимо универсальных форматов, в некоторых популярных пакетах машинного обуче­ния для хранения аккуратных данных применяются и специальные форматы. Другие пакеты нередко предоставляют интерфейсы прикладного программирования (API) к одному или нескольким специальным
форматам. Чаще всего поддерживаются форматы ARFF (Attribute-Relation
File Format, применяется в пакете машинного обуче­ния Weka) и LIBSVM
(Library for Support Vector Machines), которые используются по умолчанию
в библиотеках LIBSVM и LIBLINEAR (Library for Large Linear Classification).
Данные в формате LIBSVM состоят из одного файла, содержащего все примеры. Каждая строка файла представляет помеченный вектор признаков
в следующем формате:
label index1:value1 index2:value2 ...

92  Сбор и подготовка данных
где indexX:valueY описывает значение Y признака в позиции (измерении)
X. Если значение в некоторой позиции равно нулю, то его можно опустить.
Этот формат особенно удобен для разреженных данных, состоящих из примеров, в которых значения большинства признаков нулевые.
Кроме того, в разных языках программирования имеются средства сериа­
лизации данных. Данные для конкретного пакета машинного обуче­ния
можно сохранять на жестком диске, используя объект или функцию сериализации, предоставляемую языком либо библиотекой. При необходимости данные можно десериализовать и восстановить в исходной форме. Например,
в Python имеется популярный универсальный модуль сериализации Pickle;
в R – встроенные функции saveRDS и readRDS. Другие пакеты анализа данных
могут предлагать собственные инструменты сериализации-десериализации.
В Java любой объект, реализующий интерфейс java.io.Serializable, можно
сериализовать в файл и десериализовать, когда понадобится.

3.11.2. Уровни хранения данных
Прежде чем принимать решение, как и где хранить данные, важно выбрать
подходящий уровень хранения. Хранение может быть организовано на разных уровнях абстракции: от самого низкого, файловой системы, до самого
высокого, например озера данных.
Файловая система – это самый базовый уровень хранения. Единицей
хранения на этом уровне является файл. Файл может быть текстовым или
двоичным, его версии не контролируются, его можно легко стереть или перезаписать. Файловая система может быть локальной или сетевой. Сетевая
файловая система может быть простой или распределенной.
Локальная файловая система может просто монтироваться на локальном диске и содержать все файлы, необходимые для проекта машинного
обуче­ния.
К распределенной файловой системе, например NFS (Network File System), CephFS (Ceph File System) или HDFS (Hadoop Distributed File System),
можно обращаться по сети с нескольких физических или виртуальных машин. Файлы распределенной файловой системы хранятся на нескольких машинах в сети.
Несмотря на простоту, хранение на уровне файловой системы во многих
случаях оправдано. Приведем несколько примеров.
Совместный доступ к файлам
Простота хранения на уровне файловой системы и поддержка стандартных
протоколов позволяют с минимальными усилиями организовать совместное обращение к файлам со стороны небольшой группы сотрудников.
Локальное архивирование
Хранение на уровне файловой системы – экономичный способ архивирования данных благодаря простоте и доступности горизонтально масштабируемых решений типа NAS.

Хранение данных  93

Защита данных
Хранение на уровне файловой системы можно рассматривать как решение, обеспечивающее физическую защиту данных благодаря встроенным
механизмам избыточности и репликации.
Параллельный доступ к данным в файловой системе работает быстро для
чтения, но медленно для записи, поэтому такой уровень хранения подходит
для сравнительно небольших коллективов и данных.
Хранилище объектов – это интерфейс прикладного программирования (API), определенный поверх файловой системы. С помощью API мы
можем программно выполнять такие операции над файлами, как GET, PUT
и DELETE, не задумываясь о том, где на самом деле хранятся файлы. API
обычно предоставляется службой API, расположенной в сети и доступной
по протоколу HTTP или в более общем случае TCP/IP либо иному набору
протоколов.
Единицей хранения в хранилище объектов является объект. Объекты
обычно двоичные: изображения, звуковые или видеофайлы и другие элементы данных в определенном формате. Такие механизмы, как учет версий
и избыточности, могут быть встроены в службу API. Доступ к данным в хранилище объектов часто можно выполнять параллельно, но не так быстро, как
на уровне файловой системы.
Канонические примеры хранилищ объектов – Amazon S3 и Google Cloud
Storage (GCS). Альтернативная платформа хранения Ceph реализует хранилище объектов в одном распределенном компьютерном кластере и предоставляет интерфейсы уровня объектов и файловой системы.
Уровень базы данных позволяет организовать постоянное, быстрое
и масштабируемое хранилище структурированных данных с быстрым параллельным доступом для чтения и записи.
В современной системе управления базами данных (СУБД, англ. DBMS)
данные хранятся в оперативной памяти, но программное обеспечение гарантирует постоянное хранение данных (и журнала операций с данными )
на диске, так что они никогда не теряются.
Единицей хранения данных на этом уровне является строка. У строки есть
уникальный идентификатор, а значения хранятся в столбцах. В реляционной
базе данных строки организованы в виде таблиц. Строки могут ссылаться на
другие строки в той же или другой таблице.
Базы данных не очень хорошо приспособлены для хранения двоичных данных, хотя сравнительно небольшие объекты иногда можно хранить в столбце
в форме BLOB-объекта (Binary Large OBject – большой двоичный объект).
BLOB представляет собой коллекцию двоичных данных, хранящуюся как
единое целое. Однако чаще в строках хранятся ссылки на двоичные объекты,
находящиеся где-то в другом месте – в файловой системе или в хранилище
объектов.
Четыре самые популярные СУБД промышленного уровня – Oracle, MySQL,
Microsoft SQL Server и PostgresSQL. Все они поддерживают SQL (Structured
Query Language – структурированный язык запросов), интерфейс для доступа

94  Сбор и подготовка данных
и модификации данных, хранящихся в базе, а также для создания, изменения
и удаления самих баз данных1.
Озеро данных – это репозиторий данных в естественном, или первичном, формате, обычно в виде BLOB-объектов или файлов. Типичное озеро
данных представляет собой неструктурированный агрегат данных из разных
источников, включая базы данных, журналы или промежуточные данные,
полученные в результате сложных преобразований оригинальных данных.
Данные, в т. ч. структурированные, хранятся в озере в своем естественном
формате. Для чтения данных из озера аналитик должен написать программу,
которая читает и разбирает файл или BLOB. Подход, предполагающий написание скрипта разбора файла или BLOB’а, называется схемой при чтении,
в отличие от схемы при записи, как в СУБД. В СУБД схема данных определяется заранее и при каждой операции записи СУБД проверяет, что данные
соответствуют схеме.

3.11.3. Версионирование данных
Если данные хранятся и обновляются в нескольких местах, то может возникнуть необходимость в учете версий. Версионирование необходимо также,
если модель часто обновляется в результате сбора дополнительных данных,
особенно автоматизированного. Так бывает, например, при разработке системы для беспилотных автомобилей, обнаружения спама или персонализированных рекомендаций. Новые данные поступают от водителя автомобиля,
от пользователя, вычищающего свою электронную почту, или в результате
недавнего просмотра видео.
Иногда после обновления модель начинает вести себя хуже и требуется
разобраться в причинах, переключаясь с одной версии данных на другую.
Версионирование данных также необходимо при обуче­нии с учителем, когда
данные помечают несколько человек. Некоторые разметчики назначают совершенно разные метки похожим примерам, что обычно снижает качество
модели. Желательно хранить примеры, аннотированные разными разметчиками, раздельно и объединять их только при построении модели. Тщательный анализ качества модели может показать, что разметчики поставили
плохие или несогласованные метки. Такие примеры нужно исключить из
обучающих данных или разметить заново, и версионирование помогает сделать это с минимальными усилиями.
Версионирование данных можно реализовать на нескольких уровнях
сложности, от самого элементарного до самого «навороченного».
Уровень 0: версионирование отсутствует
На этом уровне данные могут находиться в локальной файловой системе,
в хранилище объектов или в базе данных. Преимущество неверсионированных данных – скорость и простота работы. Но это преимущество ни1

В SQL Server используется проприетарный диалект Transact SQL (T-SQL), а в Oracle – Procedural Language SQL (PL/SQL).

Хранение данных  95

велируется потенциальными проблемами, которые могут возникнуть при
работе с моделью. Скорее всего, первой проблемой станет невозможность
версионированного развертывания. В главе 8 мы будем говорить о том,
что развертывание модели должно быть версионированным. Развернутая
модель машинного обуче­ния – это комбинация кода и данных. Если код
версионирован, то и данные должны быть такими же. В противном случае
развертывание будет неверсионированным.
А если развертывание не версионировано, то мы не сможем вернуться
к прежнему уровню качества в случае возникновения проблем с моделью.
Поэтому отказываться от версионирования данных не рекомендуется.
Уровень 1: версия данных – моментальный снимок на этапе обуче­ния
На этом уровне данные версионируются путем сохранения на этапе обуче­
ния моментального снимка всего, что необходимо для обуче­ния модели.
Такой подход позволяет версионировать развернутые модели и восстанавливать предыдущее качество. Следует вести учет всех версий в каком-нибудь документе, например таблице Excel. В этом документе должны быть
описаны местоположение снимка кода и данных, значения гиперпарамет­
ров и другие метаданные, нужные для воспроизведения эксперимента при
необходимости. Если моделей немного и обновляются они не слишком
часто, то такой уровень версионирования может оказаться приемлемым.
В противном случае он не рекомендуется.
Уровень 2: данные и код версионируются совместно
На этом уровне информационные активы умеренного размера – словари,
географические справочники и небольшие наборы данных – хранятся совместно с кодом в системе управления версиями, например Git или Mercurial. Большие файлы размещаются в хранилище объектов, например
S3 или GCS, и снабжаются уникальными идентификаторами. Обучающие
данные хранятся в стандартном формате, например JSON, XML или еще
каком-то, и включают релевантные метаданные, например метки, идентификатор разметчика, время разметки, инструмент разметки и т. д.
Инструменты типа Git Large File Storage (LFS) автоматически заменяют большие файлы, например звуковые дорожки, видео, большие наборы
данных и графику, текстовые указатели, а содержимое файлов хранят на
удаленном сервере.
Версия набора данных определяется git-сигнатурами файла кода и данных. Также полезно добавить временную метку, чтобы упростить идентификацию конкретной версии.
Уровень 3: использование или создание специализированного
решения по версионированию данных
Такие системы контроля версий, как DVC и Pachyderm, предлагают дополнительные инструменты версионирования данных. Обычно они умеют
взаимодействовать с системами контроля версий кода типа Git.
Версионирование уровня 2 рекомендуется для большинства проектов.
Если вы полагаете, что для ваших нужд уровня 2 недостаточно, изучите ре-

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

3.11.4. Документация и метаданные
Во время активной работы над проектом машинного обуче­ния мы обычно
помним важные сведения, относящиеся к данным. Но после сдачи проекта
в эксплуатацию мы переключаемся на другой проект, и эта информация постепенно забывается.
Прежде чем заняться другим проектом, позаботьтесь о том, чтобы другие
люди могли разобраться в ваших данных и правильно использовать их.
Если данные не требуют специальных пояснений, можете не документировать их. Но вообще редко бывает так, чтобы человек, не создававший набор
данных, мог легко разобраться в нем и понять, как его использовать, просто
глядя на данные.
Документация должна сопровождать любые информационные активы,
использованные при обуче­нии модели. В документации должны быть отражены следующие детали:
  что означают данные;
  как они собирались или какими методами создавались (инструкции
для разметчиков и способы контроля качества);
  как производилось разбиение на обучающий, контрольный и тестовый
наборы;
  подробное описание всех шагов предобработки;
  по каким причинам данные исключались;
  какой формат используется для хранения данных;
  типы атрибутов или признаков (какие значения может принимать каждый атрибут или признак);
  количество примеров;
  возможные значения меток или допустимый диапазон числового целевого показателя.

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

Дополнительные рекомендации по работе с данными  97

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

3.12. Дополнительные рекомендации
по работе с данными
В заключение этой главы рассмотрим еще две рекомендации: воспроизводимость и принцип «сначала данные, потом алгоритм».

3.12.1. Воспроизводимость
Воспроизводимость должна учитываться со всей серьезностью, что бы
вы ни делали, включая сбор и подготовку данных. Избегайте преобразования данных вручную, а также использования мощных средств, встроенных
в текс­товые редакторы и командные оболочки, как то: регулярные выражения, написанные «по случаю» команды awk или sed, конвейеры команд.
Обычно операции сбора и преобразования данных состоят из нескольких
этапов. Сюда входит загрузка данных из веба или баз данных, замена многословных выражений уникальными токенами, удаление стоп-слов и шума,
кадрирование и повышение резкости изображений, подстановка отсутствующих значений и т. д. Каждый этап процесса должен быть реализован в виде
программного скрипта, например на языке Python или R, имеющего входные
параметры и результат на выходе. Если ваша работа организована именно
так, то вы сможете отследить любые изменения в данных. Если на какомто этапе с данными случится неприятность, вы всегда сможете исправить
скрипт и запустить весь конвейер обработки сначала.
С другой стороны, ручное вмешательство воспроизвести трудно. Такие
действия бывает нелегко применить к обновленным данным или масштабировать на гораздо большие объемы данных (когда у вас появится возможность получить больше данных или другой набор данных).

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

98  Сбор и подготовка данных

3.13. Резюме
Прежде чем приступить к сбору данных, ответьте на пять вопросов: являются
ли данные, с которыми вы собираетесь работать, доступными, объемными,
пригодными для использования, понятными и надежными.
Типичные проблемы с данными – высокая стоимость, смещение, низкая
предсказательная способность, устаревшие примеры и просачивание.
Хорошие данные содержат достаточно информации, которую можно использовать для моделирования, в полной мере покрывают все, что вы хотите
делать с моделью, и отражают реальные входы, которые модель будет получать в производственном режиме. Они являются настолько несмещенными,
насколько это возможно, и не являются результатом самой модели, имеют
согласованные метки и достаточно велики для обобщаемости модели.
Хорошие данные о взаимодействии с пользователем содержат информацию о трех аспектах: контекст взаимодействия, действие пользователя
в этом контексте и результат взаимодействия.
Для получения хорошего разбиения всего набора данных на обучающий,
контрольный и тестовый наборы процесс разбиения должен удовлетворять
нескольким условиям: 1) данные были рандомизированы до разбиения;
2) разбиение применялось к первичным данным; 3) распределение данных
в контрольном и тестовом наборах одинаково; 4) было предотвращено просачивание.
Методы подстановки данных можно использовать для обработки отсутствия некоторых атрибутов.
Методы приращения данных часто используются для получения новых
помеченных примеров без дополнительной ручной разметки. Эти методы
обычно применяются к изображениям, но могут также применяться к тексту
и другим типам данных, связанных с восприятием.
Несбалансированность классов может оказать существенное влияние на
качество модели. Алгоритмы обуче­ния работают неоптимально, если обучаю­
щие данные не сбалансированы. Такие методы, как выборка с избытком
и с недостатком, помогают решить проблему несбалансированности классов.
Имея дело с большими данными, не всегда разумно и необходимо обрабатывать весь набор данных. Вместо этого произведите сравнительно небольшую выборку данных, содержащую достаточно информации для обуче­ния.
Можно использовать разные стратегии выборки, в т. ч. простую случайную
выборку, систематическую выборку, стратифицированную выборку и клас­
терную выборку.
Данные можно хранить в разных форматах и на разных уровнях. Версионирование данных – обязательный элемент обуче­ния с учителем, если разметка производится несколькими людьми. Разные разметчики могут ставить
метки разного качества, поэтому важно следить за тем, кто какой помеченный пример создал. Версионирование данных можно реализовать поразному: от самого простого до самого «навороченного» способа; вообще не
контролировать версии (уровень 0), версия данных – моментальный снимок
на этапе обуче­ния (уровень 1), версионировать в виде одного актива, содер-

Резюме  99

жащего данные и код (уровень 2), использовать или создать самостоятельно
специализированное решение для версионирования данных (уровень 3).
Для большинства проектов рекомендуется уровень 2.
Любой информационный актив, использованный при обуче­нии модели,
должен быть документирован. В документации должны быть отражены следующие детали: что означают данные, как они были собраны или как создавались (инструкции для разметчиков и методы контроля качества), детали
разбиения на обучающий, контрольный и тестовый наборы и всех шагов
предобработки. Обязательно должны быть включены следующие пояснения:
какие данные были исключены, в каком формате хранятся данные, типы
атрибутов или признаков, количество примеров и возможные значения меток или допустимые диапазоны числовых целевых показателей.
Для каждого конфиденциального информационного актива в документе
о жизненном цикле данных должен быть описан актив и круг лиц, имеющих
к нему доступ во время работы над проектом и после ее завершения.

Глава

4
Конструирование
признаков

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

Деловая
задача

Определение
цели

Сбор
и подготовка
данных

Конструи­
рование
признаков

Обучение
модели

Оценивание
модели

Сопро­вождение
модели

Мониторинг
модели

Обслуживание
запросов
к модели

Развер­тывание
модели

Рис. 4.1  Жизненный цикл проекта машинного обуче­ния

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

4.1. Зачем конструировать признаки
Для конкретики рассмотрим задачу распознавания названий кинофильмов
в твитах. Допустим, что имеется обширная коллекция названий фильмов;

Как конструируются признаки  101

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

Рис. 4.2  Твит от Кайла

Наш индекс названий фильмов поможет найти следующие соответствия:
«avatar», «the terminator», «It» и «her». Это дает нам четыре непомеченных
примера. Мы можем пометить их: {(avatar, False), (the terminator, True), (It,
False), (her, False)}. Однако алгоритм машинного обуче­ния не сможет ничему обучиться на одних лишь названиях фильмов (как, впрочем, не смог бы
и человек), необходим контекст. Допустим, что пять предшествующих и пять
последующих слов образуют достаточно информативный контекст. В терминологии машинного обуче­ния такой контекст называется «10-словным
окном» вокруг найденной строки. Ширину окна можно считать гиперпараметром и настроить.
Итак, примерами являются помеченные соответствия в контексте. Однако
к таким данным алгоритм обуче­ния неприменим. Алгоритмы обуче­ния применимы только к векторам признаков. Тут-то и наступает черед конструирования признаков.

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

Построить индекс для быстрого поиска строк можно, например, с помощью алгоритма Ахо–Корасик.

102  Конструирование признаков
проявить еще больше изобретательности, чтобы преобразовать последовательности строк в числовые векторы.

4.2.1. Конструирование признаков для текста
При обработке текста ученые и инженеры часто применяют простые приемы
конструирования признаков. Два из них называются унитарным кодированием и мешком слов.
В общем случае унитарное кодирование преобразует категориальный
атрибут в несколько бинарных. Допустим, что в наборе данных имеется атрибут «Color» (Цвет), принимающий значения «red», «yellow» и «green». Преобразуем каждое значение в трехмерный бинарный вектор:
red = [1, 0, 0];
yellow = [0, 1, 0];
green = [0, 0, 1].
В электронной таблице вместо одного столбца «Color» мы заведем три
синтетических столбца со значениями 1 или 0. Преимущество в том, что
категориальные атрибуты поддерживают лишь очень немногие алгоритмы
машинного обуче­ния, а теперь в нашем распоряжении гораздо более широкий спектр алгоритмов.
Мешок слов – это обобщение техники унитарного кодирования на текстовые данные. Вместо того чтобы представлять бинарным вектором один
атрибут, мы воспользуемся этой техникой для представления всего текстового документа в виде бинарного вектора. Посмотрим, как это работает.
Рассмотрим набор из шести текстовых документов:
Документ 1

Love, love is a verb

Документ 2

Love is a doing word

Документ 3

Feathers on my breath

Документ 4

Gentle impulsion

Документ 5

Shakes me, makes me lighter

Документ 6

Feathers on my breath

Рис. 4.3  Набор из шести документов

Предположим, что задача заключается в построении классификатора текста по теме. Алгоритм обуче­ния классификатора ожидает, что на вход будут
поданы помеченные векторы признаков, поэтому нужно преобразовать набор текстовых документов в набор векторов признаков. Именно для этого
и предназначен мешок слов.
Прежде всего текст подвергается лексемизации. Лексемизация – это процедура разбиения текста на фрагменты, называемые «лексемами». Лексемизатором называется программа, которая принимает на входе строку и воз-

Как конструируются признаки  103

вращает последовательность извлеченных из нее лексем. Чаще всего лексемы
представляют собой слова, но это необязательно. Лексемой может быть знак
препинания, слово, а иногда словосочетание, например название компании
(McDonald’s) или места (Красная площадь). Мы будем использовать лексемизатор, который извлекает слова и игнорирует все остальное. Тогда получится
следующий набор:
Документ 1

[Love, love, is a verb]

Документ 2

[Love, is, a, doing, word]

Документ 3

[Feathers, on, my, breath]

Документ 4

[Gentle, impulsion]

Документ 5

[Shakes, me, makes, me lighter]

Документ 6

[Feathers, on, my, breath]

Рис. 4.4  Набор лексемизированных документов

Следующий шаг – построение словаря. Он содержит 16 лексем1:
a
gentle
love
on

breath
impulsion
makes
shakes

doing
is
me
verb

feathers
lighter
my
word

a

breath

doing

feathers

gentle

impulsion

is

lighter

love

makes

me

my

on

shakes

verb

word

Теперь каким-то образом упорядочим этот словарь и назначим уникальный индекс каждой лексеме. Я решил упорядочить по алфавиту.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

Рис. 4.5  Упорядоченные и проиндексированные лексемы

У каждой лексемы в словаре имеется уникальный индекс – число от 1 до
16. Преобразуем этот набор в набор бинарных векторов признаков, как показано ниже на рис. 4.6.
Наличие 1 в некоторой позиции означает, что соответствующая лексема
встречается в тексте. В противном случае в этой позиции вектора находится 0.
Например, документ 1 «Love, love is a verb» представлен таким вектором
признаков:
[1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0]
1

Я решил игнорировать прописные буквы, но вообще-то аналитик может рассмат­
ривать лексемы «Love» и «love» как два разных словарных слова.

word

104  Конструирование признаков

a



1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

Документ 1

1

0

0

0

0

0

1

0

1

0

0

0

0

0

1

0

Документ 2

1

0

1

0

0

0

1

0

1

0

0

0

0

0

0

1

Документ 3

0

1

0

1

0

0

0

0

0

0

0

1

1

0

0

0

Документ 4

0

0

0

0

1

1

0

0

0

0

0

0

0

0

0

0

Документ 5

0

0

0

0

0

0

0

1

0

1

1

0

0

1

0

0

Документ 6

0

1

0

1

0

0

0

0

0

0

0

1

1

0

0

0

Рис. 4.6  Векторы признаков

Будем использовать соответствующие помеченные векторы признаков
как обучающие данные, с которыми может работать любой алгоритм классификации.
Есть несколько разновидностей мешка слов. Описанная выше модель бинарных значений зачастую дает хорошие результаты. Но у бинарных значений есть альтернативы: 1) счетчики лексем, 2) частоты лексем, 3) TF-IDF
(частота терма – обратная частота документа). Если использовать счетчики
лексем, то значением признака для лексемы «love» в документе 1 «Love, love
is a verb» будет 2 – столько раз она встречается в этом документе. Если использовать частоты лексем, то значением для «love» будет 2/5 = 0.4 в предположении, что лексемизатор выделил две лексемы «love», а всего в документе 1
пять лексем. Значение TF-IDF пропорционально частоте слова в документе
и обратно пропорционально количеству документов в корпусе, содержащих
это слово. Для некоторых слов оно корректируется, например для предлогов
и местоимений, которые, вообще говоря, встречаются часто. Я не буду вдаваться в детали TF-IDF, а порекомендую интересующимся читателям найти
дополнительную информацию в интернете.
Прямолинейное обобщение мешка слов – мешок n-грамм. n-граммой
называется последовательность n слов в корпусе. Если n = 2 и знаки препинания игнорируются, то в тексте «No, I am your father» присутствуют следую­
щие 2-граммы (обычно они называются биграммами): [«No I», «I am», «am
your», «your father»]. А вот полный список триграмм: [«No I am», «I am your»,
«am your father»]. Объединяя все n-граммы вплоть до некоторого n вместе
с лексемами в одном словаре, мы получаем мешок n-грамм, который можно
лексемизировать так же, как мы поступали в модели мешка слов.
Поскольку последовательности слов обычно встречаются реже, чем отдельные слова, использование n-грамм приводит к созданию более разреженного вектора признаков. В то же время n-граммы позволяют алгоритму
машинного обуче­ния обучить модель, учитывающую больше нюансов. Например, выражения «this movie was not good and boring» (этот фильм был
нехорошим и скучным) и «this movie was good and not boring» (этот фильм
был хорошим и нескучным) имеют противоположный смысл, но мешок слов
для них одинаков, поскольку состоит только из самих слов. Если же рассмат­
ривать биграммы слов, то векторы биграмм в мешке слов будут различны.

Как конструируются признаки  105

4.2.2. Почему мешок слов работает
Векторы признаков работают только при соблюдении определенных правил.
Одно из них – признак в позиции j вектора признаков должен представлять
одно и то же свойство для всех примеров в наборе данных. Если для какогото человека в наборе данных признак представляет рост в сантиметрах,
то и для всех остальных примеров это утверждение должно быть верным.
Признак в позиции j должен всегда представлять рост в сантиметрах и ничто иное.
Метод мешка слов удовлетворяет этому условию. Каждый признак представляет одно и то же свойство документа: присутствует некая лексема в документе или отсутствует.
Другое правило требует, чтобы похожие векторы признаков представляли
похожие сущности в наборе данных. Это правило также выполняется для
мешка слов. У двух одинаковых документов будут одинаковые векторы признаков. Аналогично для двух текстов на одну и ту же тему векторы признаков
с большой вероятностью будут похожи, потому что в них больше общих слов,
чем в документах на разные темы.

4.2.3. Преобразование категориальных признаков
в числа
Унитарное кодирование – не единственный способ преобразовать категориальные признаки в числа и не всегда наилучший.
Другой метод – кодирование средним, называемое также подсчетом интервалов или калибровкой признаков. Сначала по всем примерам, в которых признак имеет значение z, вычисляется выборочное среднее меток. Затем каждое значение z категориального признака заменяется этим средним.
Преимущество этого метода в том, что размерность данных не увеличивается
и, по построению, числовое значение несет некоторую информацию о метке.
Если мы решаем задачу бинарной классификации, то в дополнение к выборочному среднему можно использовать другие полезные величины: сами
счетчики положительного класса для данного значения z, отношение шансов и логарифм отношения шансов. Отношение шансов (odds ratio – OR)
обычно определяется для двух случайных величин. В общем случае OR – это
статистика, которая количественно выражает силу связи между двумя событиями A и B. Два события считаются независимыми, если OR равно 1, т. е.
шансы одного события одинаковы вне зависимости от того, произошло или
не произошло другое событие.
Что касается количественного выражения категориального признака, мы
можем вычислить отношение шансов между значением z категориального
признака (событие A) и положительной меткой (событие B). Проиллюстрируем на примере. Пусть требуется предсказать, является почтовое сообщение
спамом или нет. Предположим, что имеется размеченный набор почтовых
сообщений, и мы сконструировали признак, содержащий самое частое слово

106  Конструирование признаков
в каждом сообщении. Найдем числовое значение, которое могло бы заменить
категориальное значение «infected» этого признака. Сначала построим таб­
лицу сопряженности слова «infected» и метки «spam»:
Спам

Не спам

Всего

Содержит «infected»

145

8

153

Не содержит «infected»

346

2909

3255

Всего

491

2917

3408

Рис. 4.7  Таблица сопряженности для «infected» и «spam»

Отношение шансов «infected» и «spam» равно
odds ratio(infected, spam) =

145/8
= 152.4.
346/2909

Как видим, в зависимости от значений в таблице сопряженности отношение шансов может быть как очень малым (близким к нулю), так и очень
большим (сколь угодно большим положительным числом). Чтобы избежать численного переполнения, часто применяется логарифм отношения
шансов:
log odds ratio(infected, spam) = log(145/8)− log(346/2909)
= log(145) − log(8) − log(346) + log(2909) = 2.2.
Теперь можно заменить значение «infected» в рассматриваемом категориальном признаке числом 2.2. Точно так же можно поступить для других
значений категориального признака, преобразовав их в логарифм отношения шансов.
Иногда категориальные признаки упорядочены, но не являются циклическими. Примерами могут служить школьные отметки (от «A» до «E») и уровни квалификации («младший», «средний», «старший»). Вместо унитарного
кодирования удобно представлять их осмысленными числами. Например,
можно взять равноотстоящие числа в диапазоне [0, 1]: 1/3 для «младший»,
2/3 для «средний» и 1 для «старший». Если расстояния между значениями
не должны быть равны, это можно отразить в выборе отношений. Так, если
«старший» должно отстоять от «средний» дальше, чем «средний» отстоит от
«младший», то можно было бы представить эти уровни числами 1/5, 2/5 и 1.
Поэтому так важно разбираться в предметной области.
Если категориальные признаки циклические, то кодирование целыми числами не годится. Например, попробуем преобразовать дни недели от понедельника до воскресенья числами от 1 до 7. Тогда разность между субботой
и воскресеньем равна 1, а между воскресеньем и понедельником –6. Однако
было бы естественно предположить, что разность должна быть одинаковой
и равной 1, потому что понедельник следует сразу за воскресеньем.
Вместо этого воспользуемся синусно-косинусным преобразованием.
Оно преобразует циклический признак в два синтетических. Обозначим p

Как конструируются признаки  107

целочисленное значение нашего циклического признака. Заменим p двумя
значениями:

В таблице ниже приведены значения psin и pcos для всех семи дней недели:
p
1
2
3
4
5
6
7

psin
0.78
0.97
0.43
−0.43
−0.97
−0.78
0

pcos
0.62
−0.22
−0.9
−0.9
−0.22
0.62
1

На рис. 4.8 показана диаграмма рассеяния для этой таблицы. Видна циклическая природа обоих новых признаков.
1.0

pcos

0.5

0.0

–0.5

–1.0

–1.0

–0.5

0.0
psin

0.5

1.0

Рис. 4.8  Признак, представляющий дни недели,
после синусно-косинусного преобразования

Теперь в аккуратных данных заменим «понедельник» двумя значениями
[0.78, 0.62], «вторник» – [0.97,−0.22] и т. д. В набор данных добавилось одно
измерение, но прогностическое качество модели значительно улучшилось
по сравнению с целочисленным кодированием.

108  Конструирование признаков

4.2.4. Хеширование признаков
Хеширование признаков позволяет преобразовать текстовые данные или
категориальные атрибуты, принимающие много значений, в вектор признаков произвольной размерности. У унитарного кодирования и мешка
слов есть недостаток: если уникальных значений много, то векторы признаков будут иметь высокую размерность. Например, если в коллекции текстовых документов имеется миллион уникальных лексем, то модель мешка
слов породит векторы признаков размерности миллион. Работа с данными
такой большой размерности обходится очень дорого в вычислительном
плане.
Чтобы не запутаться в данных, хеширование можно применять следующим образом. Сначала решите, какой должна быть размерность векторов
признаков. Затем с помощью функции хеширования преобразуйте все значения категориального атрибута (или все лексемы в коллекции документов)
в числа, которые станут индексами векторов признаков. Эта процедура показана на рис. 4.9.

Значение 1
Признак 1

Значение 2

Признак 2
Значение 3

Признак 3
Признак 4

Значение K – 1

Признак 5

Значение K

Исходные значения

Функция хеширования

Признаки

Рис. 4.9  Хеширование признаков для получения желаемой размерности 5,
когда первоначально атрибут имеет K значений

Проиллюстрируем, как это работает, на примере преобразования текста
«Love is a doing word» в вектор признаков. Пусть имеется функция хеширования h, которая принимает на входе строку и выводит неотрицательное
целое число. Будем считать, что желаемая размерность равна 5. Применив
функцию хеширования к каждому слову и взяв остаток от деления результата
на 5 в качестве индекса слова, получим:

Как конструируются признаки  109

h(love) mod 5 = 0
h(is) mod 5 = 3
h(a) mod 5 = 1
h(doing) mod 5 = 3
h(word) mod 5 =4
Теперь построим вектор признаков:
[1, 1, 0, 2, 1].
Действительно, h(love) mod 5 = 0 означает, что по измерению 0 вектора
признаков имеется одно слово; h(is) mod 5 = 3 и h(doing) mod 5 = 3 – что по
измерению 3 имеется два слова и т. д. Как легко видеть, между словами «is»
и «doing» имеется коллизия: оба представлены измерением 3. Чем меньше
желаемая размерность, тем больше шансы получить коллизию. Это компромисс между скоростью и качеством обуче­ния.
Для хеширования часто используются функции MurmurHash3, Jenkins,
CityHash и MD5.

4.2.5. Тематическое моделирование
Тематическое моделирование – это семейство методов, в которых используются непомеченные данные, обычно в форме текстовых документов на
естественном языке. Модель обучается представлять документ в виде вектора тем. Например, в коллекции новостей первые пять тем – «спорт», «политика», «развлечения», «финансы» и «технологии». Поэтому каждый документ
можно было бы представить пятимерным вектором признаков, по одному
измерению на тему:
[0.04, 0.5, 0.1, 0.3, 0.06]
Этот конкретный вектор представляет документ, отнесенный к двум главным темам: политика (с весом 0.5) и финансы (с весом 0.3). Алгоритмы тематического моделирования, в частности латентный семантический анализ (Latent Semantic Analysis – LSA) и латентное распределение Дирихле
(Latent Dirichlet Allocation – LDA), обучаются путем анализа непомеченных
документов. Эти два алгоритма порождают похожие выходы, но основаны на разных математических моделях. В LSA используется сингулярное
разложение (singular value decomposition – SVD) матрицы соответствия
слов и документов (которая строится с помощью мешка слов или TF-IDF),
а в LDA – иерархическая байесовская модель, в которой каждый документ
является смесью нескольких тем, а присутствие каждого слова объясняется
одной из тем.
Проиллюстрируем, как это работает. Ниже приведен код LSA на Python:
1
2
3

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.decomposition import TruncatedSVD

110  Конструирование признаков
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

class LSA():
def __init__(self, docs):
# Преобразовать документ в векторы TF-IDF
self.TF_IDF = TfidfVectorizer()
self.TF_IDF.fit(docs)
vectors = self.TF_IDF.transform(docs)
# Построить тематическую модель LSA
self.LSA_model = TruncatedSVD(n_components=50)
self.LSA_model.fit(vectors)
return
def get_features(self, new_docs):
# Получить тематические признаки для новых документов
new_vectors = self.TF_IDF.transform(new_docs)
return self.LSA_model.transform(new_vectors)
# Позже, на этапе эксплуатации, создать экземпляр модели LSA
docs = [“This is a text.”, “This another one.”]
LSA_featurizer = LSA(docs)
# Получить тематические признаки для new_docs
new_docs = [“This is a third text.”, “This is a fourth one.”]
LSA_features = LSA_featurizer.get_features(new_docs)

Соответствующий код1 на R показан ниже:
1 library(tm)
2 library(lsa)
3
4 get_features