Книга Роман с Data Science. Как монетизировать большие данные, страница 42. Автор книги Роман Зыков

Разделитель для чтения книг в онлайн библиотеке

Онлайн книга «Роман с Data Science. Как монетизировать большие данные»

Cтраница 42

Заменит ли AI людей? Думаю, что да. И это сделает бизнес. Сам по себе бизнес подчиняется жадным алгоритмам: если есть возможность сэкономить – это будет сделано. Когда-то с целью экономии многие западные компании начали размещать производства в Юго-Восточной Азии, где труд рабочих стоил намного дешевле. С внедрением роботизации число рабочих на единицу продукции уменьшается, логистические расходы в какой-то момент становятся выше трудовых, и тогда становится выгоднее производить товар в стране, где осуществляются продажи. Как пример – создание роботизированных фабрик Speedfactory компании Adidas. Были открыты две фабрики в Германии и США в 2016 и 2017 годах [74]. Целью было сделать производство ближе к покупателю. В 2019 году компания приняла решение закрыть эти фабрики. Несмотря на эту неудачу тенденция налицо – роботизация производства будет заменять все больше людей.

Необходимые преобразования данных

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

• стандартизацию данных (приведение к единой шкале);

• удаление выбросов;

• подготовку категориальных переменных;

• работу с пропущенными данными (missing data);

• сэмплинг несбалансированных классов.

Для линейных моделей можно нормализовать данные, так как часто сами данные представлены на разных шкалах. Например, в датасете есть две фичи: цена квартиры (2 000 000–100 000 000 рублей) и ее площадь (20–500 квадратных метров). Диапазон значений очень разный, поэтому коэффициенты модели теряют физический смысл. Будет невозможно сравнить влияние той или иной переменной на модель. Если использовать регуляризацию, также возникнет проблема – ненужная пессимизация коэффициентов. Есть разные варианты стандартизации, один из них – вычесть среднее и разделить на стандартное отклонение переменной. На выходе получится переменная со средним, равным нулю, и стандартным отклонением, равным 1. На ошибку линейной модели стандартизация не влияет (если без регуляризации), но есть некоторые типы методов, которые чувствительны к шкалам переменных, например метод главных компонент (PCA, о котором я рассказал в прошлой главе).

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

Категориальные переменные мы уже обсуждали в главе о данных. В их использовании есть нюансы. Обычно нет никаких проблем с бинарными переменными (да/нет, 0/1), нужно лишь свести их к значениям 0 и 1 (dummy variable), если работаете с линейными моделями. Сама операция называется label encoding. Что касается


Роман с Data Science. Как монетизировать большие данные

Рис. 9.1. Выброс меняет поведение


деревьев решений, нужно смотреть документацию конкретного метода – в каком виде представить категориальные переменные. Когда идет работа с категориальной переменной, у которой три и более значений, в большинстве случаев требуется ее разбить на несколько бинарных. Например, если есть переменная c тремя значениями: Да/Нет/Не знаю, то ее нужно разбить на три переменные (по числу значений). Можно назвать эти переменные по названию значений: Да, Нет, Не знаю. Каждая переменная будет принимать значение 0 или 1. Например, если у исходной переменной было значение «Да», то эти переменные примут следующие значения: Да = 1, Нет = 0, Не знаю = 0. Эта операция кодирования называется one-hot encoding. Выполнять ее необходимо потому что, в отличие от непрерывных числовых переменных, взаимоотношения между значениями переменных (больше или меньше) не определены, а значит, операция сравнения значений невозможна. Некоторые методы поддерживают категориальные переменные со множеством значений, например, catBoost от Яндекса. Есть еще один вариант кодирования динамичных категориальных значений, например слов текста, – метод называется hashing trick. Он нужен, чтобы не заводить огромное количество переменных, когда число значений очень велико.

В работе с данными часто встречается ситуация, когда значения некоторых переменных пустые (missing data). В самих данных в зависимости от системы можно увидеть либо пустоту, либо одно из значений: None или Null. Для категориальных переменных эта проблема решается легко – достаточно просто завести новое значение и назвать его «unknown». Для непрерывных числовых переменных это сделать сложнее – нужно понимать, не кроется ли за пустыми значениями какая-то закономерность. Если выяснится, что закономерности нет, можно или удалить данные, или заменить их на среднее значение. Подробно про работу с потерянными данными можно прочитать в книге Эндрю Гельмана [66].

В задачах классификации, когда мы обучаем модель различать два класса, часто возникает проблема несбалансированности этих классов. Это бывает в медицине при тестировании населения и диагностике редких болезней – если в датасете есть данные десяти тысяч людей и из них только десять заболевших, то алгоритму очень сложно обучиться. Другой пример – датасет показа рекламных баннеров в интернете: показов много, а кликов мало. Проблема в том, что модели проще не замечать данные малого класса, а просто предсказывать больший класс, ошибка точности при этом будет приближаться к 100 процентам. Что с этим делать? В курсе по машинному обучению от Google [67] советуют с помощью сэмплирования (downsampling) уменьшить самый большой класс, но назначить этим строкам пропорциональный вес. Это даст быструю сходимость, так как малый класс будет больше влиять на обучение, а веса дадут возможность сразу использовать вероятность, которую мы получим на выходе, для классификации.

Точность и стоимость ML-решения

Чем точнее изготовление какой-либо детали на производстве, тем оно дороже. То же самое можно сказать и про машинное обучение. Когда создается первая версия решения, получаем одну степень точности (рис. 9.2). Потом тратится очень много усилий и времени на улучшение этого результата – к сожалению, рост результата не пропорционален усилиям, которые были на него затрачены (правило Парето никто не отменял!). Мой опыт создания рекомендательной системы говорит, что затраты на каждый процент улучшения растут по экспоненциальному закону. То же самое можно увидеть и в соревнованиях Kaggle.


Роман с Data Science. Как монетизировать большие данные

Рис. 9.2. Зависимость стоимости решения от его точности


Вход
Поиск по сайту
Ищем:
Календарь
Навигация