Нормалізація бази даних SQL
Кожен професіонал, що працює в галузі інформаційних технологій, стикається з необхідністю проектування структури даних. База даних - це не просто сховище інформації, це основа, на якій будується вся бізнес-логіка програми, і від її якості залежить ефективність і надійність системи.
Одним із ключових інструментів у руках розробника при проектуванні БД є нормалізація - методологічний процес, спрямований на створення структурованого, ефективного та гнучкого сховища даних. Мета нормалізації досить проста: усунути надмірність та дублювання даних, мінімізувати потенційні вектори помилок та забезпечити високу продуктивність при виконанні запитів.
На перший погляд це може здатися тривіальним завданням. Однак, занурившись глибше, ви виявите, що нормалізація це цілий світ, де кожна деталь має значення. Вона є своєрідним мостом між теорією та практикою, поєднуючи принципи математичної логіки та практичні потреби бізнесу.
Якщо ви тільки починаєте свою подорож у світі баз даних SQL або вже маєте досвід, але прагнете поглибити свої знання, ця стаття надасть вам цінні інсайти про те, чому нормалізація така важлива і як її правильно застосовувати. Протягом нашого обговорення ми розглянемо ключові принципи, ступінь нормалізації та реальні приклади їх застосування.
Основні засади
Процес нормалізації бази даних - це не просто академічний термін, це фундамент, на якому базується цілісність та ефективність зберігання даних.Цей процес може порівнюватися з мистецтвом скульптури: з грубого шматка мармуру, крок за кроком, виділяються контури твору, щоразу відсікаючи зайве, доки не знайдеться досконалість. Але що лежить в основі цього мистецтва в контексті баз даних SQL?
- Підтримка цілісності даних: У центрі уваги – забезпечення цілісності даних. Це означає, що дані мають бути актуальними, послідовними та відображати реальну ситуацію. Без цього принципу виникають проблеми з дублюванням, помилками даних і, зрештою, невірними бізнес-рішеннями.
- Усунення дублювання даних:Надмірність даних не тільки збільшує розміри сховища, а й ускладнює процеси оновлення, додавання та видалення записів. Принцип усунення дублювання спрямовано створення такої структури, де кожен фрагмент даних зберігається у єдиному екземплярі.
- Спрощення структури даних:Можливо, це звучить парадоксально, але, прагнучи досконалості, ми повинні також прагнути простоти. Складні зв'язки та структури ускладнюють розробку, обслуговування та масштабування системи. Спрощуючи структуру, ми робимо її більш зрозумілою та стійкою до помилок.
- Гнучкість у зміні та масштабуванні:При правильно виконаній нормалізації база даних легко адаптується до нових бізнесових вимог. Це ключова перевага в IT, що швидко змінюється.
- Забезпечення логічного зв'язку даних: Всі дані та зв'язки між ними повинні мати чітке та зрозуміле логічне обґрунтування. Це допомагає у розробці, а й у розумінні бізнес-процесів компанії.
Ступені нормалізації: Огляд
Перед нами стоїть завдання зрозуміти та систематизувати ієрархію нормалізації в базах даних SQL. Якби бази даних були музикою, то ступеня нормалізації могли б порівнюватися з акордами, кожен із яких додає гармонію та досконалість у загальну композицію. Погляньмо на цей світ через призму ступенів нормалізації.
Перша нормальна форма (1NF): Вона ставить перед собою основне завдання – усунення дублікатів у таблиці та гарантія того, що кожна колонка містить атомарні (неподільні) значення. Цей крок є фундаментальним і є відправною точкою у світі нормалізації.
Друга нормальна форма (2NF): Тут починається гра із стосунками. 2NF фокусується на усуненні часткових функціональних залежностей. Іншими словами, вона гарантує, що кожен атрибут залежить від первинного ключа.
Третя нормальна форма (3NF): Цей етап переходить від залежностей первинного ключа до транзитивних залежностей. Ніякий атрибут не повинен залежати від інших не ключових атрибутів. Така структура запобігає несподіваним аномаліям даних.
Наступні ступені, такі як BCNF (форма Бойса-Кодда), 4NF та 5NF, глибше заглиблюються у тонкощі залежностей та відносин. Вони рідко використовуються у повсякденній практиці, але мають велике теоретичне значення і можуть бути корисні в особливих випадках.
Приклади проблем без нормалізації та їх вирішення
p align="justify"> Робота з ненормалізованою базою даних SQL часто пов'язана з проблемами, які можуть не тільки збільшувати час обробки запитів, але і призводити до появи помилок у даних. Щоб підкреслити значення нормалізації, розглянемо деякі типові проблеми, які можуть виникнути без неї, і можливі вирішення цих проблем.
| Проблема | Опис проблеми | Рішення |
| Дублювання даних | Є записи, що повторюються, що призводить до збільшення обсягу зберігання і ризику неузгодженості даних. | Застосування 1NF для усунення дублікатів та гарантії атомарності даних. |
| Транзитивні залежності | Деякі атрибути залежать не від первинного ключа, а від інших не ключових атрибутів, що може призвести до аномалій під час оновлення даних. | Застосування 3NF усунення транзитивних залежностей. |
| Часткові залежності | Деякі атрибути залежать лише від частини первинного ключа, що ускладнює обробку даних. | Застосування 2NF усунення часткових функціональних залежностей. |
| Аномалії видалення | При видаленні певного запису втрачаються й інші важливі дані, які опосередковано пов'язані з цим записом. | Поділ таблиць на дрібніші сутності, де кожна таблиця відбиває окремий аспект інформації. |
| Аномалії вставки | Неможливість додати інформацію, доки не буде додана інша, від якої ця інформація залежить. | Створення окремих таблиць для незалежних сутностей, що забезпечує більшу гнучкість при додаванні даних. |
Працюючи з базою даних, важливо усвідомлювати, що зневага нормалізацією бази даних може обернутися серйозними наслідками. Кожна з вищевказаних проблем може стати каменем спотикання у процесі розробки та підтримки системи. Таблиця показує лише верхівку айсберга проблем, які можна вирішити, правильно застосовуючи принципи нормалізації.
Переваги нормалізації
Нормалізація бази даних — це простий академічний принцип чи теоретична концепція. Це швидше інструментарій, спрямований на оптимізацію та вдосконалення структури даних.Коли ви навчитеся бачити всі переваги нормалізації, ви зрозумієте, чому вона вважається одним із фундаментальних принципів у світі баз даних. Перерахуємо деякі з цих переваг:
- Скорочення дублювання:Нормалізовані бази даних мають мінімальне дублювання інформації. Це знижує ризики протиріч даних і зменшує обсяг зберігання.
- Підвищення гнучкості:Коли база даних структурована правильно, додавання нових елементів або зміна існуючих стає набагато простіше.
- Зниження ризику аномалій:Добре нормалізована база даних мінімізує можливість появи аномалій при вставці, видаленні або оновленні даних.
- Поліпшення цілісності: Нормалізацією бази даних посилюється цілісність інформації, забезпечуючи ясні та суворі зв'язки між таблицями.
- Оптимізація запитів:Прості та ефективні таблиці полегшують процес складання запитів і можуть прискорювати їх виконання.
- Поліпшена безпека: Нормалізацію бази даних використовують для більш тонкого настроювання права доступу до певних частин БД, надаючи доступ там, де він дійсно потрібен, і обмежуючи його там, де це необхідно.
Потенційні недоліки та обмеження нормалізації
Також важливо усвідомлювати, що нормалізація, як і будь-який інструмент чи методологія, має свої обмеження та потенційні недоліки. Погляньмо на цю тему з критичної точки зору, щоб зрозуміти, де нормалізація може бути не такою ефективною чи навіть контрпродуктивною.
Продуктивність запитів: Іронія полягає в тому, що те, що робить базу даних структурованішою, може іноді призвести до уповільнення продуктивності.У надмірно нормалізованих базах даних запити можуть вимагати безліч операцій з'єднання між таблицями, що може збільшувати час відповіді.
Складність дизайну: p align="justify"> Проектування високонормалізованої бази даних може бути більш складним і вимагати більше часу на етапі розробки.
Гнучкість: Нормалізовані бази даних можуть бути менш гнучкими в деяких випадках, коли потрібно швидко адаптуватися до вимог, що змінюються.
Проблеми масштабування: Зі зростанням обсягу даних може виникати необхідність денормалізації деяких частин бази даних для забезпечення оптимальної продуктивності.
Витрати навчання: Новим розробникам або спеціалістам з баз даних, можливо, знадобиться додаткове навчання для розуміння та роботи з глибоко нормалізованими системами.
Варто відзначити, що багато цих недоліків можуть бути усунені або мінімізовані правильним проектуванням і оптимізацією. Важливо вміти балансувати між потребою у нормалізації та іншими факторами, такими як продуктивність чи специфіка конкретного проекту.
Порівняння нормалізованої та ненормалізованої баз даних
| Параметр | Нормалізована база даних | Ненормалізована база даних |
| Дублювання даних | Мінімізовано завдяки розподілу інформації на пов'язані таблиці. | Може зустрічатися часто, оскільки дані зберігаються у централізованих таблицях. |
| Продуктивність запитів | Може бути нижчою через необхідність з'єднання таблиць. | Зазвичай вище через централізацію даних. |
| Гнучкість структури | Висока: легко модифікувати та додавати нові типи даних. | Нижче через жорсткість централізованої структури. |
| Ризики аномалій | Знижені завдяки суворим відносинам та цілісності даних. | Вище, оскільки зміна одного запису може потребувати змін в інших місцях. |
| Об'єм зберігання | Зазвичай вимагає менше простору через відсутність дублікатів. | Може вимагати більше простору через дублюючу інформацію. |
Рекомендації щодо застосування нормалізації
Нормалізація баз даних – це мистецтво, яке потребує розуміння та балансування між теоретичною ідеальністю та практичною реалізацією. У міру того, як ви прокладаєте шлях до створення більш оптимізованих та ефективних баз даних, наступні рекомендації допоможуть вам приймати обґрунтовані рішення:
- Аналізуйте вимоги:Перш ніж розпочати процес нормалізації, ретельно вивчіть вимоги бізнесу. Це допоможе вам визначити оптимальний рівень нормалізації.
- Враховуйте продуктивність:Пам'ятайте про потенційний вплив нормалізації на продуктивність. У деяких випадках може бути розумно провести денормалізацію певних ділянок для покращення швидкодії запитів.
- Слідкуйте за цілісністю даних:Однією з основних переваг нормалізації є підвищення цілісності даних. Забезпечуйте коректне використання обмежень та зв'язків.
- Застосовуйте інкрементний підхід:Підходьте до нормалізації поступово. Почніть із першої нормальної форми, оцініть результати, а потім продовжіть, якщо це необхідно.
- Враховуйте гнучкість системи:Нормалізація може зробити вашу систему гнучкішою для майбутніх змін. Це може бути особливо цінно для проектів, що швидко розвиваються або масштабуються.
- Освіта та навчання:Переконайтеся, що ваша команда розробників та адміністраторів баз даних має достатні знання та розуміння принципів нормалізації.
- Перегляд та адаптація:Технології та вимоги змінюються.Регулярно переглядайте і, при необхідності, адаптуйте структуру бази даних, щоб вона відповідала поточним потребам.
Денормалізація - це процес, при якому ми усвідомлено відходимо від принципів нормалізації, вносячи до бази даних надмірність з метою оптимізації певних аспектів продуктивності. На перший погляд, це може здатися контрінтуїтивним, але є низка ситуацій, коли денормалізація може виявитися виграшною стратегією.
Розглянемо, коли це може бути корисним:
Поліпшення продуктивності запитів: Надмірні дані або попередньо розраховані значення можуть прискорити виконання деяких запитів, мінімізуючи необхідність об'єднань або складних обчислень на льоту.
- Оптимізація агрегацій:У деяких системах, таких як системи бізнес-аналітики, швидке виконання агрегованих запитів є критичним. Денормалізація, наприклад, попереднє збереження розрахованих агрегатів може значно прискорити такі запити.
- Зниження складності:У деяких випадках нормалізована структура може бути надмірно складною для конкретних додатків або команд розробників. Денормалізація може спростити архітектуру, роблячи її зрозумілішою.
- Синхронізація та реплікація:Для систем, де потрібна висока доступність або географічна реплікація, денормалізовані структури можуть полегшити процес синхронізації даних між вузлами.
- Коли вимоги змінюються:Іноді проекти еволюціонують в такий спосіб, що початкова нормалізована структура більше відповідає поточним потребам. У разі денормалізація може бути частиною стратегії оптимізації.
Однак важливо пам'ятати, що денормалізація не є універсальним рішенням та приносить свої компроміси, включаючи ризики аномалій даних, збільшення обсягу зберігання та потенційні складності в обслуговуванні. Перш ніж приймати рішення про денормалізацію, необхідно ретельно зважити всі «за» та «проти», враховуючи специфіку проекту та довгострокові перспективи його розвитку.
Читайте також
Хмарне сховище: визначення, плюси та мінуси.
Хмарне сховище є сучасним способом зберігання даних, який позбавляє необхідності використовувати локальні сервери і фізичні носії. Воно дозволяє централізувати керування інформацією та забезпечує зручний доступ до файлів через інтернет. Завдяки своїй гнучкості та простоті, хмарне зберігання даних активно застосовується як великими компаніями, так і приватними користувачами. У цій статті ми розглянемо, навіщо необхідне хмарне сховище, як воно функціонує, які переваги та обмеження має, а також дамо рекомендації щодо його вибору.
Хмарне сховище є сучасним способом зберігання даних, який позбавляє необхідності використовувати локальні сервери і фізичні.
Єдине джерело істини (SSOT): це.
В умовах зростаючої складності сучасних бізнес-процесів та обсягу даних компанії стикаються з викликами консолідації та уніфікації інформації. Часто співробітники різних відділів оперують розрізненими даними, що призводить до помилок, недостовірних звітів та зниження швидкості прийняття рішень. Єдине джерело істини (Single Source of Truth, SSOT) - Це підхід, що дозволяє уникнути подібних проблем.У цій статті ми докладно розглянемо, що таке SSOT, його переваги, складності впровадження та приклади успішного застосування.
В умовах зростаючої складності сучасних бізнес-процесів та обсягу даних компанії стикаються з викликами консолідації та уніфікації інформації.
Data Quality: що це чому важливо.
Нині, де дані стають основним активом організацій, поняття data quality виходить першому плані. Компанії щодня стикаються з величезною кількістю інформації, від якої безпосередньо залежать стратегічні рішення, аналітичні висновки та операційна ефективність. Але що відбувається, якщо дані містять помилки, дублі чи неактуальну інформацію? Нестача якісних даних може призвести до втрат як фінансових, так і репутаційних. Розберемося, що таке дата кліті чому воно має ключове значення і як його контролювати.
Залишились питання?
Залишіть контактні дані і ми зв'яжемося з вами найближчим часом
Розумна нормалізація даних
По-перше, у переважній більшості книг, інтернет-ресурсів та уроків з 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..1]
Назвемо його методом. скоригованого інтервалу - за назвою статті Mia Hubert та Ellen Vandervieren
Тепер порівняємо результати звичайних методів із новим. Для прикладу візьмемо три розподіли, що вже використовувалися вище, з додаванням викидів.
Порівнювати новий інструмент будемо з методами стандартизації, робастної нормалізації (міжквартильний інтервал) та мінімаксу (MinMax – за допомогою розмаху).
Ситуація № 1 - дані необхідно центрувати. Це використовується в кластеризації та багатьох методах машинного навчання. Особливо коли необхідно визначати міру “близькості” об'єктів.
Робасна нормалізація (за міжквартальним інтервалом):
Перевага використання методу скоригованого інтервалу в тому, що кожна з ознак дорівнює за своїм можливим впливом - величина інтервалу, за межами якого знаходяться викиди, однакова у кожного з них.
Ситуація № 2 - дані необхідно вписати у заданий інтервал. Зазвичай це [0..1]. Це використовується, наприклад, для підготовки даних для входів нейронної мережі.
І тут метод скоригованого інтервалу вписав у потрібний діапазон лише значення без викидів. Значення-викиди, що виходять за межі цього діапазону, залежно від постановки задачі, можна видалити або примусово прирівняти найближчій межі потрібного діапазону - тобто. 0 чи 1.
Те, що тільки "нормальні" дані потрапляють у одиничний діапазон [0..1], а викиди не видаляються, але пропорційно виносяться за його межі - це вкрай корисна властивість, яка дуже допоможе при кластеризації об'єктів зі змішаними ознаками, як числовими, так та категорійними. Докладно про це я напишу в іншій статті.
Насамкінець, для можливості помацати руками цей метод, Ви можете спробувати демонстраційний клас AdjustedScaler з моєї бібліотеки AdjDataTools.
Він не оптимізований під роботу з дуже великим обсягом даних і працює тільки з pandas DataFrame, але для проби, експериментів або навіть заготівлі під щось серйозніше цілком підійде. Пробуйте.
