Для чего нужна нормализация данных

Нормализация баз данных простыми словами

Приветствую всех посетителей сайта Info-Comp.ru! Сегодня мы с Вами поговорим о нормализации базы данных, узнаем, что это такое, какие нормальные формы базы данных существуют и зачем вообще проводить нормализацию базы данных.

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

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

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

Реляционная база данных

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

Реляционная база данных – это упорядоченная информация, связанная между собой определёнными отношениями.

Логически такая база данных представлена в виде таблиц, в которых и лежит вся эта информация.

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

Нормализация баз данных

В реляционных базах данных есть такое понятия, как «Нормализация».

Нормализация – это процесс удаления избыточных данных.

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

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

Избыточность устраняется, как правило, за счёт декомпозиции отношений (таблиц), т.е. разбиения одной таблицы на несколько.

Зачем нормализовать базу данных?

У Вас может возникнуть вопрос – а зачем вообще нормализовать базу данных и бороться с этой избыточностью?

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

Теперь давайте поговорим о самой избыточности данных, что же это такое.

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

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

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

Идентификатор предметаНаименование предметаМатериал
1СтулМеталл
2СтолМассив дерева
3КроватьЛДСП
4ШкафМассив дерева
5КомодЛДСП

А теперь допустим, что у нас возникла необходимость подкорректировать название материала, вместо «Массив дерева» нужно написать «Натуральное дерево», и чтобы это сделать нам необходимо внести изменения сразу в несколько строк, так как предметов, изготовленных из массива дерева, несколько, а именно 2: стол и шкаф.

А теперь представьте, что по каким-то причинам мы внесли изменения только в одну строку, в итоге в нашей таблице будет и «Массив дерева», и «Натуральное дерево».

Идентификатор предметаНаименование предметаМатериал
1СтулМеталл
2СтолНатуральное дерево
3КроватьЛДСП
4ШкафМассив дерева
5КомодЛДСП

Какое из этих названий будет правильным? А если представить, что мы можем внести еще какое-то новое значение при добавлении новых записей, например, просто «Дерево».

В этом случае в нашей таблице в скором времени будет и «Массив дерева», и «Натуральное дерево», и просто «Дерево», и вообще, что угодно, ведь это просто текст.

Идентификатор предметаНаименование предметаМатериал
1СтулМеталл
2СтолНатуральное дерево
3КроватьЛДСП
4ШкафМассив дерева
5КомодЛДСП
6ТумбаДерево

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

При этом, обязательно стоит отметить, что в нашей таблице всего 5 записей, а теперь представьте, что их миллион!

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

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

Идентификатор предметаНаименование предметаИдентификатор материала
1Стул2
2Стол1
3Кровать3
4Шкаф1
5Комод3

Материалы, из которых изготовлены предметы мебели.

Идентификатор материалаМатериал
1Массив дерева
2Металл
3ЛДСП

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

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

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

Нормальные формы базы данных

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

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

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

Нормальная форма базы данных – это набор правил и критериев, которым должна отвечать база данных.

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

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

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

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

Существует 5 основных нормальных форм базы данных:

Однако выделяют еще дополнительные нормальные формы:

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

База данных считается нормализованной, если она находится как минимум в третьей нормальной форме (3NF).

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

Ситуации, при которых требуется нормализовать базу данных до четвертой нормальной формы (4NF), в реальном мире встречаются достаточно редко.

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

Если говорить о всех последующих нормальных формах (5NF, DKNF, 6NF), то в реальной жизни трудно даже представить ситуации, при которых потребуется нормализовать базу данных до этих форм.

Иными словами, 5NF, DKNF, 6NF – это в большей степени теоретические нормальные формы, немного отстраненные от реального мира.

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

Описание нормальных форм базы данных

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

На сегодня это все, надеюсь, материал был Вам полезен и интересен, пока!

Источник

Руководство по проектированию реляционных баз данных (10-13 часть из 15) [перевод]

Продолжение.
Предыдущие части: 1-3, 4-6, 7-9

10. Нормализация баз данных

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

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

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

11. Первая нормальная форма (1НФ)

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

Первичный ключ.

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

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

Атомарность.

Правило: поля не имеют дубликатов в каждой записи и каждое поле содержит только одно значение.

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

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных
Горизонтальное дублирование данных – плохая практика.

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

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных
Множественные значения в одной ячейке.

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

Порядок записей не должен иметь значение.

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

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

В следующей части рассмотрим вторую нормальную форму (2НФ).

12. Вторая нормальная форма.

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

Избыточность данных.

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

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

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных
Дублирование данных среди записей в поле store.

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

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

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

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

В примере выше таблица car имеет внешний ключ – ссылку на таблицы type и store. Столбец brand исчез потому, что на бренд есть неявная ссылка через таблицу type. Когда есть ссылка на type, есть ссылка и на brand, т.к. type принадлежит brand.

Избыточность данных была существенным образом устранена из нашей модели базы данных. Если вы достаточно придирчивы, то вы, возможно, еще не удовлетворены этим решением. А как насчет поля country_of_origin в таблице brand? Пока дубликатов нет потому, что есть только четыре бренда из разных стран. Внимательный разработчик базы данных должен выделить названия стран в отдельную таблицу country.

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

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

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

13. Третья нормальная форма.

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

Транзитивные зависимости.

Правило: не может быть транзитивных зависимостей между полями в таблице.
Таблица клиентов (мои клиенты – игроки немецкой и французской футбольной команды) ниже содержит транзитивные зависимости.

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

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

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

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

Другим примером для применения третьей нормальной формы может служить (слишком) простой пример таблицы заказов интернет-магазина ниже.

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

НДС (value added tax) – это процент, который добавляется к цене продукта (19% в данной таблице). Это означает, что значение total_ex_vat может быть вычислено из значения total_inc_vat и vice versa. Вы должны хранить в таблице одно из этих значений, но не оба сразу. Вы должны возложить задачу вычисления total_inc_vat из total_ex_vat или наоборот на программу, которая использует базу данных.

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

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

Источник

Умная нормализация данных

Эта статья появилась по нескольким причинам.

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

Во-вторых, имеет место «слепое» использование, например, стандартизации для наборов с большим количеством признаков — “чтобы для всех одинаково”. Особенно у новичков (сам был таким же). На первый взгляд ничего страшного. Но при детальном рассмотрении может выясниться, что какие-то признаки были неосознанно поставлены в привилегированное положение и стали влиять на результат значительно сильнее, чем должны.

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

Повторение — мать учения

Нормализация — это преобразование данных к неким безразмерным единицам. Иногда — в рамках заданного диапазона, например, [0..1] или [-1..1]. Иногда — с какими-то заданным свойством, как, например, стандартным отклонением равным 1.

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

Аналитически любая нормализация сводится к формуле

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

где Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных— текущее значение,
Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных— величина смещения значений,
Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных— величина интервала, который будет преобразован к “единице”

По сути всё сводится к тому, что исходный набор значений сперва смещается, а потом масштабируется.

Минимакс (MinMax). Цель — преобразовать исходный набор в диапазон [0..1]. Для него:
Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных= Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных, минимальное значение исходных данных.
Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных= Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данныхДля чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных, т.е. за “единичный” интервал берется исходный диапазон значений.

Стандартизация. Цель — преобразовать исходный набор в новый со средним значением равным 0 и стандартным отклонением равным 1.
Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных= Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных, среднее значение исходных данных.
Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных— равен стандартному отклонению исходного набора.

Для других методов всё аналогично, но со своими особенностями.

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

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

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

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

Шаг 1 — определяем смещение

Чаще всего данные центрируют — т.е. определяют, значение, которое станет новым 0 и “сдвигают” данные относительно него.

Что лучше взять за центр? Некоего «типичного представителя» Ваших данных. Так при использовании стандартизации используется среднее арифметическое значение.

Здесь проявляется проблема № 1 — различные типы распределений не позволяют применять к ним методы, созданные для нормального распределения.

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

Вот, например, различия между медианой и средним арифметическим значением для экспоненциального распределения.

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

А вот так выглядят эти различия при добавлении выброса:

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

В отличии от среднего значения медиана практически не чувствительна к выбросам и асимметрии распределения. Поэтому её оптимально использовать как “нулевое” значение при центрировании.

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

Шаг 2 — масштабируем

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

Степень возможного влияния признаков определяется величиной их диапазонов после масштабирования. Если оба признака распределены в одинаковых интервалах, например, [-1..1], то и влиять они могут одинаково. Если же изначально один из признаков лежит в диапазоне [-1..1], а второй — в [-1..100], то очевидно, что изменения второго могут оказывать существенно большее влияние. А значит он будет в привилегированном положении по сравнению с первым.

Стандартное отклонение

Вернёмся к примеру стандартизации. В её случае новый диапазон определяется величиной стандартного отклонения. Чем оно меньше, тем диапазон станет “шире”.

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

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

Для второго признака (бимодальное распределение) стандартное отклонение будет больше, чем у первого.

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

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

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

Итог — стандартное отклонение не удовлетворяет начальным требованиям по одинаковому влиянию признаков (величине интервала). Даже не говоря о том, что и наличие выбросов может исказить “истинную” величину стандартного отклонения.

Межквартильный интервал

Другим часто используемым кандидатом является разница между 75-м и 25-м процентилями данных — межквартильный интервал. Т.е. интервал, в котором находятся “центральные” 50% данных набора. Эта величина уже устойчива к выбросам и не зависит от “нормальности” распределения наличия/отсутствия асимметрии.

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

Проблема № 2 — большие “хвосты” распределений признаков.

Пример — два признака с нормальным и экспоненциальным распределениями. Интервалы значений одинаковы

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

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

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

В итоге интервал у признака с экспоненциальным распределением из-за большого “хвоста” стал больше. А, следовательно, и сам признак стал “влиятельнее”.

Размах значений

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

И здесь максимально проявляется, наверное, самая частая проблема в подготовке данных, проблема № 3 — выбросы. Присутствие одного или нескольких аномальных (существенно удалённых) значений за пределами диапазона основных элементов набора может ощутимо повлиять на его среднее арифметическое значение и фиктивно увеличить его размах.

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

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

После нормализации по размаху

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

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

Работаем с выбросами

Решением проблемы влияния выбросов при использовании размаха является его замена на интервал, в котором будут располагаться “не-выбросы”. И дальше — масштабировать по этому интервалу.

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

Пожалуй, самым массово применяемым методом автоматического определения выбросов является межквартильный метод. Его суть заключается в том, что выбросами “назначаются” данные, которые более чем в 1,5 межквартильных диапазонах (IQR) ниже первого квартиля или выше третьего квартиля.*

* — в некоторых случаях (очень большие выборки и др.) вместо 1,5 используют значение 3 — для определения только экстремальных выбросов.

Схематично метод изображен на рисунке снизу.

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

Вроде бы все отлично — наконец-то есть инструмент, и можно приступать к работе.

Но и здесь есть своя ложка дёгтя. В случае наличия длинных хвостов (как, например, при экспоненциальном распределении) слишком много данных попадают в такие “выбросы” — иногда достигая значений более 7%. Избирательное использование других коэффициентов (3 * IQR) опять приводит к необходимости ручного вмешательства — не для каждого признака есть такая необходимость. Их потребуется по отдельности изучать и подбирать коэффициенты. Т.е. универсальный инструмент опять не получается.

Ещё одной существенной проблемой является то, что этот метод симметричный. Полученный “интервал доверия” (1,5 * IQR) одинаков как для малых, так и для больших значений признака. Если распределение не симметричное, то многие аномалии-выбросы с “короткой” стороны просто будут скрыты этим интервалом.

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

Скорректированный интервал

Красивое решение этих проблем предложили Миа Хаберт и Елена Вандервирен (Mia Hubert and Ellen Vandervieren) в 2007 г. в статье “An Adjusted Boxplot for Skewed Distributions”.

Их идея заключается в вычислении границ “интервал доверия” с учетом асимметрии распределения, но чтобы для симметричного случая он был равен всё тому же 1,5 * IQR.

Для определения некоего “коэффициента асимметрии” они использовали функцию medcouple (MC), которая определяется так:

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

Поиск подходящей формулы для определения границ “интервала доверия” производился с целью сделать долю, приходящуюся на выбросы, не превышающей такую же, как у нормального распределения и 1,5 * IQR — приблизительно 0,7%

В конечном итоге они получили такой результат:

Для Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных= 0$» data-tex=»inline»/>:

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

Для Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных:

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

Более подробно про этот метод и его эффективность лучше прочитать в самой статье. Найти ее по названию не составляет труда.

Универсальный инструмент

Теперь, объединяя все найденные плюсы и учитывая проблемы, мы получаем оптимальное решение:

Назовем его методом… скорректированного интервала — по названию статьи Mia Hubert и Ellen Vandervieren

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

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

Сравнивать новый инструмент будем с методами стандартизации, робастной нормализации (межквартильный интервал) и минимакса (MinMax — с помощью размаха).

Ситуация № 1 — данные необходимо центрировать. Это используется в кластеризации и многих методах машинного обучения. Особенно, когда необходимо определять меру “близости” объектов.

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

Робастная нормализация (по межквартильному интервалу):

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

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

Ситуация № 2 — данные необходимо вписать в заданный интервал. Обычно это [0..1]. Это используется, например, при подготовке данных для входов нейронной сети.

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

Для чего нужна нормализация данных. Смотреть фото Для чего нужна нормализация данных. Смотреть картинку Для чего нужна нормализация данных. Картинка про Для чего нужна нормализация данных. Фото Для чего нужна нормализация данных

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

То, что только “нормальные” данные попадают в единичный диапазон [0..1], а выбросы не удаляются, но пропорционально выносятся за его пределы — это крайне полезное свойство, которое сильно поможет при кластеризации объектов со смешанными признаками, как числовыми, так и категорийными. Подробно об этом я напишу в другой статье.

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

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

Источник

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

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