# Етапи попередньої обробки даних: як очистити бізнес-дані

> Дізнайтеся, які етапи попередньої обробки даних перетворюють хаотичні бізнес-записи на надійні висновки, на прикладах для малого й середнього бізнесу. Побачте, як ELECTE автоматизує їх.

Source: https://www.electe.net/uk/post/data-preprocessing-steps

Site guide: https://www.electe.net/uk/llms.txt

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

Такий стрибок часто є помилкою попередньої обробки, а не зміною поведінки покупців. Якщо заповнювати порожні ціни, поки у файлі ще лишаються дублікати рахунків, або масштабувати весь файл до того, як відкладено частину рядків, модель дізнається те, чого ще не мала б знати. Більшість матеріалів подають **етапи попередньої обробки даних** як окремі методи, які можна застосовувати в будь-якому порядку. Саме порядок завищує результати.

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

## Сім етапів попередньої обробки даних у правильному порядку

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

**Будь-який етап, що вираховує число з даних, потрібно виконувати після розбиття вибірки.** Середнє, медіана чи діапазон масштабування, обчислені на всьому файлі, дозволяють валідаційним рядкам впливати на навчання. Тоді оцінка виглядає сильнішою, ніж модель покаже на замовленнях наступного місяця.

КрокЩо ви робитеГотово, коли1. Профілювання й очищенняПеревірте кількість рядків, типи даних і частку порожніх значень; видаліть точні дублікати; уніфікуйте дати й назвиЧиста базова таблиця з однією назвою для кожної категорії2. Розділення данихПеремішайте рядки, а потім розділіть їх на навчальну та валідаційну вибіркиЄ дві вибірки, і жодних параметрів із даних ще не обчислено3. Обробка пропущених значеньВидаліть рядки, видаліть ознаку або заповніть пропуски, використовуючи лише навчальні даніКожне поле заповнене, або його пропуски позначено4. Кодування та створення ознакПеретворіть категорії на числа; створіть співвідношення, часові компоненти та ковзні середніТаблиця ознак, готова для моделі, із задокументованими стовпцями5. Обробка викидівПеревірте екстремальні значення, а потім обмежте їх, перетворіть або позначтеЕкстремальні значення пояснено, а не вгадано6. Масштабування числових ознакПідберіть параметри скейлера на навчальних даних і застосуйте його до валідаційнихЧислові стовпці мають співмірні діапазони7. Фіксація конвеєраЗбережіть кожне підібране перетворення, щоб нові дані проходили той самий шляхВідтворюваний запуск, що працює під час кожного нового завантаження даних

Припустимо, у роздрібного продавця є 12 000 рядків замовлень, серед яких 900 дубльованих рядків рахунків-фактур. Якщо заповнювати відсутні ціни до видалення цих дублікатів, один і той самий рахунок враховується двічі, і середнє значення відходить від прейскуранта.

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

Зіставте файл, який у вас відкритий, із цими сімома рядками. Першим рядком, який ви ще не завершили, і варто займатися сьогодні.

## Профілювання та очищення необроблених бізнес-даних

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

1. **Порахуйте рядки та стовпці, потім підтвердьте тип кожного.** Вартість, збережена як текст, не підсумовується, і помилки при цьому не буде. Перетворіть її, перш ніж довіряти підсумку.
2. **Обчисліть частку пропусків у кожному стовпці.** Стовпець, де порожніх значень понад 30%, потрібно обробляти за правилами для відсутніх значень, а не швидко заповнювати. Стовпець я б повністю видаляв, лише коли пропусків понад 50% і поле не потрібне для ухвалення рішення.
3. **Видаляйте точні дублікати, а не схожі рядки.** Порівнюйте одночасно за номером рахунку, датою та сумою. Друге замовлення з іншим ідентифікатором рядка — це реальний продаж. Видалити його лише тому, що клієнт і день збігаються, — саме та помилка, що занижує виручку.
4. **Нормалізуйте формати за один прохід.** Один формат дати, одна валюта на стовпець і жодних зайвих пробілів у кодах. Змішані формати розбивають один продукт на два ряди й ламають будь-яке подальше об'єднання.
5. **Уніфікуйте назви категорій.** `UK`, `U.K.` і `United Kingdom` — це один ринок. Чотири варіанти написання однієї товарної лінії в трирічному експорті інтернет-магазину завдають такої самої шкоди. Оберіть одну назву й приведіть решту до неї.

Припустимо, що в тому самому експорті дати замовлень в один рік збережено як `2024-03-01`, а в інший — як `01/03/2024`. Доки обидва формати не приведено до одного, місячний графік двічі враховує березень або пропускає його.

### Що захищають журнал і видалення персональних даних

Журнал очищення — це коротка таблиця: стовпець, правило, кількість змінених рядків, виконавець, дата. Коли фінансисти питатимуть, чому торішній березень «схуд», ви покажете на правило дедуплікації, а не відтворюватимете файл по пам'яті.

Перш ніж файл потрапить на будь-яку аналітичну платформу, видаліть імена клієнтів, електронні адреси та платіжні дані. Для прогнозу попиту вони не потрібні, а якщо залишити їх у вибірці, виникне проблема приватності, яку модель не виправить.

Якщо хочете незалежну думку про те, як виглядають «добрі» комерційні вибірки, [матеріали Pipecorn про якість даних продажів](https://pipecorn.com/blog/data-quality-standards) — корисний контрольний список щодо ідентифікаторів, повноти та узгодженості. Скористайтеся ним, щоб вирішити, які стовпці варто залишити, а потім поверніться до наведеного вище порогу пропусків.

## Розділіть дані до початку будь-якого навчання

Розділення — це огорожа. Ніщо, що оцінює статистику, не повинно працювати з повним файлом.

Для контрольованої класифікації тексту [посібник Google із класифікації тексту](https://developers.google.com/machine-learning/guides/text-classification/step-3) радить перемішувати дані перед поділом, оскільки збереження початкового порядку може зміщувати обидві вибірки. Після перемішування типовий поділ відводить **80%** прикладів на навчання і **20%** на валідацію. Далі до обох вибірок застосовують однакові перетворення, але лише після того, як їх «навчено» на рядках навчальної вибірки.

### Чому відсортований файл продажів дає хибний результат

Експорти часто надходять відсортованими за датою, регіоном або клієнтом. Якщо розділити такий файл зверху донизу, ви навчаєте модель на 2023 році, а валідуєте на кінці 2024-го. Тоді оцінка відображає календар, графік акцій або структуру одного регіону. Вона не показує, чи модель зрозуміла замовлення.

Перемішуйте, коли кожен рядок є незалежним випадком: закрите замовлення, клієнт, що пішов, класифікований тікет. Не перемішуйте, коли завдання — прогноз.

> Для прогнозування зберігайте хронологічний порядок. Навчайте на ранніх місяцях, а тестуйте на пізніших. Перемішування дозволило б моделі побачити майбутнє, і це видавали б за вміння.

### Текстові поля потребують відсікання за частотою

Тікети підтримки та описи продуктів розростаються до тисяч токенів. У тому самому процесі Google ви відкидаєте токени, що трапляються менше ніж **двічі**, залишаєте **20 000** найкращих токенів-ознак і ранжуєте решту за оцінкою важливості на основі F-тесту. Токен, що з’явився один раз, зазвичай є помилкою друку або разовим SKU, а не закономірністю, вартою окремого стовпця.

Після поділу навчайте всі відображення лише на навчальних даних, а потім застосовуйте це зафіксоване відображення до валідації. Перерахунок словника чи списку категорій на відкладених рядках — ще один спосіб, яким відповідь потрапляє в підготовку даних.

## Як заповнювати пропущені значення, не спотворюючи результати

Дію визначає те, як часто поле порожнє і чи потрібне воно для рішення. Наведені нижче діапазони — робоче емпіричне правило, а не закон. Регульована модель ризику може не дозволити видаляти рядки, які роздрібний прогноз може собі дозволити пропустити.

Частка пропущених значеньВажливість ознакиДіяМенше 5%Будь-якаВидаліть ці рядки, якщо залишається достатньо данихВід 5% до 30%НизькаВидаліть ознакуВід 5% до 30%ВисокаЗаповніть пропуски, використовуючи лише навчальні рядкиПонад 30%ВисокаЗаповніть пропуски, додайте стовпець-позначку пропуску та з’ясуйте, чому поле порожнєПонад 30%НизькаВидаліть ознаку

Перший рядок — кілька порожніх значень вартості в усьому іншому повному файлі замовлень. Видалити ці рядки менш шкідливо, ніж вигадувати ціну. Рідко використовуване поле опитування із середньої смуги не вартує вгаданого значення, тож стовпець видаляємо. Тривалість співпраці, яку ви використовуєте для аналізу відтоку, залишається, і ви її оцінюєте.

[Рекомендації Google щодо підготовки даних для кластеризації](https://developers.google.com/machine-learning/clustering/prepare-data) називають три практичні варіанти: видалити приклади з пропущеними значеннями, видалити ознаку або спрогнозувати пропущені значення за іншими даними. Рідкісні пропуски можуть виправдати видалення рядків. Часті пропуски зазвичай означають, що ознаку варто прибрати або заповнити.

### Прогнозуйте пропуск, а не вставляйте константу

Для числового поля навчіть регресію на рядках, де значення є, а потім оцініть порожні. Наприклад, відсутній вік клієнта можна оцінити за доходом і тривалістю співпраці, а не замінювати єдиним середнім по компанії. Так ви використовуєте залежності, яким уже довіряєте.

Вартість замовлення має асиметричний розподіл. Кілька великих гуртових чеків піднімають **середнє**, тому заповнення середнім робить звичайні кошики багатшими, ніж вони є. **Медіана** розташована поряд із типовим замовленням і менше зміщується, коли з’являється один гуртовий рахунок. Порівняйте зведену статистику до і після заповнення. Значна зміна означає, що метод переписує бізнес, а не латає прогалину.

У категоріальних полях позначайте порожнє значення як `Unknown`. Пропуск часто сам є сигналом: оформлення замовлення, де не зафіксували регіон, або товар без коду постачальника. Якщо перетворити це на окремий рівень, рядок буде збережено, а модель побачить, що поле було порожнім невипадково.

Часті пропуски в операційних даних — не рідкість. В одному дослідженні 2025 року про неповні дані споживання води описано набір даних по будівлі з **33 888** погодинних записів з лютого 2019 до грудня 2023 року, де бракує значень за **20%** годин. Це той діапазон, у якому суцільне видалення рядків втратить забагато історії ([дослідження](https://arxiv.org/html/2506.08882v1)).

Навчайте метод заповнення лише на тренувальних рядках. [Посібник ELECTE щодо пропущених даних](https://www.electe.net/post/missing-data-imputation) докладніше розглядає варіанти заповнення, якщо ви хочете ще раз переглянути метод, а не порядок дій.

## Кодуйте категорії та створюйте корисні ознаки

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

### Кодування без хибного ранжування

**One-hot кодування** підходить для категорій з невеликою кількістю значень, наприклад п’яти регіонів продажів. Кожен регіон стає окремим стовпцем «так/ні», і жоден регіон не є «більшим» за інший.

**Порядкове кодування** підходить для справжнього порядку, наприклад розмірів S, M і L. Числа відповідають рейтингу, який бізнес уже використовує.

Не призначайте 1, 2, 3 непорядковим назвам, як-от канал чи місто. Модель сприйматиме вищий код як більше чогось. Таке хибне ранжування пізніше проявиться впевненим, але неправильним коефіцієнтом. Коли поле має сотні рівнів, one-hot створює дуже широку таблицю. Перед кодуванням згрупуйте рідкісні рівні в `Other` і визначайте це групування лише на тренувальних рядках.

### Стовпці, що відповідають на бізнес-питання

Складіть короткий перелік, пов’язаний з одним рішенням, а не звалище всіх співвідношень, які можете придумати.

- **Відсоток маржі:** `(price − cost) / price` показує, чи акція все ще покриває собівартість, чого одна лише виручка не покаже.
- **Днів з останньої покупки:** для аналізу відтоку потрібна давність покупки, а не ще одна копія ID клієнта.
- **День тижня та місяць:** планування попиту враховує п'ятничні піки й сезонні місяці, приховані в повній позначці часу.
- **Ковзне середнє за 7 днів:** денні продажі в штуках сильно коливаються. Тижневе середнє показує, чи зростає попит.
- **Співвідношення запасів до продажів:** менеджер зі складу бачить дефіцит, що формується, раніше, ніж дозволяє простий залишок на складі.

Я б почав з десяти–п'ятнадцяти ознак, пов'язаних з одним конкретним рішенням. Якщо кореляція між двома стовпцями перевищує 0,95, видаліть один із них: другий дублює перший. У словнику даних поруч із назвою стовпця запишіть його бізнес-значення. Якщо мапу кодування чи ковзне середнє обчислити на всьому файлі, разом із рядками, які ви збиралися залишити для перевірки, повториться витік, від якого ви вже відгородилися при розділенні вибірки.

## Масштабуйте числа та приборкуйте викиди

Екстремальне значення не обов'язково є помилкою. Замовлення на 40 одиниць від B2B-клієнта — це реальний продаж. Позначте його прапорцем, щоб воно не домінувало в середньому, і залиште в історії. Ціна одиниці 100 000, введена замість 1 000, — це помилка введення. Виправте цифру, а не «обробляйте» її як попит.

### Перевірте екстремальне значення, перш ніж видаляти його

Добре працюють дві перевірки разом. Правило **1,5 × міжквартильного розмаху** позначає точки, далекі від середини стовпця. Предметна перевірка запитує, чи може таке значення існувати: від'ємний запас, дата в наступному десятилітті, знижка більша за ціну продажу. Спершу перевірте. Потім обмежте значення 1-м і 99-м перцентилями, застосуйте логарифмічне перетворення до асиметричної виручки або додайте прапорець і збережіть вихідне число для звітності.

> Оптове замовлення, яке ви видалили, — це виручка, яку ви більше ніколи не спрогнозуєте. Помилка, яку ви залишили, стає ціною, яку, на думку моделі, заплатять клієнти.

Після обмеження значень повторно запустіть зведення. Центр стовпця має змінитися мінімально. Якщо медіана різко стрибнула, обмеження робить забагато, і варто знову переглянути вихідні рядки.

### Який скейлер підходить до профілю даних

Масштабування не дає стовпцю у великих одиницях, наприклад річній виручці, перекрити стовпець у малих одиницях, наприклад кількість одиниць у замовленні. [Документація scikit-learn з препроцесингу](https://scikit-learn.org/stable/modules/preprocessing.html) зазначає, що **StandardScaler** центрує кожну ознаку за середнім навчальної вибірки та масштабує за дисперсією, і що за великої кількості викидів він може працювати погано. **RobustScaler** — його готова заміна, яка використовує стійкіші оцінки центру та розмаху.

Профіль данихСкейлерЧому він підходитьПриблизно симетричний розподіл, мало екстремальних значеньStandardScalerЦентрує за середнім і масштабує за дисперсієюСильні викиди, наприклад випадкові оптові замовленняRobustScalerВикористовує медіану та міжквартильний розмах, які стійкі до екстремальних значеньЗначення мають бути у фіксованому діапазоні, наприклад оцінки від 1 до 5MinMaxScalerПриводить значення до діапазону 0–1, не змінюючи форму розподілу

Налаштовуйте скейлер (scaler) лише на навчальних даних, а потім застосовуйте це налаштування до валідаційних. Якщо повторно налаштовувати його на відкладеній вибірці, екстремальні значення у валідаційних рядках впливатимуть на масштаб. Щоб детальніше дізнатися, як виявляти екстремальні значення перед вибором способу їх обробки, перегляньте [посібник ELECTE про викиди](https://www.electe.net/post/outlier-statistica).

## Автоматизуйте конвеєр і перевіряйте його результати

Очищений файл, збережений в одному ноутбуці, може змінюватися між запусками. Новий файл може отримати інше значення для імпутації, інше кодування категорій або інший масштаб, і дашборд зміниться, навіть якщо сам бізнес не змінився.

Конвеєр зберігає навчені імп'ютер, кодувальник і скейлер разом та застосовує ті самі перетворення до нових файлів. Навчайте ці кроки лише на тренувальній частині даних. Застосовуйте навчені параметри до валідаційних і тестових даних без повторного обчислення. [Матеріал IBM про витік даних](https://www.ibm.com/think/topics/data-leakage-machine-learning) пояснює, чому навчання кроків попередньої обробки на тренувальних і тестових даних разом може призвести до витоку інформації в оцінювання.

### Перевірки після кожного запуску

Успішне завершення завдання лише підтверджує, що процес відпрацював. Перевірте, чи результат досі відповідає джерелу та правилам, які ви задали:

- **Кількість рядків:** звірте завантажений файл з експортом, враховуючи задокументовані дублікати.
- **Частка пропусків у кожному стовпці:** з'ясуйте причину різкого зростання — можливо, поле з джерела перестало надходити.
- **Діапазони значень:** перевірте, що ціни, кількості та дати залишаються в межах допустимого.
- **Нові категорії:** спрямовуйте невідомий регіон або SKU до визначеної групи, а не відкидайте його без повідомлення.

Щоб побачити [практичні приклади валідації даних](https://www.electe.net/post/data-validation-techniques), перегляньте, як ці перевірки застосовуються до бізнес-файлів. Сприймайте автоматичні результати як оцінки та перші кілька циклів перевіряйте вручну, перш ніж використовувати їх для запуску сповіщень.

**ELECTE**, платформа аналітики даних на основі ШІ для компаній, що зростають, підключається до бухгалтерського програмного забезпечення або завантаженого файлу й виконує аналіз даних і прогнозування без потреби в аналітику. Клієнти економлять понад 10 годин на тиждень завдяки автоматизації фінансового аналізу. Така допомога залежить від використання підібраних кроків, які можна обґрунтувати під час перевірки, а не від перерахунку їх при кожному завантаженні.

Цього тижня пропустіть один набір даних через таблицю з семи рядків і позначте, які кроки досі виконуються вручну. Автоматизуйте крок, що повторюється, але рішення, що потребують судження, як-от дублікат чи справжнє повторне замовлення, або одруківка чи оптове замовлення, залишайте під перевіркою, доки правила не стануть стабільними.

---

ELECTE підключає ваші бухгалтерські дані або завантажений файл, готує їх і перетворює на прогнози та звіти, які можна обговорити з командою. Якщо ви хочете, щоб ці кроки попередньої обробки даних застосовувалися однаково при кожному завантаженні, відвідайте [ELECTE](https://www.electe.net) і подивіться, як платформа проходить увесь шлях на ваших власних цифрах.
