Лого на 91. НЕГ „Проф. Константин Гълъбов“

Избираем модул · Урок 3

Почистване на данните

Дубликати, липсващи стойности, отклонения и несъвместими записи. Всяко решение изкривява данните по свой начин — важното е да знаем как.

Най-дългата част от работата

Проучванията сред практикуващите дават еднакъв резултат от години: между половината и три четвърти от времето по един проект отива в намиране, разбиране и почистване на данни. Моделирането е малката част накрая.

Правилото

Всяко почистване е решение, което изкривява данните. Няма неутрален избор. Задължението ви е да знаете какво сте направили и да го запишете.

Дубликати

Един и същ клиент, въведен два пъти с различен правопис. Една и съща поръчка, записана повторно при повторно натискане на бутона. Дубликатите изкривяват всяка агрегация.

  • Точен дубликат — всички колони съвпадат. Лесен за откриване и премахване.
  • Логически дубликат — един и същ обект с различен запис: „Иван Петров“ и „ИВАН ПЕТРОВ“, два имейла с различен регистър.
  • Технически дубликат — едно събитие, записано два пъти заради повторна заявка. Открива се по близки времена и еднакви стойности.
-- точни дубликати по логически ключ
SELECT Email, COUNT(*) AS broy
FROM Customers
GROUP BY Email
HAVING COUNT(*) > 1;

-- вероятни технически дубликати: същият клиент, същата сума, до 1 минута разлика
SELECT a.OrderID, b.OrderID, a.CustomerID, a.Total
FROM Orders a
JOIN Orders b ON a.CustomerID = b.CustomerID
             AND a.Total = b.Total
             AND a.OrderID < b.OrderID
             AND ABS(DATEDIFF(second, a.OrderDate, b.OrderDate)) < 60;

Липсващи стойности

ПодходКога е уместенКакво изкривява
Изхвърляне на редамалко редове, липсата е случайнагуби данни; ако липсата не е случайна — въвежда пристрастие
Изхвърляне на колонаталипсва при повечето редовегуби признак, който може да е важен
Запълване със средно или медианачислов признак с малко липсинамалява разсейването, прави данните по-„гладки“
Отделна стойност „неизвестно“категориен признакнищо — обикновено най-честният подход
Флаг „липсваше“ плюс запълванекогато самата липса носи информациянищо; добавя колона

Липсата често е признак

Клиент без попълнен телефон може да е по-склонен да откаже поръчка. Затова колоната ima_telefon (0/1) понякога е по-силен признак от самия телефон.

Отклонения

Отклонение (outlier)

Стойност, силно различна от останалите: поръчка за 200 000 лв. при средна 80 лв., възраст 950 години, температура −300°.

  • Грешка при въвеждане → поправя се или се изхвърля.
  • Друга единица (лева и стотинки, метри и сантиметри) → привежда се.
  • Истинско рядко събитие → остава! Точно то може да е целта на модела при откриване на измами.

Затова решението никога не е автоматично „изхвърли всичко над три стандартни отклонения“. Първо се гледа защо стойността е такава.

Несъвместими записи

Формат

Дати като 01/02/2024 — февруари или януари? Телефони с и без код. Имена с интервал накрая. Стойности „да/не“, „Y/N“, „1/0“ в една и съща колона.

Логика

Дата на връщане преди датата на поръчка. Сума на поръчката, различна от сбора на редовете ѝ. Клиент с възраст 12 и трудов стаж 20 години. Такива проверки се пишат веднъж и се пускат при всяко обновяване.

Не поправяйте мълчаливо

Всяка автоматична поправка трябва да брои колко реда е засегнала. Ако утре „поправите“ 40% от данните, това е сигнал за проблем нагоре по веригата, а не успех.

Дневник на почистването

  1. Начален брой редове.
  2. Всяка стъпка: какво е направено, по какво правило, колко реда са засегнати.
  3. Краен брой редове и колони.
  4. Кои решения биха могли да променят резултата и защо са взети така.

Този дневник влиза в документацията на дипломния проект. Без него резултатите не могат да бъдат повторени — нито от друг, нито от вас след три месеца.